babel-plugin-debug-macros
Version:
Debug macros and feature flag stripping
96 lines • 13.8 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const macros_1 = __importDefault(require("./utils/macros"));
const normalize_options_1 = require("./utils/normalize-options");
const babel_import_util_1 = require("babel-import-util");
function macros(babel) {
let t = babel.types;
function buildIdentifier(value, name) {
let replacement = t.booleanLiteral(value);
t.addComment(replacement, 'trailing', ` ${name} `);
return replacement;
}
return {
name: 'babel-feature-flags-and-debug-macros',
visitor: {
ImportSpecifier(path, state) {
let importPath = path.parent.source.value;
let flagsForImport = state.opts.flags[importPath];
if (flagsForImport) {
let flagName = t.isIdentifier(path.node.imported)
? path.node.imported.name
: path.node.imported.value;
let localBindingName = path.node.local.name;
if (!(flagName in flagsForImport)) {
throw new Error(`Imported ${flagName} from ${importPath} which is not a supported flag.`);
}
let flagValue = flagsForImport[flagName];
if (flagValue === null) {
return;
}
let binding = path.scope.getBinding(localBindingName);
binding.referencePaths.forEach((p) => {
if (flagValue === '@embroider/macros') {
p.replaceWith(t.callExpression(state.util.import(p, "@embroider/macros", "isDevelopingApp"), []));
p.scope.crawl();
}
else {
p.replaceWith(buildIdentifier(flagValue, flagName));
}
});
path.remove();
path.scope.removeOwnBinding(localBindingName);
}
},
ImportDeclaration: {
exit(path, state) {
let importPath = path.node.source.value;
let flagsForImport = state.opts.flags[importPath];
// remove flag source imports when no specifiers are left
if (flagsForImport && path.get('specifiers').length === 0) {
path.remove();
}
},
},
Program: {
enter(path, state) {
// most of our plugin declares state.opts as already being normalized.
// This is the spot where we force it become so.
state.opts = (0, normalize_options_1.normalizeOptions)(state.opts);
state.util = new babel_import_util_1.ImportUtil(t, path);
this.macroBuilder = new macros_1.default(babel, state.opts, state.util);
let body = path.get('body');
body.forEach((item) => {
if (item.isImportDeclaration()) {
let importPath = item.node.source.value;
let debugToolsImport = state.opts.debugTools.debugToolsImport;
if (debugToolsImport && debugToolsImport === importPath) {
if (!item.node.specifiers.length) {
item.remove();
}
else {
this.macroBuilder.collectDebugToolsSpecifiers(item.get('specifiers'));
}
}
}
});
},
exit() {
this.macroBuilder.cleanImports();
},
},
ExpressionStatement(path) {
this.macroBuilder.build(path);
},
},
};
}
exports.default = macros;
macros.baseDir = function () {
return path_1.default.resolve(__dirname, '..', '..');
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnREFBd0I7QUFDeEIsNERBQW9DO0FBQ3BDLGlFQUE2RjtBQUc3Rix5REFBK0M7QUFRL0MsU0FBd0IsTUFBTSxDQUFDLEtBQW1CO0lBQ2hELElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFFcEIsU0FBUyxlQUFlLENBQUMsS0FBYyxFQUFFLElBQVk7UUFDbkQsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLHNDQUFzQztRQUM1QyxPQUFPLEVBQUU7WUFDUCxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUs7Z0JBQ3pCLElBQUksVUFBVSxHQUFJLElBQUksQ0FBQyxNQUE4QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ25FLElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUVsRCxJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNuQixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3dCQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTt3QkFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDN0IsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENB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Q0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO29DQUNqQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0NBQ2hCLENBQUM7cUNBQU0sQ0FBQztvQ0FDTixJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztnQ0FDeEUsQ0FBQzs0QkFDSCxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxJQUFJO29CQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ25DLENBQUM7YUFDRjtZQUVELG1CQUFtQixDQUFDLElBQUk7Z0JBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLENBQUM7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBbEdELHlCQWtHQztBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUc7SUFDZixPQUFPLGNBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBNYWNyb3MgZnJvbSAnLi91dGlscy9tYWNyb3MnO1xuaW1wb3J0IHsgVXNlck9wdGlvbnMsIE5vcm1hbGl6ZWRPcHRpb25zLCBub3JtYWxpemVPcHRpb25zIH0gZnJvbSAnLi91dGlscy9ub3JtYWxpemUtb3B0aW9ucyc7XG5pbXBvcnQgKiBhcyBCYWJlbCBmcm9tICdAYmFiZWwvY29yZSc7XG5pbXBvcnQgdHlwZSB7IHR5cGVzIGFzIHQgfSBmcm9tICdAYmFiZWwvY29yZSc7XG5pbXBvcnQgeyBJbXBvcnRVdGlsIH0gZnJvbSAnYmFiZWwtaW1wb3J0LXV0aWwnO1xuXG5pbnRlcmZhY2UgU3RhdGUge1xuICBvcHRzOiBOb3JtYWxpemVkT3B0aW9ucztcbiAgbWFjcm9CdWlsZGVyOiBNYWNyb3M7XG4gIHV0aWw6IEltcG9ydFV0aWw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1hY3JvcyhiYWJlbDogdHlwZW9mIEJhYmVsKTogQmFiZWwuUGx1Z2luT2JqPFN0YXRlPiB7XG4gIGxldCB0ID0gYmFiZWwudHlwZXM7XG5cbiAgZnVuY3Rpb24gYnVpbGRJZGVudGlmaWVyKHZhbHVlOiBib29sZWFuLCBuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcmVwbGFjZW1lbnQgPSB0LmJvb2xlYW5MaXRlcmFsKHZhbHVlKTtcbiAgICB0LmFkZENvbW1lbnQocmVwbGFjZW1lbnQsICd0cmFpbGluZycsIGAgJHtuYW1lfSBgKTtcbiAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdiYWJlbC1mZWF0dXJlLWZsYWdzLWFuZC1kZWJ1Zy1tYWNyb3MnLFxuICAgIHZpc2l0b3I6IHtcbiAgICAgIEltcG9ydFNwZWNpZmllcihwYXRoLCBzdGF0ZSkge1xuICAgICAgICBsZXQgaW1wb3J0UGF0aCA9IChwYXRoLnBhcmVudCBhcyB0LkltcG9ydERlY2xhcmF0aW9uKS5zb3VyY2UudmFsdWU7XG4gICAgICAgIGxldCBmbGFnc0ZvckltcG9ydCA9IHN0YXRlLm9wdHMuZmxhZ3NbaW1wb3J0UGF0aF07XG5cbiAgICAgICAgaWYgKGZsYWdzRm9ySW1wb3J0KSB7XG4gICAgICAgICAgbGV0IGZsYWdOYW1lID0gdC5pc0lkZW50aWZpZXIocGF0aC5ub2RlLmltcG9ydGVkKVxuICAgICAgICAgICAgPyBwYXRoLm5vZGUuaW1wb3J0ZWQubmFtZVxuICAgICAgICAgICAgOiBwYXRoLm5vZGUuaW1wb3J0ZWQudmFsdWU7XG4gICAgICAgICAgbGV0IGxvY2FsQmluZGluZ05hbWUgPSBwYXRoLm5vZGUubG9jYWwubmFtZTtcblxuICAgICAgICAgIGlmICghKGZsYWdOYW1lIGluIGZsYWdzRm9ySW1wb3J0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgSW1wb3J0ZWQgJHtmbGFnTmFtZX0gZnJvbSAke2ltcG9ydFBhdGh9IHdoaWNoIGlzIG5vdCBhIHN1cHBvcnRlZCBmbGFnLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGZsYWdWYWx1ZSA9IGZsYWdzRm9ySW1wb3J0W2ZsYWdOYW1lXTtcbiAgICAgICAgICBpZiAoZmxhZ1ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGJpbmRpbmcgPSBwYXRoLnNjb3BlLmdldEJpbmRpbmcobG9jYWxCaW5kaW5nTmFtZSkhO1xuXG4gICAgICAgICAgYmluZGluZy5yZWZlcmVuY2VQYXRocy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICBpZiAoZmxhZ1ZhbHVlID09PSAnQGVtYnJvaWRlci9tYWNyb3MnKSB7XG4gICAgICAgICAgICAgIHAucmVwbGFjZVdpdGgodC5jYWxsRXhwcmVzc2lvbihzdGF0ZS51dGlsLmltcG9ydChwLCBcIkBlbWJyb2lkZXIvbWFjcm9zXCIsIFwiaXNEZXZlbG9waW5nQXBwXCIpLCBbXSkpXG4gICAgICAgICAgICAgIHAuc2NvcGUuY3Jhd2woKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHAucmVwbGFjZVdpdGgoYnVpbGRJZGVudGlmaWVyKGZsYWdWYWx1ZSwgZmxhZ05hbWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHBhdGgucmVtb3ZlKCk7XG4gICAgICAgICAgcGF0aC5zY29wZS5yZW1vdmVPd25CaW5kaW5nKGxvY2FsQmluZGluZ05hbWUpO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBJbXBvcnREZWNsYXJhdGlvbjoge1xuICAgICAgICBleGl0KHBhdGgsIHN0YXRlKSB7XG4gICAgICAgICAgbGV0IGltcG9ydFBhdGggPSBwYXRoLm5vZGUuc291cmNlLnZhbHVlO1xuICAgICAgICAgIGxldCBmbGFnc0ZvckltcG9ydCA9IHN0YXRlLm9wdHMuZmxhZ3NbaW1wb3J0UGF0aF07XG5cbiAgICAgICAgICAvLyByZW1vdmUgZmxhZyBzb3VyY2UgaW1wb3J0cyB3aGVuIG5vIHNwZWNpZmllcnMgYXJlIGxlZnRcbiAgICAgICAgICBpZiAoZmxhZ3NGb3JJbXBvcnQgJiYgcGF0aC5nZXQoJ3NwZWNpZmllcnMnKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHBhdGgucmVtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgUHJvZ3JhbToge1xuICAgICAgICBlbnRlcihwYXRoLCBzdGF0ZSkge1xuICAgICAgICAgIC8vIG1vc3Qgb2Ygb3VyIHBsdWdpbiBkZWNsYXJlcyBzdGF0ZS5vcHRzIGFzIGFscmVhZHkgYmVpbmcgbm9ybWFsaXplZC5cbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBzcG90IHdoZXJlIHdlIGZvcmNlIGl0IGJlY29tZSBzby5cbiAgICAgICAgICBzdGF0ZS5vcHRzID0gbm9ybWFsaXplT3B0aW9ucyhzdGF0ZS5vcHRzIGFzIHVua25vd24gYXMgVXNlck9wdGlvbnMpO1xuICAgICAgICAgIHN0YXRlLnV0aWwgPSBuZXcgSW1wb3J0VXRpbCh0LCBwYXRoKVxuICAgICAgICAgIHRoaXMubWFjcm9CdWlsZGVyID0gbmV3IE1hY3JvcyhiYWJlbCwgc3RhdGUub3B0cywgc3RhdGUudXRpbCk7XG5cbiAgICAgICAgICBsZXQgYm9keSA9IHBhdGguZ2V0KCdib2R5Jyk7XG5cbiAgICAgICAgICBib2R5LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmlzSW1wb3J0RGVjbGFyYXRpb24oKSkge1xuICAgICAgICAgICAgICBsZXQgaW1wb3J0UGF0aCA9IGl0ZW0ubm9kZS5zb3VyY2UudmFsdWU7XG5cbiAgICAgICAgICAgICAgbGV0IGRlYnVnVG9vbHNJbXBvcnQgPSBzdGF0ZS5vcHRzLmRlYnVnVG9vbHMuZGVidWdUb29sc0ltcG9ydDtcblxuICAgICAgICAgICAgICBpZiAoZGVidWdUb29sc0ltcG9ydCAmJiBkZWJ1Z1Rvb2xzSW1wb3J0ID09PSBpbXBvcnRQYXRoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtLm5vZGUuc3BlY2lmaWVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW0ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWFjcm9CdWlsZGVyLmNvbGxlY3REZWJ1Z1Rvb2xzU3BlY2lmaWVycyhpdGVtLmdldCgnc3BlY2lmaWVycycpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBleGl0KCkge1xuICAgICAgICAgIHRoaXMubWFjcm9CdWlsZGVyLmNsZWFuSW1wb3J0cygpO1xuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgRXhwcmVzc2lvblN0YXRlbWVudChwYXRoKSB7XG4gICAgICAgIHRoaXMubWFjcm9CdWlsZGVyLmJ1aWxkKHBhdGgpO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG5tYWNyb3MuYmFzZURpciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicpO1xufTtcbiJdfQ==