UNPKG

@glimmer/compiler

Version:
67 lines (55 loc) 8.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.hasBlockKeyword = hasBlockKeyword; var _syntax = require("@glimmer/syntax"); var _result = require("../../../../shared/result"); var mir = _interopRequireWildcard(require("../../../2-encoding/mir")); 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 assertHasBlockKeyword(type) { return function (node) { var call = node.type === 'AppendContent' ? node.value : node; var named = call.type === 'Call' ? call.args.named : null; var positionals = call.type === 'Call' ? call.args.positional : null; if (named && !named.isEmpty()) { return (0, _result.Err)((0, _syntax.generateSyntaxError)("(" + type + ") does not take any named arguments", call.loc)); } if (!positionals || positionals.isEmpty()) { return (0, _result.Ok)(_syntax.SourceSlice.synthetic('default')); } else if (positionals.exprs.length === 1) { var positional = positionals.exprs[0]; if (_syntax.ASTv2.isLiteral(positional, 'string')) { return (0, _result.Ok)(positional.toSlice()); } else { return (0, _result.Err)((0, _syntax.generateSyntaxError)("(" + type + ") can only receive a string literal as its first argument", call.loc)); } } else { return (0, _result.Err)((0, _syntax.generateSyntaxError)("(" + type + ") only takes a single positional argument", call.loc)); } }; } function translateHasBlockKeyword(type) { return function (_ref, target) { var node = _ref.node, scope = _ref.state.scope; var block = type === 'has-block' ? new mir.HasBlock({ loc: node.loc, target: target, symbol: scope.allocateBlock(target.chars) }) : new mir.HasBlockParams({ loc: node.loc, target: target, symbol: scope.allocateBlock(target.chars) }); return (0, _result.Ok)(block); }; } function hasBlockKeyword(type) { return { assert: assertHasBlockKeyword(type), translate: translateHasBlockKeyword(type) }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9wYXNzZXMvMS1ub3JtYWxpemF0aW9uL2tleXdvcmRzL3V0aWxzL2hhcy1ibG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRUE7O0FBQ0E7Ozs7OztBQUlBLFNBQUEscUJBQUEsQ0FBQSxJQUFBLEVBQTJDO0FBQ3pDLFNBQVEsVUFBRCxJQUFDLEVBQWlEO0FBQ3ZELFFBQUksSUFBSSxHQUFHLElBQUksQ0FBSixJQUFBLEtBQUEsZUFBQSxHQUFnQyxJQUFJLENBQXBDLEtBQUEsR0FBWCxJQUFBO0FBRUEsUUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFKLElBQUEsS0FBQSxNQUFBLEdBQXVCLElBQUksQ0FBSixJQUFBLENBQXZCLEtBQUEsR0FBWixJQUFBO0FBQ0EsUUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFKLElBQUEsS0FBQSxNQUFBLEdBQXVCLElBQUksQ0FBSixJQUFBLENBQXZCLFVBQUEsR0FBbEIsSUFBQTs7QUFFQSxRQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBbkIsT0FBYyxFQUFkLEVBQStCO0FBQzdCLGFBQU8saUJBQUksaUNBQW1CLE1BQUEsSUFBQSxHQUFBLHFDQUFuQixFQUFtRSxJQUFJLENBQWxGLEdBQVcsQ0FBSixDQUFQO0FBQ0Q7O0FBRUQsUUFBSSxDQUFBLFdBQUEsSUFBZ0IsV0FBVyxDQUEvQixPQUFvQixFQUFwQixFQUEyQztBQUN6QyxhQUFPLGdCQUFHLG9CQUFBLFNBQUEsQ0FBVixTQUFVLENBQUgsQ0FBUDtBQURGLEtBQUEsTUFFTyxJQUFJLFdBQVcsQ0FBWCxLQUFBLENBQUEsTUFBQSxLQUFKLENBQUEsRUFBb0M7QUFDekMsVUFBSSxVQUFVLEdBQUcsV0FBVyxDQUFYLEtBQUEsQ0FBakIsQ0FBaUIsQ0FBakI7O0FBQ0EsVUFBSSxjQUFBLFNBQUEsQ0FBQSxVQUFBLEVBQUosUUFBSSxDQUFKLEVBQTJDO0FBQ3pDLGVBQU8sZ0JBQUcsVUFBVSxDQUFwQixPQUFVLEVBQUgsQ0FBUDtBQURGLE9BQUEsTUFFTztBQUNMLGVBQU8saUJBQ0wsaUNBQW1CLE1BQUEsSUFBQSxHQUFBLDJEQUFuQixFQUVFLElBQUksQ0FIUixHQUNFLENBREssQ0FBUDtBQU1EO0FBWEksS0FBQSxNQVlBO0FBQ0wsYUFBTyxpQkFDTCxpQ0FBbUIsTUFBQSxJQUFBLEdBQUEsMkNBQW5CLEVBQXlFLElBQUksQ0FEL0UsR0FDRSxDQURLLENBQVA7QUFHRDtBQTVCSCxHQUFBO0FBOEJEOztBQUVELFNBQUEsd0JBQUEsQ0FBQSxJQUFBLEVBQThDO0FBQzVDLFNBQU8sVUFBQSxJQUFBLEVBQUEsTUFBQSxFQUd3QztBQUFBLFFBRjdDLElBRTZDLEdBQUEsSUFBQSxDQUY3QyxJQUU2QztBQUFBLFFBRjVCLEtBRTRCLEdBQUEsSUFBQSxDQUZyQyxLQUVxQyxDQUY1QixLQUU0QjtBQUM3QyxRQUFJLEtBQUssR0FDUCxJQUFJLEtBQUosV0FBQSxHQUNJLElBQUksR0FBRyxDQUFQLFFBQUEsQ0FBaUI7QUFBRSxNQUFBLEdBQUcsRUFBRSxJQUFJLENBQVgsR0FBQTtBQUFpQixNQUFBLE1BQWpCLEVBQUEsTUFBQTtBQUF5QixNQUFBLE1BQU0sRUFBRSxLQUFLLENBQUwsYUFBQSxDQUFvQixNQUFNLENBQTFCLEtBQUE7QUFBakMsS0FBakIsQ0FESixHQUVJLElBQUksR0FBRyxDQUFQLGNBQUEsQ0FBdUI7QUFDckIsTUFBQSxHQUFHLEVBQUUsSUFBSSxDQURZLEdBQUE7QUFFckIsTUFBQSxNQUZxQixFQUFBLE1BQUE7QUFHckIsTUFBQSxNQUFNLEVBQUUsS0FBSyxDQUFMLGFBQUEsQ0FBb0IsTUFBTSxDQUExQixLQUFBO0FBSGEsS0FBdkIsQ0FITjtBQVNBLFdBQU8sZ0JBQVAsS0FBTyxDQUFQO0FBYkYsR0FBQTtBQWVEOztBQUVLLFNBQUEsZUFBQSxDQUFBLElBQUEsRUFDUTtBQU1aLFNBQU87QUFDTCxJQUFBLE1BQU0sRUFBRSxxQkFBcUIsQ0FEeEIsSUFDd0IsQ0FEeEI7QUFFTCxJQUFBLFNBQVMsRUFBRSx3QkFBd0IsQ0FBQSxJQUFBO0FBRjlCLEdBQVA7QUFJRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFTVHYyLCBnZW5lcmF0ZVN5bnRheEVycm9yLCBTb3VyY2VTbGljZSB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5cbmltcG9ydCB7IEVyciwgT2ssIFJlc3VsdCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9yZXN1bHQnO1xuaW1wb3J0ICogYXMgbWlyIGZyb20gJy4uLy4uLy4uLzItZW5jb2RpbmcvbWlyJztcbmltcG9ydCB7IE5vcm1hbGl6YXRpb25TdGF0ZSB9IGZyb20gJy4uLy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgR2VuZXJpY0tleXdvcmROb2RlLCBLZXl3b3JkRGVsZWdhdGUgfSBmcm9tICcuLi9pbXBsJztcblxuZnVuY3Rpb24gYXNzZXJ0SGFzQmxvY2tLZXl3b3JkKHR5cGU6IHN0cmluZykge1xuICByZXR1cm4gKG5vZGU6IEdlbmVyaWNLZXl3b3JkTm9kZSk6IFJlc3VsdDxTb3VyY2VTbGljZT4gPT4ge1xuICAgIGxldCBjYWxsID0gbm9kZS50eXBlID09PSAnQXBwZW5kQ29udGVudCcgPyBub2RlLnZhbHVlIDogbm9kZTtcblxuICAgIGxldCBuYW1lZCA9IGNhbGwudHlwZSA9PT0gJ0NhbGwnID8gY2FsbC5hcmdzLm5hbWVkIDogbnVsbDtcbiAgICBsZXQgcG9zaXRpb25hbHMgPSBjYWxsLnR5cGUgPT09ICdDYWxsJyA/IGNhbGwuYXJncy5wb3NpdGlvbmFsIDogbnVsbDtcblxuICAgIGlmIChuYW1lZCAmJiAhbmFtZWQuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gRXJyKGdlbmVyYXRlU3ludGF4RXJyb3IoYCgke3R5cGV9KSBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHNgLCBjYWxsLmxvYykpO1xuICAgIH1cblxuICAgIGlmICghcG9zaXRpb25hbHMgfHwgcG9zaXRpb25hbHMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gT2soU291cmNlU2xpY2Uuc3ludGhldGljKCdkZWZhdWx0JykpO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb25hbHMuZXhwcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICBsZXQgcG9zaXRpb25hbCA9IHBvc2l0aW9uYWxzLmV4cHJzWzBdO1xuICAgICAgaWYgKEFTVHYyLmlzTGl0ZXJhbChwb3NpdGlvbmFsLCAnc3RyaW5nJykpIHtcbiAgICAgICAgcmV0dXJuIE9rKHBvc2l0aW9uYWwudG9TbGljZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBFcnIoXG4gICAgICAgICAgZ2VuZXJhdGVTeW50YXhFcnJvcihcbiAgICAgICAgICAgIGAoJHt0eXBlfSkgY2FuIG9ubHkgcmVjZWl2ZSBhIHN0cmluZyBsaXRlcmFsIGFzIGl0cyBmaXJzdCBhcmd1bWVudGAsXG4gICAgICAgICAgICBjYWxsLmxvY1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIEVycihcbiAgICAgICAgZ2VuZXJhdGVTeW50YXhFcnJvcihgKCR7dHlwZX0pIG9ubHkgdGFrZXMgYSBzaW5nbGUgcG9zaXRpb25hbCBhcmd1bWVudGAsIGNhbGwubG9jKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUhhc0Jsb2NrS2V5d29yZCh0eXBlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIChcbiAgICB7IG5vZGUsIHN0YXRlOiB7IHNjb3BlIH0gfTogeyBub2RlOiBBU1R2Mi5DYWxsRXhwcmVzc2lvbjsgc3RhdGU6IE5vcm1hbGl6YXRpb25TdGF0ZSB9LFxuICAgIHRhcmdldDogU291cmNlU2xpY2VcbiAgKTogUmVzdWx0PG1pci5IYXNCbG9jayB8IG1pci5IYXNCbG9ja1BhcmFtcz4gPT4ge1xuICAgIGxldCBibG9jayA9XG4gICAgICB0eXBlID09PSAnaGFzLWJsb2NrJ1xuICAgICAgICA/IG5ldyBtaXIuSGFzQmxvY2soeyBsb2M6IG5vZGUubG9jLCB0YXJnZXQsIHN5bWJvbDogc2NvcGUuYWxsb2NhdGVCbG9jayh0YXJnZXQuY2hhcnMpIH0pXG4gICAgICAgIDogbmV3IG1pci5IYXNCbG9ja1BhcmFtcyh7XG4gICAgICAgICAgICBsb2M6IG5vZGUubG9jLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgc3ltYm9sOiBzY29wZS5hbGxvY2F0ZUJsb2NrKHRhcmdldC5jaGFycyksXG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gT2soYmxvY2spO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzQmxvY2tLZXl3b3JkKFxuICB0eXBlOiBzdHJpbmdcbik6IEtleXdvcmREZWxlZ2F0ZTxcbiAgQVNUdjIuQ2FsbEV4cHJlc3Npb24gfCBBU1R2Mi5BcHBlbmRDb250ZW50LFxuICBTb3VyY2VTbGljZSxcbiAgbWlyLkhhc0Jsb2NrIHwgbWlyLkhhc0Jsb2NrUGFyYW1zXG4+IHtcbiAgcmV0dXJuIHtcbiAgICBhc3NlcnQ6IGFzc2VydEhhc0Jsb2NrS2V5d29yZCh0eXBlKSxcbiAgICB0cmFuc2xhdGU6IHRyYW5zbGF0ZUhhc0Jsb2NrS2V5d29yZCh0eXBlKSxcbiAgfTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=