From 678c901bcfc6d40b6bed83d7f5dad75c0e1bddd8 Mon Sep 17 00:00:00 2001 From: Mihai Dinculescu Date: Fri, 22 Jul 2016 15:58:47 +0000 Subject: [PATCH] Add Sprockets 4 support. --- lib/typescript-rails.rb | 1 + lib/typescript/rails/railtie.rb | 11 ++++++++++- lib/typescript/rails/transformer.rb | 20 ++++++++++++++++++++ test/assets_test.rb | 8 ++++---- 4 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 lib/typescript/rails/transformer.rb diff --git a/lib/typescript-rails.rb b/lib/typescript-rails.rb index 02e69e2..d5a0669 100644 --- a/lib/typescript-rails.rb +++ b/lib/typescript-rails.rb @@ -3,4 +3,5 @@ require 'typescript/rails/engine' require 'typescript/rails/template' require 'typescript/rails/template_handler' +require 'typescript/rails/transformer' require 'typescript/rails/version' diff --git a/lib/typescript/rails/railtie.rb b/lib/typescript/rails/railtie.rb index df58aa5..99f3524 100644 --- a/lib/typescript/rails/railtie.rb +++ b/lib/typescript/rails/railtie.rb @@ -4,8 +4,17 @@ class Typescript::Rails::Railtie < ::Rails::Railtie config.before_initialize do |app| if ::Rails::VERSION::MAJOR >= 4 || app.config.assets.enabled require 'typescript/rails/template' + require 'typescript/rails/transformer' require 'sprockets' - Sprockets.register_engine '.ts', Typescript::Rails::Template + + if Sprockets.respond_to?(:register_engine) + Sprockets.register_engine '.ts', Typescript::Rails::Template, silence_deprecation: true + end + + if Sprockets.respond_to?(:register_transformer) + Sprockets.register_mime_type 'text/typescript', extensions: ['.js.ts'] + Sprockets.register_transformer 'text/typescript', 'application/javascript', Typescript::Rails::Transformer + end end end end diff --git a/lib/typescript/rails/transformer.rb b/lib/typescript/rails/transformer.rb new file mode 100644 index 0000000..263c237 --- /dev/null +++ b/lib/typescript/rails/transformer.rb @@ -0,0 +1,20 @@ +require 'typescript/rails' + +class Typescript::Rails::Transformer + def self.instance + @instance ||= new + end + + def self.call(input) + instance.call(input) + end + + def call(input) + filename = input[:filename] + source = input[:data] + context = input[:environment].context_class.new(input) + + result = ::Typescript::Rails::Compiler.compile(filename, source, context) + { data: result } + end +end diff --git a/test/assets_test.rb b/test/assets_test.rb index 6b543fa..23b28b6 100644 --- a/test/assets_test.rb +++ b/test/assets_test.rb @@ -41,8 +41,8 @@ def assets end test 'assets .js.ts is compiled from TypeScript to JavaScript' do - assert { assets['javascripts/hello'].present? } - assert { assets['javascripts/hello'].source.include?('var log_to_console = function (x) {') } - assert { assets['javascripts/hello'].source.include?('var s = "Hello, world!";') } + assert { assets['javascripts/hello.js'].present? } + assert { assets['javascripts/hello.js'].source.include?('var log_to_console = function (x) {') } + assert { assets['javascripts/hello.js'].source.include?('var s = "Hello, world!";') } end -end \ No newline at end of file +end