moduloze
Version:
Convert CommonJS (CJS) modules to UMD and ESM formats
5 lines • 8.26 kB
JavaScript
/*! Moduloze: cli.js
v0.9.1 (c) 2022 Kyle Simpson
MIT License: http://getify.mit-license.org
*/
!function UMD(e,o,r,n){"function"==typeof define&&define.amd?(r=Object.values(r),define(e,r,n)):"undefined"!=typeof module&&module.exports?(r=Object.keys(r).map((e=>require(e))),module.exports=n(...r)):(r=Object.values(r).map((e=>o[e])),o[e]=n(...r))}("CLI","undefined"!=typeof globalThis?globalThis:"undefined"!=typeof global?global:"undefined"!=typeof window?window:"undefined"!=typeof self?self:new Function("return this")(),{path:"NodePath",fs:"NodeFS",dotenv:"DotEnv",micromatch:"MicroMatch",minimist:"Minimist",mkdirp:"MkDirP","recursive-readdir-sync":"RecursiveReaddirSync",terser:"Terser","./index.js":"Mz","./helpers.js":"Helpers"},(function DEF(e,o,r,n,t,i,l,s,d,c){"use strict";var u,a=e,p=o,f=r,m=n,h=t,b=i,g=l,y=s,{build:M,bundleUMD:v,umdIndex:w,esmIndex:P,defaultLibConfig:D}=d,{expandHomeDir:E,rootRelativePath:$,qualifyDepPaths:S,isDirectory:U,checkPath:k,generateName:F}=c;f.config();var T=h(process.argv.slice(2),{boolean:["help","version","build-esm","build-umd","recursive","minify"],string:["config","from","to","bundle-umd","prepend"],alias:{config:"c",recursive:"r","build-esm":"e","build-umd":"u","bundle-umd":"b","dep-map":"m",minify:"n",prepend:"p"},default:{help:!1,version:!1,recursive:!1,"build-esm":!1,"build-umd":!1,minify:!1,prepend:""}}),C=Boolean(T.config||process.env.RCPATH),I=Boolean(T["dep-map"]||process.env.DEPMAPPATH),A=resolvePath(T.config||process.env.RCPATH||"./.mzrc"),j=resolvePath(T["dep-map"]||process.env.DEPMAPPATH||"./package.json"),H=defaultCLIConfig();let O={};async function CLI(e="0.0.0?"){if(u=e,function loadConfig(){var e;try{e=p.readFileSync(A,"utf-8")}catch(o){e=""}try{e=JSON.parse(e)}catch(e){if(C)return showError(`Invalid config: ${A}`,!0)}return H=D(defaultCLIConfig(e)),function checkArgsAndConfig(){if(T.help)return void printHelp();if(T.version)return void function printVersion(){console.log(`v${u}`)}();if(!H.buildESM&&!H.buildUMD)return showError("Must select at least one output format (ESM or UMD).",!0);if(!k(H.from))return showError(`Input directory (${H.from}) is missing or inaccessible.`);if(!k(H.to)){if(!/\.mz-build$/.test(H.to))return showError(`Output directory (${H.to}) is missing or inaccessible.`);if(!0!==mkdir(H.to))return showError(`Default output directory (${H.to}) could not be created.`);if(H.buildESM){let e=a.join(H.to,"esm");if(!k(e)&&!0!==mkdir(e))return showError(`Output directory (${e}) could not be created.`)}if(H.buildUMD){let e=a.join(H.to,"umd");if(!k(e)&&!0!==mkdir(e))return showError(`Output directory (${e}) could not be created.`)}}if(!H.depMap)if(k(H.depMapPath)){let e;try{if(e=JSON.parse(p.readFileSync(H.depMapPath,"utf-8")),/package\.json$/.test(H.depMapPath)&&(e=e["mz-dependencies"],(!e||"object"!=typeof e)&&H.buildUMD))throw!0}catch(e){return showError(`Invalid/missing dependency map (${H.depMapPath}).`)}H.depMap=e}else{if(I)return showError(`Dependency map (${H.depMapPath}) is missing or inaccessible.`);if(H.buildUMD)return showError("UMD build format requires dependency map.");H.depMap={}}return!0}()}()){var o={};if(H.depMap){let e=resolvePath(H.from);e=U(e)?e:a.dirname(e),o=S(H.depMap,e)}var r=function getInputFiles(){var e;if(U(H.from))if(H.recursive)try{e=g(H.from)}catch(e){return showError(`Failed scanning for input files (${H.from})`)}else e=p.readdirSync(H.from).filter((function skipDirs(e){return!U(e)}));else e=[H.from],H.from=a.dirname(H.from);Array.isArray(H.skip)&&H.skip.length>0&&(e=e.filter((function skipFiles(e){var o=0==m(e,H.skip).length;return!o&&H.copyOnSkip&&(H.copyFiles=H.copyFiles||[],H.copyFiles.push(e)),o})));return e=e.map((function fixPaths(e){return[a.resolve(H.from),$(H.from,e)]}))}();for(let[,e]of r)e in o||(o[e]=F());var n=[],t=[];try{for(let[e,i]of r){let r,l=p.readFileSync(a.join(e,i),"utf-8");try{r=M(H,i,l,o),o=r.esm?r.esm.depMap:r.umd.depMap}catch(o){throw new Error(`${o.toString()} (${a.join(e,i)}) `)}r.umd&&(H.bundleUMDPath||H.generateIndex)&&n.push(r.umd),r.esm&&H.generateIndex&&t.push(r.esm);for(let e of["esm","umd"])if(r[e]){let o=a.join(H.to,e,r[e].pathStr),n=a.dirname(o);if(!0!==mkdir(n))throw new Error(`Output directory (${n}) could not be created.`);let t=await processContents(r[e].code,a.basename(o));try{p.writeFileSync(o,t,"utf-8")}catch(e){throw new Error(`Output file (${o}) could not be created.`)}}}if(H.generateIndex){if(H.buildUMD){let e=w(H,n,o);n.push(e);let r=a.join(H.to,"umd",e.pathStr),t=await processContents(e.code,a.basename(r));try{p.writeFileSync(r,t,"utf-8")}catch(e){throw new Error(`Generated index (${r}) could not be created.`)}}if(H.buildESM){let e=P(H,t,o);t.push(e);let r=a.join(H.to,"esm",e.pathStr),n=await processContents(e.code,a.basename(r));try{p.writeFileSync(r,n,"utf-8")}catch(e){throw new Error(`Generated index (${r}) could not be created.`)}}}if(H.bundleUMDPath&&n.length>0){let e=v(H,n),o=await processContents(e.code,a.basename(H.bundleUMDPath));try{p.writeFileSync(H.bundleUMDPath,o,"utf-8")}catch(e){throw new Error(`UMD bundle (${H.bundleUMDPath}) could not be created.`)}}if(H.copyFiles&&H.copyFiles.length>0)for(let e of H.copyFiles){let o=a.resolve(H.from,e),r=$(H.from,o),n=p.readFileSync(o);for(let e of["esm","umd"])if("esm"==e&&H.buildESM||"umd"==e&&H.buildUMD){let o=a.resolve(a.join(H.to,e),r),t=a.dirname(o);if(!0!==mkdir(t))throw new Error(`While copying skipped file (${o}), directory (${t}) could not be created.`);p.writeFileSync(o,n)}}}catch(e){return showError(e)}}}async function processContents(e,o){if(T.minify){let o=await y.minify(e,{mangle:{keep_fnames:!0},compress:{keep_fnames:!0},output:{comments:/^!/}});if(!o||!o.code)throw o.error?o.error:o;e=o.code}if(""!=T.prepend){e=`${T.prepend.replace(/#FILENAME#/g,o)}${e}`}return e}function printHelp(){console.log("moduloze usage:"),console.log(" mz {OPTIONS}"),console.log(""),console.log("--help print this help"),console.log("--version print version info"),console.log("--config={PATH}, -c path to load config"),console.log(` [${A}]`),console.log("--from={PATH} scan directory for input file(s)"),console.log(` [${H.from}]`),console.log("--to={PATH} target directory for output file(s)"),console.log(` [${H.to}]`),console.log("--dep-map={PATH}, -m dependency map file"),console.log(` [${j}]`),console.log("--recursive, -r scan recursively for input files"),console.log(` [${H.recursive}]`),console.log("--build-esm, -e build ES-Modules format from input file(s)"),console.log(` [${H.buildESM}]`),console.log("--build-umd, -u build UMD format from input file(s)"),console.log(` [${H.buildUMD}]`),console.log("--bundle-umd={PATH}, -b include UMD bundle"),console.log(` [${H.bundleUMDPath||"./umd/bundle.js"}]`),console.log("--minify, -n minify output files"),console.log(` [${H.minify}]`),console.log("--prepend={TEXT}, -p prepend TEXT to each file"),console.log(` [${H.prepend}]`),console.log("")}function showError(e,o=!1){console.error(e.toString()),o&&(console.log(""),printHelp()),process.exit(1)}function defaultCLIConfig({from:e=process.env.FROMPATH,to:o=process.env.TOPATH,depMap:r,bundleUMDPath:n,skip:t=[],copyOnSkip:i=!1,copyFiles:l=[],recursive:s,buildESM:d,buildUMD:c,generateIndex:u=!1,minify:a=!1,prepend:p="",...f}={}){e=resolvePath(T.from||e||"./"),o=resolvePath(T.to||o||"./.mz-build");var m=j;return n=!!("bundle-umd"in T||n||"UMDBUNDLEPATH"in process.env)&&resolvePath(T["bundle-umd"]||n||process.env.UMDBUNDLEPATH||"./umd/bundle.js",o),{from:e,to:o,recursive:s=Boolean(T.recursive||s),buildESM:d=Boolean(T["build-esm"]||d),buildUMD:c=Boolean(T["build-umd"]||c),skip:t,copyOnSkip:i,copyFiles:l,depMap:r,depMapPath:m,bundleUMDPath:n,generateIndex:u,minify:a,prepend:p,...f}}function resolvePath(e,o=process.cwd()){return e=E(e),a.resolve(o,e)}function mkdir(e){try{return b.sync(e),!0}catch(e){return e}}return O=CLI,O.CLI=CLI,O}));