UNPKG

@glimmer/runtime

Version:

Minimal runtime needed to render Glimmer templates

44 lines (38 loc) 6.42 kB
import { DEBUG } from '@glimmer/env'; import { createComputeRef, valueForRef } from '@glimmer/reference'; import { isObject } from '@glimmer/util'; import { curry, isCurriedType } from '../curried-value'; export default function createCurryRef(type, inner, owner, args, resolver, isStrict) { let lastValue, curriedDefinition; return createComputeRef(() => { let value = valueForRef(inner); if (value === lastValue) { return curriedDefinition; } if (isCurriedType(value, type)) { curriedDefinition = args ? 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 (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 = curry(type, value, owner, args); } else if (isObject(value)) { curriedDefinition = curry(type, value, owner, args); } else { curriedDefinition = null; } lastValue = value; return curriedDefinition; }); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL3JlZmVyZW5jZXMvY3VycnktdmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxLQUFULFFBQXNCLGNBQXRCO0FBVUEsU0FBUyxnQkFBVCxFQUFzQyxXQUF0QyxRQUF5RCxvQkFBekQ7QUFDQSxTQUFpQixRQUFqQixRQUFpQyxlQUFqQztBQUNBLFNBQVMsS0FBVCxFQUFnQixhQUFoQixRQUFxQyxrQkFBckM7QUFFQSxlQUFjLFNBQVUsY0FBVixDQUNaLElBRFksRUFFWixLQUZZLEVBR1osS0FIWSxFQUlaLElBSlksRUFLWixRQUxZLEVBTVosUUFOWSxFQU1LO0FBRWpCLE1BQUksU0FBSixFQUFxQyxpQkFBckM7QUFFQSxTQUFPLGdCQUFnQixDQUFDLE1BQUs7QUFDM0IsUUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUQsQ0FBdkI7O0FBRUEsUUFBSSxLQUFLLEtBQUssU0FBZCxFQUF5QjtBQUN2QixhQUFPLGlCQUFQO0FBQ0Q7O0FBRUQsUUFBSSxhQUFhLENBQUMsS0FBRCxFQUFRLElBQVIsQ0FBakIsRUFBZ0M7QUFDOUIsTUFBQSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUQsRUFBTyxLQUFQLEVBQWMsS0FBZCxFQUFxQixJQUFyQixDQUFSLEdBQXFDLElBQTdEO0FBQ0QsS0FGRCxNQUVPLElBQUksSUFBSSxLQUFBO0FBQUE7QUFBSixPQUFrQyxPQUFPLEtBQVAsS0FBaUIsUUFBbkQsSUFBK0QsS0FBbkUsRUFBMEU7QUFDL0U7QUFDQTtBQUVBLFVBQUksS0FBSixFQUFXO0FBQ1QsWUFBSSxRQUFKLEVBQWM7QUFDWixnQkFBTSxJQUFJLEtBQUosQ0FDSix3RUFBd0UsS0FBSyxrTEFEekUsQ0FBTjtBQUdEOztBQUVELFlBQUksa0JBQWtCLEdBQ3BCLFFBRHVCLENBR3ZCLGVBSHVCLENBR1AsS0FITyxFQUdBLEtBSEEsQ0FBekI7O0FBS0EsWUFBSSxDQUFDLGtCQUFMLEVBQXlCO0FBQ3ZCLGdCQUFNLElBQUksS0FBSixDQUNKLDBCQUEwQixLQUFLLGtFQUQzQixDQUFOO0FBR0Q7QUFDRjs7QUFFRCxNQUFBLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxJQUFELEVBQU8sS0FBUCxFQUFjLEtBQWQsRUFBcUIsSUFBckIsQ0FBekI7QUFDRCxLQXhCTSxNQXdCQSxJQUFJLFFBQVEsQ0FBQyxLQUFELENBQVosRUFBcUI7QUFDMUIsTUFBQSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsSUFBRCxFQUFPLEtBQVAsRUFBYyxLQUFkLEVBQXFCLElBQXJCLENBQXpCO0FBQ0QsS0FGTSxNQUVBO0FBQ0wsTUFBQSxpQkFBaUIsR0FBRyxJQUFwQjtBQUNEOztBQUVELElBQUEsU0FBUyxHQUFHLEtBQVo7QUFFQSxXQUFPLGlCQUFQO0FBQ0QsR0ExQ3NCLENBQXZCO0FBMkNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHtcbiAgQ2FwdHVyZWRBcmd1bWVudHMsXG4gIEN1cnJpZWRUeXBlLFxuICBEaWN0LFxuICBNYXliZSxcbiAgT3B0aW9uLFxuICBPd25lcixcbiAgUnVudGltZVJlc29sdmVyLFxufSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGNyZWF0ZUNvbXB1dGVSZWYsIFJlZmVyZW5jZSwgdmFsdWVGb3JSZWYgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgZXhwZWN0LCBpc09iamVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgY3VycnksIGlzQ3VycmllZFR5cGUgfSBmcm9tICcuLi9jdXJyaWVkLXZhbHVlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ3VycnlSZWYoXG4gIHR5cGU6IEN1cnJpZWRUeXBlLFxuICBpbm5lcjogUmVmZXJlbmNlLFxuICBvd25lcjogT3duZXIsXG4gIGFyZ3M6IE9wdGlvbjxDYXB0dXJlZEFyZ3VtZW50cz4sXG4gIHJlc29sdmVyOiBSdW50aW1lUmVzb2x2ZXIsXG4gIGlzU3RyaWN0OiBib29sZWFuXG4pIHtcbiAgbGV0IGxhc3RWYWx1ZTogTWF5YmU8RGljdD4gfCBzdHJpbmcsIGN1cnJpZWREZWZpbml0aW9uOiBvYmplY3QgfCBzdHJpbmcgfCBudWxsO1xuXG4gIHJldHVybiBjcmVhdGVDb21wdXRlUmVmKCgpID0+IHtcbiAgICBsZXQgdmFsdWUgPSB2YWx1ZUZvclJlZihpbm5lcikgYXMgTWF5YmU8RGljdD4gfCBzdHJpbmc7XG5cbiAgICBpZiAodmFsdWUgPT09IGxhc3RWYWx1ZSkge1xuICAgICAgcmV0dXJuIGN1cnJpZWREZWZpbml0aW9uO1xuICAgIH1cblxuICAgIGlmIChpc0N1cnJpZWRUeXBlKHZhbHVlLCB0eXBlKSkge1xuICAgICAgY3VycmllZERlZmluaXRpb24gPSBhcmdzID8gY3VycnkodHlwZSwgdmFsdWUsIG93bmVyLCBhcmdzKSA6IGFyZ3M7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBDdXJyaWVkVHlwZS5Db21wb25lbnQgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSkge1xuICAgICAgLy8gT25seSBjb21wb25lbnRzIHNob3VsZCBlbnRlciB0aGlzIHBhdGgsIGFzIGhlbHBlcnMgYW5kIG1vZGlmaWVycyBkbyBub3RcbiAgICAgIC8vIHN1cHBvcnQgc3RyaW5nIGJhc2VkIHJlc29sdXRpb25cblxuICAgICAgaWYgKERFQlVHKSB7XG4gICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBdHRlbXB0ZWQgdG8gcmVzb2x2ZSBhIGR5bmFtaWMgY29tcG9uZW50IHdpdGggYSBzdHJpbmcgZGVmaW5pdGlvbiwgXFxgJHt2YWx1ZX1cXGAgaW4gYSBzdHJpY3QgbW9kZSB0ZW1wbGF0ZS4gSW4gc3RyaWN0IG1vZGUsIHVzaW5nIHN0cmluZ3MgdG8gcmVzb2x2ZSBjb21wb25lbnQgZGVmaW5pdGlvbnMgaXMgcHJvaGliaXRlZC4gWW91IGNhbiBpbnN0ZWFkIGltcG9ydCB0aGUgY29tcG9uZW50IGRlZmluaXRpb24gYW5kIHVzZSBpdCBkaXJlY3RseS5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNvbHZlZERlZmluaXRpb24gPSBleHBlY3QoXG4gICAgICAgICAgcmVzb2x2ZXIsXG4gICAgICAgICAgJ0JVRzogZXhwZWN0ZWQgcmVzb2x2ZXIgZm9yIGN1cnJpZWQgY29tcG9uZW50IGRlZmluaXRpb25zJ1xuICAgICAgICApLmxvb2t1cENvbXBvbmVudCh2YWx1ZSwgb3duZXIpO1xuXG4gICAgICAgIGlmICghcmVzb2x2ZWREZWZpbml0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEF0dGVtcHRlZCB0byByZXNvbHZlIFxcYCR7dmFsdWV9XFxgLCB3aGljaCB3YXMgZXhwZWN0ZWQgdG8gYmUgYSBjb21wb25lbnQsIGJ1dCBub3RoaW5nIHdhcyBmb3VuZC5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjdXJyaWVkRGVmaW5pdGlvbiA9IGN1cnJ5KHR5cGUsIHZhbHVlLCBvd25lciwgYXJncyk7XG4gICAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIGN1cnJpZWREZWZpbml0aW9uID0gY3VycnkodHlwZSwgdmFsdWUsIG93bmVyLCBhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmllZERlZmluaXRpb24gPSBudWxsO1xuICAgIH1cblxuICAgIGxhc3RWYWx1ZSA9IHZhbHVlO1xuXG4gICAgcmV0dXJuIGN1cnJpZWREZWZpbml0aW9uO1xuICB9KTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=