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