fuse-box
Version:
Fuse-Box a bundler that does it right
56 lines (53 loc) • 2.51 kB
text/typescript
import { File } from "../../core/File";
import * as fs from "fs";
/**
*
* Fixing import() and bundle split for development purposes
*
* @export
* @class DynamicImportStatement
*/
export class DynamicImportStatement {
public static onNode(file: File, node: any, parent: any) {
const analysis = file.analysis;
if (node.type === "CallExpression" && node.callee) {
if (node.callee.type === "Identifier" && node.callee.name === "$fsmp$") {
let arg1 = node.arguments[0];
const currentValue = arg1.value;
if (analysis.nodeIsString(arg1)) {
let requireStatement = arg1.value;
if (file.context.bundle.producer) {
const producer = file.context.bundle.producer;
const splitConfig = producer.fuse.context.quantumSplitConfig;
if (splitConfig) {
const alisedByName = splitConfig.byName(requireStatement);
if (alisedByName) {
requireStatement = `~/${alisedByName}`;
}
}
}
let result = file.context.replaceAliases(requireStatement);
requireStatement = result.requireStatement;
let resolved = file.collection.pm.resolve(requireStatement, file.info.absDir);
if (resolved) {
if (resolved.isNodeModule) {
analysis.addDependency(requireStatement);
} else {
if (resolved.fuseBoxPath && fs.existsSync(resolved.absPath)) {
arg1.value = `~/${resolved.fuseBoxPath}`;
if (!file.belongsToProject()) {
arg1.value = `${file.collection.name}/${resolved.fuseBoxPath}`;
}
//analysis.add2Replacement(arg1.raw, JSON.stringify(arg1.value));
analysis.addDependency(resolved.absPath);
analysis.registerReplacement(currentValue, arg1.value);
//file.analysis.requiresRegeneration = true;
}
}
}
}
}
}
}
public static onEnd() { }
}