@glimmer/runtime
Version:
Minimal runtime needed to render Glimmer templates
98 lines (80 loc) • 9.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isCurriedValue = isCurriedValue;
exports.isCurriedType = isCurriedType;
exports.resolveCurriedValue = resolveCurriedValue;
exports.curry = curry;
exports.CurriedValue = void 0;
var _util = require("@glimmer/util");
const TYPE = (0, _util.symbol)('TYPE');
const INNER = (0, _util.symbol)('INNER');
const OWNER = (0, _util.symbol)('OWNER');
const ARGS = (0, _util.symbol)('ARGS');
const RESOLVED = (0, _util.symbol)('RESOLVED');
const CURRIED_VALUES = new _util._WeakSet();
function isCurriedValue(value) {
return CURRIED_VALUES.has(value);
}
function isCurriedType(value, type) {
return isCurriedValue(value) && value[TYPE] === type;
}
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;
}
}
exports.CurriedValue = CurriedValue;
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
};
}
function curry(type, spec, owner, args, resolved = false) {
return new CurriedValue(type, spec, owner, args, resolved);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL2N1cnJpZWQtdmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFDQTs7QUFHQSxNQUFNLElBQUksR0FBa0Isa0JBQTVCLE1BQTRCLENBQTVCO0FBQ0EsTUFBTSxLQUFLLEdBQWtCLGtCQUE3QixPQUE2QixDQUE3QjtBQUNBLE1BQU0sS0FBSyxHQUFrQixrQkFBN0IsT0FBNkIsQ0FBN0I7QUFDQSxNQUFNLElBQUksR0FBa0Isa0JBQTVCLE1BQTRCLENBQTVCO0FBQ0EsTUFBTSxRQUFRLEdBQWtCLGtCQUFoQyxVQUFnQyxDQUFoQztBQUVBLE1BQU0sY0FBYyxHQUFHLElBQXZCLGNBQXVCLEVBQXZCOztBQUVNLFNBQUEsY0FBQSxDQUFBLEtBQUEsRUFBdUM7QUFDM0MsU0FBTyxjQUFjLENBQWQsR0FBQSxDQUFQLEtBQU8sQ0FBUDtBQUNEOztBQUVLLFNBQUEsYUFBQSxDQUFBLEtBQUEsRUFBQSxJQUFBLEVBRUc7QUFFUCxTQUFPLGNBQWMsQ0FBZCxLQUFjLENBQWQsSUFBeUIsS0FBSyxDQUFMLElBQUssQ0FBTCxLQUFoQyxJQUFBO0FBQ0Q7O0FBRUssTUFBQSxZQUFBLENBQW1CO0FBT3ZCO0FBQ0EsRUFBQSxXQUFBLENBQUEsSUFBQSxFQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsSUFBQSxFQUtFLFFBQVEsR0FMVixLQUFBLEVBS2tCO0FBRWhCLElBQUEsY0FBYyxDQUFkLEdBQUEsQ0FBQSxJQUFBO0FBQ0EsU0FBQSxJQUFBLElBQUEsSUFBQTtBQUNBLFNBQUEsS0FBQSxJQUFBLEtBQUE7QUFDQSxTQUFBLEtBQUEsSUFBQSxLQUFBO0FBQ0EsU0FBQSxJQUFBLElBQUEsSUFBQTtBQUNBLFNBQUEsUUFBQSxJQUFBLFFBQUE7QUFDRDs7QUFyQnNCOzs7O0FBc0NuQixTQUFBLG1CQUFBLENBQUEsWUFBQSxFQUNtQztBQUV2QyxNQUFJLGNBQWMsR0FBbEIsWUFBQTtBQUNBLE1BQUEsVUFBQTtBQUNBLE1BQUEsS0FBQTtBQUNBLE1BQUEsVUFBQSxFQUFBLEtBQUEsRUFBQSxRQUFBOztBQUVBLFNBQUEsSUFBQSxFQUFhO0FBQ1gsUUFBSTtBQUFFLE9BQUEsSUFBQSxHQUFGLFdBQUE7QUFBdUIsT0FBQSxLQUFBLEdBQVM7QUFBaEMsUUFBSixjQUFBOztBQUVBLFFBQUksV0FBVyxLQUFmLElBQUEsRUFBMEI7QUFDeEIsVUFBSTtBQUFFLFFBQUEsS0FBSyxFQUFQLFlBQUE7QUFBdUIsUUFBQSxVQUFVLEVBQUU7QUFBbkMsVUFBSixXQUFBOztBQUVBLFVBQUksaUJBQWlCLENBQWpCLE1BQUEsR0FBSixDQUFBLEVBQWtDO0FBQ2hDLFFBQUEsVUFBVSxHQUNSLFVBQVUsS0FBVixTQUFBLEdBQUEsaUJBQUEsR0FBK0MsaUJBQWlCLENBQWpCLE1BQUEsQ0FEakQsVUFDaUQsQ0FEakQ7QUFFRDs7QUFFRCxVQUFJLEtBQUssS0FBVCxTQUFBLEVBQXlCO0FBQ3ZCLFFBQUEsS0FBSyxHQUFMLEVBQUE7QUFDRDs7QUFFRCxNQUFBLEtBQUssQ0FBTCxPQUFBLENBQUEsWUFBQTtBQUNEOztBQUVELFFBQUksQ0FBQyxjQUFjLENBQW5CLEtBQW1CLENBQW5CLEVBQTRCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLE1BQUEsVUFBVSxHQUFWLEtBQUE7QUFDQSxNQUFBLEtBQUssR0FBRyxjQUFjLENBQXRCLEtBQXNCLENBQXRCO0FBQ0EsTUFBQSxRQUFRLEdBQUcsY0FBYyxDQUF6QixRQUF5QixDQUF6QjtBQUNBO0FBQ0Q7O0FBRUQsSUFBQSxjQUFjLEdBQWQsS0FBQTtBQUNEOztBQUVELFNBQU87QUFBQSxJQUFBLFVBQUE7QUFBQSxJQUFBLEtBQUE7QUFBQSxJQUFBLFFBQUE7QUFBQSxJQUFBLFVBQUE7QUFBMkMsSUFBQTtBQUEzQyxHQUFQO0FBQ0Q7O0FBRUssU0FBQSxLQUFBLENBQUEsSUFBQSxFQUFBLElBQUEsRUFBQSxLQUFBLEVBQUEsSUFBQSxFQUtKLFFBQVEsR0FMSixLQUFBLEVBS1k7QUFFaEIsU0FBTyxJQUFBLFlBQUEsQ0FBQSxJQUFBLEVBQUEsSUFBQSxFQUFBLEtBQUEsRUFBQSxJQUFBLEVBQVAsUUFBTyxDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYXB0dXJlZEFyZ3VtZW50cywgQ3VycmllZFR5cGUsIE93bmVyIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBzeW1ib2wsIF9XZWFrU2V0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuXG5jb25zdCBUWVBFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUWVBFJyk7XG5jb25zdCBJTk5FUjogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnSU5ORVInKTtcbmNvbnN0IE9XTkVSOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdPV05FUicpO1xuY29uc3QgQVJHUzogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnQVJHUycpO1xuY29uc3QgUkVTT0xWRUQ6IHVuaXF1ZSBzeW1ib2wgPSBzeW1ib2woJ1JFU09MVkVEJyk7XG5cbmNvbnN0IENVUlJJRURfVkFMVUVTID0gbmV3IF9XZWFrU2V0KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0N1cnJpZWRWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEN1cnJpZWRWYWx1ZTxDdXJyaWVkVHlwZT4ge1xuICByZXR1cm4gQ1VSUklFRF9WQUxVRVMuaGFzKHZhbHVlIGFzIG9iamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0N1cnJpZWRUeXBlPFQgZXh0ZW5kcyBDdXJyaWVkVHlwZT4oXG4gIHZhbHVlOiB1bmtub3duLFxuICB0eXBlOiBUXG4pOiB2YWx1ZSBpcyBDdXJyaWVkVmFsdWU8VD4ge1xuICByZXR1cm4gaXNDdXJyaWVkVmFsdWUodmFsdWUpICYmIHZhbHVlW1RZUEVdID09PSB0eXBlO1xufVxuXG5leHBvcnQgY2xhc3MgQ3VycmllZFZhbHVlPFQgZXh0ZW5kcyBDdXJyaWVkVHlwZSA9IEN1cnJpZWRUeXBlPiB7XG4gIFtUWVBFXTogVDtcbiAgW0lOTkVSXTogb2JqZWN0IHwgc3RyaW5nIHwgQ3VycmllZFZhbHVlPFQ+O1xuICBbT1dORVJdOiBPd25lcjtcbiAgW0FSR1NdOiBDYXB0dXJlZEFyZ3VtZW50cyB8IG51bGw7XG4gIFtSRVNPTFZFRF06IGJvb2xlYW47XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICB0eXBlOiBULFxuICAgIGlubmVyOiBvYmplY3QgfCBzdHJpbmcgfCBDdXJyaWVkVmFsdWU8VD4sXG4gICAgb3duZXI6IE93bmVyLFxuICAgIGFyZ3M6IENhcHR1cmVkQXJndW1lbnRzIHwgbnVsbCxcbiAgICByZXNvbHZlZCA9IGZhbHNlXG4gICkge1xuICAgIENVUlJJRURfVkFMVUVTLmFkZCh0aGlzKTtcbiAgICB0aGlzW1RZUEVdID0gdHlwZTtcbiAgICB0aGlzW0lOTkVSXSA9IGlubmVyO1xuICAgIHRoaXNbT1dORVJdID0gb3duZXI7XG4gICAgdGhpc1tBUkdTXSA9IGFyZ3M7XG4gICAgdGhpc1tSRVNPTFZFRF0gPSByZXNvbHZlZDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgUmVzb2x2ZWRDdXJyaWVkVmFsdWU8VD4ge1xuICBkZWZpbml0aW9uOiBUO1xuICBvd25lcjogT3duZXI7XG4gIHJlc29sdmVkOiBib29sZWFuO1xuICBwb3NpdGlvbmFsOiBSZWZlcmVuY2VbXSB8IHVuZGVmaW5lZDtcbiAgbmFtZWQ6IFJlY29yZDxzdHJpbmcsIFJlZmVyZW5jZT5bXSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVDdXJyaWVkVmFsdWUoXG4gIGN1cnJpZWRWYWx1ZTogQ3VycmllZFZhbHVlPEN1cnJpZWRUeXBlLkNvbXBvbmVudD5cbik6IFJlc29sdmVkQ3VycmllZFZhbHVlPG9iamVjdCB8IHN0cmluZz47XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUN1cnJpZWRWYWx1ZShcbiAgY3VycmllZFZhbHVlOiBDdXJyaWVkVmFsdWU8Q3VycmllZFR5cGUuSGVscGVyPiB8IEN1cnJpZWRWYWx1ZTxDdXJyaWVkVHlwZS5Nb2RpZmllcj5cbik6IFJlc29sdmVkQ3VycmllZFZhbHVlPG9iamVjdD47XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUN1cnJpZWRWYWx1ZShcbiAgY3VycmllZFZhbHVlOiBDdXJyaWVkVmFsdWU8Q3VycmllZFR5cGU+XG4pOiBSZXNvbHZlZEN1cnJpZWRWYWx1ZTxvYmplY3QgfCBzdHJpbmc+IHtcbiAgbGV0IGN1cnJlbnRXcmFwcGVyID0gY3VycmllZFZhbHVlO1xuICBsZXQgcG9zaXRpb25hbDogUmVmZXJlbmNlW10gfCB1bmRlZmluZWQ7XG4gIGxldCBuYW1lZDogUmVjb3JkPHN0cmluZywgUmVmZXJlbmNlPltdIHwgdW5kZWZpbmVkO1xuICBsZXQgZGVmaW5pdGlvbiwgb3duZXIsIHJlc29sdmVkO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgbGV0IHsgW0FSR1NdOiBjdXJyaWVkQXJncywgW0lOTkVSXTogaW5uZXIgfSA9IGN1cnJlbnRXcmFwcGVyO1xuXG4gICAgaWYgKGN1cnJpZWRBcmdzICE9PSBudWxsKSB7XG4gICAgICBsZXQgeyBuYW1lZDogY3VycmllZE5hbWVkLCBwb3NpdGlvbmFsOiBjdXJyaWVkUG9zaXRpb25hbCB9ID0gY3VycmllZEFyZ3M7XG5cbiAgICAgIGlmIChjdXJyaWVkUG9zaXRpb25hbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBvc2l0aW9uYWwgPVxuICAgICAgICAgIHBvc2l0aW9uYWwgPT09IHVuZGVmaW5lZCA/IGN1cnJpZWRQb3NpdGlvbmFsIDogY3VycmllZFBvc2l0aW9uYWwuY29uY2F0KHBvc2l0aW9uYWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuYW1lZCA9IFtdO1xuICAgICAgfVxuXG4gICAgICBuYW1lZC51bnNoaWZ0KGN1cnJpZWROYW1lZCk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0N1cnJpZWRWYWx1ZShpbm5lcikpIHtcbiAgICAgIC8vIFNhdmUgb2ZmIHRoZSBvd25lciB0aGF0IHRoaXMgaGVscGVyIHdhcyBjdXJyaWVkIHdpdGguIExhdGVyIG9uLFxuICAgICAgLy8gd2UnbGwgZmV0Y2ggdGhlIHZhbHVlIG9mIHRoaXMgcmVnaXN0ZXIgYW5kIHNldCBpdCBhcyB0aGUgb3duZXIgb24gdGhlXG4gICAgICAvLyBuZXcgcm9vdCBzY29wZS5cbiAgICAgIGRlZmluaXRpb24gPSBpbm5lcjtcbiAgICAgIG93bmVyID0gY3VycmVudFdyYXBwZXJbT1dORVJdO1xuICAgICAgcmVzb2x2ZWQgPSBjdXJyZW50V3JhcHBlcltSRVNPTFZFRF07XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjdXJyZW50V3JhcHBlciA9IGlubmVyO1xuICB9XG5cbiAgcmV0dXJuIHsgZGVmaW5pdGlvbiwgb3duZXIsIHJlc29sdmVkLCBwb3NpdGlvbmFsLCBuYW1lZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3Vycnk8VCBleHRlbmRzIEN1cnJpZWRUeXBlPihcbiAgdHlwZTogVCxcbiAgc3BlYzogb2JqZWN0IHwgc3RyaW5nIHwgQ3VycmllZFZhbHVlPFQ+LFxuICBvd25lcjogT3duZXIsXG4gIGFyZ3M6IENhcHR1cmVkQXJndW1lbnRzIHwgbnVsbCxcbiAgcmVzb2x2ZWQgPSBmYWxzZVxuKTogQ3VycmllZFZhbHVlPFQ+IHtcbiAgcmV0dXJuIG5ldyBDdXJyaWVkVmFsdWUodHlwZSwgc3BlYywgb3duZXIsIGFyZ3MsIHJlc29sdmVkKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=