UNPKG

st-bundle

Version:

CLI for watching and bundling SpringType projects.

117 lines (116 loc) 5.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const astring_1 = require("astring"); const meriyah = require("meriyah"); const sourceMapModule = require("source-map"); const ast_1 = require("../../utils/ast"); const transformUtils_1 = require("../transformUtils"); const exportDefaultDeclaration_1 = require("./exportDefaultDeclaration"); const importDeclaration_1 = require("./importDeclaration"); const namedDeclaration_1 = require("./namedDeclaration"); const TrasnformContext_1 = require("./TrasnformContext"); function parseAst(contents, options) { let opts = Object.assign({ jsx: true, next: false, module: true }, (options || {})); return meriyah.parse(contents, opts); } exports.parseAst = parseAst; function fastTransform(opts) { const ast = opts.ast ? opts.ast : parseAst(opts.input, { loc: opts.sourceMaps }); const ctx = TrasnformContext_1.createTransformContext(opts); ast_1.fastWalk(ast, { withScope: true, visit: (node, props, context) => { let { parent, prop, idx } = props; switch (node.type) { case 'ExportAllDeclaration': const { type, expression } = transformUtils_1.createModuleExportsAssign(node.source.value); node.type = type; node.expression = expression; delete node.source; break; case 'ExportDefaultDeclaration': exportDefaultDeclaration_1.handleExportDefaultDeclaration(ctx, node, parent, prop, idx, context); break; case 'ExportNamedDeclaration': namedDeclaration_1.exportNamedDeclaration(ctx, node, parent, prop, idx, context); break; case 'ImportDeclaration': importDeclaration_1.onImportDeclaration(ctx, node, parent, prop, idx); break; default: const reqStatement = transformUtils_1.isRequireStatement(node, parent); if (reqStatement) { node.arguments[0].value = ctx.interceptSource(node.arguments[0].value); } if (opts.webWorkers) { const webWorkerStatement = transformUtils_1.isWorkerStatement(node); if (webWorkerStatement) { const item = opts.webWorkers.find(item => item.path === webWorkerStatement.value && item.type === webWorkerStatement.type); if (item) { node.arguments[0].value = item.bundlePath; } } } const shortHand = transformUtils_1.isShortHandIdentifier(node, parent); if (shortHand) { if (ctx.tracedImportSpecifiers[shortHand.node.name]) { // if it belongs to a function "someFunc(foo){}" if (ctx.tracedImportSpecifiers[shortHand.node.name].nodes) { if (context && context.locals.indexOf(shortHand.node.name) > -1) { return; } shortHand.parent.shorthand = false; ctx.tracedImportSpecifiers[shortHand.node.name].nodes.push({ node: shortHand.node, parent: shortHand.parent, prop: 'value', }); } return; } } if (transformUtils_1.isLocalIdentifier(node, parent)) { if (ctx.tracedImportSpecifiers[node.name]) { // if it belongs to a function "someFunc(foo){}" if (ctx.tracedImportSpecifiers[node.name].nodes) { if (context && context.locals.indexOf(node.name) > -1) { return; } ctx.tracedImportSpecifiers[node.name].nodes.push({ node, parent, prop, idx }); } } else { if (parent.type !== 'VariableDeclarator' && ctx.undefinedExports.indexOf(node.name) > -1) { if (context && context.locals.indexOf(node.name) > -1) { break; } if (parent && prop) { ctx.toReplace(parent, prop, idx, transformUtils_1.createExportsExpression(node.name)); return; } } } } break; } }, }); ctx.postWork(ast); let map; if (opts.sourceMaps) { map = new sourceMapModule.SourceMapGenerator({ file: 'script.js', }); } const code = astring_1.generate(ast, { ecmaVersion: 7, sourceMap: map }); let jsonSourceMaps; if (opts.sourceMaps) { jsonSourceMaps = map.toJSON(); if (!jsonSourceMaps.sourcesContent) { delete jsonSourceMaps.file; jsonSourceMaps.sourcesContent = [opts.input]; } } return { code, sourceMap: jsonSourceMaps }; } exports.fastTransform = fastTransform;