UNPKG

@glimmer/compiler

Version:
70 lines (58 loc) 8.41 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 node => { let call = node.type === 'AppendContent' ? node.value : node; let named = call.type === 'Call' ? call.args.named : null; let 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) { let 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 ({ node, state: { scope } }, target) => { let block = type === 'has-block' ? new mir.HasBlock({ loc: node.loc, target, symbol: scope.allocateBlock(target.chars) }) : new mir.HasBlockParams({ loc: node.loc, 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9wYXNzZXMvMS1ub3JtYWxpemF0aW9uL2tleXdvcmRzL3V0aWxzL2hhcy1ibG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRUE7O0FBQ0E7Ozs7OztBQUlBLFNBQUEscUJBQUEsQ0FBQSxJQUFBLEVBQTJDO0FBQ3pDLFNBQVEsSUFBRCxJQUFrRDtBQUN2RCxRQUFJLElBQUksR0FBRyxJQUFJLENBQUosSUFBQSxLQUFBLGVBQUEsR0FBZ0MsSUFBSSxDQUFwQyxLQUFBLEdBQVgsSUFBQTtBQUVBLFFBQUksS0FBSyxHQUFHLElBQUksQ0FBSixJQUFBLEtBQUEsTUFBQSxHQUF1QixJQUFJLENBQUosSUFBQSxDQUF2QixLQUFBLEdBQVosSUFBQTtBQUNBLFFBQUksV0FBVyxHQUFHLElBQUksQ0FBSixJQUFBLEtBQUEsTUFBQSxHQUF1QixJQUFJLENBQUosSUFBQSxDQUF2QixVQUFBLEdBQWxCLElBQUE7O0FBRUEsUUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQW5CLE9BQWMsRUFBZCxFQUErQjtBQUM3QixhQUFPLGlCQUFJLGlDQUFvQixJQUFJLElBQUwscUNBQW5CLEVBQW1FLElBQUksQ0FBbEYsR0FBVyxDQUFKLENBQVA7QUFDRDs7QUFFRCxRQUFJLENBQUEsV0FBQSxJQUFnQixXQUFXLENBQS9CLE9BQW9CLEVBQXBCLEVBQTJDO0FBQ3pDLGFBQU8sZ0JBQUcsb0JBQUEsU0FBQSxDQUFWLFNBQVUsQ0FBSCxDQUFQO0FBREYsS0FBQSxNQUVPLElBQUksV0FBVyxDQUFYLEtBQUEsQ0FBQSxNQUFBLEtBQUosQ0FBQSxFQUFvQztBQUN6QyxVQUFJLFVBQVUsR0FBRyxXQUFXLENBQVgsS0FBQSxDQUFqQixDQUFpQixDQUFqQjs7QUFDQSxVQUFJLGNBQUEsU0FBQSxDQUFBLFVBQUEsRUFBSixRQUFJLENBQUosRUFBMkM7QUFDekMsZUFBTyxnQkFBRyxVQUFVLENBQXBCLE9BQVUsRUFBSCxDQUFQO0FBREYsT0FBQSxNQUVPO0FBQ0wsZUFBTyxpQkFDTCxpQ0FDRSxJQUFJLElBRGEsMkRBQW5CLEVBRUUsSUFBSSxDQUhSLEdBQ0UsQ0FESyxDQUFQO0FBTUQ7QUFYSSxLQUFBLE1BWUE7QUFDTCxhQUFPLGlCQUNMLGlDQUFvQixJQUFJLElBQUwsMkNBQW5CLEVBQXlFLElBQUksQ0FEL0UsR0FDRSxDQURLLENBQVA7QUFHRDtBQTVCSCxHQUFBO0FBOEJEOztBQUVELFNBQUEsd0JBQUEsQ0FBQSxJQUFBLEVBQThDO0FBQzVDLFNBQU8sQ0FDTDtBQUFBLElBQUEsSUFBQTtBQUFRLElBQUEsS0FBSyxFQUFFO0FBQUUsTUFBQTtBQUFGO0FBQWYsR0FESyxFQUFBLE1BQUEsS0FHd0M7QUFDN0MsUUFBSSxLQUFLLEdBQ1AsSUFBSSxLQUFKLFdBQUEsR0FDSSxJQUFJLEdBQUcsQ0FBUCxRQUFBLENBQWlCO0FBQUUsTUFBQSxHQUFHLEVBQUUsSUFBSSxDQUFYLEdBQUE7QUFBQSxNQUFBLE1BQUE7QUFBeUIsTUFBQSxNQUFNLEVBQUUsS0FBSyxDQUFMLGFBQUEsQ0FBb0IsTUFBTSxDQUExQixLQUFBO0FBQWpDLEtBQWpCLENBREosR0FFSSxJQUFJLEdBQUcsQ0FBUCxjQUFBLENBQXVCO0FBQ3JCLE1BQUEsR0FBRyxFQUFFLElBQUksQ0FEWSxHQUFBO0FBQUEsTUFBQSxNQUFBO0FBR3JCLE1BQUEsTUFBTSxFQUFFLEtBQUssQ0FBTCxhQUFBLENBQW9CLE1BQU0sQ0FBMUIsS0FBQTtBQUhhLEtBQXZCLENBSE47QUFTQSxXQUFPLGdCQUFQLEtBQU8sQ0FBUDtBQWJGLEdBQUE7QUFlRDs7QUFFSyxTQUFBLGVBQUEsQ0FBQSxJQUFBLEVBQ1E7QUFNWixTQUFPO0FBQ0wsSUFBQSxNQUFNLEVBQUUscUJBQXFCLENBRHhCLElBQ3dCLENBRHhCO0FBRUwsSUFBQSxTQUFTLEVBQUUsd0JBQXdCLENBQUEsSUFBQTtBQUY5QixHQUFQO0FBSUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBU1R2MiwgZ2VuZXJhdGVTeW50YXhFcnJvciwgU291cmNlU2xpY2UgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuXG5pbXBvcnQgeyBFcnIsIE9rLCBSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvcmVzdWx0JztcbmltcG9ydCAqIGFzIG1pciBmcm9tICcuLi8uLi8uLi8yLWVuY29kaW5nL21pcic7XG5pbXBvcnQgeyBOb3JtYWxpemF0aW9uU3RhdGUgfSBmcm9tICcuLi8uLi9jb250ZXh0JztcbmltcG9ydCB7IEdlbmVyaWNLZXl3b3JkTm9kZSwgS2V5d29yZERlbGVnYXRlIH0gZnJvbSAnLi4vaW1wbCc7XG5cbmZ1bmN0aW9uIGFzc2VydEhhc0Jsb2NrS2V5d29yZCh0eXBlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIChub2RlOiBHZW5lcmljS2V5d29yZE5vZGUpOiBSZXN1bHQ8U291cmNlU2xpY2U+ID0+IHtcbiAgICBsZXQgY2FsbCA9IG5vZGUudHlwZSA9PT0gJ0FwcGVuZENvbnRlbnQnID8gbm9kZS52YWx1ZSA6IG5vZGU7XG5cbiAgICBsZXQgbmFtZWQgPSBjYWxsLnR5cGUgPT09ICdDYWxsJyA/IGNhbGwuYXJncy5uYW1lZCA6IG51bGw7XG4gICAgbGV0IHBvc2l0aW9uYWxzID0gY2FsbC50eXBlID09PSAnQ2FsbCcgPyBjYWxsLmFyZ3MucG9zaXRpb25hbCA6IG51bGw7XG5cbiAgICBpZiAobmFtZWQgJiYgIW5hbWVkLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIEVycihnZW5lcmF0ZVN5bnRheEVycm9yKGAoJHt0eXBlfSkgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzYCwgY2FsbC5sb2MpKTtcbiAgICB9XG5cbiAgICBpZiAoIXBvc2l0aW9uYWxzIHx8IHBvc2l0aW9uYWxzLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIE9rKFNvdXJjZVNsaWNlLnN5bnRoZXRpYygnZGVmYXVsdCcpKTtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uYWxzLmV4cHJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgbGV0IHBvc2l0aW9uYWwgPSBwb3NpdGlvbmFscy5leHByc1swXTtcbiAgICAgIGlmIChBU1R2Mi5pc0xpdGVyYWwocG9zaXRpb25hbCwgJ3N0cmluZycpKSB7XG4gICAgICAgIHJldHVybiBPayhwb3NpdGlvbmFsLnRvU2xpY2UoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gRXJyKFxuICAgICAgICAgIGdlbmVyYXRlU3ludGF4RXJyb3IoXG4gICAgICAgICAgICBgKCR7dHlwZX0pIGNhbiBvbmx5IHJlY2VpdmUgYSBzdHJpbmcgbGl0ZXJhbCBhcyBpdHMgZmlyc3QgYXJndW1lbnRgLFxuICAgICAgICAgICAgY2FsbC5sb2NcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBFcnIoXG4gICAgICAgIGdlbmVyYXRlU3ludGF4RXJyb3IoYCgke3R5cGV9KSBvbmx5IHRha2VzIGEgc2luZ2xlIHBvc2l0aW9uYWwgYXJndW1lbnRgLCBjYWxsLmxvYylcbiAgICAgICk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVIYXNCbG9ja0tleXdvcmQodHlwZTogc3RyaW5nKSB7XG4gIHJldHVybiAoXG4gICAgeyBub2RlLCBzdGF0ZTogeyBzY29wZSB9IH06IHsgbm9kZTogQVNUdjIuQ2FsbEV4cHJlc3Npb247IHN0YXRlOiBOb3JtYWxpemF0aW9uU3RhdGUgfSxcbiAgICB0YXJnZXQ6IFNvdXJjZVNsaWNlXG4gICk6IFJlc3VsdDxtaXIuSGFzQmxvY2sgfCBtaXIuSGFzQmxvY2tQYXJhbXM+ID0+IHtcbiAgICBsZXQgYmxvY2sgPVxuICAgICAgdHlwZSA9PT0gJ2hhcy1ibG9jaydcbiAgICAgICAgPyBuZXcgbWlyLkhhc0Jsb2NrKHsgbG9jOiBub2RlLmxvYywgdGFyZ2V0LCBzeW1ib2w6IHNjb3BlLmFsbG9jYXRlQmxvY2sodGFyZ2V0LmNoYXJzKSB9KVxuICAgICAgICA6IG5ldyBtaXIuSGFzQmxvY2tQYXJhbXMoe1xuICAgICAgICAgICAgbG9jOiBub2RlLmxvYyxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHN5bWJvbDogc2NvcGUuYWxsb2NhdGVCbG9jayh0YXJnZXQuY2hhcnMpLFxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIE9rKGJsb2NrKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Jsb2NrS2V5d29yZChcbiAgdHlwZTogc3RyaW5nXG4pOiBLZXl3b3JkRGVsZWdhdGU8XG4gIEFTVHYyLkNhbGxFeHByZXNzaW9uIHwgQVNUdjIuQXBwZW5kQ29udGVudCxcbiAgU291cmNlU2xpY2UsXG4gIG1pci5IYXNCbG9jayB8IG1pci5IYXNCbG9ja1BhcmFtc1xuPiB7XG4gIHJldHVybiB7XG4gICAgYXNzZXJ0OiBhc3NlcnRIYXNCbG9ja0tleXdvcmQodHlwZSksXG4gICAgdHJhbnNsYXRlOiB0cmFuc2xhdGVIYXNCbG9ja0tleXdvcmQodHlwZSksXG4gIH07XG59XG4iXSwic291cmNlUm9vdCI6IiJ9