@ts-engine/cli
Version:
Write TypeScript packages with optionally zero configuration.
3 lines (2 loc) • 16 kB
JavaScript
var e=require("@leecheneler/cli"),t=require("path"),n=require("fs-extra"),r=require("rollup"),i=require("@rollup/plugin-json"),o=require("@rollup/plugin-commonjs"),s=require("@rollup/plugin-node-resolve"),a=require("@rollup/plugin-babel"),l=require("rollup-plugin-terser"),c=require("rollup-plugin-preserve-shebangs"),u=require("builtin-modules"),d=require("pretty-ms"),p=require("chalk"),f=require("randomcolor"),y=require("typescript"),m=require("glob-promise"),h=require("@ts-engine/eslint-config"),b=require("eslint"),g=require("jest"),v=require("child_process");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function j(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var x=w(t),k=w(n),O=j(r),D=w(i),T=w(o),S=w(s),E=w(u),q=w(d),C=w(p),B=w(f),P=w(y),_=w(m),A=w(h),F="3.0.4",N="Write TypeScript packages with optionally zero configuration.";function R(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function I(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?R(Object(n),!0).forEach((function(t){J(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):R(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function L(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function M(e,t){return $(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],s=!0,a=!1;try{for(n=n.call(e);!(s=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);s=!0);}catch(e){a=!0,i=e}finally{try{s||null==n.return||n.return()}finally{if(a)throw i}}return o}(e,t)||H(e,t)||G()}function W(e){return $(e)||z(e)||H(e)||G()}function U(e){return function(e){if(Array.isArray(e))return V(e)}(e)||z(e)||H(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function $(e){if(Array.isArray(e))return e}function z(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function H(e,t){if(e){if("string"==typeof e)return V(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?V(e,t):void 0}}function V(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function G(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function K(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=H(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw o}}}}var Q,X,Y,Z,ee,te,ne,re,ie,oe,se,ae,le,ce,ue,de,pe=["js","ts","jsx","tsx","mjs","cjs","es"],fe="(".concat(pe.join("|"),")"),ye=pe.map((function(e){return".".concat(e)})),me={declaration:!0,esModuleInterop:!0,jsx:P.default.JsxEmit.React,lib:["lib.esnext.d.ts","lib.dom.d.ts"],resolveJsonModule:!0,skipLibCheck:!0,strict:!0,outDir:"dist",allowJs:!0,experimentalDecorators:!0,emitDecoratorMetadata:!0,allowSyntheticDefaultImports:!0,noEmitOnError:!0,listEmittedFiles:!0},he=P.default.createCompilerHost(me),be=async function(e,t){var n=P.default.createProgram(e,I(I({},me),{},{noEmit:!t.emitTypes,emitDeclarationOnly:t.emitTypes})),r=n.emit();return{diagnostics:P.default.getPreEmitDiagnostics(n).concat(r.diagnostics),emitResult:r}},ge=async function(e){var t,n,r=Date.now(),i=_.default.sync("{,**/}*.{test,spec}.{.d.ts,ts,tsx}").map((function(e){return x.default.resolve(e)})).filter((function(e){return!e.includes("/node_modules/")})).filter((function(e){return!e.includes("/dist/")})).filter((function(e){return!e.includes("/coverage/")})),o=_.default.sync("{,**/}*.{d.ts,ts,tsx}").map((function(e){return x.default.resolve(e)})).filter((function(e){return!i.includes(e)})).filter((function(e){return!e.includes("/node_modules/")})).filter((function(e){return!e.includes("/dist/")})).filter((function(e){return!e.includes("/coverage/")})),s=await be(i,{emitTypes:!1}),a=await be(o,{emitTypes:e.emitTypes}),l=[].concat(U(null!==(t=s.emitResult.emittedFiles)&&void 0!==t?t:[]),U(null!==(n=a.emitResult.emittedFiles)&&void 0!==n?n:[])).filter((function(t){return e.entryFilepaths.find((function(e){return e.replace("src","dist").startsWith(t.replace("d.ts",""))}))}));if(".js"!==e.ext){var c,u=K(null!=l?l:[]);try{for(u.s();!(c=u.n()).done;){var d=c.value;await k.default.rename(d,d.replace(".d.ts","".concat(e.ext.replace(/\.js$/,""),".d.ts")))}}catch(e){u.e(e)}finally{u.f()}}var p=Date.now(),f=q.default(p-r),y=o.length+i.length,m=[].concat(U(a.diagnostics),U(a.diagnostics));if(0===m.length)return{passed:!0,output:C.default.green(Q||(Q=L(["Typechecked "," files (",")"])),C.default.bold(X||(X=L(["",""])),y),C.default.bold(Y||(Y=L(["",""])),f))};var h,b=[],g=K(m);try{var v=function(){var e=h.value;b.find((function(t){var n,r;return t.category===e.category&&t.code===e.code&&(null===(n=t.file)||void 0===n?void 0:n.fileName)===(null===(r=e.file)||void 0===r?void 0:r.fileName)&&t.length===e.length&&t.messageText===e.messageText&&t.source===e.source&&t.start===e.start}))||b.push(e)};for(g.s();!(h=g.n()).done;)v()}catch(e){g.e(e)}finally{g.f()}var w=P.default.formatDiagnosticsWithColorAndContext(b,he);return{passed:!1,output:C.default.redBright(Z||(Z=L(["Typechecked "," files (",").\n\n",""],["Typechecked "," files (",").\\n\\n",""])),C.default.bold(ee||(ee=L(["",""])),y),C.default.bold(te||(te=L(["",""])),f),w)}},ve=function(e){var t=[c.preserveShebangs(),D.default(),T.default(),S.default({extensions:ye,preferBuiltins:!0,exportConditions:["node"]}),a.babel({exclude:["node_modules/**",/\/core-js\//],extensions:ye,babelHelpers:"bundled",presets:["@ts-engine/babel-preset"]})];e.minify&&t.push(l.terser());var n,r=x.default.dirname(e.input).replace("src","dist"),i=(n=e.input).substr(Math.max(0,n.lastIndexOf("/"))).split(".").slice(0,-1).join("."),o={file:x.default.join(r,"".concat(i).concat(e.ext)),format:e.output,sourcemap:!0};return{input:e.input,plugins:t,output:o,external:function(t){return t!==e.input&&(e.bundle?E.default.includes(t):E.default.includes(t)||!t.startsWith(".")&&!x.default.isAbsolute(t))}}},we=function(e,t){var n,r=K(e);try{for(r.s();!(n=r.n()).done;){var i=n.value,o=x.default.resolve(i);o.startsWith(t.srcDir)||t.throw(1,C.default.redBright(ne||(ne=L([""," is not inside the src directory."])),i)),k.default.pathExistsSync(o)||t.throw(1,C.default.redBright(re||(re=L([""," not found."])),i))}}catch(e){r.e(e)}finally{r.f()}},je=async function(e,t){we(e,{srcDir:t.srcDir,throw:t.throw});var n,r=[],i=K(e);try{for(i.s();!(n=i.n()).done;){var o=n.value,s=ve({input:o,minify:t.minify,bundle:t.bundle,output:t.output,ext:t.ext,dependencies:t.dependencies}),a=s.output;r.push(a);try{var l=await O.rollup(I({},s)),c=Date.now();await l.write(a);var u=Date.now(),d=q.default(u-c);console.log(C.default.cyan(ie||(ie=L([""," "," "," (",")"])),o,C.default.bold(oe||(oe=L(["->"]))),a.file,C.default.bold(se||(se=L(["",", ",""])),t.output,d)))}catch(e){t.throw(1,C.default.redBright(e))}}}catch(e){i.e(e)}finally{i.f()}if(!t.skipTypecheck){var p=await ge({entryFilepaths:e,ext:t.ext,emitTypes:t.emitTypes});p.passed?console.log(p.output):t.throw(1,p.output)}for(var f=0,y=r;f<y.length;f++){var m=y[f];t.onBuildComplete&&t.onBuildComplete({filepath:m.file,format:m.format,passedTypecheck:!0})}},xe=async function(e,t){we(e,{srcDir:t.srcDir,throw:t.throw});var n,r=K(e);try{var i=function(){var r,i=n.value,o=ve({input:i,minify:t.minify,bundle:t.bundle,output:t.output,ext:t.ext,dependencies:t.dependencies}),s=o.output,a=1===e.length?"":(r="[".concat(i,"] "),C.default.hex(B.default({luminosity:"bright"}))(r)),l=function(e){return"".concat(a).concat(e.split("\n").join("\n".concat(a)))},c=null,u=O.watch(I(I({},o),{},{watch:{exclude:["node_modules/**","dist/**","coverage/**"],buildDelay:300}})),d=0,p=0;u.on("event",(async function(n){switch(n.code){case"START":d=Date.now();break;case"BUNDLE_START":default:break;case"BUNDLE_END":n.result.close();break;case"END":var r,o;p=Date.now();var a=q.default(p-d);c?(console.error(l(C.default.redBright(c))),c=null):console.log(l(C.default.cyan(ae||(ae=L([""," "," "," (",")"])),i,C.default.bold(le||(le=L(["->"]))),s.file,C.default.bold(ce||(ce=L(["",", ",""])),t.output,a))));var u=null;t.skipTypecheck||(u=await ge({entryFilepaths:e,ext:t.ext,emitTypes:t.emitTypes}),console.log(l(u.output))),t.onBuildComplete&&t.onBuildComplete({filepath:s.file,format:s.format,passedTypecheck:null===(r=null===(o=u)||void 0===o?void 0:o.passed)||void 0===r||r}),console.log(l(C.default.grey(ue||(ue=L(["Watching for changes..."])))));break;case"ERROR":c=n.error}}))};for(r.s();!(n=r.n()).done;)i()}catch(e){r.e(e)}finally{r.f()}},ke=function(){return async function(e,t){var n=W(e.options._).slice(0),r=await async function(e){return(await Promise.all(e.map((function(e){return _.default(e)})))).reduce((function(e,t){return[].concat(U(e),U(t))}),[])}(n);0===r.length&&e.throw(1,"No files found.");var i=new b.ESLint({fix:e.options.fix,baseConfig:I({},A.default),extensions:pe.map((function(e){return".".concat(e)}))}),o=await i.lintFiles(r);e.options.fix&&await b.ESLint.outputFixes(o);var s=await i.loadFormatter("stylish"),a=await s.format(o);o.find((function(e){return e.errorCount>0}))&&e.throw(1,a),o.find((function(e){return e.warningCount>0}))&&console.warn(a),await t()}},Oe={testRegex:"(/__tests__/.*|(.|/)(test|spec)).(".concat(fe,")?$"),testURL:"http://localhost",transform:JSON.parse('{\n ".(js|jsx|ts|tsx|mjs|cjs|es)$": [\n "babel-jest", \n { \n "configFile": false, \n "presets": ["@ts-engine/babel-preset"]\n }\n ]\n }')},De=function(){return async function(e){var t=M(e.options._,1)[0],n=e.rawOptions.indexOf(t),r=e.rawOptions.length>n+1?e.rawOptions.slice(n+1):[],i=null,o=function(t){var n,o;"cjs"===t.format&&t.passedTypecheck&&(i&&(i.kill(),i=null),null===(n=(i=v.spawn("node",[t.filepath].concat(U(r)),{stdio:"inherit"})).stdout)||void 0===n||n.setEncoding("utf8"),null===(o=i.stderr)||void 0===o||o.setEncoding("utf8"),e.options.watch||i.on("close",(function(e){process.exit(null!=e?e:0)})))};e.options.watch?await xe([t],{minify:e.options.minify,skipTypecheck:e.options["skip-typecheck"],emitTypes:!1,bundle:e.options.bundle,output:"cjs",ext:".js",srcDir:e.package.srcDir,dependencies:e.package.dependencies,throw:e.throw,onBuildComplete:o}):await je([t],{minify:e.options.minify,skipTypecheck:e.options["skip-typecheck"],emitTypes:!1,bundle:e.options.bundle,output:"cjs",ext:".js",srcDir:e.package.srcDir,dependencies:e.package.dependencies,throw:e.throw,onBuildComplete:o}),await new Promise((function(){}))}};(de=e.createCli({description:N,name:"tse",version:F}).use((async function(e,t){var n=x.default.resolve(process.cwd(),"package.json");if(await k.default.pathExists(n)){var r,i=await k.default.readJSON(n),o=Object.keys(null!==(r=i.dependencies)&&void 0!==r?r:{});return e.package={dir:process.cwd(),srcDir:x.default.resolve(process.cwd(),"src"),dependencies:o},t()}e.throw(1,"Could not locate package.json. Please run ts-engine in the same directory as your package.json file.")})).useCommand("build","Build files.",(async function(e,t){var n,r,i=null!==(n=e.options.output)&&void 0!==n?n:"cjs",o=null!==(r=e.options.ext)&&void 0!==r?r:".js";["cjs","esm"].includes(i)||e.throw(1,"Unknown output ".concat(i,". Only cjs and esm are supported."));var s=W(e.options._).slice(0);e.options.watch?await xe(s,{minify:e.options.minify,skipTypecheck:e.options["skip-typecheck"],emitTypes:e.options["emit-types"],bundle:e.options.bundle,output:i,ext:o,srcDir:e.package.srcDir,dependencies:e.package.dependencies,throw:e.throw}):await je(s,{minify:e.options.minify,skipTypecheck:e.options["skip-typecheck"],emitTypes:e.options["emit-types"],bundle:e.options.bundle,output:i,ext:o,srcDir:e.package.srcDir,dependencies:e.package.dependencies,throw:e.throw}),e.options.watch&&await new Promise((function(){})),await t()}),{arguments:[{name:"watch",description:"Watch files and rebuild on changes.",type:"boolean"},{name:"skip-typecheck",description:"Skip typechecking code (including emitting types).",type:"boolean"},{name:"emit-types",description:"Emit types.",type:"boolean"},{name:"minify",description:"Minify output code.",type:"boolean"},{name:"bundle",description:"Bundle dependencies.",type:"boolean"},{name:"output",description:"Output module type, cjs or esm. Defaults to cjs.",type:"string"},{name:"ext",description:"Output file extension. Defaults to '.js'.",type:"string"}],positionals:[{name:"filepaths",description:"Files to build.",type:"string",array:!0,required:!0}]}).useCommand("lint","Lint files using ESLint.",ke(),{arguments:[{name:"fix",description:"Fix fixable lint issues.",type:"boolean"}],positionals:[{name:"globs",description:"Globs to locate files to lint.",type:"string",array:!0,required:!0}]}).useCommand("test","Run tests using Jest, all options are forwarded onto Jest.",(async function(e,t){process.env.BABEL_ENV="test",process.env.NODE_ENV="test";var n=x.default.resolve(process.cwd(),"jest.config.js"),r={};if(k.default.existsSync(n))try{r=require(n)}catch(t){e.throw(1,"Failed to load jest.config.js: ".concat(t.message))}var i,o=x.default.resolve(process.cwd(),"jest.setup.js"),s=x.default.resolve(process.cwd(),"jest.setup.ts"),a=k.default.existsSync(o),l=k.default.existsSync(s),c=a||l?{setupFilesAfterEnv:["./jest.setup.".concat(l?"t":"j","s")]}:{},u={},d=x.default.resolve(process.cwd(),".babelrc"),p=x.default.resolve(process.cwd(),".babelrc.js"),f=x.default.resolve(process.cwd(),"babel.config.js"),y=k.default.existsSync(d),m=k.default.existsSync(p),h=k.default.existsSync(f);(y||m||h)&&(u={transform:JSON.parse('{\n ".(js|jsx|ts|tsx|mjs|cjs|es)$": [\n "babel-jest", \n { \n "configFile": "'.concat(null!==(i=null!=f?f:p)&&void 0!==i?i:d,'"\n }\n ]\n }'))});var b=JSON.stringify(I(I(I(I({},Oe),c),u),r));try{await g.run([].concat(U(e.rawOptions),["--config",b]))}catch(t){e.throw(1,"")}await t()}),{}).useCommand("run","Build and run a file.",De(),{arguments:[{name:"watch",description:"Watch files and rebuild on changes.",type:"boolean"},{name:"typecheck",description:"Typecheck code.",type:"boolean"},{name:"minify",description:"Minify output code.",type:"boolean"},{name:"bundle",description:"Bundle dependencies.",type:"boolean"}],positionals:[{name:"filepath",description:"File to build and run.",type:"string",required:!0}]}),de).run(process.argv.slice(2)).then((function(e){return process.exit(e.code)})).catch((function(e){console.log(e),process.exit(1)}));
//# sourceMappingURL=index.js.map
;