UNPKG

babel-plugin-show-source

Version:

Explicit Function.prototype.toString() via Babel

59 lines (48 loc) 2.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _createInjectionStatement = _interopRequireDefault(require("./createInjectionStatement")); var _createInjectionWrapper = _interopRequireDefault(require("./createInjectionWrapper")); var _functionToString = _interopRequireDefault(require("./functionToString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function babelPluginShowSource(api, _options) { const options = { removeDirective: false, directive: 'show source', property: 'toString', removeFunction: false, ..._options }; return { visitor: { Directive(path) { const isShowSource = path.node.value.value === options.directive; if (!isShowSource) return; if (options.removeDirective) path.remove(); const func = path.parentPath.parentPath; if (func === null) return; const funcParent = func.parentPath; if (func.isFunctionDeclaration() && funcParent !== null && (funcParent.isBlockStatement() || funcParent.isProgram())) { const funcCode = (0, _functionToString.default)(func); const injectionStatement = (0, _createInjectionStatement.default)(func.node.id.name, funcCode, options.property, options.removeFunction); if (options.removeFunction) { func.replaceWith(injectionStatement); } else { func.replaceWithMultiple([func.node, injectionStatement]); } func.skip(); } else if (func.isFunctionExpression() || func.isArrowFunctionExpression()) { const funcCode = (0, _functionToString.default)(func); const newFunc = (0, _createInjectionWrapper.default)(func, funcCode, options.property, options.removeFunction); func.replaceWith(newFunc); func.skip(); } } } }; } var _default = babelPluginShowSource; exports.default = _default; module.exports = babelPluginShowSource;