UNPKG

@glimmer/runtime

Version:

Minimal runtime needed to render Glimmer templates

79 lines (70 loc) 9.1 kB
import { symbol, _WeakSet } from '@glimmer/util'; const TYPE = symbol('TYPE'); const INNER = symbol('INNER'); const OWNER = symbol('OWNER'); const ARGS = symbol('ARGS'); const RESOLVED = symbol('RESOLVED'); const CURRIED_VALUES = new _WeakSet(); export function isCurriedValue(value) { return CURRIED_VALUES.has(value); } export function isCurriedType(value, type) { return isCurriedValue(value) && value[TYPE] === type; } export class CurriedValue { /** @internal */ constructor(type, inner, owner, args, resolved = false) { CURRIED_VALUES.add(this); this[TYPE] = type; this[INNER] = inner; this[OWNER] = owner; this[ARGS] = args; this[RESOLVED] = resolved; } } export function resolveCurriedValue(curriedValue) { let currentWrapper = curriedValue; let positional; let named; let definition, owner, resolved; while (true) { let { [ARGS]: curriedArgs, [INNER]: inner } = currentWrapper; if (curriedArgs !== null) { let { named: curriedNamed, positional: curriedPositional } = curriedArgs; if (curriedPositional.length > 0) { positional = positional === undefined ? curriedPositional : curriedPositional.concat(positional); } if (named === undefined) { named = []; } named.unshift(curriedNamed); } if (!isCurriedValue(inner)) { // Save off the owner that this helper was curried with. Later on, // we'll fetch the value of this register and set it as the owner on the // new root scope. definition = inner; owner = currentWrapper[OWNER]; resolved = currentWrapper[RESOLVED]; break; } currentWrapper = inner; } return { definition, owner, resolved, positional, named }; } export function curry(type, spec, owner, args, resolved = false) { return new CurriedValue(type, spec, owner, args, resolved); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL2N1cnJpZWQtdmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBUyxNQUFULEVBQWlCLFFBQWpCLFFBQWlDLGVBQWpDO0FBR0EsTUFBTSxJQUFJLEdBQWtCLE1BQU0sQ0FBQyxNQUFELENBQWxDO0FBQ0EsTUFBTSxLQUFLLEdBQWtCLE1BQU0sQ0FBQyxPQUFELENBQW5DO0FBQ0EsTUFBTSxLQUFLLEdBQWtCLE1BQU0sQ0FBQyxPQUFELENBQW5DO0FBQ0EsTUFBTSxJQUFJLEdBQWtCLE1BQU0sQ0FBQyxNQUFELENBQWxDO0FBQ0EsTUFBTSxRQUFRLEdBQWtCLE1BQU0sQ0FBQyxVQUFELENBQXRDO0FBRUEsTUFBTSxjQUFjLEdBQUcsSUFBSSxRQUFKLEVBQXZCO0FBRUEsT0FBTSxTQUFVLGNBQVYsQ0FBeUIsS0FBekIsRUFBdUM7QUFDM0MsU0FBTyxjQUFjLENBQUMsR0FBZixDQUFtQixLQUFuQixDQUFQO0FBQ0Q7QUFFRCxPQUFNLFNBQVUsYUFBVixDQUNKLEtBREksRUFFSixJQUZJLEVBRUc7QUFFUCxTQUFPLGNBQWMsQ0FBQyxLQUFELENBQWQsSUFBeUIsS0FBSyxDQUFDLElBQUQsQ0FBTCxLQUFnQixJQUFoRDtBQUNEO0FBRUQsT0FBTSxNQUFPLFlBQVAsQ0FBbUI7QUFPdkI7QUFDQSxFQUFBLFdBQUEsQ0FDRSxJQURGLEVBRUUsS0FGRixFQUdFLEtBSEYsRUFJRSxJQUpGLEVBS0UsUUFBUSxHQUFHLEtBTGIsRUFLa0I7QUFFaEIsSUFBQSxjQUFjLENBQUMsR0FBZixDQUFtQixJQUFuQjtBQUNBLFNBQUssSUFBTCxJQUFhLElBQWI7QUFDQSxTQUFLLEtBQUwsSUFBYyxLQUFkO0FBQ0EsU0FBSyxLQUFMLElBQWMsS0FBZDtBQUNBLFNBQUssSUFBTCxJQUFhLElBQWI7QUFDQSxTQUFLLFFBQUwsSUFBaUIsUUFBakI7QUFDRDs7QUFyQnNCO0FBc0N6QixPQUFNLFNBQVUsbUJBQVYsQ0FDSixZQURJLEVBQ21DO0FBRXZDLE1BQUksY0FBYyxHQUFHLFlBQXJCO0FBQ0EsTUFBSSxVQUFKO0FBQ0EsTUFBSSxLQUFKO0FBQ0EsTUFBSSxVQUFKLEVBQWdCLEtBQWhCLEVBQXVCLFFBQXZCOztBQUVBLFNBQU8sSUFBUCxFQUFhO0FBQ1gsUUFBSTtBQUFFLE9BQUMsSUFBRCxHQUFRLFdBQVY7QUFBdUIsT0FBQyxLQUFELEdBQVM7QUFBaEMsUUFBMEMsY0FBOUM7O0FBRUEsUUFBSSxXQUFXLEtBQUssSUFBcEIsRUFBMEI7QUFDeEIsVUFBSTtBQUFFLFFBQUEsS0FBSyxFQUFFLFlBQVQ7QUFBdUIsUUFBQSxVQUFVLEVBQUU7QUFBbkMsVUFBeUQsV0FBN0Q7O0FBRUEsVUFBSSxpQkFBaUIsQ0FBQyxNQUFsQixHQUEyQixDQUEvQixFQUFrQztBQUNoQyxRQUFBLFVBQVUsR0FDUixVQUFVLEtBQUssU0FBZixHQUEyQixpQkFBM0IsR0FBK0MsaUJBQWlCLENBQUMsTUFBbEIsQ0FBeUIsVUFBekIsQ0FEakQ7QUFFRDs7QUFFRCxVQUFJLEtBQUssS0FBSyxTQUFkLEVBQXlCO0FBQ3ZCLFFBQUEsS0FBSyxHQUFHLEVBQVI7QUFDRDs7QUFFRCxNQUFBLEtBQUssQ0FBQyxPQUFOLENBQWMsWUFBZDtBQUNEOztBQUVELFFBQUksQ0FBQyxjQUFjLENBQUMsS0FBRCxDQUFuQixFQUE0QjtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxNQUFBLFVBQVUsR0FBRyxLQUFiO0FBQ0EsTUFBQSxLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUQsQ0FBdEI7QUFDQSxNQUFBLFFBQVEsR0FBRyxjQUFjLENBQUMsUUFBRCxDQUF6QjtBQUNBO0FBQ0Q7O0FBRUQsSUFBQSxjQUFjLEdBQUcsS0FBakI7QUFDRDs7QUFFRCxTQUFPO0FBQUUsSUFBQSxVQUFGO0FBQWMsSUFBQSxLQUFkO0FBQXFCLElBQUEsUUFBckI7QUFBK0IsSUFBQSxVQUEvQjtBQUEyQyxJQUFBO0FBQTNDLEdBQVA7QUFDRDtBQUVELE9BQU0sU0FBVSxLQUFWLENBQ0osSUFESSxFQUVKLElBRkksRUFHSixLQUhJLEVBSUosSUFKSSxFQUtKLFFBQVEsR0FBRyxLQUxQLEVBS1k7QUFFaEIsU0FBTyxJQUFJLFlBQUosQ0FBaUIsSUFBakIsRUFBdUIsSUFBdkIsRUFBNkIsS0FBN0IsRUFBb0MsSUFBcEMsRUFBMEMsUUFBMUMsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FwdHVyZWRBcmd1bWVudHMsIEN1cnJpZWRUeXBlLCBPd25lciB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgc3ltYm9sLCBfV2Vha1NldCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgUmVmZXJlbmNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcblxuY29uc3QgVFlQRTogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnVFlQRScpO1xuY29uc3QgSU5ORVI6IHVuaXF1ZSBzeW1ib2wgPSBzeW1ib2woJ0lOTkVSJyk7XG5jb25zdCBPV05FUjogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnT1dORVInKTtcbmNvbnN0IEFSR1M6IHVuaXF1ZSBzeW1ib2wgPSBzeW1ib2woJ0FSR1MnKTtcbmNvbnN0IFJFU09MVkVEOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdSRVNPTFZFRCcpO1xuXG5jb25zdCBDVVJSSUVEX1ZBTFVFUyA9IG5ldyBfV2Vha1NldCgpO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDdXJyaWVkVmFsdWUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBDdXJyaWVkVmFsdWU8Q3VycmllZFR5cGU+IHtcbiAgcmV0dXJuIENVUlJJRURfVkFMVUVTLmhhcyh2YWx1ZSBhcyBvYmplY3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDdXJyaWVkVHlwZTxUIGV4dGVuZHMgQ3VycmllZFR5cGU+KFxuICB2YWx1ZTogdW5rbm93bixcbiAgdHlwZTogVFxuKTogdmFsdWUgaXMgQ3VycmllZFZhbHVlPFQ+IHtcbiAgcmV0dXJuIGlzQ3VycmllZFZhbHVlKHZhbHVlKSAmJiB2YWx1ZVtUWVBFXSA9PT0gdHlwZTtcbn1cblxuZXhwb3J0IGNsYXNzIEN1cnJpZWRWYWx1ZTxUIGV4dGVuZHMgQ3VycmllZFR5cGUgPSBDdXJyaWVkVHlwZT4ge1xuICBbVFlQRV06IFQ7XG4gIFtJTk5FUl06IG9iamVjdCB8IHN0cmluZyB8IEN1cnJpZWRWYWx1ZTxUPjtcbiAgW09XTkVSXTogT3duZXI7XG4gIFtBUkdTXTogQ2FwdHVyZWRBcmd1bWVudHMgfCBudWxsO1xuICBbUkVTT0xWRURdOiBib29sZWFuO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgdHlwZTogVCxcbiAgICBpbm5lcjogb2JqZWN0IHwgc3RyaW5nIHwgQ3VycmllZFZhbHVlPFQ+LFxuICAgIG93bmVyOiBPd25lcixcbiAgICBhcmdzOiBDYXB0dXJlZEFyZ3VtZW50cyB8IG51bGwsXG4gICAgcmVzb2x2ZWQgPSBmYWxzZVxuICApIHtcbiAgICBDVVJSSUVEX1ZBTFVFUy5hZGQodGhpcyk7XG4gICAgdGhpc1tUWVBFXSA9IHR5cGU7XG4gICAgdGhpc1tJTk5FUl0gPSBpbm5lcjtcbiAgICB0aGlzW09XTkVSXSA9IG93bmVyO1xuICAgIHRoaXNbQVJHU10gPSBhcmdzO1xuICAgIHRoaXNbUkVTT0xWRURdID0gcmVzb2x2ZWQ7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFJlc29sdmVkQ3VycmllZFZhbHVlPFQ+IHtcbiAgZGVmaW5pdGlvbjogVDtcbiAgb3duZXI6IE93bmVyO1xuICByZXNvbHZlZDogYm9vbGVhbjtcbiAgcG9zaXRpb25hbDogUmVmZXJlbmNlW10gfCB1bmRlZmluZWQ7XG4gIG5hbWVkOiBSZWNvcmQ8c3RyaW5nLCBSZWZlcmVuY2U+W10gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQ3VycmllZFZhbHVlKFxuICBjdXJyaWVkVmFsdWU6IEN1cnJpZWRWYWx1ZTxDdXJyaWVkVHlwZS5Db21wb25lbnQ+XG4pOiBSZXNvbHZlZEN1cnJpZWRWYWx1ZTxvYmplY3QgfCBzdHJpbmc+O1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVDdXJyaWVkVmFsdWUoXG4gIGN1cnJpZWRWYWx1ZTogQ3VycmllZFZhbHVlPEN1cnJpZWRUeXBlLkhlbHBlcj4gfCBDdXJyaWVkVmFsdWU8Q3VycmllZFR5cGUuTW9kaWZpZXI+XG4pOiBSZXNvbHZlZEN1cnJpZWRWYWx1ZTxvYmplY3Q+O1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVDdXJyaWVkVmFsdWUoXG4gIGN1cnJpZWRWYWx1ZTogQ3VycmllZFZhbHVlPEN1cnJpZWRUeXBlPlxuKTogUmVzb2x2ZWRDdXJyaWVkVmFsdWU8b2JqZWN0IHwgc3RyaW5nPiB7XG4gIGxldCBjdXJyZW50V3JhcHBlciA9IGN1cnJpZWRWYWx1ZTtcbiAgbGV0IHBvc2l0aW9uYWw6IFJlZmVyZW5jZVtdIHwgdW5kZWZpbmVkO1xuICBsZXQgbmFtZWQ6IFJlY29yZDxzdHJpbmcsIFJlZmVyZW5jZT5bXSB8IHVuZGVmaW5lZDtcbiAgbGV0IGRlZmluaXRpb24sIG93bmVyLCByZXNvbHZlZDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGxldCB7IFtBUkdTXTogY3VycmllZEFyZ3MsIFtJTk5FUl06IGlubmVyIH0gPSBjdXJyZW50V3JhcHBlcjtcblxuICAgIGlmIChjdXJyaWVkQXJncyAhPT0gbnVsbCkge1xuICAgICAgbGV0IHsgbmFtZWQ6IGN1cnJpZWROYW1lZCwgcG9zaXRpb25hbDogY3VycmllZFBvc2l0aW9uYWwgfSA9IGN1cnJpZWRBcmdzO1xuXG4gICAgICBpZiAoY3VycmllZFBvc2l0aW9uYWwubGVuZ3RoID4gMCkge1xuICAgICAgICBwb3NpdGlvbmFsID1cbiAgICAgICAgICBwb3NpdGlvbmFsID09PSB1bmRlZmluZWQgPyBjdXJyaWVkUG9zaXRpb25hbCA6IGN1cnJpZWRQb3NpdGlvbmFsLmNvbmNhdChwb3NpdGlvbmFsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbmFtZWQgPSBbXTtcbiAgICAgIH1cblxuICAgICAgbmFtZWQudW5zaGlmdChjdXJyaWVkTmFtZWQpO1xuICAgIH1cblxuICAgIGlmICghaXNDdXJyaWVkVmFsdWUoaW5uZXIpKSB7XG4gICAgICAvLyBTYXZlIG9mZiB0aGUgb3duZXIgdGhhdCB0aGlzIGhlbHBlciB3YXMgY3VycmllZCB3aXRoLiBMYXRlciBvbixcbiAgICAgIC8vIHdlJ2xsIGZldGNoIHRoZSB2YWx1ZSBvZiB0aGlzIHJlZ2lzdGVyIGFuZCBzZXQgaXQgYXMgdGhlIG93bmVyIG9uIHRoZVxuICAgICAgLy8gbmV3IHJvb3Qgc2NvcGUuXG4gICAgICBkZWZpbml0aW9uID0gaW5uZXI7XG4gICAgICBvd25lciA9IGN1cnJlbnRXcmFwcGVyW09XTkVSXTtcbiAgICAgIHJlc29sdmVkID0gY3VycmVudFdyYXBwZXJbUkVTT0xWRURdO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY3VycmVudFdyYXBwZXIgPSBpbm5lcjtcbiAgfVxuXG4gIHJldHVybiB7IGRlZmluaXRpb24sIG93bmVyLCByZXNvbHZlZCwgcG9zaXRpb25hbCwgbmFtZWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJ5PFQgZXh0ZW5kcyBDdXJyaWVkVHlwZT4oXG4gIHR5cGU6IFQsXG4gIHNwZWM6IG9iamVjdCB8IHN0cmluZyB8IEN1cnJpZWRWYWx1ZTxUPixcbiAgb3duZXI6IE93bmVyLFxuICBhcmdzOiBDYXB0dXJlZEFyZ3VtZW50cyB8IG51bGwsXG4gIHJlc29sdmVkID0gZmFsc2Vcbik6IEN1cnJpZWRWYWx1ZTxUPiB7XG4gIHJldHVybiBuZXcgQ3VycmllZFZhbHVlKHR5cGUsIHNwZWMsIG93bmVyLCBhcmdzLCByZXNvbHZlZCk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9