reboost
Version:
A super fast dev server for rapid web development
63 lines (62 loc) • 2.53 kB
JavaScript
;
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;