babel-plugin-show-source
Version:
Explicit Function.prototype.toString() via Babel
59 lines (48 loc) • 2.04 kB
JavaScript
;
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;