babel-plugin-debug-macros
Version:
Debug macros and feature flag stripping
67 lines • 9.78 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const builder_1 = __importDefault(require("./builder"));
const babel_type_helpers_1 = require("./babel-type-helpers");
const SUPPORTED_MACROS = ['assert', 'deprecate', 'warn', 'log'];
class Macros {
constructor(babel, options, util) {
this.localDebugBindings = [];
this.debugHelpers = options.externalizeHelpers;
this.builder = new builder_1.default(babel.types, util, {
module: this.debugHelpers?.module,
global: this.debugHelpers?.global,
assertPredicateIndex: options.debugTools && options.debugTools.assertPredicateIndex,
isDebug: options.debugTools.isDebug,
});
}
/**
* Collects the import bindings for the debug tools.
*/
collectDebugToolsSpecifiers(specifiers) {
specifiers.forEach((specifier) => {
if (specifier.node.type === 'ImportSpecifier' &&
SUPPORTED_MACROS.indexOf((0, babel_type_helpers_1.name)(specifier.node.imported)) > -1) {
this.localDebugBindings.push(specifier.get('local'));
}
});
}
/**
* Expands the given expression, if it is simple CallExpression statement for the debug tools.
*/
build(path) {
if (!(0, babel_type_helpers_1.isCallStatementPath)(path)) {
return;
}
if (this.localDebugBindings.some((b) => b.node.name === path.node.expression.callee.name)) {
let imported = (0, babel_type_helpers_1.name)(path.scope.getBinding(path.node.expression.callee.name).path.node
.imported);
this.builder[`${imported}`](path);
}
}
/**
* Removes obsolete import bindings for the debug tools.
*/
cleanImports() {
if (!this.debugHelpers?.module) {
if (this.localDebugBindings.length > 0) {
let importPath = this.localDebugBindings[0].findParent((p) => p.isImportDeclaration());
if (importPath === null) {
// import declaration in question seems to have already been removed
return;
}
let specifiers = importPath.get('specifiers');
if (specifiers.length === this.localDebugBindings.length) {
this.localDebugBindings[0].parentPath.parentPath.remove();
}
else {
this.localDebugBindings.forEach((binding) => binding.parentPath.remove());
}
}
}
}
}
exports.default = Macros;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjcm9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL21hY3Jvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHdEQUFnQztBQU1oQyw2REFBaUU7QUFJakUsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBR2hFLE1BQXFCLE1BQU07SUFLekIsWUFBWSxLQUFtQixFQUFFLE9BQTBCLEVBQUUsSUFBZ0I7UUFIckUsdUJBQWtCLEdBQTZCLEVBQUUsQ0FBQztRQUl4RCxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztRQUMvQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksaUJBQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtZQUM1QyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNO1lBQ2pDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU07WUFDakMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLG9CQUFvQjtZQUNuRixPQUFPLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPO1NBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILDJCQUEyQixDQUN6QixVQUVHO1FBRUgsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQy9CLElBQ0UsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssaUJBQWlCO2dCQUN6QyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBQSx5QkFBSSxFQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDNUQsQ0FBQztnQkFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsSUFBcUM7UUFDekMsSUFBSSxDQUFDLElBQUEsd0NBQW1CLEVBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDMUYsSUFBSSxRQUFRLEdBQUcsSUFBQSx5QkFBSSxFQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFFLENBQUMsSUFBSSxDQUFDLElBQTBCO2lCQUN0RixRQUFRLENBQ00sQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQy9CLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzNELENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxDQUNnQixDQUFDO2dCQUMxQyxJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDeEIsb0VBQW9FO29CQUNwRSxPQUFPO2dCQUNULENBQUM7Z0JBQ0QsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFFOUMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDekQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzdELENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQzVFLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXhFRCx5QkF3RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbGRlciBmcm9tICcuL2J1aWxkZXInO1xuaW1wb3J0IHR5cGUgKiBhcyBCYWJlbCBmcm9tICdAYmFiZWwvY29yZSc7XG5pbXBvcnQgdHlwZSB7IHR5cGVzIGFzIHQgfSBmcm9tICdAYmFiZWwvY29yZSc7XG5cbmltcG9ydCB0eXBlIHsgTm9ybWFsaXplZE9wdGlvbnMgfSBmcm9tICcuL25vcm1hbGl6ZS1vcHRpb25zJztcbmltcG9ydCB0eXBlIHsgTm9kZVBhdGggfSBmcm9tICdAYmFiZWwvY29yZSc7XG5pbXBvcnQgeyBpc0NhbGxTdGF0ZW1lbnRQYXRoLCBuYW1lIH0gZnJvbSAnLi9iYWJlbC10eXBlLWhlbHBlcnMnO1xuaW1wb3J0IHR5cGUgeyBJbXBvcnRVdGlsIH0gZnJvbSAnYmFiZWwtaW1wb3J0LXV0aWwnO1xuXG5cbmNvbnN0IFNVUFBPUlRFRF9NQUNST1MgPSBbJ2Fzc2VydCcsICdkZXByZWNhdGUnLCAnd2FybicsICdsb2cnXTtcbnR5cGUgU3VwcG9ydGVkTWFjcm8gPSAnYXNzZXJ0JyB8ICdkZXByZWNhdGUnIHwgJ3dhcm4nIHwgJ2xvZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hY3JvcyB7XG4gIHByaXZhdGUgZGVidWdIZWxwZXJzOiBOb3JtYWxpemVkT3B0aW9uc1snZXh0ZXJuYWxpemVIZWxwZXJzJ107XG4gIHByaXZhdGUgbG9jYWxEZWJ1Z0JpbmRpbmdzOiBOb2RlUGF0aDx0LklkZW50aWZpZXI+W10gPSBbXTtcbiAgcHJpdmF0ZSBidWlsZGVyOiBCdWlsZGVyO1xuXG4gIGNvbnN0cnVjdG9yKGJhYmVsOiB0eXBlb2YgQmFiZWwsIG9wdGlvbnM6IE5vcm1hbGl6ZWRPcHRpb25zLCB1dGlsOiBJbXBvcnRVdGlsKSB7XG4gICAgdGhpcy5kZWJ1Z0hlbHBlcnMgPSBvcHRpb25zLmV4dGVybmFsaXplSGVscGVycztcbiAgICB0aGlzLmJ1aWxkZXIgPSBuZXcgQnVpbGRlcihiYWJlbC50eXBlcywgdXRpbCwge1xuICAgICAgbW9kdWxlOiB0aGlzLmRlYnVnSGVscGVycz8ubW9kdWxlLFxuICAgICAgZ2xvYmFsOiB0aGlzLmRlYnVnSGVscGVycz8uZ2xvYmFsLFxuICAgICAgYXNzZXJ0UHJlZGljYXRlSW5kZXg6IG9wdGlvbnMuZGVidWdUb29scyAmJiBvcHRpb25zLmRlYnVnVG9vbHMuYXNzZXJ0UHJlZGljYXRlSW5kZXgsXG4gICAgICBpc0RlYnVnOiBvcHRpb25zLmRlYnVnVG9vbHMuaXNEZWJ1ZyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0cyB0aGUgaW1wb3J0IGJpbmRpbmdzIGZvciB0aGUgZGVidWcgdG9vbHMuXG4gICAqL1xuICBjb2xsZWN0RGVidWdUb29sc1NwZWNpZmllcnMoXG4gICAgc3BlY2lmaWVyczogTm9kZVBhdGg8XG4gICAgICB0LkltcG9ydFNwZWNpZmllciB8IHQuSW1wb3J0RGVmYXVsdFNwZWNpZmllciB8IHQuSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyXG4gICAgPltdXG4gICkge1xuICAgIHNwZWNpZmllcnMuZm9yRWFjaCgoc3BlY2lmaWVyKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHNwZWNpZmllci5ub2RlLnR5cGUgPT09ICdJbXBvcnRTcGVjaWZpZXInICYmXG4gICAgICAgIFNVUFBPUlRFRF9NQUNST1MuaW5kZXhPZihuYW1lKHNwZWNpZmllci5ub2RlLmltcG9ydGVkKSkgPiAtMVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubG9jYWxEZWJ1Z0JpbmRpbmdzLnB1c2goc3BlY2lmaWVyLmdldCgnbG9jYWwnKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kcyB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiwgaWYgaXQgaXMgc2ltcGxlIENhbGxFeHByZXNzaW9uIHN0YXRlbWVudCBmb3IgdGhlIGRlYnVnIHRvb2xzLlxuICAgKi9cbiAgYnVpbGQocGF0aDogTm9kZVBhdGg8dC5FeHByZXNzaW9uU3RhdGVtZW50Pikge1xuICAgIGlmICghaXNDYWxsU3RhdGVtZW50UGF0aChwYXRoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2NhbERlYnVnQmluZGluZ3Muc29tZSgoYikgPT4gYi5ub2RlLm5hbWUgPT09IHBhdGgubm9kZS5leHByZXNzaW9uLmNhbGxlZS5uYW1lKSkge1xuICAgICAgbGV0IGltcG9ydGVkID0gbmFtZShcbiAgICAgICAgKHBhdGguc2NvcGUuZ2V0QmluZGluZyhwYXRoLm5vZGUuZXhwcmVzc2lvbi5jYWxsZWUubmFtZSkhLnBhdGgubm9kZSBhcyB0LkltcG9ydFNwZWNpZmllcilcbiAgICAgICAgICAuaW1wb3J0ZWRcbiAgICAgICkgYXMgU3VwcG9ydGVkTWFjcm87XG4gICAgICB0aGlzLmJ1aWxkZXJbYCR7aW1wb3J0ZWR9YF0ocGF0aCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgb2Jzb2xldGUgaW1wb3J0IGJpbmRpbmdzIGZvciB0aGUgZGVidWcgdG9vbHMuXG4gICAqL1xuICBjbGVhbkltcG9ydHMoKSB7XG4gICAgaWYgKCF0aGlzLmRlYnVnSGVscGVycz8ubW9kdWxlKSB7XG4gICAgICBpZiAodGhpcy5sb2NhbERlYnVnQmluZGluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgaW1wb3J0UGF0aCA9IHRoaXMubG9jYWxEZWJ1Z0JpbmRpbmdzWzBdLmZpbmRQYXJlbnQoKHApID0+XG4gICAgICAgICAgcC5pc0ltcG9ydERlY2xhcmF0aW9uKClcbiAgICAgICAgKSBhcyBOb2RlUGF0aDx0LkltcG9ydERlY2xhcmF0aW9uPiB8IG51bGw7XG4gICAgICAgIGlmIChpbXBvcnRQYXRoID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gaW1wb3J0IGRlY2xhcmF0aW9uIGluIHF1ZXN0aW9uIHNlZW1zIHRvIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWRcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNwZWNpZmllcnMgPSBpbXBvcnRQYXRoLmdldCgnc3BlY2lmaWVycycpO1xuXG4gICAgICAgIGlmIChzcGVjaWZpZXJzLmxlbmd0aCA9PT0gdGhpcy5sb2NhbERlYnVnQmluZGluZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5sb2NhbERlYnVnQmluZGluZ3NbMF0ucGFyZW50UGF0aC5wYXJlbnRQYXRoIS5yZW1vdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvY2FsRGVidWdCaW5kaW5ncy5mb3JFYWNoKChiaW5kaW5nKSA9PiBiaW5kaW5nLnBhcmVudFBhdGgucmVtb3ZlKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=