Module: TypeScript::Node

Defined in:
lib/typescript-node.rb,
lib/typescript-node/version.rb,
lib/typescript-node/compile_result.rb

Defined Under Namespace

Classes: CompileResult

Constant Summary collapse

VERSION =
'1.0.0'

Class Method Summary collapse

Class Method Details

.check_nodeObject



77
78
79
80
81
82
# File 'lib/typescript-node.rb', line 77

def check_node
  unless locate_executable(node)
    raise "typescript-node requires node command, but it's not found. Please install it. " +
              "Set TS_NODE environmental variable If you want to use node command in non-standard path."
  end
end

.compile(source) ⇒ String

Compile TypeScript to JavaScript.

Parameters:

  • source (String)

    TypeScript to be compiled

Returns:

  • (String)

    Resulted JavaScript



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/typescript-node.rb', line 39

def compile(source)
  js_file = Tempfile.new(["typescript-node", ".ts"])
  begin
    js_file.write(source)
    js_file.close
    result = compile_file(js_file.path)
    if result.success?
      result.js
    else
      raise result.stderr
    end
  ensure
    js_file.unlink
  end
end

.compile_file(source_file) ⇒ TypeScript::Node::CompileResult

Compile TypeScript source file.

Parameters:

  • source_file (String)

    TypeScript source file

Returns:



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/typescript-node.rb', line 19

def compile_file(source_file)
  Dir.mktmpdir do |output_dir|
    output_file = File.join(output_dir, "out.js")
    cmd = [node, Src.tsc_path.to_s, "--out", output_file, source_file]
    Open3.popen3(*cmd) do |stdin, stdout, stderr, wait_thr|
      exit_status = wait_thr.value
      output_js = File.exists?(output_file) ? File.read(output_file) : nil
      CompileResult.new(
          output_js,
          exit_status,
          stdout.read,
          stderr.read
      )
    end
  end
end

.locate_executable(cmd) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/typescript-node.rb', line 61

def locate_executable(cmd)
  if RbConfig::CONFIG["host_os"] =~ /mswin|mingw/ && File.extname(cmd) == ""
    cmd << ".exe"
  end

  if File.executable? cmd
    cmd
  else
    path = ENV['PATH'].split(File::PATH_SEPARATOR).find { |p|
      full_path = File.join(p, cmd)
      File.executable?(full_path) && File.file?(full_path)
    }
    path && File.expand_path(cmd, path)
  end
end

.nodeObject

node command TS_NODE environmental variable is used when it is set.



57
58
59
# File 'lib/typescript-node.rb', line 57

def node
  ENV["TS_NODE"] || "node"
end

.tsc_versionObject



12
13
14
# File 'lib/typescript-node.rb', line 12

def tsc_version
  TypeScript::Src.version
end