Module: TypeScript::Ruby

Defined in:
lib/tsc-ruby.rb,
lib/tsc-ruby/version.rb,
lib/tsc-ruby/compile_result.rb

Defined Under Namespace

Classes: CompileResult, NodeNotFound

Constant Summary collapse

VERSION =
'0.1.3'

Class Method Summary collapse

Class Method Details

.compile(script, *tsc_options) ⇒ String

Compile TypeScript string to JavaScript string

Parameters:

  • script (String)

    TypeScript to be compiled

Returns:

  • (String)

    compiled JavaScript



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/tsc-ruby.rb', line 30

def compile(script, *tsc_options)
  script = script.read if script.respond_to?(:read)
  input_file = Tempfile.new(%w(tsc-ruby .ts))
  begin
    input_file.write(script)
    input_file.close
    result = compile_file(input_file.path, *tsc_options)
    if result.success?
      result.js
    else
      raise result.stderr + result.stdout
    end
  ensure
    input_file.unlink
  end
end

.compile_file(input_file_path, *tsc_options) ⇒ TypeScript::Ruby::CompileResult

Compile TypeScript script file to JavaScript script file.

Compilation is a one to one process, not implicit concatenation of referenced dependencies is performed.

Parameters:

  • TypeScript (String)

    script file

Returns:



53
54
55
56
57
58
59
60
61
62
# File 'lib/tsc-ruby.rb', line 53

def compile_file(input_file_path, *tsc_options)
  Dir.mktmpdir do |output_dir|
    stdout, stderr, exit_status = tsc(*tsc_options, '--outDir', output_dir, input_file_path)
    # now input file is in output_dir but with a .js extension
    output_file_path = File.join(output_dir, File.basename(input_file_path, '.ts')) + '.js'
    raise "Compiled JS file not found: #{output_file_path}" unless File.exist? output_file_path
    output_js = File.read(output_file_path)
    CompileResult.new(output_js, exit_status, stdout, stderr)
  end
end

.tsc(*args) ⇒ Object



19
20
21
22
23
24
# File 'lib/tsc-ruby.rb', line 19

def tsc(*args)
  cmd = ['node', TypeScript::Src.tsc_path.to_s, *args]
  Open3.capture3(*cmd)
rescue Errno::ENOENT => e
  raise '`node` executable not found in PATH' if e.message == 'No such file or directory - node'
end

.tsc_versionObject



15
16
17
# File 'lib/tsc-ruby.rb', line 15

def tsc_version
  TypeScript::Src.version
end