grunt-tsc
Version:
Compile typescript files via grunt tasks
46 lines • 17.9 kB
JavaScript
/*******************************************************************************
* , , ,
* `$, $, `$, ;
* `$+ `$, `$, d; ,
* `$b, `$, $$, d$' ,$
* ╔═══╗╔╗╔╗╔╗ ╔╗╔╗╔══╗ `$$+ l$+ ;$$ d$$ ,$' ,
* ║╔═╗║║║║║║╚═╝║║║║╔═╝ `$$b,;$$b,$$$$$$; ,d$$ ,$
* ║╚═╝║║║║║║╔╗ ║║╚╝║ `$$$b$$$$$$$$$$$$$$$; ,d$'
* ║╔══╝║║║║║║╚╗║║╔╗║ `$$$*""""~~""^¦$$$$$$$$P ,,
* ║║ ║╚╝║║║ ║║║║║╚═╗ *^ ~^"$$$$;_,s$'
* ╚╝ ╚══╝╚╝ ╚╝╚╝╚══╝ ,^ `$$$$$$' _
* ,' `$$$' ,y$"
* ' `$$,y$$"
* ╔╗ ╔╗╔══╗╔════╗ ( `$$$$'
* ║╚═╝║║╔╗║╚═╗╔═╝ ,^ ,,, ,,,yyyyy,,`$$$$$#=-
* ║╔╗ ║║║║║ ║║ `\, ,,/'^ `` `$$$$$$$$$$d;$$$~
* ║║╚╗║║║║║ ║║ /' ,$$*=``- `$b`?$$$$$$$$$$;$$$b,
* ║║ ║║║╚╝║ ║║ ,' `^*;-='' `$$$$$$$#$$$$$$$;$$$¦$b.
* ╚╝ ╚╝╚══╝ ╚╝ (,,,;, `¦$-",¬y+`?$$$$;$b,
* `;``" ]$& $';$$$$d$$$b,
* ,yyy,, +@@&`'d$$$$d$P""¦$,
* ╔══╗ ╔═══╗╔══╗╔══╗ \?`^"$@by, ~¦>^,$$$$$d$$b,
* ║╔╗╚╗║╔══╝║╔╗║║╔╗╚╗ ,&~`^"¦?~#` ,yb, ,?$$$$$d$$$$b,
* ║║╚╗║║╚══╗║╚╝║║║╚╗║ ' $ , ,,yd$$$$$?·?$$$d$$~~"¦;
* ║║ ║║║╔══╝║╔╗║║║ ║║ / '$, $$$yyyyy$$$$$" ,$$$+$$$d$$$b,
* ║╚═╝║║╚══╗║║║║║╚═╝║ `-=##$$$$$$$$$$$$$$^~ ,$$$$$$$R$'~ ~`
* ╚═══╝╚═══╝╚╝╚╝╚═══╝ ~~"$$$$$$$$$' ,$$$$$$$D$'
* `#$$$$$' ,$$$`,$$Z$$
* `#$$' ,$@P',$$o$$'
* `'=*yd$$P',$$N$P'
* ~~~"+$-"~
*
* ╔══╗ ╔══╗╔═══╗╔══╗╔════╗╔══╗╔╗ ╔═══╗╔╗ ╔═══╗╔╗ ╔╗╔═══╗╔╗ ╔╗╔════╗
* ║╔╗╚╗╚╗╔╝║╔══╝╚╗╔╝╚═╗╔═╝║╔╗║║║ ║╔══╝║║ ║╔══╝║╚╗╔╝║║╔══╝║╚═╝║╚═╗╔═╝
* ║║╚╗║ ║║ ║║╔═╗ ║║ ║║ ║╚╝║║║ ╔══╗║╚══╗║║ ║╚══╗║ ╚╝ ║║╚══╗║╔╗ ║ ║║
* ║║ ║║ ║║ ║║╚╗║ ║║ ║║ ║╔╗║║║ ╚══╝║╔══╝║║ ║╔══╝║╔╗╔╗║║╔══╝║║╚╗║ ║║
* ║╚═╝║╔╝╚╗║╚═╝║╔╝╚╗ ║║ ║║║║║╚═╗ ║╚══╗║╚═╗║╚══╗║║╚╝║║║╚══╗║║ ║║ ║║
* ╚═══╝╚══╝╚═══╝╚══╝ ╚╝ ╚╝╚╝╚══╝ ╚═══╝╚══╝╚═══╝╚╝ ╚╝╚═══╝╚╝ ╚╝ ╚╝
*
* project: grunt-tsc
* version: 1.0.12
* development: http://www.digital-element.ru/
* copyright: (c) 2003-2015 Digital-Element
* license: MIT
******************************************************************************/
function getVersions(){"use strict";return compilerVersions||(compilerVersions=require(path.resolve(__dirname,"../bin/versions.js"))),compilerVersions}function typeOf(a){"use strict";var b=String(Object.prototype.toString.call(a)||"").slice(8,-1)||"Object",c=["Arguments","Array","Boolean","Date","Error","Function","Null","Number","Object","String","Undefined"];return-1!==c.indexOf(b)&&(b=b.toLowerCase()),b}function deferred(a){"use strict";function b(){setTimeout(function(){var c=a.shift();"function"===typeOf(c)&&c(b)},0)}b()}function mkdir(a,b){"use strict";deferred([function(c){fs.exists(a,function(a){a?b(null):c()})},function(){mkdir(path.dirname(a),function(c){c?b(c):fs.mkdir(a,function(a){b(a||null)})})}])}var spawn=require("child_process").spawn,path=require("path"),fs=require("fs"),rows=process.stdout.rows,columns=process.stdout.columns,cwd=process.cwd(),execPath=process.execPath,compilerVersions;process.stdout.on("resize",function(){"use strict";rows=process.stdout.rows,columns=process.stdout.columns}),module.exports=function(a){"use strict";a.registerMultiTask("tsc","Compile TypeScript files",function(){function b(a,b,c){var d,e;deferred([function(a){mkdir(path.join(cwd,path.dirname(b)),function(b){b?c(b,null):a()})},function(b){fs.readFile(a,function(a,d){a?c(a,null):(e=d,b())})},function(a){fs.writeFile(b,e,function(b){b?c(b,null):a()})},function(b){var c=path.resolve(cwd,a);-1===ib.indexOf(c)&&ib.push(c),b()},function(a){fs.stat(b,function(b,e){b?c(b,null):(d=e,a())})},function(){c(null,d,b)}])}function c(){return"undefined"===typeOf(M)&&(M=cb.options()||{}),M}function d(a,b){return"undefined"===typeOf(a)?!!b:"string"===typeOf(a)?-1===["off","no","false","0",""].indexOf(String(a).toLowerCase()):!!a}function e(a){var b=new Array(20-a.length);return b.join(" ")+a+": "}function f(b){b.split(/(?:\n|\r)+/).forEach(function(b){if(b=b.replace(/\s+$/,""),b=b.replace(/\s+/," "))for(;b;)b=b.replace(/^\s+/,""),a.log.write(">>".red+" "),a.log.writeln(b.substr(0,columns-3)),b=b.substr(columns-3)})}function g(){var b=kb+jb+lb;eb?(a.log.writeln(">>".green+" complete "+String(b).green+" files(s) ("+String(I(Number(new Date)-gb)).yellow+")"),a.log.writeln(e("javascript")+String(kb).cyan+" file(s)"),a.log.writeln(e("declaration")+String(jb).cyan+" file(s)"),a.log.writeln(e("sourcemap")+String(lb).cyan+" file(s)")):a.log.writeln("Nothing to compile.".yellow)}function h(b){a.log.writeln(">>".red+" "+String(b.name).red+" "+b.message),a.log.writeln(b.stack.split(/(?:\n|\r)+/).slice(1).map(function(a){return">>".red+" "+a}).join("\n"))}function i(b){a.log.writeln(">> WARNING:".yellow+" "+String(b))}function j(a){function b(b,c){setTimeout(function(){a(b,c)})}var d,e,f=c();deferred([function(a){"undefined"===typeOf(e)?b(null,null):a()},function(b){fs.exists(e,function(c){c?b():a(new Error('Incorrect "compiler" option, file not found.'),null)})},function(a){fs.realpath(e,function(c,d){c?b(new Error('Incorrect "compiler" option, file not found.'),null):(e=d,a())})},function(a){fs.stat(e,function(c,e){c?b(new Error('Incorrect "compiler" option: '+c.message),null):(d=e,a())})},function(a){d.isFile()?a():b(new Error('Incorrect "compiler" option, should be path to file.'),null)},function(){b(null,e)}]),"undefined"!==typeOf(f.compiler)&&(e=String(f.compiler)),"undefined"!==typeOf(f.compiler)&&"undefined"!==typeOf(f.version)&&i('Option "version" ignored, because option "compiler" used instead.')}function k(){return Z||v()}function l(a){Z=a||v()}function m(a){function b(b,c){setTimeout(function(){a(b,c)})}var d,e,f=c();deferred([function(a){"undefined"===typeOf(d)?b(null,null):a()},function(b){fs.exists(d,function(c){c?b():a(new Error('Incorrect "node" option, file not found.'),null)})},function(a){fs.realpath(d,function(c,e){c?b(new Error('Incorrect "node" option, file not found.'),null):(d=e,a())})},function(a){fs.stat(d,function(c,d){c?b(new Error('Incorrect "node" option: '+c.message),null):(e=d,a())})},function(a){e.isFile()?a():b(new Error('Incorrect "node" option, path should be a file.'),null)},function(a){73!==(73&e.mode)?b(new Error('Incorrect "node" option, file should be executable.'),null):a()},function(){b(null,d)}]),"undefined"!==typeOf(f.node)&&(d=String(f.node))}function n(){return _||execPath}function o(a){_=a||execPath}function p(){return path.relative(cwd,path.join(__dirname,"../bin",H(),"lib.d.ts"))}function q(){var a;return"undefined"===typeOf(Y)&&(Y=d(c().library),a=!r().length,Y&&!a&&i('Option "library" ignored, because option "system" used instead.'),Y=Y&&a),Y}function r(){var b;return"array"!==typeOf(X)&&(X=[],b=c(),"undefined"!==typeOf(b.system)&&(X=a.file.expand({cwd:path.relative(cwd,path.join(__dirname,"../bin",H())),filter:function(b){return a.file.isFile(b)&&".d.ts"===b.substr(-5).toLowerCase()}},b.system)),X=X.map(function(a){return path.relative(cwd,path.join(__dirname,"../bin",H(),a))})),X}function s(){var b;if("undefined"===typeOf(W)&&(b=c(),W=[],q()&&W.push(p()),W=W.concat(r()),"undefined"!==typeOf(b.references)))try{W=W.concat(a.file.expand({filter:function(b){return a.file.isFile(b)&&".d.ts"===b.substr(-5).toLowerCase()}},b.references))}catch(d){throw W=[],new Error("Incorrect references: "+String(d||""))}return W}function t(){var a,b,d,e,f;if("string"!==typeOf(P))if(a=c(),b=String(a.target||"").toUpperCase(),d=parseFloat(F()),f=-1!==["ES3","ES5"].indexOf(b)&&1.4>d,e=-1!==["ES3","ES5","ES6"].indexOf(b)&&d>=1.4,"undefined"===typeOf(a.target)||"DEFAULT"===b)P="ES3";else if("LATEST"===b)P=1.4>d?"ES5":"ES6";else{if(!f&&!e)throw new Error('Incorrect "target" option, must be "default", "es3", "es5"'+(1.4>d?', "es6"':"")+' or "latest".');P=b}return P}function u(){var a,b;if("string"!==typeOf(Q))if(a=c(),b=String(a.module||"").toLowerCase(),"undefined"===typeOf(a.module))Q="commonjs";else{if(-1===["commonjs","amd"].indexOf(b))throw new Error('Incorrect "module" option, must be "commonjs" or "amd".');Q=b}return Q}function v(){return"undefined"===typeOf($)&&($=path.join(__dirname,"../bin",H(),"tsc.js")),$}function w(){return"undefined"===typeOf(N)&&(N=d(c().declaration)),!!N}function x(){return"undefined"===typeOf(T)&&(T=d(c().comments,!0)),!!T}function y(){return"undefined"===typeOf(O)&&(O=d(c().sourcemap)),!!O}function z(){return"undefined"===typeOf(U)&&(U=d(c().implicitAny,!0)),!!U}function A(){return"undefined"===typeOf(V)&&(V=d(c().preserveConstEnums)),!!V}function B(){var a=c();return"undefined"===typeOf(S)&&(S=String(a.sourceRoot||"")||null),S}function C(){var a=c();return"undefined"===typeOf(R)&&(R=String(a.mapRoot||"")||null),R}function D(a){for(var b,c=["B","K","M","G","T"],d=c.shift(),e=!1;a>1024;)a/=1024,d=c.shift(),e=!0;return b=String(a+1e-4).split("."),b[0]+(e?"."+b[1].substr(0,1):"")+d}function E(b){var c,d="",e=[],f=[],g=n();f.push(k()),f.push("--version"),a.log.debug("command:",g),a.log.debug("args:",f.join(" ")),c=spawn(g,f),c.stderr.on("data",function(a){e.push(String(a||""))}),c.stdout.on("data",function(a){d+=a.toString(),e.push(String(a||""))}),c.on("close",function(a){var c;0!==a?b(e.join("\n")):/^.*version\s+(\S+).*$/im.test(d)?(c=d.replace(/^.*version\s+(\S+).*$/im,"$1").split("\r").join("").split("\n").join("").split(".").slice(0,2).join("."),b(null,c)):b(null,"1.0")})}function F(){return bb||"unknown"}function G(a){bb=a||"unknown"}function H(){var a,b;if("undefined"===typeOf(ab)){if(a=c(),"undefined"!==typeOf(a.version)){if(b=String(a.version||"").toLowerCase(),-1===hb.indexOf(b))throw new Error('Incorrect "version" option, should be '+hb.slice(0,hb.length-1).map(function(a){return'"'+a+'"'}).join(", ")+' or "'+hb[hb.length-1]+'".');ab=b}else ab="default";-1===["default","latest"].indexOf(ab)&&(ab="v"+ab)}return ab}function I(a){var b=String(a/1e3+1e-4).split(".");return b[0]+(b.length>1?"."+b[1].substr(0,3):".000")+"s"}function J(){deferred([function(b){var c=[];ib.forEach(function(b){c.push(function(c){var d=!1;deferred([function(a){fs.exists(b,function(b){d=b,a()})},function(c){d?fs.unlink(b,function(){a.log.debug("unlink",b),c()}):c()},function(){c()}])})}),c.push(function(){b()}),deferred(c)},function(){g(),fb(!0)}])}function K(c){function d(){return"undefined"===typeOf(o)&&(o="undefined"!==typeOf(c.expand)?!!c.expand:-1!==["off","no","false","0",""].indexOf(String(c.orig.expand).toLowerCase())?!1:!!c.orig.expand),o}function g(){return"undefined"===typeOf(r)&&(r=c.src),r}function i(){return"undefined"===typeOf(p)&&(p=String(c.dest||"")),p}function j(){return"undefined"===typeOf(q)&&(q="","undefined"!==typeOf(c.cwd)?q=String(c.cwd||""):c.orig&&"undefined"!==typeOf(c.orig.cwd)&&(q=String(c.orig.cwd||""))),q}function l(){function c(){var a=String(Number(new Date-S)/1e3+1e-4).split(".");return a[0]+(a.length>1?"."+a[1].substr(0,3):".000")+"s"}function d(){return"undefined"===typeOf(P)&&(P=String(g()[0]||"")),P}function j(){var a,b,c,e;return"undefined"===typeOf(I)&&(a=d(),b=path.extname(a),c=path.basename(a,b),e=path.dirname(a),I=path.join(e,c+".js")),I}function l(){var a,b,c,e;return"undefined"===typeOf(L)&&(a=d(),b=path.extname(a),c=path.basename(a,b),e=path.dirname(a),L=path.join(e,c+".js.map")),L}function m(){var a,b,c,d;return"undefined"===typeOf(M)&&(a=i(),c=path.extname(a),d=path.basename(a,c),b=path.dirname(a),M=path.join(b,d+".js.map")),M}function o(){var a,b,c,e;return"undefined"===typeOf(N)&&(a=d(),b=path.extname(a),c=path.basename(a,b),e=path.dirname(a),N=path.join(e,c+".d.ts")),N}function p(){var a,b,c,d;return"undefined"===typeOf(O)&&(a=i(),c=path.extname(a),d=path.basename(a,c),b=path.dirname(a),O=path.join(b,d+".d.ts")),O}function q(){return"string"!==typeOf(G)&&(G=path.basename(g()[0])),G}function r(){return"string"!==typeOf(H)&&(H=path.dirname(g()[0])),H}function v(f){function g(b,g,h,i){function j(){var b="javascript",c=String(i).toLowerCase();".d.ts"===c.substr(-5)?b="declaration":".js.map"===c.substr(-7)&&(b="sourcemap"),a.log.writeln(e(b)+i.cyan+" ("+String(D(h.size)).yellow+")")}g?f(g):(q&&a.log.writeln(">>".green+" compile ("+String(eb-db.length).yellow+" of "+String(eb).yellow+") "+d().green+" ("+String(c()).yellow+")"),j(),q=!1,b())}function h(){kb+=1,r.push(function(a){var c=j(),d=i();b(c,d,function(b,c,d){g(a,b,c,d)})})}function k(){jb+=1,r.push(function(a){var c=o(),d=p();b(c,d,function(b,c,d){g(a,b,c,d)})})}function n(){lb+=1,r.push(function(a){var c=l(),d=m();b(c,d,function(b,c,d){g(a,b,c,d)})})}var q=!0,r=[];h(),y()&&n(),w()&&k(),r.push(function(){f(null)}),deferred(r)}var E,F,G,H,I,L,M,N,O,P,Q=[],R=[],S=Number(new Date);try{E=n(),Q.push(k()),Q.push("--target",t()),t()<6&&Q.push("--module",u()),x()||Q.push("--removeComments"),w()&&Q.push("--declaration"),z()||Q.push("--noImplicitAny"),A()&&Q.push("--preserveConstEnums"),y()&&(Q.push("--sourcemap"),null!==B()&&Q.push("--sourceRoot",B()),null!==C()&&Q.push("--mapRoot",C())),s().forEach(function(a){Q.push(path.relative(r(),a))}),Q.push(q()),a.log.debug("command:",E),a.log.debug("args:",Q.join(" ")),a.log.debug("cwd:",r()),F=spawn(E,Q,{cwd:r()}),F.stderr.on("data",function(a){R.push(a.toString())}),F.stdout.on("data",function(a){R.push(a.toString())}),F.on("close",function(b){0!==b?(f(R.join("\n")),a.fail.warn("Something went wrong."),fb(!1)):v(function(a){a?(h(a),fb(!1)):db.length?K(db.shift()):J()})})}catch(T){h(T),fb(!1)}}function m(){function b(){var a,b,c,d;return"undefined"===typeOf(l)&&(a=i(),b=path.extname(a),c=path.dirname(a),d=path.basename(a,b),l=path.join(c,d+".d.ts")),l}function c(){return"undefined"===typeOf(m)&&(m=i()+".map"),m}var d,l,m,o,p=[],q=[],r=Number(new Date);try{d=n(),p.push(k()),p.push("--target",t()),t()<6&&p.push("--module",u()),x()||p.push("--removeComments"),w()&&p.push("--declaration"),z()||p.push("--noImplicitAny"),A()&&p.push("--preserveConstEnums"),y()&&(p.push("--sourcemap"),null!==B()&&p.push("--sourceRoot",B()),null!==C()&&p.push("--mapRoot",C())),p.push("--out",i()),s().forEach(function(a){p.push(a)}),g().forEach(function(a){p.push(path.join(j(),a))}),a.log.debug("command:",d),a.log.debug("args:",p.join(" ")),o=spawn(d,p),o.stdout.on("data",function(a){q.push(a.toString())}),o.stderr.on("data",function(a){q.push(a.toString())}),o.on("close",function(d){var k,l,m;0!==d?(f(q.join("\n")),a.fail.warn("Something went wrong."),fb(!1)):(kb+=1,a.log.writeln(">>".green+" compile ("+String(eb-db.length).yellow+" of "+String(eb).yellow+") "+String(g().length).green+" file(s) ("+I(Number(new Date)-r).yellow+")"),g().forEach(function(b){a.log.writeln(e("typescript")+path.join(j(),b).green)}),deferred([function(a){fs.stat(i(),function(b,c){b?(h(b),fb(!1)):(k=c.mode,a())})},function(a){y()?fs.stat(c(),function(b,c){b?(h(b),fb(!1)):(m=c.mode,a())}):a()},function(a){w()?fs.stat(b(),function(b,c){b?(h(b),fb(!1)):(l=c.mode,a())}):a()},function(){a.log.writeln(e("javascript")+i().cyan+" ("+D(k).yellow+")"),y()&&(lb+=1,a.log.writeln(e("sourcemap")+c().cyan+" ("+D(m).yellow+")")),w()&&(jb+=1,a.log.writeln(e("declaration")+b().cyan+" ("+D(l).yellow+")")),db.length?K(db.shift()):J()}]))})}catch(v){h(v),fb(!1)}}var o,p,q,r;d()?l():m()}function L(){deferred([function(a){j(function(b,c){if(b)h(b),fb(!1);else try{l(c),a()}catch(d){h(d)}})},function(a){m(function(b,c){b?(h(b),fb(!1)):(o(c),a())})},function(a){E(function(b,c){b?f(b):(G(c),a())})},function(){try{a.log.writeflags({target:t(),module:u(),declaration:w().toString(),comments:x().toString(),sourcemap:y().toString(),implicitAny:z().toString(),preserveConstEnums:A().toString(),sourceRoot:B(),mapRoot:C(),version:F(),compiler:k(),node:n(),library:q().toString(),system:r(),references:s()},"options"),db.length?K(db.shift()):J()}catch(b){h(b),fb(!1)}}])}var M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,ab,bb,cb=this,db=cb.files,eb=db.length,fb=this.async(),gb=Number(new Date),hb=getVersions(),ib=[],jb=0,kb=0,lb=0;L()})};