@glimmer/runtime
Version:
Minimal runtime needed to render Glimmer templates
44 lines (38 loc) • 6.37 kB
JavaScript
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) {
var lastValue, curriedDefinition;
return createComputeRef(function () {
var 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.");
}
var 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL3JlZmVyZW5jZXMvY3VycnktdmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBQSxLQUFBLFFBQUEsY0FBQTtBQVVBLFNBQUEsZ0JBQUEsRUFBQSxXQUFBLFFBQUEsb0JBQUE7QUFDQSxTQUFBLFFBQUEsUUFBQSxlQUFBO0FBQ0EsU0FBQSxLQUFBLEVBQUEsYUFBQSxRQUFBLGtCQUFBO0FBRUEsZUFBYyxTQUFBLGNBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUFBLEtBQUEsRUFBQSxJQUFBLEVBQUEsUUFBQSxFQUFBLFFBQUEsRUFNSztBQUVqQixNQUFBLFNBQUEsRUFBQSxpQkFBQTtBQUVBLFNBQU8sZ0JBQWdCLENBQUMsWUFBSztBQUMzQixRQUFJLEtBQUssR0FBRyxXQUFXLENBQXZCLEtBQXVCLENBQXZCOztBQUVBLFFBQUksS0FBSyxLQUFULFNBQUEsRUFBeUI7QUFDdkIsYUFBQSxpQkFBQTtBQUNEOztBQUVELFFBQUksYUFBYSxDQUFBLEtBQUEsRUFBakIsSUFBaUIsQ0FBakIsRUFBZ0M7QUFDOUIsTUFBQSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFBLElBQUEsRUFBQSxLQUFBLEVBQUEsS0FBQSxFQUFSLElBQVEsQ0FBUixHQUF4QixJQUFBO0FBREYsS0FBQSxNQUVPLElBQUksSUFBSSxLQUFBO0FBQUE7QUFBSixPQUFrQyxPQUFBLEtBQUEsS0FBbEMsUUFBQSxJQUFKLEtBQUEsRUFBMEU7QUFDL0U7QUFDQTtBQUVBLFVBQUEsS0FBQSxFQUFXO0FBQ1QsWUFBQSxRQUFBLEVBQWM7QUFDWixnQkFBTSxJQUFBLEtBQUEsMEVBQU4sS0FBTSxxTEFBTjtBQUdEOztBQUVELFlBQUksa0JBQWtCLEdBQ3BCLFFBRHVCLENBQUEsZUFDdkIsQ0FEdUIsS0FDdkIsRUFERixLQUNFLENBREY7O0FBS0EsWUFBSSxDQUFKLGtCQUFBLEVBQXlCO0FBQ3ZCLGdCQUFNLElBQUEsS0FBQSw0QkFBTixLQUFNLHFFQUFOO0FBR0Q7QUFDRjs7QUFFRCxNQUFBLGlCQUFpQixHQUFHLEtBQUssQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUFBLEtBQUEsRUFBekIsSUFBeUIsQ0FBekI7QUF2QkssS0FBQSxNQXdCQSxJQUFJLFFBQVEsQ0FBWixLQUFZLENBQVosRUFBcUI7QUFDMUIsTUFBQSxpQkFBaUIsR0FBRyxLQUFLLENBQUEsSUFBQSxFQUFBLEtBQUEsRUFBQSxLQUFBLEVBQXpCLElBQXlCLENBQXpCO0FBREssS0FBQSxNQUVBO0FBQ0wsTUFBQSxpQkFBaUIsR0FBakIsSUFBQTtBQUNEOztBQUVELElBQUEsU0FBUyxHQUFULEtBQUE7QUFFQSxXQUFBLGlCQUFBO0FBekNGLEdBQXVCLENBQXZCO0FBMkNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHtcbiAgQ2FwdHVyZWRBcmd1bWVudHMsXG4gIEN1cnJpZWRUeXBlLFxuICBEaWN0LFxuICBNYXliZSxcbiAgT3B0aW9uLFxuICBPd25lcixcbiAgUnVudGltZVJlc29sdmVyLFxufSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGNyZWF0ZUNvbXB1dGVSZWYsIFJlZmVyZW5jZSwgdmFsdWVGb3JSZWYgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgZXhwZWN0LCBpc09iamVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgY3VycnksIGlzQ3VycmllZFR5cGUgfSBmcm9tICcuLi9jdXJyaWVkLXZhbHVlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ3VycnlSZWYoXG4gIHR5cGU6IEN1cnJpZWRUeXBlLFxuICBpbm5lcjogUmVmZXJlbmNlLFxuICBvd25lcjogT3duZXIsXG4gIGFyZ3M6IE9wdGlvbjxDYXB0dXJlZEFyZ3VtZW50cz4sXG4gIHJlc29sdmVyOiBSdW50aW1lUmVzb2x2ZXIsXG4gIGlzU3RyaWN0OiBib29sZWFuXG4pIHtcbiAgbGV0IGxhc3RWYWx1ZTogTWF5YmU8RGljdD4gfCBzdHJpbmcsIGN1cnJpZWREZWZpbml0aW9uOiBvYmplY3QgfCBzdHJpbmcgfCBudWxsO1xuXG4gIHJldHVybiBjcmVhdGVDb21wdXRlUmVmKCgpID0+IHtcbiAgICBsZXQgdmFsdWUgPSB2YWx1ZUZvclJlZihpbm5lcikgYXMgTWF5YmU8RGljdD4gfCBzdHJpbmc7XG5cbiAgICBpZiAodmFsdWUgPT09IGxhc3RWYWx1ZSkge1xuICAgICAgcmV0dXJuIGN1cnJpZWREZWZpbml0aW9uO1xuICAgIH1cblxuICAgIGlmIChpc0N1cnJpZWRUeXBlKHZhbHVlLCB0eXBlKSkge1xuICAgICAgY3VycmllZERlZmluaXRpb24gPSBhcmdzID8gY3VycnkodHlwZSwgdmFsdWUsIG93bmVyLCBhcmdzKSA6IGFyZ3M7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBDdXJyaWVkVHlwZS5Db21wb25lbnQgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSkge1xuICAgICAgLy8gT25seSBjb21wb25lbnRzIHNob3VsZCBlbnRlciB0aGlzIHBhdGgsIGFzIGhlbHBlcnMgYW5kIG1vZGlmaWVycyBkbyBub3RcbiAgICAgIC8vIHN1cHBvcnQgc3RyaW5nIGJhc2VkIHJlc29sdXRpb25cblxuICAgICAgaWYgKERFQlVHKSB7XG4gICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBdHRlbXB0ZWQgdG8gcmVzb2x2ZSBhIGR5bmFtaWMgY29tcG9uZW50IHdpdGggYSBzdHJpbmcgZGVmaW5pdGlvbiwgXFxgJHt2YWx1ZX1cXGAgaW4gYSBzdHJpY3QgbW9kZSB0ZW1wbGF0ZS4gSW4gc3RyaWN0IG1vZGUsIHVzaW5nIHN0cmluZ3MgdG8gcmVzb2x2ZSBjb21wb25lbnQgZGVmaW5pdGlvbnMgaXMgcHJvaGliaXRlZC4gWW91IGNhbiBpbnN0ZWFkIGltcG9ydCB0aGUgY29tcG9uZW50IGRlZmluaXRpb24gYW5kIHVzZSBpdCBkaXJlY3RseS5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNvbHZlZERlZmluaXRpb24gPSBleHBlY3QoXG4gICAgICAgICAgcmVzb2x2ZXIsXG4gICAgICAgICAgJ0JVRzogZXhwZWN0ZWQgcmVzb2x2ZXIgZm9yIGN1cnJpZWQgY29tcG9uZW50IGRlZmluaXRpb25zJ1xuICAgICAgICApLmxvb2t1cENvbXBvbmVudCh2YWx1ZSwgb3duZXIpO1xuXG4gICAgICAgIGlmICghcmVzb2x2ZWREZWZpbml0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEF0dGVtcHRlZCB0byByZXNvbHZlIFxcYCR7dmFsdWV9XFxgLCB3aGljaCB3YXMgZXhwZWN0ZWQgdG8gYmUgYSBjb21wb25lbnQsIGJ1dCBub3RoaW5nIHdhcyBmb3VuZC5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjdXJyaWVkRGVmaW5pdGlvbiA9IGN1cnJ5KHR5cGUsIHZhbHVlLCBvd25lciwgYXJncyk7XG4gICAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIGN1cnJpZWREZWZpbml0aW9uID0gY3VycnkodHlwZSwgdmFsdWUsIG93bmVyLCBhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmllZERlZmluaXRpb24gPSBudWxsO1xuICAgIH1cblxuICAgIGxhc3RWYWx1ZSA9IHZhbHVlO1xuXG4gICAgcmV0dXJuIGN1cnJpZWREZWZpbml0aW9uO1xuICB9KTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=