UNPKG

st-bundle

Version:

CLI for watching and bundling SpringType projects.

96 lines (95 loc) 3.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const transformUtils_1 = require("../transformUtils"); const tracedVariable_1 = require("./tracedVariable"); function _sliceExports(ctx) { for (const item of ctx.slicedExports) { const index = item.body.indexOf(item.afterNode); item.body.splice(index + 1, 0, transformUtils_1.createModuleExports(item.exported, typeof item.local === 'string' ? { type: 'Identifier', name: item.local, } : item.local)); } } function _removeNodes(ctx) { ctx.toBeRemoved.forEach(item => { const index = item.arr.indexOf(item.node); if (index > -1) item.arr.splice(index, 1); }); } function _addExports(ast, ctx) { ctx.exported.forEach(item => { ast.body.push(transformUtils_1.createModuleExports(item.exported, typeof item.local === 'string' ? { type: 'Identifier', name: item.local, } : item.local)); }); } function _handleRequireStatements(ast, ctx) { ctx.reqStatements.forEach(item => { if (item.replaceNode) { const tree = item.replaceNode.array; const index = tree.indexOf(item.replaceNode.node); if (index > -1) { tree[index] = transformUtils_1.createRequireStatement(item.local, ctx.interceptSource(item.source)); } } else { ast.body.unshift(transformUtils_1.createRequireStatement(item.local, ctx.interceptSource(item.source))); } }); } function _replaceNodes(obj) { for (const item of obj.toBeReplaced) { const { parent, prop, idx, replacement } = item; if (idx) { parent[prop][idx] = replacement; } else { parent[prop] = replacement; } } } function createTransformContext(props) { let nameIndex = 0; const obj = { toBeReplaced: [], toBeRemoved: [], undefinedExports: [], tracedImportSpecifiers: {}, exported: [], slicedExports: [], reqStatements: [], toReplace: (parent, prop, idx, replacement) => { obj.toBeReplaced.push({ parent, prop, idx, replacement }); }, interceptSource: source => { if (!props.sourceInterceptor) { return source; } return props.sourceInterceptor(source); }, toRemove: (arr, node) => { obj.toBeRemoved.push({ arr, node }); }, generateName: () => { nameIndex++; return `__req${nameIndex}__`; }, postWork: ast => { _handleRequireStatements(ast, obj); tracedVariable_1.handleTracedImportSpecifiers(obj); _sliceExports(obj); _addExports(ast, obj); _removeNodes(obj); _replaceNodes(obj); }, }; return obj; } exports.createTransformContext = createTransformContext;