{"version":3,"sources":["../../src/swc/dir.ts"],"sourcesContent":["import { existsSync, promises } from \"fs\";\nimport { dirname, resolve } from \"path\";\nimport Piscina from \"piscina\";\nimport { CompileStatus } from \"./constants\";\nimport { CliOptions } from \"./options\";\nimport { exists, getDest } from \"./util\";\nimport handleCompile from \"./dirWorker\";\nimport {\n globSources,\n isCompilableExtension,\n splitCompilableAndCopyable,\n watchSources,\n} from \"./sources\";\n\nimport type { Options } from \"@swc/core\";\n\ndeclare module \"fs\" {\n namespace promises {\n /**\n * For node > 14 we want to use rm instead of rmdir\n * We need to augment node v12 types\n */\n function rm(dir: string, option: object): void;\n }\n}\n\nconst { mkdir, rmdir, rm, copyFile, unlink } = promises;\n\nconst recursive = { recursive: true };\n\nasync function handleCopy(\n filename: string,\n outDir: string,\n stripLeadingPaths: boolean\n) {\n const dest = getDest(filename, outDir, stripLeadingPaths);\n const dir = dirname(dest);\n\n await mkdir(dir, recursive);\n await copyFile(filename, dest);\n\n return CompileStatus.Copied;\n}\n\nasync function beforeStartCompilation(cliOptions: CliOptions) {\n const { outDir, deleteDirOnStart } = cliOptions;\n\n if (deleteDirOnStart) {\n const exists = await existsSync(outDir);\n if (exists) {\n rm ? await rm(outDir, recursive) : await rmdir(outDir, recursive);\n }\n }\n}\n\nasync function initialCompilation(cliOptions: CliOptions, swcOptions: Options) {\n const {\n includeDotfiles,\n filenames,\n copyFiles,\n extensions,\n outDir,\n outFileExtension,\n stripLeadingPaths,\n sync,\n quiet,\n watch,\n only,\n ignore,\n } = cliOptions;\n\n const results = new Map();\n\n const start = process.hrtime();\n const sourceFiles = await globSources(\n filenames,\n only,\n ignore,\n includeDotfiles\n );\n const [compilable, copyable] = splitCompilableAndCopyable(\n sourceFiles,\n extensions,\n copyFiles\n );\n\n if (sync) {\n for (const filename of compilable) {\n try {\n const result = await handleCompile({\n filename,\n outDir,\n sync,\n cliOptions,\n swcOptions,\n outFileExtension,\n });\n results.set(filename, result);\n } catch (err: any) {\n console.error(err.message);\n results.set(filename, CompileStatus.Failed);\n }\n }\n for (const filename of copyable) {\n try {\n const result = await handleCopy(\n filename,\n outDir,\n stripLeadingPaths\n );\n results.set(filename, result);\n } catch (err: any) {\n console.error(err.message);\n results.set(filename, CompileStatus.Failed);\n }\n }\n } else {\n const workers = new Piscina({\n filename: resolve(__dirname, \"./dirWorker.js\"),\n maxThreads: cliOptions.workers,\n concurrentTasksPerWorker: 2,\n });\n\n await Promise.all([\n Promise.allSettled(\n compilable.map(filename =>\n workers\n .run({\n filename,\n outDir,\n sync,\n cliOptions,\n swcOptions,\n outFileExtension,\n })\n .catch(err => {\n console.error(err.message);\n throw err;\n })\n )\n ),\n Promise.allSettled(\n copyable.map(file =>\n handleCopy(file, outDir, stripLeadingPaths)\n )\n ),\n ]).then(([compiled, copied]) => {\n compiled.forEach((result, index) => {\n const filename = compilable[index];\n if (result.status === \"fulfilled\") {\n results.set(filename, result.value);\n } else {\n results.set(filename, CompileStatus.Failed);\n }\n });\n\n copied.forEach((result, index) => {\n const filename = copyable[index];\n if (result.status === \"fulfilled\") {\n results.set(filename, result.value);\n } else {\n results.set(filename, CompileStatus.Failed);\n }\n });\n });\n }\n const end = process.hrtime(start);\n\n let failed = 0;\n let compiled = 0;\n let copied = 0;\n for (let [_, status] of results) {\n switch (status) {\n case CompileStatus.Compiled:\n compiled += 1;\n break;\n case CompileStatus.Failed:\n failed += 1;\n break;\n case CompileStatus.Copied:\n copied += 1;\n break;\n }\n }\n\n if (!quiet && compiled + copied) {\n let message = \"\";\n if (compiled) {\n message += `Successfully compiled: ${compiled} ${\n compiled > 1 ? \"files\" : \"file\"\n }`;\n }\n if (compiled && copied) {\n message += \", \";\n }\n if (copied) {\n message += `copied ${copied} ${copied > 1 ? \"files\" : \"file\"}`;\n }\n message += ` with swc (%dms)`;\n\n console.log(message, (end[1] / 1000000).toFixed(2));\n }\n\n if (failed) {\n console.log(\n `Failed to compile ${failed} ${\n failed !== 1 ? \"files\" : \"file\"\n } with swc.`\n );\n if (!watch) {\n const files = Array.from(results.entries())\n .filter(([, status]) => status === CompileStatus.Failed)\n .map(([filename, _]) => filename)\n .join(\"\\n\");\n throw new Error(`Failed to compile:\\n${files}`);\n }\n }\n}\n\nasync function watchCompilation(cliOptions: CliOptions, swcOptions: Options) {\n const {\n includeDotfiles,\n filenames,\n copyFiles,\n extensions,\n outDir,\n stripLeadingPaths,\n outFileExtension,\n quiet,\n sync,\n } = cliOptions;\n\n const watcher = await watchSources(filenames, includeDotfiles);\n watcher.on(\"ready\", () => {\n if (!quiet) {\n console.info(\"Watching for file changes.\");\n }\n });\n watcher.on(\"unlink\", async filename => {\n try {\n if (isCompilableExtension(filename, extensions)) {\n await unlink(\n getDest(filename, outDir, stripLeadingPaths, \".js\")\n );\n const sourcemapPath = getDest(\n filename,\n outDir,\n stripLeadingPaths,\n \".js.map\"\n );\n const sourcemapExists = await exists(sourcemapPath);\n if (sourcemapExists) {\n await unlink(sourcemapPath);\n }\n } else if (copyFiles) {\n await unlink(getDest(filename, outDir, stripLeadingPaths));\n }\n } catch (err: any) {\n if (err.code !== \"ENOENT\") {\n console.error(err.stack);\n }\n }\n });\n for (const type of [\"add\", \"change\"]) {\n watcher.on(type, async filename => {\n if (isCompilableExtension(filename, extensions)) {\n try {\n const start = process.hrtime();\n const result = await handleCompile({\n filename,\n outDir,\n sync,\n cliOptions,\n swcOptions,\n outFileExtension,\n });\n if (!quiet && result === CompileStatus.Compiled) {\n const end = process.hrtime(start);\n console.log(\n `Successfully compiled ${filename} with swc (%dms)`,\n (end[1] / 1000000).toFixed(2)\n );\n }\n } catch (err: any) {\n console.error(err.message);\n }\n } else if (copyFiles) {\n try {\n const start = process.hrtime();\n const result = await handleCopy(\n filename,\n outDir,\n stripLeadingPaths\n );\n if (!quiet && result === CompileStatus.Copied) {\n const end = process.hrtime(start);\n console.log(\n `Successfully copied ${filename} with swc (%dms)`,\n (end[1] / 1000000).toFixed(2)\n );\n }\n } catch (err: any) {\n console.error(`Failed to copy ${filename}`);\n console.error(err.message);\n }\n }\n });\n }\n}\n\nexport default async function dir({\n cliOptions,\n swcOptions,\n}: {\n cliOptions: CliOptions;\n swcOptions: Options;\n}) {\n const { watch } = cliOptions;\n\n await beforeStartCompilation(cliOptions);\n await initialCompilation(cliOptions, swcOptions);\n\n if (watch) {\n await watchCompilation(cliOptions, swcOptions);\n }\n}\n"],"names":["dir","mkdir","rmdir","rm","copyFile","unlink","promises","recursive","handleCopy","filename","outDir","stripLeadingPaths","dest","getDest","dirname","CompileStatus","Copied","beforeStartCompilation","cliOptions","deleteDirOnStart","exists","existsSync","initialCompilation","swcOptions","includeDotfiles","filenames","copyFiles","extensions","outFileExtension","sync","quiet","watch","only","ignore","results","Map","start","process","hrtime","sourceFiles","globSources","compilable","copyable","splitCompilableAndCopyable","result","handleCompile","set","err","console","error","message","Failed","workers","Piscina","resolve","__dirname","maxThreads","concurrentTasksPerWorker","Promise","all","allSettled","map","run","catch","file","then","compiled","copied","forEach","index","status","value","end","failed","_","Compiled","log","toFixed","files","Array","from","entries","filter","join","Error","watchCompilation","watcher","watchSources","on","info","isCompilableExtension","sourcemapPath","sourcemapExists","code","stack","type"],"mappings":";;;;+BAsTA;;;eAA8BA;;;oBAtTO;sBACJ;gEACb;2BACU;sBAEE;kEACN;yBAMnB;;;;;;AAcP,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAEC,EAAE,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAQ;AAEvD,MAAMC,YAAY;IAAEA,WAAW;AAAK;AAEpC,eAAeC,WACXC,QAAgB,EAChBC,MAAc,EACdC,iBAA0B;IAE1B,MAAMC,OAAOC,IAAAA,aAAO,EAACJ,UAAUC,QAAQC;IACvC,MAAMX,MAAMc,IAAAA,aAAO,EAACF;IAEpB,MAAMX,MAAMD,KAAKO;IACjB,MAAMH,SAASK,UAAUG;IAEzB,OAAOG,wBAAa,CAACC,MAAM;AAC/B;AAEA,eAAeC,uBAAuBC,UAAsB;IACxD,MAAM,EAAER,MAAM,EAAES,gBAAgB,EAAE,GAAGD;IAErC,IAAIC,kBAAkB;QAClB,MAAMC,SAAS,MAAMC,IAAAA,cAAU,EAACX;QAChC,IAAIU,QAAQ;YACRjB,KAAK,MAAMA,GAAGO,QAAQH,aAAa,MAAML,MAAMQ,QAAQH;QAC3D;IACJ;AACJ;AAEA,eAAee,mBAAmBJ,UAAsB,EAAEK,UAAmB;IACzE,MAAM,EACFC,eAAe,EACfC,SAAS,EACTC,SAAS,EACTC,UAAU,EACVjB,MAAM,EACNkB,gBAAgB,EAChBjB,iBAAiB,EACjBkB,IAAI,EACJC,KAAK,EACLC,KAAK,EACLC,IAAI,EACJC,MAAM,EACT,GAAGf;IAEJ,MAAMgB,UAAU,IAAIC;IAEpB,MAAMC,QAAQC,QAAQC,MAAM;IAC5B,MAAMC,cAAc,MAAMC,IAAAA,oBAAW,EACjCf,WACAO,MACAC,QACAT;IAEJ,MAAM,CAACiB,YAAYC,SAAS,GAAGC,IAAAA,mCAA0B,EACrDJ,aACAZ,YACAD;IAGJ,IAAIG,MAAM;QACN,KAAK,MAAMpB,YAAYgC,WAAY;YAC/B,IAAI;gBACA,MAAMG,SAAS,MAAMC,IAAAA,kBAAa,EAAC;oBAC/BpC;oBACAC;oBACAmB;oBACAX;oBACAK;oBACAK;gBACJ;gBACAM,QAAQY,GAAG,CAACrC,UAAUmC;YAC1B,EAAE,OAAOG,KAAU;gBACfC,QAAQC,KAAK,CAACF,IAAIG,OAAO;gBACzBhB,QAAQY,GAAG,CAACrC,UAAUM,wBAAa,CAACoC,MAAM;YAC9C;QACJ;QACA,KAAK,MAAM1C,YAAYiC,SAAU;YAC7B,IAAI;gBACA,MAAME,SAAS,MAAMpC,WACjBC,UACAC,QACAC;gBAEJuB,QAAQY,GAAG,CAACrC,UAAUmC;YAC1B,EAAE,OAAOG,KAAU;gBACfC,QAAQC,KAAK,CAACF,IAAIG,OAAO;gBACzBhB,QAAQY,GAAG,CAACrC,UAAUM,wBAAa,CAACoC,MAAM;YAC9C;QACJ;IACJ,OAAO;QACH,MAAMC,UAAU,IAAIC,gBAAO,CAAC;YACxB5C,UAAU6C,IAAAA,aAAO,EAACC,WAAW;YAC7BC,YAAYtC,WAAWkC,OAAO;YAC9BK,0BAA0B;QAC9B;QAEA,MAAMC,QAAQC,GAAG,CAAC;YACdD,QAAQE,UAAU,CACdnB,WAAWoB,GAAG,CAACpD,CAAAA,WACX2C,QACKU,GAAG,CAAC;oBACDrD;oBACAC;oBACAmB;oBACAX;oBACAK;oBACAK;gBACJ,GACCmC,KAAK,CAAChB,CAAAA;oBACHC,QAAQC,KAAK,CAACF,IAAIG,OAAO;oBACzB,MAAMH;gBACV;YAGZW,QAAQE,UAAU,CACdlB,SAASmB,GAAG,CAACG,CAAAA,OACTxD,WAAWwD,MAAMtD,QAAQC;SAGpC,EAAEsD,IAAI,CAAC,CAAC,CAACC,UAAUC,OAAO;YACvBD,SAASE,OAAO,CAAC,CAACxB,QAAQyB;gBACtB,MAAM5D,WAAWgC,UAAU,CAAC4B,MAAM;gBAClC,IAAIzB,OAAO0B,MAAM,KAAK,aAAa;oBAC/BpC,QAAQY,GAAG,CAACrC,UAAUmC,OAAO2B,KAAK;gBACtC,OAAO;oBACHrC,QAAQY,GAAG,CAACrC,UAAUM,wBAAa,CAACoC,MAAM;gBAC9C;YACJ;YAEAgB,OAAOC,OAAO,CAAC,CAACxB,QAAQyB;gBACpB,MAAM5D,WAAWiC,QAAQ,CAAC2B,MAAM;gBAChC,IAAIzB,OAAO0B,MAAM,KAAK,aAAa;oBAC/BpC,QAAQY,GAAG,CAACrC,UAAUmC,OAAO2B,KAAK;gBACtC,OAAO;oBACHrC,QAAQY,GAAG,CAACrC,UAAUM,wBAAa,CAACoC,MAAM;gBAC9C;YACJ;QACJ;IACJ;IACA,MAAMqB,MAAMnC,QAAQC,MAAM,CAACF;IAE3B,IAAIqC,SAAS;IACb,IAAIP,WAAW;IACf,IAAIC,SAAS;IACb,KAAK,IAAI,CAACO,GAAGJ,OAAO,IAAIpC,QAAS;QAC7B,OAAQoC;YACJ,KAAKvD,wBAAa,CAAC4D,QAAQ;gBACvBT,YAAY;gBACZ;YACJ,KAAKnD,wBAAa,CAACoC,MAAM;gBACrBsB,UAAU;gBACV;YACJ,KAAK1D,wBAAa,CAACC,MAAM;gBACrBmD,UAAU;gBACV;QACR;IACJ;IAEA,IAAI,CAACrC,SAASoC,WAAWC,QAAQ;QAC7B,IAAIjB,UAAU;QACd,IAAIgB,UAAU;YACVhB,WAAW,CAAC,uBAAuB,EAAEgB,SAAS,CAAC,EAC3CA,WAAW,IAAI,UAAU,OAC5B,CAAC;QACN;QACA,IAAIA,YAAYC,QAAQ;YACpBjB,WAAW;QACf;QACA,IAAIiB,QAAQ;YACRjB,WAAW,CAAC,OAAO,EAAEiB,OAAO,CAAC,EAAEA,SAAS,IAAI,UAAU,OAAO,CAAC;QAClE;QACAjB,WAAW,CAAC,gBAAgB,CAAC;QAE7BF,QAAQ4B,GAAG,CAAC1B,SAAS,AAACsB,CAAAA,GAAG,CAAC,EAAE,GAAG,OAAM,EAAGK,OAAO,CAAC;IACpD;IAEA,IAAIJ,QAAQ;QACRzB,QAAQ4B,GAAG,CACP,CAAC,kBAAkB,EAAEH,OAAO,CAAC,EACzBA,WAAW,IAAI,UAAU,OAC5B,UAAU,CAAC;QAEhB,IAAI,CAAC1C,OAAO;YACR,MAAM+C,QAAQC,MAAMC,IAAI,CAAC9C,QAAQ+C,OAAO,IACnCC,MAAM,CAAC,CAAC,GAAGZ,OAAO,GAAKA,WAAWvD,wBAAa,CAACoC,MAAM,EACtDU,GAAG,CAAC,CAAC,CAACpD,UAAUiE,EAAE,GAAKjE,UACvB0E,IAAI,CAAC;YACV,MAAM,IAAIC,MAAM,CAAC,oBAAoB,EAAEN,MAAM,CAAC;QAClD;IACJ;AACJ;AAEA,eAAeO,iBAAiBnE,UAAsB,EAAEK,UAAmB;IACvE,MAAM,EACFC,eAAe,EACfC,SAAS,EACTC,SAAS,EACTC,UAAU,EACVjB,MAAM,EACNC,iBAAiB,EACjBiB,gBAAgB,EAChBE,KAAK,EACLD,IAAI,EACP,GAAGX;IAEJ,MAAMoE,UAAU,MAAMC,IAAAA,qBAAY,EAAC9D,WAAWD;IAC9C8D,QAAQE,EAAE,CAAC,SAAS;QAChB,IAAI,CAAC1D,OAAO;YACRkB,QAAQyC,IAAI,CAAC;QACjB;IACJ;IACAH,QAAQE,EAAE,CAAC,UAAU,OAAM/E;QACvB,IAAI;YACA,IAAIiF,IAAAA,8BAAqB,EAACjF,UAAUkB,aAAa;gBAC7C,MAAMtB,OACFQ,IAAAA,aAAO,EAACJ,UAAUC,QAAQC,mBAAmB;gBAEjD,MAAMgF,gBAAgB9E,IAAAA,aAAO,EACzBJ,UACAC,QACAC,mBACA;gBAEJ,MAAMiF,kBAAkB,MAAMxE,IAAAA,YAAM,EAACuE;gBACrC,IAAIC,iBAAiB;oBACjB,MAAMvF,OAAOsF;gBACjB;YACJ,OAAO,IAAIjE,WAAW;gBAClB,MAAMrB,OAAOQ,IAAAA,aAAO,EAACJ,UAAUC,QAAQC;YAC3C;QACJ,EAAE,OAAOoC,KAAU;YACf,IAAIA,IAAI8C,IAAI,KAAK,UAAU;gBACvB7C,QAAQC,KAAK,CAACF,IAAI+C,KAAK;YAC3B;QACJ;IACJ;IACA,KAAK,MAAMC,QAAQ;QAAC;QAAO;KAAS,CAAE;QAClCT,QAAQE,EAAE,CAACO,MAAM,OAAMtF;YACnB,IAAIiF,IAAAA,8BAAqB,EAACjF,UAAUkB,aAAa;gBAC7C,IAAI;oBACA,MAAMS,QAAQC,QAAQC,MAAM;oBAC5B,MAAMM,SAAS,MAAMC,IAAAA,kBAAa,EAAC;wBAC/BpC;wBACAC;wBACAmB;wBACAX;wBACAK;wBACAK;oBACJ;oBACA,IAAI,CAACE,SAASc,WAAW7B,wBAAa,CAAC4D,QAAQ,EAAE;wBAC7C,MAAMH,MAAMnC,QAAQC,MAAM,CAACF;wBAC3BY,QAAQ4B,GAAG,CACP,CAAC,sBAAsB,EAAEnE,SAAS,gBAAgB,CAAC,EACnD,AAAC+D,CAAAA,GAAG,CAAC,EAAE,GAAG,OAAM,EAAGK,OAAO,CAAC;oBAEnC;gBACJ,EAAE,OAAO9B,KAAU;oBACfC,QAAQC,KAAK,CAACF,IAAIG,OAAO;gBAC7B;YACJ,OAAO,IAAIxB,WAAW;gBAClB,IAAI;oBACA,MAAMU,QAAQC,QAAQC,MAAM;oBAC5B,MAAMM,SAAS,MAAMpC,WACjBC,UACAC,QACAC;oBAEJ,IAAI,CAACmB,SAASc,WAAW7B,wBAAa,CAACC,MAAM,EAAE;wBAC3C,MAAMwD,MAAMnC,QAAQC,MAAM,CAACF;wBAC3BY,QAAQ4B,GAAG,CACP,CAAC,oBAAoB,EAAEnE,SAAS,gBAAgB,CAAC,EACjD,AAAC+D,CAAAA,GAAG,CAAC,EAAE,GAAG,OAAM,EAAGK,OAAO,CAAC;oBAEnC;gBACJ,EAAE,OAAO9B,KAAU;oBACfC,QAAQC,KAAK,CAAC,CAAC,eAAe,EAAExC,SAAS,CAAC;oBAC1CuC,QAAQC,KAAK,CAACF,IAAIG,OAAO;gBAC7B;YACJ;QACJ;IACJ;AACJ;AAEe,eAAelD,IAAI,EAC9BkB,UAAU,EACVK,UAAU,EAIb;IACG,MAAM,EAAEQ,KAAK,EAAE,GAAGb;IAElB,MAAMD,uBAAuBC;IAC7B,MAAMI,mBAAmBJ,YAAYK;IAErC,IAAIQ,OAAO;QACP,MAAMsD,iBAAiBnE,YAAYK;IACvC;AACJ"}