babel-plugin-show-source
Version:
Explicit Function.prototype.toString() via Babel
30 lines (24 loc) • 1.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createInjectionBlockStatement = createInjectionBlockStatement;
exports.createInjectionObjectExpression = createInjectionObjectExpression;
exports.default = createInjectionStatement;
var _core = require("@babel/core");
const TO_STRING_EXCEPTION = `function() {
return null;
}`;
function createInjectionStatement(funcId, funcCode, property, removeFunction) {
if (removeFunction) {
return _core.types.variableDeclaration('const', [_core.types.variableDeclarator(_core.types.identifier(funcId), createInjectionObjectExpression(funcCode, property))]);
} else {
return _core.types.expressionStatement(_core.types.assignmentExpression('=', _core.types.memberExpression(_core.types.identifier(funcId), _core.types.identifier(property)), _core.types.functionExpression(undefined, [], createInjectionBlockStatement(funcCode))));
}
}
function createInjectionBlockStatement(funcCode) {
return _core.types.blockStatement([_core.types.returnStatement(_core.types.stringLiteral(funcCode || TO_STRING_EXCEPTION))]);
}
function createInjectionObjectExpression(funcCode, property) {
return _core.types.objectExpression([_core.types.objectMethod('method', _core.types.identifier(property), [], createInjectionBlockStatement(funcCode))]);
}