UNPKG

fuse-box

Version:

Fuse-Box a bundler that does it right

78 lines (76 loc) 3.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class ImportDeclaration { static onNode(file, node, parent) { const analysis = file.analysis; if (node.type === "CallExpression" && node.callee) { if (node.callee.type === "Identifier" && node.callee.name === "require") { let arg1 = node.arguments[0]; if (analysis.nodeIsString(arg1)) { let requireStatement = this.handleAliasReplacement(file, arg1.value); arg1.value = requireStatement; analysis.addDependency(requireStatement); } } } if (node.type === "ExportDefaultDeclaration") { file.es6module = true; } if (node.type === "ExportAllDeclaration") { file.es6module = true; analysis.addDependency(node.source.value); } if (node.type === "ImportDeclaration" || node.type === "ExportNamedDeclaration") { if (!file.context.rollupOptions) { file.es6module = true; } if (node.source && analysis.nodeIsString(node.source)) { let requireStatement = this.handleAliasReplacement(file, node.source.value); node.source.value = requireStatement; analysis.addDependency(requireStatement); } } } static onEnd(file) { if (file.es6module) { file.context.log.magicReason('used typescript to compile because an import was used', file.info.fuseBoxPath); const ts = require("typescript"); let tsconfg = { compilerOptions: { module: "commonjs", target: "es5" }, }; ; let result = ts.transpileModule(file.contents, tsconfg); file.contents = result.outputText; } } static handleAliasReplacement(file, requireStatement) { if (file.collection && file.collection.info && file.collection.info.browserOverrides) { const overrides = file.collection.info.browserOverrides; const pm = file.collection.pm; if (overrides) { const resolved = pm.resolve(requireStatement, file.info.absDir); const fuseBoxPath = pm.getFuseBoxPath(resolved.absPath, file.collection.entryFile.info.absDir); if (overrides[fuseBoxPath]) { requireStatement = overrides[fuseBoxPath]; file.analysis.requiresRegeneration = true; } } } if (!file.context.experimentalAliasEnabled) { return requireStatement; } const aliasCollection = file.context.aliasCollection; aliasCollection.forEach(props => { if (props.expr.test(requireStatement)) { requireStatement = requireStatement.replace(props.expr, `${props.replacement}$2`); file.analysis.requiresRegeneration = true; } }); return requireStatement; } } exports.ImportDeclaration = ImportDeclaration; //# sourceMappingURL=ImportDeclaration.js.map