UNPKG

reboost

Version:

A super fast dev server for rapid web development

63 lines (62 loc) 2.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeEnvPlugin = exports.runTransformation = void 0; const estree_toolkit_1 = require("estree-toolkit"); const replaceStatement = (path, replaceWith) => { if (estree_toolkit_1.is.program(path.parent) && estree_toolkit_1.is.blockStatement(replaceWith)) { path.replaceWithMultiple(replaceWith.node.body); } else { path.replaceWith(replaceWith.node); } }; const evaluateParents = (parent) => { if (estree_toolkit_1.is.ifStatement(parent) || estree_toolkit_1.is.conditionalExpression(parent)) { const evaluated = estree_toolkit_1.utils.evaluateTruthy(parent.get('test')); if (evaluated == null) return; if (evaluated) { replaceStatement(parent, parent.get('consequent')); } else if (parent.has('alternate')) { replaceStatement(parent, parent.get('alternate')); } else { parent.remove(); } } else if (estree_toolkit_1.is.logicalExpression(parent) || estree_toolkit_1.is.binaryExpression(parent) || estree_toolkit_1.is.unaryExpression(parent)) { const evaluated = estree_toolkit_1.utils.evaluateTruthy(parent); if (evaluated == null) return; parent.replaceWith(estree_toolkit_1.builders.literal(evaluated)); evaluateParents(parent.parentPath); } }; const runTransformation = (programPath, mode) => { programPath.traverse({ MemberExpression(path) { if (estree_toolkit_1.is.identifier(path.node.object, { name: 'process' }) && estree_toolkit_1.is.identifier(path.node.property, { name: 'env' }) && estree_toolkit_1.is.memberExpression(path.parentPath.node) && estree_toolkit_1.is.identifier(path.parentPath.node.property, { name: 'NODE_ENV' })) { const parent = path.parentPath; parent.replaceWith(estree_toolkit_1.builders.literal(mode)); evaluateParents(parent.parentPath); } } }); }; exports.runTransformation = runTransformation; const NodeEnvPlugin = (instance) => ({ name: 'core-node-env-plugin', getCacheKey: () => instance.config.mode, transformAST(programPath) { (0, exports.runTransformation)(programPath, instance.config.mode); } }); exports.NodeEnvPlugin = NodeEnvPlugin;