UNPKG

tsmake

Version:

tsmake is a typescript make. Created for autocompile Typescript code into JS.

147 lines (135 loc) 3.72 kB
#!/usr/bin/env node /* * TypeScript Makefile builder */ var path = require('path'); var pkg = require( path.join(__dirname, 'package.json') ); var tsc = require('typescript-compiler'); var fs = require('fs'); var colors = require('colors'); var state = true; var program = require('commander'); var selected_target = null; var spawn = require('child_process').spawn; if (process.argv.length > 2) { selected_target = (process.argv[2] == "all")? null: process.argv[2]; } program .version(pkg.version) .usage(' target [option]') .option('-R, --run', 'Run compiled target (if compiled)') .parse(process.argv); if (!fs.existsSync('./TSMakefile.json')) { console.log("[tsm] : Unable locate TSM.json file.".red); return; } fs.readFile('./TSMakefile.json', function(err, data){ if (err) { console.log("[tsm] : Unable read TSMakefile.json file.".red); return; } else { try { var tsm = JSON.parse(data); if (tsm) { for (var t in tsm) { if (selected_target == "cls" || selected_target == "clean" || selected_target == "clear") { cleanup(tsm); return; } if (selected_target != null && t != selected_target) continue; var trg = "[tsm] Build target : " + t; console.log(trg.yellow) //------------------------- if (tsm[t].targets == "undefined" || tsm[t].out == "undefined") { console.log("[tsm] : Incorrect file".red); return; } else { if (tsm[t].targets.length == 0) { console.log("[tsm] Done!".blue); return; } var tar = "[tsm] Detected targets : " + tsm[t].targets.length; console.log(tar.blue); var i = 0; var obj = {}; while (state && (i < tsm[t].targets.length)) { var endstr = "[tsm]["+i+"] Target : " + tsm[t].targets[i]; console.log(endstr.blue); if (!fs.existsSync(tsm[t].targets[i])) { var errstr = "[tsm][" + i + "] File : " + tsm[t].targets[i] + " not found. Compilation was stopped"; console.log(errstr.red); state = false; return; } var src = fs.readFileSync(tsm[t].targets[i], {"encoding":"utf8"}); obj[tsm[t].targets[i]] = src; //append new target ++i; } //Let's build console.log("[tsm] All targets readed. Compile started ...".blue); var rsx = '-t ES5 --out ' + tsm[t].out; if (tsm[t].flags != "undefined") { rsx = tsm[t].flags + " " + rsx; } var flstr = "[tsm] Flags : " + rsx; console.log(flstr.yellow); var res = tsc.compileStrings(obj, rsx, null); if (res.errors.length != 0) { console.log("[tsm] Build failed".red); for (var i = 0; i < res.errors.length; ++i) { var errxs = "[tsm]("+(i+1)+") " + res.errors[i]; console.log(errxs.red); } return; } var fsd = ""; for (var j in res.sources){ if (typeof res.sources[j] !== 'function') fsd += ("\n" + res.sources[j]); } fs.writeFile(tsm[t].out, fsd, {"encoding": "utf8"}, function(err){ if (err) { var ers = "[tsm] Unable write file"; console.log(ers.red); console.log(err); } }); } } console.log("[tsm] Build : OK".green); } } catch (e) { console.log("[tsm] : Incorrect format passed".red); console.log(e); return; } } }); function cleanup(tsm) { console.log("[tsm] Cleanup".yellow); for (var j in tsm) { for (var k in tsm[j]) { if (k == "out") { var rm = "[tsm] Remove " + tsm[j][k]; fs.unlink(tsm[j][k], function(err){}); console.log(rm.yellow); } } } }