UNPKG

@glimmer/runtime

Version:

Minimal runtime needed to render Glimmer templates

55 lines (43 loc) 6.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = createCurryRef; var _env = require("@glimmer/env"); var _reference = require("@glimmer/reference"); var _util = require("@glimmer/util"); var _curriedValue = require("../curried-value"); function createCurryRef(type, inner, owner, args, resolver, isStrict) { let lastValue, curriedDefinition; return (0, _reference.createComputeRef)(() => { let value = (0, _reference.valueForRef)(inner); if (value === lastValue) { return curriedDefinition; } if ((0, _curriedValue.isCurriedType)(value, type)) { curriedDefinition = args ? (0, _curriedValue.curry)(type, value, owner, args) : args; } else if (type === 0 /* Component */ && typeof value === 'string' && value) { // Only components should enter this path, as helpers and modifiers do not // support string based resolution if (_env.DEBUG) { if (isStrict) { throw new Error(`Attempted to resolve a dynamic component with a string definition, \`${value}\` in a strict mode template. In strict mode, using strings to resolve component definitions is prohibited. You can instead import the component definition and use it directly.`); } let resolvedDefinition = resolver.lookupComponent(value, owner); if (!resolvedDefinition) { throw new Error(`Attempted to resolve \`${value}\`, which was expected to be a component, but nothing was found.`); } } curriedDefinition = (0, _curriedValue.curry)(type, value, owner, args); } else if ((0, _util.isObject)(value)) { curriedDefinition = (0, _curriedValue.curry)(type, value, owner, args); } else { curriedDefinition = null; } lastValue = value; return curriedDefinition; }); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL3JlZmVyZW5jZXMvY3VycnktdmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQVVBOztBQUNBOztBQUNBOztBQUVjLFNBQUEsY0FBQSxDQUFBLElBQUEsRUFBQSxLQUFBLEVBQUEsS0FBQSxFQUFBLElBQUEsRUFBQSxRQUFBLEVBQUEsUUFBQSxFQU1LO0FBRWpCLE1BQUEsU0FBQSxFQUFBLGlCQUFBO0FBRUEsU0FBTyxpQ0FBaUIsTUFBSztBQUMzQixRQUFJLEtBQUssR0FBRyw0QkFBWixLQUFZLENBQVo7O0FBRUEsUUFBSSxLQUFLLEtBQVQsU0FBQSxFQUF5QjtBQUN2QixhQUFBLGlCQUFBO0FBQ0Q7O0FBRUQsUUFBSSxpQ0FBYSxLQUFiLEVBQUosSUFBSSxDQUFKLEVBQWdDO0FBQzlCLE1BQUEsaUJBQWlCLEdBQUcsSUFBSSxHQUFHLHlCQUFLLElBQUwsRUFBSyxLQUFMLEVBQUssS0FBTCxFQUFILElBQUcsQ0FBSCxHQUF4QixJQUFBO0FBREYsS0FBQSxNQUVPLElBQUksSUFBSSxLQUFBO0FBQUE7QUFBSixPQUFrQyxPQUFBLEtBQUEsS0FBbEMsUUFBQSxJQUFKLEtBQUEsRUFBMEU7QUFDL0U7QUFDQTtBQUVBLFVBQUEsVUFBQSxFQUFXO0FBQ1QsWUFBQSxRQUFBLEVBQWM7QUFDWixnQkFBTSxJQUFBLEtBQUEsQ0FDSix3RUFBd0UsS0FEMUUsa0xBQU0sQ0FBTjtBQUdEOztBQUVELFlBQUksa0JBQWtCLEdBQ3BCLFFBRHVCLENBQUEsZUFDdkIsQ0FEdUIsS0FDdkIsRUFERixLQUNFLENBREY7O0FBS0EsWUFBSSxDQUFKLGtCQUFBLEVBQXlCO0FBQ3ZCLGdCQUFNLElBQUEsS0FBQSxDQUNKLDBCQUEwQixLQUQ1QixrRUFBTSxDQUFOO0FBR0Q7QUFDRjs7QUFFRCxNQUFBLGlCQUFpQixHQUFHLHlCQUFLLElBQUwsRUFBSyxLQUFMLEVBQUssS0FBTCxFQUFwQixJQUFvQixDQUFwQjtBQXZCSyxLQUFBLE1Bd0JBLElBQUksb0JBQUosS0FBSSxDQUFKLEVBQXFCO0FBQzFCLE1BQUEsaUJBQWlCLEdBQUcseUJBQUssSUFBTCxFQUFLLEtBQUwsRUFBSyxLQUFMLEVBQXBCLElBQW9CLENBQXBCO0FBREssS0FBQSxNQUVBO0FBQ0wsTUFBQSxpQkFBaUIsR0FBakIsSUFBQTtBQUNEOztBQUVELElBQUEsU0FBUyxHQUFULEtBQUE7QUFFQSxXQUFBLGlCQUFBO0FBekNGLEdBQU8sQ0FBUDtBQTJDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFQlVHIH0gZnJvbSAnQGdsaW1tZXIvZW52JztcbmltcG9ydCB7XG4gIENhcHR1cmVkQXJndW1lbnRzLFxuICBDdXJyaWVkVHlwZSxcbiAgRGljdCxcbiAgTWF5YmUsXG4gIE9wdGlvbixcbiAgT3duZXIsXG4gIFJ1bnRpbWVSZXNvbHZlcixcbn0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBjcmVhdGVDb21wdXRlUmVmLCBSZWZlcmVuY2UsIHZhbHVlRm9yUmVmIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IGV4cGVjdCwgaXNPYmplY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IGN1cnJ5LCBpc0N1cnJpZWRUeXBlIH0gZnJvbSAnLi4vY3VycmllZC12YWx1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUN1cnJ5UmVmKFxuICB0eXBlOiBDdXJyaWVkVHlwZSxcbiAgaW5uZXI6IFJlZmVyZW5jZSxcbiAgb3duZXI6IE93bmVyLFxuICBhcmdzOiBPcHRpb248Q2FwdHVyZWRBcmd1bWVudHM+LFxuICByZXNvbHZlcjogUnVudGltZVJlc29sdmVyLFxuICBpc1N0cmljdDogYm9vbGVhblxuKSB7XG4gIGxldCBsYXN0VmFsdWU6IE1heWJlPERpY3Q+IHwgc3RyaW5nLCBjdXJyaWVkRGVmaW5pdGlvbjogb2JqZWN0IHwgc3RyaW5nIHwgbnVsbDtcblxuICByZXR1cm4gY3JlYXRlQ29tcHV0ZVJlZigoKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gdmFsdWVGb3JSZWYoaW5uZXIpIGFzIE1heWJlPERpY3Q+IHwgc3RyaW5nO1xuXG4gICAgaWYgKHZhbHVlID09PSBsYXN0VmFsdWUpIHtcbiAgICAgIHJldHVybiBjdXJyaWVkRGVmaW5pdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoaXNDdXJyaWVkVHlwZSh2YWx1ZSwgdHlwZSkpIHtcbiAgICAgIGN1cnJpZWREZWZpbml0aW9uID0gYXJncyA/IGN1cnJ5KHR5cGUsIHZhbHVlLCBvd25lciwgYXJncykgOiBhcmdzO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gQ3VycmllZFR5cGUuQ29tcG9uZW50ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUpIHtcbiAgICAgIC8vIE9ubHkgY29tcG9uZW50cyBzaG91bGQgZW50ZXIgdGhpcyBwYXRoLCBhcyBoZWxwZXJzIGFuZCBtb2RpZmllcnMgZG8gbm90XG4gICAgICAvLyBzdXBwb3J0IHN0cmluZyBiYXNlZCByZXNvbHV0aW9uXG5cbiAgICAgIGlmIChERUJVRykge1xuICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQXR0ZW1wdGVkIHRvIHJlc29sdmUgYSBkeW5hbWljIGNvbXBvbmVudCB3aXRoIGEgc3RyaW5nIGRlZmluaXRpb24sIFxcYCR7dmFsdWV9XFxgIGluIGEgc3RyaWN0IG1vZGUgdGVtcGxhdGUuIEluIHN0cmljdCBtb2RlLCB1c2luZyBzdHJpbmdzIHRvIHJlc29sdmUgY29tcG9uZW50IGRlZmluaXRpb25zIGlzIHByb2hpYml0ZWQuIFlvdSBjYW4gaW5zdGVhZCBpbXBvcnQgdGhlIGNvbXBvbmVudCBkZWZpbml0aW9uIGFuZCB1c2UgaXQgZGlyZWN0bHkuYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzb2x2ZWREZWZpbml0aW9uID0gZXhwZWN0KFxuICAgICAgICAgIHJlc29sdmVyLFxuICAgICAgICAgICdCVUc6IGV4cGVjdGVkIHJlc29sdmVyIGZvciBjdXJyaWVkIGNvbXBvbmVudCBkZWZpbml0aW9ucydcbiAgICAgICAgKS5sb29rdXBDb21wb25lbnQodmFsdWUsIG93bmVyKTtcblxuICAgICAgICBpZiAoIXJlc29sdmVkRGVmaW5pdGlvbikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBdHRlbXB0ZWQgdG8gcmVzb2x2ZSBcXGAke3ZhbHVlfVxcYCwgd2hpY2ggd2FzIGV4cGVjdGVkIHRvIGJlIGEgY29tcG9uZW50LCBidXQgbm90aGluZyB3YXMgZm91bmQuYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY3VycmllZERlZmluaXRpb24gPSBjdXJyeSh0eXBlLCB2YWx1ZSwgb3duZXIsIGFyZ3MpO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICBjdXJyaWVkRGVmaW5pdGlvbiA9IGN1cnJ5KHR5cGUsIHZhbHVlLCBvd25lciwgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJpZWREZWZpbml0aW9uID0gbnVsbDtcbiAgICB9XG5cbiAgICBsYXN0VmFsdWUgPSB2YWx1ZTtcblxuICAgIHJldHVybiBjdXJyaWVkRGVmaW5pdGlvbjtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9