UNPKG

@glimmer/compiler

Version:
102 lines (79 loc) 14.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ifUnlessInlineKeyword = ifUnlessInlineKeyword; var _syntax = require("@glimmer/syntax"); var _result = require("../../../../shared/result"); var mir = _interopRequireWildcard(require("../../../2-encoding/mir")); var _expressions = require("../../visitors/expressions"); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function assertIfUnlessInlineKeyword(type) { return function (originalNode) { var _a; var inverted = type === 'unless'; var node = originalNode.type === 'AppendContent' ? originalNode.value : originalNode; var named = node.type === 'Call' ? node.args.named : null; var positional = node.type === 'Call' ? node.args.positional : null; if (named && !named.isEmpty()) { return (0, _result.Err)((0, _syntax.generateSyntaxError)("(" + type + ") cannot receive named parameters, received " + named.entries.map(function (e) { return e.name.chars; }).join(', '), originalNode.loc)); } var condition = positional === null || positional === void 0 ? void 0 : positional.nth(0); if (!positional || !condition) { return (0, _result.Err)((0, _syntax.generateSyntaxError)("When used inline, (" + type + ") requires at least two parameters 1. the condition that determines the state of the (" + type + "), and 2. the value to return if the condition is " + (inverted ? 'false' : 'true') + ". Did not receive any parameters", originalNode.loc)); } var truthy = positional.nth(1); var falsy = positional.nth(2); if (truthy === null) { return (0, _result.Err)((0, _syntax.generateSyntaxError)("When used inline, (" + type + ") requires at least two parameters 1. the condition that determines the state of the (" + type + "), and 2. the value to return if the condition is " + (inverted ? 'false' : 'true') + ". Received only one parameter, the condition", originalNode.loc)); } if (positional.size > 3) { return (0, _result.Err)((0, _syntax.generateSyntaxError)("When used inline, (" + type + ") can receive a maximum of three positional parameters 1. the condition that determines the state of the (" + type + "), 2. the value to return if the condition is " + (inverted ? 'false' : 'true') + ", and 3. the value to return if the condition is " + (inverted ? 'true' : 'false') + ". Received " + ((_a = positional === null || positional === void 0 ? void 0 : positional.size) !== null && _a !== void 0 ? _a : 0) + " parameters", originalNode.loc)); } return (0, _result.Ok)({ condition: condition, truthy: truthy, falsy: falsy }); }; } function translateIfUnlessInlineKeyword(type) { var inverted = type === 'unless'; return function (_ref, _ref2) { var node = _ref.node, state = _ref.state; var condition = _ref2.condition, truthy = _ref2.truthy, falsy = _ref2.falsy; var conditionResult = _expressions.VISIT_EXPRS.visit(condition, state); var truthyResult = _expressions.VISIT_EXPRS.visit(truthy, state); var falsyResult = falsy ? _expressions.VISIT_EXPRS.visit(falsy, state) : (0, _result.Ok)(null); return _result.Result.all(conditionResult, truthyResult, falsyResult).mapOk(function (_ref3) { var condition = _ref3[0], truthy = _ref3[1], falsy = _ref3[2]; if (inverted) { condition = new mir.Not({ value: condition, loc: node.loc }); } return new mir.IfInline({ loc: node.loc, condition: condition, truthy: truthy, falsy: falsy }); }); }; } function ifUnlessInlineKeyword(type) { return { assert: assertIfUnlessInlineKeyword(type), translate: translateIfUnlessInlineKeyword(type) }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9wYXNzZXMvMS1ub3JtYWxpemF0aW9uL2tleXdvcmRzL3V0aWxzL2lmLXVubGVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRUE7O0FBQ0E7O0FBRUE7Ozs7OztBQUdBLFNBQUEsMkJBQUEsQ0FBQSxJQUFBLEVBQWlEO0FBQy9DLFNBQ0UsVUFESyxZQUNMLEVBS0c7OztBQUNILFFBQUksUUFBUSxHQUFHLElBQUksS0FBbkIsUUFBQTtBQUVBLFFBQUksSUFBSSxHQUFHLFlBQVksQ0FBWixJQUFBLEtBQUEsZUFBQSxHQUF3QyxZQUFZLENBQXBELEtBQUEsR0FBWCxZQUFBO0FBQ0EsUUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFKLElBQUEsS0FBQSxNQUFBLEdBQXVCLElBQUksQ0FBSixJQUFBLENBQXZCLEtBQUEsR0FBWixJQUFBO0FBQ0EsUUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFKLElBQUEsS0FBQSxNQUFBLEdBQXVCLElBQUksQ0FBSixJQUFBLENBQXZCLFVBQUEsR0FBakIsSUFBQTs7QUFFQSxRQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBbkIsT0FBYyxFQUFkLEVBQStCO0FBQzdCLGFBQU8saUJBQ0wsaUNBQW1CLE1BQUEsSUFBQSxHQUFBLDhDQUFBLEdBQ3NDLEtBQUssQ0FBTCxPQUFBLENBQUEsR0FBQSxDQUMvQyxVQUFELENBQUMsRUFBRDtBQUFBLGVBQU8sQ0FBQyxDQUFELElBQUEsQ0FEeUMsS0FDaEQ7QUFEZ0QsT0FBQSxFQUFBLElBQUEsQ0FEdEMsSUFDc0MsQ0FEekQsRUFJRSxZQUFZLENBTGhCLEdBQ0UsQ0FESyxDQUFQO0FBUUQ7O0FBRUQsUUFBSSxTQUFTLEdBQUcsVUFBVSxLQUFWLElBQUEsSUFBQSxVQUFVLEtBQUEsS0FBVixDQUFBLEdBQVUsS0FBVixDQUFBLEdBQUEsVUFBVSxDQUFWLEdBQUEsQ0FB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QUFBO0FBQW9CLFVBQUEsR0FBRyxFQUFFLElBQUksQ0FBQztBQUE5QixTQUFaLENBQVo7QUFDRDs7QUFFRCxhQUFPLElBQUksR0FBRyxDQUFQLFFBQUEsQ0FBaUI7QUFDdEIsUUFBQSxHQUFHLEVBQUUsSUFBSSxDQURhLEdBQUE7QUFFdEIsUUFBQSxTQUZzQixFQUFBLFNBQUE7QUFHdEIsUUFBQSxNQUhzQixFQUFBLE1BQUE7QUFJdEIsUUFBQSxLQUFBLEVBQUE7QUFKc0IsT0FBakIsQ0FBUDtBQU5KLEtBQU8sQ0FBUDtBQW5CRixHQUFBO0FBa0NEOztBQUVLLFNBQUEscUJBQUEsQ0FBQSxJQUFBLEVBQ1E7QUFVWixTQUFPO0FBQ0wsSUFBQSxNQUFNLEVBQUUsMkJBQTJCLENBRDlCLElBQzhCLENBRDlCO0FBRUwsSUFBQSxTQUFTLEVBQUUsOEJBQThCLENBQUEsSUFBQTtBQUZwQyxHQUFQO0FBSUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBU1R2MiwgZ2VuZXJhdGVTeW50YXhFcnJvciB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5cbmltcG9ydCB7IEVyciwgT2ssIFJlc3VsdCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9yZXN1bHQnO1xuaW1wb3J0ICogYXMgbWlyIGZyb20gJy4uLy4uLy4uLzItZW5jb2RpbmcvbWlyJztcbmltcG9ydCB7IE5vcm1hbGl6YXRpb25TdGF0ZSB9IGZyb20gJy4uLy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgVklTSVRfRVhQUlMgfSBmcm9tICcuLi8uLi92aXNpdG9ycy9leHByZXNzaW9ucyc7XG5pbXBvcnQgeyBLZXl3b3JkRGVsZWdhdGUgfSBmcm9tICcuLi9pbXBsJztcblxuZnVuY3Rpb24gYXNzZXJ0SWZVbmxlc3NJbmxpbmVLZXl3b3JkKHR5cGU6IHN0cmluZykge1xuICByZXR1cm4gKFxuICAgIG9yaWdpbmFsTm9kZTogQVNUdjIuQXBwZW5kQ29udGVudCB8IEFTVHYyLkV4cHJlc3Npb25Ob2RlXG4gICk6IFJlc3VsdDx7XG4gICAgY29uZGl0aW9uOiBBU1R2Mi5FeHByZXNzaW9uTm9kZTtcbiAgICB0cnV0aHk6IEFTVHYyLkV4cHJlc3Npb25Ob2RlO1xuICAgIGZhbHN5OiBBU1R2Mi5FeHByZXNzaW9uTm9kZSB8IG51bGw7XG4gIH0+ID0+IHtcbiAgICBsZXQgaW52ZXJ0ZWQgPSB0eXBlID09PSAndW5sZXNzJztcblxuICAgIGxldCBub2RlID0gb3JpZ2luYWxOb2RlLnR5cGUgPT09ICdBcHBlbmRDb250ZW50JyA/IG9yaWdpbmFsTm9kZS52YWx1ZSA6IG9yaWdpbmFsTm9kZTtcbiAgICBsZXQgbmFtZWQgPSBub2RlLnR5cGUgPT09ICdDYWxsJyA/IG5vZGUuYXJncy5uYW1lZCA6IG51bGw7XG4gICAgbGV0IHBvc2l0aW9uYWwgPSBub2RlLnR5cGUgPT09ICdDYWxsJyA/IG5vZGUuYXJncy5wb3NpdGlvbmFsIDogbnVsbDtcblxuICAgIGlmIChuYW1lZCAmJiAhbmFtZWQuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gRXJyKFxuICAgICAgICBnZW5lcmF0ZVN5bnRheEVycm9yKFxuICAgICAgICAgIGAoJHt0eXBlfSkgY2Fubm90IHJlY2VpdmUgbmFtZWQgcGFyYW1ldGVycywgcmVjZWl2ZWQgJHtuYW1lZC5lbnRyaWVzXG4gICAgICAgICAgICAubWFwKChlKSA9PiBlLm5hbWUuY2hhcnMpXG4gICAgICAgICAgICAuam9pbignLCAnKX1gLFxuICAgICAgICAgIG9yaWdpbmFsTm9kZS5sb2NcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgY29uZGl0aW9uID0gcG9zaXRpb25hbD8ubnRoKDApO1xuXG4gICAgaWYgKCFwb3NpdGlvbmFsIHx8ICFjb25kaXRpb24pIHtcbiAgICAgIHJldHVybiBFcnIoXG4gICAgICAgIGdlbmVyYXRlU3ludGF4RXJyb3IoXG4gICAgICAgICAgYFdoZW4gdXNlZCBpbmxpbmUsICgke3R5cGV9KSByZXF1aXJlcyBhdCBsZWFzdCB0d28gcGFyYW1ldGVycyAxLiB0aGUgY29uZGl0aW9uIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc3RhdGUgb2YgdGhlICgke3R5cGV9KSwgYW5kIDIuIHRoZSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGNvbmRpdGlvbiBpcyAke1xuICAgICAgICAgICAgaW52ZXJ0ZWQgPyAnZmFsc2UnIDogJ3RydWUnXG4gICAgICAgICAgfS4gRGlkIG5vdCByZWNlaXZlIGFueSBwYXJhbWV0ZXJzYCxcbiAgICAgICAgICBvcmlnaW5hbE5vZGUubG9jXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHRydXRoeSA9IHBvc2l0aW9uYWwubnRoKDEpO1xuICAgIGxldCBmYWxzeSA9IHBvc2l0aW9uYWwubnRoKDIpO1xuXG4gICAgaWYgKHRydXRoeSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIEVycihcbiAgICAgICAgZ2VuZXJhdGVTeW50YXhFcnJvcihcbiAgICAgICAgICBgV2hlbiB1c2VkIGlubGluZSwgKCR7dHlwZX0pIHJlcXVpcmVzIGF0IGxlYXN0IHR3byBwYXJhbWV0ZXJzIDEuIHRoZSBjb25kaXRpb24gdGhhdCBkZXRlcm1pbmVzIHRoZSBzdGF0ZSBvZiB0aGUgKCR7dHlwZX0pLCBhbmQgMi4gdGhlIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgY29uZGl0aW9uIGlzICR7XG4gICAgICAgICAgICBpbnZlcnRlZCA/ICdmYWxzZScgOiAndHJ1ZSdcbiAgICAgICAgICB9LiBSZWNlaXZlZCBvbmx5IG9uZSBwYXJhbWV0ZXIsIHRoZSBjb25kaXRpb25gLFxuICAgICAgICAgIG9yaWdpbmFsTm9kZS5sb2NcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocG9zaXRpb25hbC5zaXplID4gMykge1xuICAgICAgcmV0dXJuIEVycihcbiAgICAgICAgZ2VuZXJhdGVTeW50YXhFcnJvcihcbiAgICAgICAgICBgV2hlbiB1c2VkIGlubGluZSwgKCR7dHlwZX0pIGNhbiByZWNlaXZlIGEgbWF4aW11bSBvZiB0aHJlZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgMS4gdGhlIGNvbmRpdGlvbiB0aGF0IGRldGVybWluZXMgdGhlIHN0YXRlIG9mIHRoZSAoJHt0eXBlfSksIDIuIHRoZSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGNvbmRpdGlvbiBpcyAke1xuICAgICAgICAgICAgaW52ZXJ0ZWQgPyAnZmFsc2UnIDogJ3RydWUnXG4gICAgICAgICAgfSwgYW5kIDMuIHRoZSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGNvbmRpdGlvbiBpcyAke1xuICAgICAgICAgICAgaW52ZXJ0ZWQgPyAndHJ1ZScgOiAnZmFsc2UnXG4gICAgICAgICAgfS4gUmVjZWl2ZWQgJHtwb3NpdGlvbmFsPy5zaXplID8/IDB9IHBhcmFtZXRlcnNgLFxuICAgICAgICAgIG9yaWdpbmFsTm9kZS5sb2NcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2soeyBjb25kaXRpb24sIHRydXRoeSwgZmFsc3kgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUlmVW5sZXNzSW5saW5lS2V5d29yZCh0eXBlOiBzdHJpbmcpIHtcbiAgbGV0IGludmVydGVkID0gdHlwZSA9PT0gJ3VubGVzcyc7XG5cbiAgcmV0dXJuIChcbiAgICB7XG4gICAgICBub2RlLFxuICAgICAgc3RhdGUsXG4gICAgfTogeyBub2RlOiBBU1R2Mi5BcHBlbmRDb250ZW50IHwgQVNUdjIuRXhwcmVzc2lvbk5vZGU7IHN0YXRlOiBOb3JtYWxpemF0aW9uU3RhdGUgfSxcbiAgICB7XG4gICAgICBjb25kaXRpb24sXG4gICAgICB0cnV0aHksXG4gICAgICBmYWxzeSxcbiAgICB9OiB7XG4gICAgICBjb25kaXRpb246IEFTVHYyLkV4cHJlc3Npb25Ob2RlO1xuICAgICAgdHJ1dGh5OiBBU1R2Mi5FeHByZXNzaW9uTm9kZTtcbiAgICAgIGZhbHN5OiBBU1R2Mi5FeHByZXNzaW9uTm9kZSB8IG51bGw7XG4gICAgfVxuICApOiBSZXN1bHQ8bWlyLklmSW5saW5lPiA9PiB7XG4gICAgbGV0IGNvbmRpdGlvblJlc3VsdCA9IFZJU0lUX0VYUFJTLnZpc2l0KGNvbmRpdGlvbiwgc3RhdGUpO1xuICAgIGxldCB0cnV0aHlSZXN1bHQgPSBWSVNJVF9FWFBSUy52aXNpdCh0cnV0aHksIHN0YXRlKTtcbiAgICBsZXQgZmFsc3lSZXN1bHQgPSBmYWxzeSA/IFZJU0lUX0VYUFJTLnZpc2l0KGZhbHN5LCBzdGF0ZSkgOiBPayhudWxsKTtcblxuICAgIHJldHVybiBSZXN1bHQuYWxsKGNvbmRpdGlvblJlc3VsdCwgdHJ1dGh5UmVzdWx0LCBmYWxzeVJlc3VsdCkubWFwT2soXG4gICAgICAoW2NvbmRpdGlvbiwgdHJ1dGh5LCBmYWxzeV0pID0+IHtcbiAgICAgICAgaWYgKGludmVydGVkKSB7XG4gICAgICAgICAgY29uZGl0aW9uID0gbmV3IG1pci5Ob3QoeyB2YWx1ZTogY29uZGl0aW9uLCBsb2M6IG5vZGUubG9jIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBtaXIuSWZJbmxpbmUoe1xuICAgICAgICAgIGxvYzogbm9kZS5sb2MsXG4gICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgIHRydXRoeSxcbiAgICAgICAgICBmYWxzeSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlmVW5sZXNzSW5saW5lS2V5d29yZChcbiAgdHlwZTogc3RyaW5nXG4pOiBLZXl3b3JkRGVsZWdhdGU8XG4gIEFTVHYyLkNhbGxFeHByZXNzaW9uIHwgQVNUdjIuQXBwZW5kQ29udGVudCxcbiAge1xuICAgIGNvbmRpdGlvbjogQVNUdjIuRXhwcmVzc2lvbk5vZGU7XG4gICAgdHJ1dGh5OiBBU1R2Mi5FeHByZXNzaW9uTm9kZTtcbiAgICBmYWxzeTogQVNUdjIuRXhwcmVzc2lvbk5vZGUgfCBudWxsO1xuICB9LFxuICBtaXIuSWZJbmxpbmVcbj4ge1xuICByZXR1cm4ge1xuICAgIGFzc2VydDogYXNzZXJ0SWZVbmxlc3NJbmxpbmVLZXl3b3JkKHR5cGUpLFxuICAgIHRyYW5zbGF0ZTogdHJhbnNsYXRlSWZVbmxlc3NJbmxpbmVLZXl3b3JkKHR5cGUpLFxuICB9O1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==