UNPKG

st-bundle

Version:

CLI for watching and bundling SpringType projects.

50 lines (49 loc) 2.15 kB
"use strict"; 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;