UNPKG

@glimmer/compiler

Version:
153 lines (128 loc) 17.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.APPEND_KEYWORDS = void 0; var _syntax = require("@glimmer/syntax"); var _result = require("../../../shared/result"); var mir = _interopRequireWildcard(require("../../2-encoding/mir")); var _expressions = require("../visitors/expressions"); var _impl = require("./impl"); var _callToAppend = require("./utils/call-to-append"); var _curry = require("./utils/curry"); var _dynamicVars = require("./utils/dynamic-vars"); var _hasBlock = require("./utils/has-block"); var _ifUnless = require("./utils/if-unless"); var _log = require("./utils/log"); 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; } var APPEND_KEYWORDS = (0, _impl.keywords)('Append').kw('has-block', (0, _callToAppend.toAppend)((0, _hasBlock.hasBlockKeyword)('has-block'))).kw('has-block-params', (0, _callToAppend.toAppend)((0, _hasBlock.hasBlockKeyword)('has-block-params'))).kw('-get-dynamic-var', (0, _callToAppend.toAppend)(_dynamicVars.getDynamicVarKeyword)).kw('log', (0, _callToAppend.toAppend)(_log.logKeyword)).kw('if', (0, _callToAppend.toAppend)((0, _ifUnless.ifUnlessInlineKeyword)('if'))).kw('unless', (0, _callToAppend.toAppend)((0, _ifUnless.ifUnlessInlineKeyword)('unless'))).kw('yield', { assert: function assert(node) { var args = node.args; if (args.named.isEmpty()) { return (0, _result.Ok)({ target: _syntax.SourceSpan.synthetic('default').toSlice(), positional: args.positional }); } else { var target = args.named.get('to'); if (args.named.size > 1 || target === null) { return (0, _result.Err)((0, _syntax.generateSyntaxError)("yield only takes a single named argument: 'to'", args.named.loc)); } if (_syntax.ASTv2.isLiteral(target, 'string')) { return (0, _result.Ok)({ target: target.toSlice(), positional: args.positional }); } else { return (0, _result.Err)((0, _syntax.generateSyntaxError)("you can only yield to a literal string value", target.loc)); } } }, translate: function translate(_ref, _ref2) { var node = _ref.node, state = _ref.state; var target = _ref2.target, positional = _ref2.positional; return _expressions.VISIT_EXPRS.Positional(positional, state).mapOk(function (positional) { return new mir.Yield({ loc: node.loc, target: target, to: state.scope.allocateBlock(target.chars), positional: positional }); }); } }).kw('debugger', { assert: function assert(node) { var args = node.args; var positional = args.positional; if (args.isEmpty()) { return (0, _result.Ok)(undefined); } else { if (positional.isEmpty()) { return (0, _result.Err)((0, _syntax.generateSyntaxError)("debugger does not take any named arguments", node.loc)); } else { return (0, _result.Err)((0, _syntax.generateSyntaxError)("debugger does not take any positional arguments", node.loc)); } } }, translate: function translate(_ref3) { var node = _ref3.node, scope = _ref3.state.scope; scope.setHasEval(); return (0, _result.Ok)(new mir.Debugger({ loc: node.loc, scope: scope })); } }).kw('component', { assert: (0, _curry.assertCurryKeyword)(0 /* Component */ ), translate: function translate(_ref4, _ref5) { var node = _ref4.node, state = _ref4.state; var definition = _ref5.definition, args = _ref5.args; var definitionResult = _expressions.VISIT_EXPRS.visit(definition, state); var argsResult = _expressions.VISIT_EXPRS.Args(args, state); return _result.Result.all(definitionResult, argsResult).mapOk(function (_ref6) { var definition = _ref6[0], args = _ref6[1]; return new mir.InvokeComponent({ loc: node.loc, definition: definition, args: args, blocks: null }); }); } }).kw('helper', { assert: (0, _curry.assertCurryKeyword)(1 /* Helper */ ), translate: function translate(_ref7, _ref8) { var node = _ref7.node, state = _ref7.state; var definition = _ref8.definition, args = _ref8.args; var definitionResult = _expressions.VISIT_EXPRS.visit(definition, state); var argsResult = _expressions.VISIT_EXPRS.Args(args, state); return _result.Result.all(definitionResult, argsResult).mapOk(function (_ref9) { var definition = _ref9[0], args = _ref9[1]; var text = new mir.CallExpression({ callee: definition, args: args, loc: node.loc }); return new mir.AppendTextNode({ loc: node.loc, text: text }); }); } }); exports.APPEND_KEYWORDS = APPEND_KEYWORDS; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9wYXNzZXMvMS1ub3JtYWxpemF0aW9uL2tleXdvcmRzL2FwcGVuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVPLElBQU0sZUFBZSxHQUFHLG9CQUFBLFFBQUEsRUFBQSxFQUFBLENBQUEsV0FBQSxFQUNaLDRCQUFTLCtCQURHLFdBQ0gsQ0FBVCxDQURZLEVBQUEsRUFBQSxDQUFBLGtCQUFBLEVBRUwsNEJBQVMsK0JBRkosa0JBRUksQ0FBVCxDQUZLLEVBQUEsRUFBQSxDQUFBLGtCQUFBLEVBR0wsNEJBSEssaUNBR0wsQ0FISyxFQUFBLEVBQUEsQ0FBQSxLQUFBLEVBSWxCLDRCQUprQixlQUlsQixDQUprQixFQUFBLEVBQUEsQ0FBQSxJQUFBLEVBS25CLDRCQUFTLHFDQUxVLElBS1YsQ0FBVCxDQUxtQixFQUFBLEVBQUEsQ0FBQSxRQUFBLEVBTWYsNEJBQVMscUNBTk0sUUFNTixDQUFULENBTmUsRUFBQSxFQUFBLENBQUEsT0FBQSxFQU9oQjtBQUNYLEVBQUEsTUFEVyxFQUFBLFNBQUEsTUFBQSxDQUFBLElBQUEsRUFFZ0I7QUFBQSxRQUtuQixJQUxtQixHQUt6QixJQUx5QixDQUFBLElBQUE7O0FBT3pCLFFBQUksSUFBSSxDQUFKLEtBQUEsQ0FBSixPQUFJLEVBQUosRUFBMEI7QUFDeEIsYUFBTyxnQkFBRztBQUNSLFFBQUEsTUFBTSxFQUFFLG1CQUFBLFNBQUEsQ0FBQSxTQUFBLEVBREEsT0FDQSxFQURBO0FBRVIsUUFBQSxVQUFVLEVBQUUsSUFBSSxDQUFDO0FBRlQsT0FBSCxDQUFQO0FBREYsS0FBQSxNQUtPO0FBQ0wsVUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFKLEtBQUEsQ0FBQSxHQUFBLENBQWIsSUFBYSxD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QSxVQUFBLEVBQXZCLEtBQXVCLENBQXZCOztBQUNBLFFBQUksVUFBVSxHQUFHLHlCQUFBLElBQUEsQ0FBQSxJQUFBLEVBQWpCLEtBQWlCLENBQWpCOztBQUVBLFdBQU8sZUFBQSxHQUFBLENBQUEsZ0JBQUEsRUFBQSxVQUFBLEVBQUEsS0FBQSxDQUErQyxVQUFBLEtBQUEsRUFBdUI7QUFBQSxVQUF0QixVQUFzQixHQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUE7QUFBQSxVQUF2QixJQUF1QixHQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUE7QUFDM0UsVUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQVAsY0FBQSxDQUF1QjtBQUFFLFFBQUEsTUFBTSxFQUFSLFVBQUE7QUFBc0IsUUFBQSxJQUF0QixFQUFBLElBQUE7QUFBNEIsUUFBQSxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBQXRDLE9BQXZCLENBQVg7QUFFQSxhQUFPLElBQUksR0FBRyxDQUFQLGNBQUEsQ0FBdUI7QUFDNUIsUUFBQSxHQUFHLEVBQUUsSUFBSSxDQURtQixHQUFBO0FBRTVCLFFBQUEsSUFBQSxFQUFBO0FBRjRCLE9BQXZCLENBQVA7QUFIRixLQUFPLENBQVA7QUFRRDtBQWxCVyxDQS9HZSxDQUF4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1cnJpZWRUeXBlIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBU1R2MiwgZ2VuZXJhdGVTeW50YXhFcnJvciwgU291cmNlU2xpY2UsIFNvdXJjZVNwYW4gfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuXG5pbXBvcnQgeyBFcnIsIE9rLCBSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvcmVzdWx0JztcbmltcG9ydCAqIGFzIG1pciBmcm9tICcuLi8uLi8yLWVuY29kaW5nL21pcic7XG5pbXBvcnQgeyBOb3JtYWxpemF0aW9uU3RhdGUgfSBmcm9tICcuLi9jb250ZXh0JztcbmltcG9ydCB7IFZJU0lUX0VYUFJTIH0gZnJvbSAnLi4vdmlzaXRvcnMvZXhwcmVzc2lvbnMnO1xuaW1wb3J0IHsga2V5d29yZHMgfSBmcm9tICcuL2ltcGwnO1xuaW1wb3J0IHsgdG9BcHBlbmQgfSBmcm9tICcuL3V0aWxzL2NhbGwtdG8tYXBwZW5kJztcbmltcG9ydCB7IGFzc2VydEN1cnJ5S2V5d29yZCB9IGZyb20gJy4vdXRpbHMvY3VycnknO1xuaW1wb3J0IHsgZ2V0RHluYW1pY1ZhcktleXdvcmQgfSBmcm9tICcuL3V0aWxzL2R5bmFtaWMtdmFycyc7XG5pbXBvcnQgeyBoYXNCbG9ja0tleXdvcmQgfSBmcm9tICcuL3V0aWxzL2hhcy1ibG9jayc7XG5pbXBvcnQgeyBpZlVubGVzc0lubGluZUtleXdvcmQgfSBmcm9tICcuL3V0aWxzL2lmLXVubGVzcyc7XG5pbXBvcnQgeyBsb2dLZXl3b3JkIH0gZnJvbSAnLi91dGlscy9sb2cnO1xuXG5leHBvcnQgY29uc3QgQVBQRU5EX0tFWVdPUkRTID0ga2V5d29yZHMoJ0FwcGVuZCcpXG4gIC5rdygnaGFzLWJsb2NrJywgdG9BcHBlbmQoaGFzQmxvY2tLZXl3b3JkKCdoYXMtYmxvY2snKSkpXG4gIC5rdygnaGFzLWJsb2NrLXBhcmFtcycsIHRvQXBwZW5kKGhhc0Jsb2NrS2V5d29yZCgnaGFzLWJsb2NrLXBhcmFtcycpKSlcbiAgLmt3KCctZ2V0LWR5bmFtaWMtdmFyJywgdG9BcHBlbmQoZ2V0RHluYW1pY1ZhcktleXdvcmQpKVxuICAua3coJ2xvZycsIHRvQXBwZW5kKGxvZ0tleXdvcmQpKVxuICAua3coJ2lmJywgdG9BcHBlbmQoaWZVbmxlc3NJbmxpbmVLZXl3b3JkKCdpZicpKSlcbiAgLmt3KCd1bmxlc3MnLCB0b0FwcGVuZChpZlVubGVzc0lubGluZUtleXdvcmQoJ3VubGVzcycpKSlcbiAgLmt3KCd5aWVsZCcsIHtcbiAgICBhc3NlcnQoXG4gICAgICBub2RlOiBBU1R2Mi5BcHBlbmRDb250ZW50XG4gICAgKTogUmVzdWx0PHtcbiAgICAgIHRhcmdldDogU291cmNlU2xpY2U7XG4gICAgICBwb3NpdGlvbmFsOiBBU1R2Mi5Qb3NpdGlvbmFsQXJndW1lbnRzO1xuICAgIH0+IHtcbiAgICAgIGxldCB7IGFyZ3MgfSA9IG5vZGU7XG5cbiAgICAgIGlmIChhcmdzLm5hbWVkLmlzRW1wdHkoKSkge1xuICAgICAgICByZXR1cm4gT2soe1xuICAgICAgICAgIHRhcmdldDogU291cmNlU3Bhbi5zeW50aGV0aWMoJ2RlZmF1bHQnKS50b1NsaWNlKCksXG4gICAgICAgICAgcG9zaXRpb25hbDogYXJncy5wb3NpdGlvbmFsLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB0YXJnZXQgPSBhcmdzLm5hbWVkLmdldCgndG8nKTtcblxuICAgICAgICBpZiAoYXJncy5uYW1lZC5zaXplID4gMSB8fCB0YXJnZXQgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gRXJyKFxuICAgICAgICAgICAgZ2VuZXJhdGVTeW50YXhFcnJvcihgeWllbGQgb25seSB0YWtlcyBhIHNpbmdsZSBuYW1lZCBhcmd1bWVudDogJ3RvJ2AsIGFyZ3MubmFtZWQubG9jKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQVNUdjIuaXNMaXRlcmFsKHRhcmdldCwgJ3N0cmluZycpKSB7XG4gICAgICAgICAgcmV0dXJuIE9rKHsgdGFyZ2V0OiB0YXJnZXQudG9TbGljZSgpLCBwb3NpdGlvbmFsOiBhcmdzLnBvc2l0aW9uYWwgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIEVycihcbiAgICAgICAgICAgIGdlbmVyYXRlU3ludGF4RXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgc3RyaW5nIHZhbHVlYCwgdGFyZ2V0LmxvYylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHRyYW5zbGF0ZShcbiAgICAgIHsgbm9kZSwgc3RhdGUgfTogeyBub2RlOiBBU1R2Mi5BcHBlbmRDb250ZW50OyBzdGF0ZTogTm9ybWFsaXphdGlvblN0YXRlIH0sXG4gICAgICB7XG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgcG9zaXRpb25hbCxcbiAgICAgIH06IHtcbiAgICAgICAgdGFyZ2V0OiBTb3VyY2VTbGljZTtcbiAgICAgICAgcG9zaXRpb25hbDogQVNUdjIuUG9zaXRpb25hbEFyZ3VtZW50cztcbiAgICAgIH1cbiAgICApOiBSZXN1bHQ8bWlyLlN0YXRlbWVudD4ge1xuICAgICAgcmV0dXJuIFZJU0lUX0VYUFJTLlBvc2l0aW9uYWwocG9zaXRpb25hbCwgc3RhdGUpLm1hcE9rKFxuICAgICAgICAocG9zaXRpb25hbCkgPT5cbiAgICAgICAgICBuZXcgbWlyLllpZWxkKHtcbiAgICAgICAgICAgIGxvYzogbm9kZS5sb2MsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB0bzogc3RhdGUuc2NvcGUuYWxsb2NhdGVCbG9jayh0YXJnZXQuY2hhcnMpLFxuICAgICAgICAgICAgcG9zaXRpb25hbCxcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9LFxuICB9KVxuICAua3coJ2RlYnVnZ2VyJywge1xuICAgIGFzc2VydChub2RlOiBBU1R2Mi5BcHBlbmRDb250ZW50KTogUmVzdWx0PHZvaWQ+IHtcbiAgICAgIGxldCB7IGFyZ3MgfSA9IG5vZGU7XG4gICAgICBsZXQgeyBwb3NpdGlvbmFsIH0gPSBhcmdzO1xuXG4gICAgICBpZiAoYXJncy5pc0VtcHR5KCkpIHtcbiAgICAgICAgcmV0dXJuIE9rKHVuZGVmaW5lZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocG9zaXRpb25hbC5pc0VtcHR5KCkpIHtcbiAgICAgICAgICByZXR1cm4gRXJyKGdlbmVyYXRlU3ludGF4RXJyb3IoYGRlYnVnZ2VyIGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2AsIG5vZGUubG9jKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIEVycihcbiAgICAgICAgICAgIGdlbmVyYXRlU3ludGF4RXJyb3IoYGRlYnVnZ2VyIGRvZXMgbm90IHRha2UgYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzYCwgbm9kZS5sb2MpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB0cmFuc2xhdGUoe1xuICAgICAgbm9kZSxcbiAgICAgIHN0YXRlOiB7IHNjb3BlIH0sXG4gICAgfToge1xuICAgICAgbm9kZTogQVNUdjIuQXBwZW5kQ29udGVudDtcbiAgICAgIHN0YXRlOiBOb3JtYWxpemF0aW9uU3RhdGU7XG4gICAgfSk6IFJlc3VsdDxtaXIuU3RhdGVtZW50PiB7XG4gICAgICBzY29wZS5zZXRIYXNFdmFsKCk7XG4gICAgICByZXR1cm4gT2sobmV3IG1pci5EZWJ1Z2dlcih7IGxvYzogbm9kZS5sb2MsIHNjb3BlIH0pKTtcbiAgICB9LFxuICB9KVxuICAua3coJ2NvbXBvbmVudCcsIHtcbiAgICBhc3NlcnQ6IGFzc2VydEN1cnJ5S2V5d29yZChDdXJyaWVkVHlwZS5Db21wb25lbnQpLFxuXG4gICAgdHJhbnNsYXRlKFxuICAgICAgeyBub2RlLCBzdGF0ZSB9OiB7IG5vZGU6IEFTVHYyLkFwcGVuZENvbnRlbnQ7IHN0YXRlOiBOb3JtYWxpemF0aW9uU3RhdGUgfSxcbiAgICAgIHsgZGVmaW5pdGlvbiwgYXJncyB9OiB7IGRlZmluaXRpb246IEFTVHYyLkV4cHJlc3Npb25Ob2RlOyBhcmdzOiBBU1R2Mi5BcmdzIH1cbiAgICApOiBSZXN1bHQ8bWlyLkludm9rZUNvbXBvbmVudD4ge1xuICAgICAgbGV0IGRlZmluaXRpb25SZXN1bHQgPSBWSVNJVF9FWFBSUy52aXNpdChkZWZpbml0aW9uLCBzdGF0ZSk7XG4gICAgICBsZXQgYXJnc1Jlc3VsdCA9IFZJU0lUX0VYUFJTLkFyZ3MoYXJncywgc3RhdGUpO1xuXG4gICAgICByZXR1cm4gUmVzdWx0LmFsbChkZWZpbml0aW9uUmVzdWx0LCBhcmdzUmVzdWx0KS5tYXBPayhcbiAgICAgICAgKFtkZWZpbml0aW9uLCBhcmdzXSkgPT5cbiAgICAgICAgICBuZXcgbWlyLkludm9rZUNvbXBvbmVudCh7XG4gICAgICAgICAgICBsb2M6IG5vZGUubG9jLFxuICAgICAgICAgICAgZGVmaW5pdGlvbixcbiAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICBibG9ja3M6IG51bGwsXG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSxcbiAgfSlcbiAgLmt3KCdoZWxwZXInLCB7XG4gICAgYXNzZXJ0OiBhc3NlcnRDdXJyeUtleXdvcmQoQ3VycmllZFR5cGUuSGVscGVyKSxcblxuICAgIHRyYW5zbGF0ZShcbiAgICAgIHsgbm9kZSwgc3RhdGUgfTogeyBub2RlOiBBU1R2Mi5BcHBlbmRDb250ZW50OyBzdGF0ZTogTm9ybWFsaXphdGlvblN0YXRlIH0sXG4gICAgICB7IGRlZmluaXRpb24sIGFyZ3MgfTogeyBkZWZpbml0aW9uOiBBU1R2Mi5FeHByZXNzaW9uTm9kZTsgYXJnczogQVNUdjIuQXJncyB9XG4gICAgKTogUmVzdWx0PG1pci5BcHBlbmRUZXh0Tm9kZT4ge1xuICAgICAgbGV0IGRlZmluaXRpb25SZXN1bHQgPSBWSVNJVF9FWFBSUy52aXNpdChkZWZpbml0aW9uLCBzdGF0ZSk7XG4gICAgICBsZXQgYXJnc1Jlc3VsdCA9IFZJU0lUX0VYUFJTLkFyZ3MoYXJncywgc3RhdGUpO1xuXG4gICAgICByZXR1cm4gUmVzdWx0LmFsbChkZWZpbml0aW9uUmVzdWx0LCBhcmdzUmVzdWx0KS5tYXBPaygoW2RlZmluaXRpb24sIGFyZ3NdKSA9PiB7XG4gICAgICAgIGxldCB0ZXh0ID0gbmV3IG1pci5DYWxsRXhwcmVzc2lvbih7IGNhbGxlZTogZGVmaW5pdGlvbiwgYXJncywgbG9jOiBub2RlLmxvYyB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IG1pci5BcHBlbmRUZXh0Tm9kZSh7XG4gICAgICAgICAgbG9jOiBub2RlLmxvYyxcbiAgICAgICAgICB0ZXh0LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==