fuse-box
Version:
Fuse-Box a bundler that does it right
56 lines (50 loc) • 2.38 kB
text/typescript
import { each } from "realm-utils";
import { RequireStatement } from "../../core/nodes/RequireStatement";
import { FileAbstraction } from "../../core/FileAbstraction";
import { QuantumCore } from "../QuantumCore";
export class StatementModification {
public static perform(core: QuantumCore, file: FileAbstraction): Promise<void> {
return each(file.requireStatements, (statement: RequireStatement) => {
if (statement.isComputed) {
let customSolution = core.getCustomSolution(file);
if (customSolution && !core.api.hashesUsed()) {
if (customSolution.rules) {
customSolution.rules.fn(statement, core);
}
statement.setFunctionName("$fsx.p");
} else {
if (core.opts.isTargetServer() || core.opts.isTargetUniveral()) {
core.api.useServerRequire();
statement.setFunctionName('$fsx.s');
} else {
statement.setFunctionName('$fsx.r');
}
}
} else {
let resolvedFile = statement.resolve();
if (resolvedFile) {
if (resolvedFile.isProcessPolyfill() && !core.opts.shouldBundleProcessPolyfill()) {
return statement.removeWithIdentifier();
}
if (!resolvedFile.dependents.has(file)) {
resolvedFile.dependents.add(file);
}
resolvedFile.amountOfReferences++;
// trying to setup hoisting here
if (statement.identifier) {
file.registerHoistedIdentifiers(statement.identifier, statement, resolvedFile);
}
statement.setFunctionName('$fsx.r');
statement.setValue(resolvedFile.getID());
} else {
if (core.opts.isTargetServer() || core.opts.isTargetUniveral()) {
core.api.useServerRequire();
statement.setFunctionName('$fsx.s');
} else {
statement.setFunctionName('$fsx.r');
}
}
}
});
}
}