@embroider/macros
Version:
Standardized build-time macros for ember apps.
49 lines • 2.01 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isMacroConditionPath = isMacroConditionPath;
exports.default = macroCondition;
const evaluate_json_1 = require("./evaluate-json");
const error_1 = __importDefault(require("./error"));
function isMacroConditionPath(path) {
let test = path.get('test');
if (test.isCallExpression()) {
let callee = test.get('callee');
if (callee.referencesImport('@embroider/macros', 'macroCondition')) {
return true;
}
}
return false;
}
function macroCondition(conditionalPath, state) {
let args = conditionalPath.get('test').get('arguments');
if (args.length !== 1) {
throw (0, error_1.default)(conditionalPath, `macroCondition accepts exactly one argument, you passed ${args.length}`);
}
let [predicatePath] = args;
let predicate = new evaluate_json_1.Evaluator({ state }).evaluate(predicatePath);
if (!predicate.confident) {
throw (0, error_1.default)(args[0], `the first argument to macroCondition must be statically known`);
}
let consequent = conditionalPath.get('consequent');
let alternate = conditionalPath.get('alternate');
if (state.opts.mode === 'run-time' && predicate.hasRuntimeImplementation !== false) {
let callee = conditionalPath.get('test').get('callee');
callee.replaceWith(state.importUtil.import(callee, state.pathToOurAddon('runtime'), 'macroCondition'));
}
else {
let [kept, removed] = predicate.value ? [consequent.node, alternate.node] : [alternate.node, consequent.node];
if (kept) {
conditionalPath.replaceWith(kept);
}
else {
conditionalPath.remove();
}
if (removed) {
state.removed.add(removed);
}
}
}
//# sourceMappingURL=macro-condition.js.map