UNPKG

tsbunch

Version:

A VERY basic TypeScript bundler that doesn't compile to JS

126 lines (123 loc) 6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = generateReplacedModuleCode; var shared_1 = require("./shared"); // import defaultExport from "module-name"; function replaceDefaultExport(_match, p1, p2) { return "import ".concat(p1, " = ").concat(shared_1.MODULE_PREFACE).concat((0, shared_1.getAssetName)(p2), ".").concat(shared_1.MODULE_PREFACE, "default;"); } function checkAggregatedExport(p1) { return /\* *as (\w+)/gm.exec(p1); } function checkAliasExport(p1) { return /(\w+) *as (\w+)/gm.exec(p1); } function generateAggregatedExportReplacement(nameMatch, p2) { return "import ".concat(nameMatch[1], " = ").concat(shared_1.MODULE_PREFACE).concat((0, shared_1.getAssetName)(p2), ";"); } function generateAliasExportReplacement(nameMatch, p2) { return "import ".concat(nameMatch[2], " = ").concat(shared_1.MODULE_PREFACE).concat((0, shared_1.getAssetName)(p2), ".").concat(nameMatch[1], ";"); } // import * as name from "module-name"; function replaceAggregatedExport(_match, p1, p2, _offset, string) { var isAggregatedExport = checkAggregatedExport(p1); if (isAggregatedExport) { return generateAggregatedExportReplacement(isAggregatedExport, p2); } return string; } // import { export1 } from "module-name"; // import { export1 as alias1 } from "module-name"; // import { export1 , export2 } from "module-name"; // import { export1 , export2 as alias2 , [...] } from "module-name"; function replaceNamedExport(_match, p1, p2) { var returnString = ''; var importArray = p1.split(',').map(function (str) { return str.trim(); }); importArray.forEach(function (imp, index) { var isAggregatedExport = checkAggregatedExport(imp); var isAliasExport = checkAliasExport(imp); if (isAggregatedExport) { returnString += generateAggregatedExportReplacement(isAggregatedExport, p2); } else if (isAliasExport) { returnString += generateAliasExportReplacement(isAliasExport, p2); } else if (imp !== '') { returnString += "import ".concat(imp, " = ").concat(shared_1.MODULE_PREFACE).concat((0, shared_1.getAssetName)(p2), ".").concat(imp, ";"); } if (index !== importArray.length - 1) { returnString += '\n'; } }); return returnString; } // import defaultExport, { export1 [ , [...] ] } from "module-name"; function replaceDefaultAndNamed(_match, p1, p2, p3) { var returnString = ''; returnString += replaceDefaultExport(_match, p1, p3) + '\n'; returnString += replaceNamedExport(_match, p2, p3); return returnString; } // import defaultExport, * as name from "module-name"; function replaceDefaultAndAggregated(_match, p1, p2, p3) { var returnString = ''; returnString += replaceDefaultExport(_match, p1, p3) + '\n'; returnString += replaceAggregatedExport(_match, p2, p3, 0, ''); return returnString; } function generateReplacedModuleCode(content) { /* Imports: WILL NOT WORK -- import { foo , bar } from "module-name/path/to/specific/un-exported/file"; WILL NOT WORK -- import "module-name"; WILL NOT WORK -- var promise = import("module-name"); */ var replacedModuleCode = content .replace(/import +((?:[^{}=*])+?) +from *['"]([^=;]*)['"] *;?/gm, replaceDefaultExport) .replace(/import +((?:[^{}=,])+?) +from *['"]([^=;]*)['"] *;?/gm, replaceAggregatedExport) .replace(/import *{ *([^]+?) *} *from *['"]([^;=]*)['"] *;?/gm, replaceNamedExport) .replace(/import +((?:[^{}=*])+?) *, *{ *([^]+?) *} *from *['"]([^;=]*)['"] *;?/gm, replaceDefaultAndNamed) .replace(/import +((?:[^{}=*])+?) *, +((?:[^{}=,])+?) +from *['"]([^;=]*)['"] *;?/gm, replaceDefaultAndAggregated); /* Exports: Will work out the gate: export let name1, name2, …, nameN; // also var, const export let name1 = …, name2 = …, …, nameN; // also var, const export function functionName(){...} export class ClassName {...} export const { name1, name2: bar } = o; WILL NOT WORK -- export { name1, name2, …, nameN }; WILL NOT WORK -- export { name1 as default, … }; WILL NOT WORK -- export { variable1 as name1, variable2 as name2, …, nameN }; WILL NOT WORK -- export * from …; // does not set the default export WILL NOT WORK -- export * as name1 from …; WILL NOT WORK -- export { name1, name2, …, nameN } from …; WILL NOT WORK -- export { import1 as name1, import2 as name2, …, nameN } from …; WILL NOT WORK -- export { default } from …; */ replacedModuleCode = replacedModuleCode // export default function (…) { … } // also function* // export default function name1(…) { … } // also function* // Note: Will change name .replace(/export +default +(function\*?) *\w* *\(/gm, "export $1 ".concat(shared_1.MODULE_PREFACE, "default (")) // export default class { … } // export default class name1{ … } // Note: Will change name .replace(/export +default class *\w* *{/gm, "export class ".concat(shared_1.MODULE_PREFACE, "default {")) // export default expression; .replace(/export default ([^;]*);?/gm, "export const ".concat(shared_1.MODULE_PREFACE, "default = $1;")); return replacedModuleCode; } /** * import defaultExport from "module-name"; import * as name from "module-name"; import { export1 } from "module-name"; import { export1 as alias1 } from "module-name"; import { export1 , export2 } from "module-name"; import { foo , bar } from "module-name/path/to/specific/un-exported/file"; import { export1 , export2 as alias2 , [...] } from "module-name"; import defaultExport, { export1 [ , [...] ] } from "module-name"; import defaultExport, * as name from "module-name"; import "module-name"; var promise = import("module-name"); */