UNPKG

@glimmer/compiler

Version:
98 lines (82 loc) 10.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.assertCurryKeyword = assertCurryKeyword; exports.curryKeyword = curryKeyword; 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; } const CurriedTypeToReadableType = { [0 /* Component */ ]: 'component', [1 /* Helper */ ]: 'helper', [2 /* Modifier */ ]: 'modifier' }; function assertCurryKeyword(curriedType) { return (node, state) => { let readableType = CurriedTypeToReadableType[curriedType]; let stringsAllowed = curriedType === 0 /* Component */ ; let { args } = node; let definition = args.nth(0); if (definition === null) { return (0, _result.Err)((0, _syntax.generateSyntaxError)(`(${readableType}) requires a ${readableType} definition or identifier as its first positional parameter, did not receive any parameters.`, args.loc)); } if (definition.type === 'Literal') { if (stringsAllowed && state.isStrict) { return (0, _result.Err)((0, _syntax.generateSyntaxError)(`(${readableType}) cannot resolve string values in strict mode templates`, node.loc)); } else if (!stringsAllowed) { return (0, _result.Err)((0, _syntax.generateSyntaxError)(`(${readableType}) cannot resolve string values, you must pass a ${readableType} definition directly`, node.loc)); } } args = new _syntax.ASTv2.Args({ positional: new _syntax.ASTv2.PositionalArguments({ exprs: args.positional.exprs.slice(1), loc: args.positional.loc }), named: args.named, loc: args.loc }); return (0, _result.Ok)({ definition, args }); }; } function translateCurryKeyword(curriedType) { return ({ node, state }, { definition, args }) => { let definitionResult = _expressions.VISIT_EXPRS.visit(definition, state); let argsResult = _expressions.VISIT_EXPRS.Args(args, state); return _result.Result.all(definitionResult, argsResult).mapOk(([definition, args]) => new mir.Curry({ loc: node.loc, curriedType, definition, args })); }; } function curryKeyword(curriedType) { return { assert: assertCurryKeyword(curriedType), translate: translateCurryKeyword(curriedType) }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9wYXNzZXMvMS1ub3JtYWxpemF0aW9uL2tleXdvcmRzL3V0aWxzL2N1cnJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBRUE7Ozs7OztBQUdBLE1BQU0seUJBQXlCLEdBQUc7QUFDaEMsR0FBQTtBQUFBO0FBQUEsS0FEZ0MsV0FBQTtBQUVoQyxHQUFBO0FBQUE7QUFBQSxLQUZnQyxRQUFBO0FBR2hDLEdBQUE7QUFBQTtBQUFBLEtBQXdCO0FBSFEsQ0FBbEM7O0FBTU0sU0FBQSxrQkFBQSxDQUFBLFdBQUEsRUFBcUQ7QUFDekQsU0FBTyxDQUFBLElBQUEsRUFBQSxLQUFBLEtBTUY7QUFDSCxRQUFJLFlBQVksR0FBRyx5QkFBeUIsQ0FBNUMsV0FBNEMsQ0FBNUM7QUFDQSxRQUFJLGNBQWMsR0FBRyxXQUFXLEtBQUE7QUFBQTtBQUFoQztBQUVBLFFBQUk7QUFBRSxNQUFBO0FBQUYsUUFBSixJQUFBO0FBRUEsUUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFKLEdBQUEsQ0FBakIsQ0FBaUIsQ0FBakI7O0FBRUEsUUFBSSxVQUFVLEtBQWQsSUFBQSxFQUF5QjtBQUN2QixhQUFPLGlCQUNMLGlDQUNFLElBQUksWUFBWSxnQkFBZ0IsWUFEZiw4RkFBbkIsRUFFRSxJQUFJLENBSFIsR0FDRSxDQURLLENBQVA7QUFNRDs7QUFFRCxRQUFJLFVBQVUsQ0FBVixJQUFBLEtBQUosU0FBQSxFQUFtQztBQUNqQyxVQUFJLGNBQWMsSUFBSSxLQUFLLENBQTNCLFFBQUEsRUFBc0M7QUFDcEMsZUFBTyxpQkFDTCxpQ0FDRSxJQUFJLFlBRGEseURBQW5CLEVBRUUsSUFBSSxDQUhSLEdBQ0UsQ0FESyxDQUFQO0FBREYsT0FBQSxNQU9PLElBQUksQ0FBSixjQUFBLEVBQXFCO0FBQzFCLGVBQU8saUJBQ0wsaUNBQ0UsSUFBSSxZQUFZLG1EQUFtRCxZQURsRCxzQkFBbkIsRUFFRSxJQUFJLENBSFIsR0FDRSxDQURLLENBQVA7QUFNRDtBQUNGOztBQUVELElBQUEsSUFBSSxHQUFHLElBQUksY0FBSixJQUFBLENBQWU7QUFDcEIsTUFBQSxVQUFVLEVBQUUsSUFBSSxjQUFKLG1CQUFBLENBQThCO0FBQ3hDLFFBQUEsS0FBSyxFQUFFLElBQUksQ0FBSixVQUFBLENBQUEsS0FBQSxDQUFBLEtBQUEsQ0FEaUMsQ0FDakMsQ0FEaUM7QUFFeEMsUUFBQSxHQUFHLEVBQUUsSUFBSSxDQUFKLFVBQUEsQ0FBZ0I7QUFGbUIsT0FBOUIsQ0FEUTtBQUtwQixNQUFBLEtBQUssRUFBRSxJQUFJLENBTFMsS0FBQTtBQU1wQixNQUFBLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFOVSxLQUFmLENBQVA7QUFTQSxXQUFPLGdCQUFHO0FBQUEsTUFBQSxVQUFBO0FBQWMsTUFBQTtBQUFkLEtBQUgsQ0FBUDtBQWxERixHQUFBO0FBb0REOztBQUVELFNBQUEscUJBQUEsQ0FBQSxXQUFBLEVBQXVEO0FBQ3JELFNBQU8sQ0FDTDtBQUFBLElBQUEsSUFBQTtBQUVFLElBQUE7QUFGRixHQURLLEVBS0w7QUFBQSxJQUFBLFVBQUE7QUFBYyxJQUFBO0FBQWQsR0FMSyxLQU1nQjtBQUNyQixRQUFJLGdCQUFnQixHQUFHLHlCQUFBLEtBQUEsQ0FBQSxVQUFBLEVBQXZCLEtBQXVCLENBQXZCOztBQUNBLFFBQUksVUFBVSxHQUFHLHlCQUFBLElBQUEsQ0FBQSxJQUFBLEVBQWpCLEtBQWlCLENBQWpCOztBQUVBLFdBQU8sZUFBQSxHQUFBLENBQUEsZ0JBQUEsRUFBQSxVQUFBLEVBQUEsS0FBQSxDQUNMLENBQUMsQ0FBQSxVQUFBLEVBQUQsSUFBQyxDQUFELEtBQ0UsSUFBSSxHQUFHLENBQVAsS0FBQSxDQUFjO0FBQ1osTUFBQSxHQUFHLEVBQUUsSUFBSSxDQURHLEdBQUE7QUFBQSxNQUFBLFdBQUE7QUFBQSxNQUFBLFVBQUE7QUFJWixNQUFBO0FBSlksS0FBZCxDQUZHLENBQVA7QUFWRixHQUFBO0FBb0JEOztBQUVLLFNBQUEsWUFBQSxDQUFBLFdBQUEsRUFDb0I7QUFNeEIsU0FBTztBQUNMLElBQUEsTUFBTSxFQUFFLGtCQUFrQixDQURyQixXQUNxQixDQURyQjtBQUVMLElBQUEsU0FBUyxFQUFFLHFCQUFxQixDQUFBLFdBQUE7QUFGM0IsR0FBUDtBQUlEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VycmllZFR5cGUgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFTVHYyLCBnZW5lcmF0ZVN5bnRheEVycm9yIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcblxuaW1wb3J0IHsgRXJyLCBPaywgUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3Jlc3VsdCc7XG5pbXBvcnQgKiBhcyBtaXIgZnJvbSAnLi4vLi4vLi4vMi1lbmNvZGluZy9taXInO1xuaW1wb3J0IHsgTm9ybWFsaXphdGlvblN0YXRlIH0gZnJvbSAnLi4vLi4vY29udGV4dCc7XG5pbXBvcnQgeyBWSVNJVF9FWFBSUyB9IGZyb20gJy4uLy4uL3Zpc2l0b3JzL2V4cHJlc3Npb25zJztcbmltcG9ydCB7IEtleXdvcmREZWxlZ2F0ZSB9IGZyb20gJy4uL2ltcGwnO1xuXG5jb25zdCBDdXJyaWVkVHlwZVRvUmVhZGFibGVUeXBlID0ge1xuICBbQ3VycmllZFR5cGUuQ29tcG9uZW50XTogJ2NvbXBvbmVudCcsXG4gIFtDdXJyaWVkVHlwZS5IZWxwZXJdOiAnaGVscGVyJyxcbiAgW0N1cnJpZWRUeXBlLk1vZGlmaWVyXTogJ21vZGlmaWVyJyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRDdXJyeUtleXdvcmQoY3VycmllZFR5cGU6IEN1cnJpZWRUeXBlKSB7XG4gIHJldHVybiAoXG4gICAgbm9kZTogQVNUdjIuQXBwZW5kQ29udGVudCB8IEFTVHYyLkludm9rZUJsb2NrIHwgQVNUdjIuQ2FsbEV4cHJlc3Npb24sXG4gICAgc3RhdGU6IE5vcm1hbGl6YXRpb25TdGF0ZVxuICApOiBSZXN1bHQ8e1xuICAgIGRlZmluaXRpb246IEFTVHYyLkV4cHJlc3Npb25Ob2RlO1xuICAgIGFyZ3M6IEFTVHYyLkFyZ3M7XG4gIH0+ID0+IHtcbiAgICBsZXQgcmVhZGFibGVUeXBlID0gQ3VycmllZFR5cGVUb1JlYWRhYmxlVHlwZVtjdXJyaWVkVHlwZV07XG4gICAgbGV0IHN0cmluZ3NBbGxvd2VkID0gY3VycmllZFR5cGUgPT09IEN1cnJpZWRUeXBlLkNvbXBvbmVudDtcblxuICAgIGxldCB7IGFyZ3MgfSA9IG5vZGU7XG5cbiAgICBsZXQgZGVmaW5pdGlvbiA9IGFyZ3MubnRoKDApO1xuXG4gICAgaWYgKGRlZmluaXRpb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBFcnIoXG4gICAgICAgIGdlbmVyYXRlU3ludGF4RXJyb3IoXG4gICAgICAgICAgYCgke3JlYWRhYmxlVHlwZX0pIHJlcXVpcmVzIGEgJHtyZWFkYWJsZVR5cGV9IGRlZmluaXRpb24gb3IgaWRlbnRpZmllciBhcyBpdHMgZmlyc3QgcG9zaXRpb25hbCBwYXJhbWV0ZXIsIGRpZCBub3QgcmVjZWl2ZSBhbnkgcGFyYW1ldGVycy5gLFxuICAgICAgICAgIGFyZ3MubG9jXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGRlZmluaXRpb24udHlwZSA9PT0gJ0xpdGVyYWwnKSB7XG4gICAgICBpZiAoc3RyaW5nc0FsbG93ZWQgJiYgc3RhdGUuaXNTdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIEVycihcbiAgICAgICAgICBnZW5lcmF0ZVN5bnRheEVycm9yKFxuICAgICAgICAgICAgYCgke3JlYWRhYmxlVHlwZX0pIGNhbm5vdCByZXNvbHZlIHN0cmluZyB2YWx1ZXMgaW4gc3RyaWN0IG1vZGUgdGVtcGxhdGVzYCxcbiAgICAgICAgICAgIG5vZGUubG9jXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICghc3RyaW5nc0FsbG93ZWQpIHtcbiAgICAgICAgcmV0dXJuIEVycihcbiAgICAgICAgICBnZW5lcmF0ZVN5bnRheEVycm9yKFxuICAgICAgICAgICAgYCgke3JlYWRhYmxlVHlwZX0pIGNhbm5vdCByZXNvbHZlIHN0cmluZyB2YWx1ZXMsIHlvdSBtdXN0IHBhc3MgYSAke3JlYWRhYmxlVHlwZX0gZGVmaW5pdGlvbiBkaXJlY3RseWAsXG4gICAgICAgICAgICBub2RlLmxvY1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhcmdzID0gbmV3IEFTVHYyLkFyZ3Moe1xuICAgICAgcG9zaXRpb25hbDogbmV3IEFTVHYyLlBvc2l0aW9uYWxBcmd1bWVudHMoe1xuICAgICAgICBleHByczogYXJncy5wb3NpdGlvbmFsLmV4cHJzLnNsaWNlKDEpLFxuICAgICAgICBsb2M6IGFyZ3MucG9zaXRpb25hbC5sb2MsXG4gICAgICB9KSxcbiAgICAgIG5hbWVkOiBhcmdzLm5hbWVkLFxuICAgICAgbG9jOiBhcmdzLmxvYyxcbiAgICB9KTtcblxuICAgIHJldHVybiBPayh7IGRlZmluaXRpb24sIGFyZ3MgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUN1cnJ5S2V5d29yZChjdXJyaWVkVHlwZTogQ3VycmllZFR5cGUpIHtcbiAgcmV0dXJuIChcbiAgICB7XG4gICAgICBub2RlLFxuICAgICAgc3RhdGUsXG4gICAgfTogeyBub2RlOiBBU1R2Mi5DYWxsRXhwcmVzc2lvbiB8IEFTVHYyLkFwcGVuZENvbnRlbnQ7IHN0YXRlOiBOb3JtYWxpemF0aW9uU3RhdGUgfSxcbiAgICB7IGRlZmluaXRpb24sIGFyZ3MgfTogeyBkZWZpbml0aW9uOiBBU1R2Mi5FeHByZXNzaW9uTm9kZTsgYXJnczogQVNUdjIuQXJncyB9XG4gICk6IFJlc3VsdDxtaXIuQ3Vycnk+ID0+IHtcbiAgICBsZXQgZGVmaW5pdGlvblJlc3VsdCA9IFZJU0lUX0VYUFJTLnZpc2l0KGRlZmluaXRpb24sIHN0YXRlKTtcbiAgICBsZXQgYXJnc1Jlc3VsdCA9IFZJU0lUX0VYUFJTLkFyZ3MoYXJncywgc3RhdGUpO1xuXG4gICAgcmV0dXJuIFJlc3VsdC5hbGwoZGVmaW5pdGlvblJlc3VsdCwgYXJnc1Jlc3VsdCkubWFwT2soXG4gICAgICAoW2RlZmluaXRpb24sIGFyZ3NdKSA9PlxuICAgICAgICBuZXcgbWlyLkN1cnJ5KHtcbiAgICAgICAgICBsb2M6IG5vZGUubG9jLFxuICAgICAgICAgIGN1cnJpZWRUeXBlLFxuICAgICAgICAgIGRlZmluaXRpb24sXG4gICAgICAgICAgYXJncyxcbiAgICAgICAgfSlcbiAgICApO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3VycnlLZXl3b3JkKFxuICBjdXJyaWVkVHlwZTogQ3VycmllZFR5cGVcbik6IEtleXdvcmREZWxlZ2F0ZTxcbiAgQVNUdjIuQ2FsbEV4cHJlc3Npb24gfCBBU1R2Mi5BcHBlbmRDb250ZW50LFxuICB7IGRlZmluaXRpb246IEFTVHYyLkV4cHJlc3Npb25Ob2RlOyBhcmdzOiBBU1R2Mi5BcmdzIH0sXG4gIG1pci5DdXJyeVxuPiB7XG4gIHJldHVybiB7XG4gICAgYXNzZXJ0OiBhc3NlcnRDdXJyeUtleXdvcmQoY3VycmllZFR5cGUpLFxuICAgIHRyYW5zbGF0ZTogdHJhbnNsYXRlQ3VycnlLZXl3b3JkKGN1cnJpZWRUeXBlKSxcbiAgfTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=