st-bundle
Version:
CLI for watching and bundling SpringType projects.
50 lines (49 loc) • 2.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const ts = require("typescript");
const isRequireCall_1 = require("../transform/isRequireCall");
function visitStatementNode(node, replacer) {
if (isRequireCall_1.isRequireCall(node)) {
const replacement = replacer(node.arguments[0].text);
if (replacement) {
node.arguments[0] = ts.createStringLiteral(replacement);
}
}
}
exports.visitStatementNode = visitStatementNode;
function moduleTransformer(props) {
return context => {
// TODO: Abstract this logic out to re-use one common transformer for production and development
const visit = node => {
if (props.webWorkers) {
if (ts.isNewExpression(node)) {
const newText = node.expression.getText();
if (newText === 'Worker' || newText === 'SharedWorker') {
if (node.arguments.length === 1) {
const firstArg = node.arguments[0];
const statement = firstArg['text'];
// map item
const item = props.webWorkers.find(item => {
return item.path === statement && item.type === newText;
});
if (item) {
return ts.createNew(ts.createIdentifier(newText), undefined, [ts.createStringLiteral(item.bundlePath)]);
}
}
}
}
}
else {
visitStatementNode(node, statement => {
const replacement = props.replacements.find(item => item.fromStatement === statement);
if (replacement) {
return replacement.toStatement;
}
});
}
return ts.visitEachChild(node, child => visit(child), context);
};
return node => ts.visitNode(node, visit);
};
}
exports.moduleTransformer = moduleTransformer;