123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- require 'execjs'
- require 'coffee_script/source'
- module CoffeeScript
- EngineError = ExecJS::RuntimeError
- CompilationError = ExecJS::ProgramError
- module Source
- def self.path
- @path ||= ENV['COFFEESCRIPT_SOURCE_PATH'] || bundled_path
- end
- def self.path=(path)
- @contents = @version = @bare_option = @context = nil
- @path = path
- end
- def self.contents
- @contents ||= File.read(path)
- end
- def self.version
- @version ||= contents[/CoffeeScript Compiler v([\d.]+)/, 1]
- end
- def self.bare_option
- @bare_option ||= contents.match(/noWrap/) ? 'noWrap' : 'bare'
- end
- def self.context
- @context ||= ExecJS.compile(contents)
- end
- end
- class << self
- def engine
- end
- def engine=(engine)
- end
- def version
- Source.version
- end
- # Compile a script (String or IO) to JavaScript.
- def compile(script, options = {})
- script = script.read if script.respond_to?(:read)
- if options.key?(:bare)
- elsif options.key?(:no_wrap)
- options[:bare] = options[:no_wrap]
- else
- options[:bare] = false
- end
- Source.context.call("CoffeeScript.compile", script, options)
- end
- end
- end
|