class Piperun::Filters::TypeScriptFilter

Public Class Methods

new(options = {}) click to toggle source
Calls superclass method Piperun::Filters::Filter::new
# File lib/piperun/filters/typescript_filter.rb, line 3
def initialize(options = {})
  super()
  @options = {
    output: nil,
    noImplicitAny: false
  }.merge(options)
end

Public Instance Methods

run(src, dst, files) click to toggle source
# File lib/piperun/filters/typescript_filter.rb, line 11
def run(src, dst, files)
  argv = ["tsc"]
  argv << "--noImplicitAny" if @options[:noImplicitAny]

  unless @options[:output].nil?
    files.map! { |f| File.join(src, f) }
    dstpath = File.join(dst, @options[:output])

    FileUtils::mkdir_p File.dirname(dstpath)
    tsc *argv, "--out", dstpath, *files

    [@options[:output]]
  else
    outfiles = []

    files.each do |name|
      outname = "#{File.join(File.dirname(name), File.basename(name, '.*'))}.js"

      srcpath = File.join(src, name)
      dstpath = File.join(dst, outname)
      FileUtils::mkdir_p File.dirname(dstpath)

      tsc *argv, "--outDir", File.dirname(dstpath), srcpath

      outfiles << outname
    end

    outfiles
  end
end

Private Instance Methods

tsc(*argv) click to toggle source
# File lib/piperun/filters/typescript_filter.rb, line 43
def tsc(*argv)
  pid = Process.spawn(*argv)
  Process.wait(pid)
  unless $?.exitstatus == 0
    raise StandardError, "Typescript Compiler failed"
  end
end