require "tmpdir" require "tempfile" require "typescript-src" require "typescript-node/version" require "typescript-node/compile_result" module TypeScript module Node class << self def compile_file(source_file) Dir.mktmpdir do |output_dir| output_file = File.join(output_dir, "out.js") cmd = ["node", Src.tsc_path, "--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 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 end end end