UNPKG

@glimmer/runtime

Version:

Minimal runtime needed to render Glimmer templates

173 lines (131 loc) 15.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isScopeReference = isScopeReference; exports.PartialScopeImpl = exports.DynamicScopeImpl = void 0; var _util = require("@glimmer/util"); var _reference = require("@glimmer/reference"); var DynamicScopeImpl = /*#__PURE__*/function () { function DynamicScopeImpl(bucket) { if (bucket) { this.bucket = (0, _util.assign)({}, bucket); } else { this.bucket = {}; } } var _proto = DynamicScopeImpl.prototype; _proto.get = function get(key) { return this.bucket[key]; }; _proto.set = function set(key, reference) { return this.bucket[key] = reference; }; _proto.child = function child() { return new DynamicScopeImpl(this.bucket); }; return DynamicScopeImpl; }(); exports.DynamicScopeImpl = DynamicScopeImpl; function isScopeReference(s) { if (s === null || Array.isArray(s)) return false; return true; } var PartialScopeImpl = /*#__PURE__*/function () { function PartialScopeImpl( // the 0th slot is `self` slots, owner, callerScope, // named arguments and blocks passed to a layout that uses eval evalScope, // locals in scope when the partial was invoked partialMap) { this.slots = slots; this.owner = owner; this.callerScope = callerScope; this.evalScope = evalScope; this.partialMap = partialMap; } PartialScopeImpl.root = function root(self, size, owner) { if (size === void 0) { size = 0; } var refs = new Array(size + 1); for (var i = 0; i <= size; i++) { refs[i] = _reference.UNDEFINED_REFERENCE; } return new PartialScopeImpl(refs, owner, null, null, null).init({ self: self }); }; PartialScopeImpl.sized = function sized(size, owner) { if (size === void 0) { size = 0; } var refs = new Array(size + 1); for (var i = 0; i <= size; i++) { refs[i] = _reference.UNDEFINED_REFERENCE; } return new PartialScopeImpl(refs, owner, null, null, null); }; var _proto2 = PartialScopeImpl.prototype; _proto2.init = function init(_ref) { var self = _ref.self; this.slots[0] = self; return this; }; _proto2.getSelf = function getSelf() { return this.get(0); }; _proto2.getSymbol = function getSymbol(symbol) { return this.get(symbol); }; _proto2.getBlock = function getBlock(symbol) { var block = this.get(symbol); return block === _reference.UNDEFINED_REFERENCE ? null : block; }; _proto2.getEvalScope = function getEvalScope() { return this.evalScope; }; _proto2.getPartialMap = function getPartialMap() { return this.partialMap; }; _proto2.bind = function bind(symbol, value) { this.set(symbol, value); }; _proto2.bindSelf = function bindSelf(self) { this.set(0, self); }; _proto2.bindSymbol = function bindSymbol(symbol, value) { this.set(symbol, value); }; _proto2.bindBlock = function bindBlock(symbol, value) { this.set(symbol, value); }; _proto2.bindEvalScope = function bindEvalScope(map) { this.evalScope = map; }; _proto2.bindPartialMap = function bindPartialMap(map) { this.partialMap = map; }; _proto2.bindCallerScope = function bindCallerScope(scope) { this.callerScope = scope; }; _proto2.getCallerScope = function getCallerScope() { return this.callerScope; }; _proto2.child = function child() { return new PartialScopeImpl(this.slots.slice(), this.owner, this.callerScope, this.evalScope, this.partialMap); }; _proto2.get = function get(index) { if (index >= this.slots.length) { throw new RangeError("BUG: cannot get $" + index + " from scope; length=" + this.slots.length); } return this.slots[index]; }; _proto2.set = function set(index, value) { if (index >= this.slots.length) { throw new RangeError("BUG: cannot get $" + index + " from scope; length=" + this.slots.length); } this.slots[index] = value; }; return PartialScopeImpl; }(); exports.PartialScopeImpl = PartialScopeImpl; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL3Njb3BlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBVUE7O0FBQ0E7O0FBRUEsSUFBTSxnQkFBTixHQUFBLGFBQUEsWUFBQTtBQUdFLFdBQUEsZ0JBQUEsQ0FBQSxNQUFBLEVBQW9DO0FBQ2xDLFFBQUEsTUFBQSxFQUFZO0FBQ1YsV0FBQSxNQUFBLEdBQWMsa0JBQU0sRUFBTixFQUFkLE1BQWMsQ0FBZDtBQURGLEtBQUEsTUFFTztBQUNMLFdBQUEsTUFBQSxHQUFBLEVBQUE7QUFDRDtBQUNGOztBQVRILE1BQUEsTUFBQSxHQUFBLGdCQUFBLENBQUEsU0FBQTs7QUFBQSxFQUFBLE1BQUEsQ0FBQSxHQUFBLEdBV0UsU0FBQSxHQUFBLENBQUEsR0FBQSxFQUFlO0FBQ2IsV0FBTyxLQUFBLE1BQUEsQ0FBUCxHQUFPLENBQVA7QUFaSixHQUFBOztBQUFBLEVBQUEsTUFBQSxDQUFBLEdBQUEsR0FlRSxTQUFBLEdBQUEsQ0FBQSxHQUFBLEVBQUEsU0FBQSxFQUFxQztBQUNuQyxXQUFRLEtBQUEsTUFBQSxDQUFBLEdBQUEsSUFBUixTQUFBO0FBaEJKLEdBQUE7O0FBQUEsRUFBQSxNQUFBLENBQUEsS0FBQSxHQW1CRSxTQUFBLEtBQUEsR0FBSztBQUNILFdBQU8sSUFBQSxnQkFBQSxDQUFxQixLQUE1QixNQUFPLENBQVA7QUFwQkosR0FBQTs7QUFBQSxTQUFBLGdCQUFBO0FBQUEsQ0FBQSxFQUFBOzs7O0FBd0JNLFNBQUEsZ0JBQUEsQ0FBQSxDQUFBLEVBQXVDO0FBQzNDLE1BQUksQ0FBQyxLQUFELElBQUEsSUFBYyxLQUFLLENBQUwsT0FBQSxDQUFsQixDQUFrQixDQUFsQixFQUFvQyxPQUFBLEtBQUE7QUFDcEMsU0FBQSxJQUFBO0FBQ0Q7O0FBRUQsSUFBTSxnQkFBTixHQUFBLGFBQUEsWUFBQTtBQXFCRSxXQUFBLGdCQUFBLEVBQ0U7QUFERixFQUFBLEtBQUEsRUFB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LEtBRkssS0FBQSxFQUdMLEtBSEssV0FBQSxFQUlMLEtBSkssU0FBQSxFQUtMLEtBTEYsVUFBTyxDQUFQO0FBM0ZKLEdBQUE7O0FBQUEsRUFBQSxPQUFBLENBQUEsR0FBQSxHQW9HVSxTQUFBLEdBQUEsQ0FBQSxLQUFBLEVBQXNDO0FBQzVDLFFBQUksS0FBSyxJQUFJLEtBQUEsS0FBQSxDQUFiLE1BQUEsRUFBZ0M7QUFDOUIsWUFBTSxJQUFBLFVBQUEsQ0FBQSxzQkFBQSxLQUFBLEdBQUEsc0JBQUEsR0FBK0QsS0FBQSxLQUFBLENBQXJFLE1BQU0sQ0FBTjtBQUNEOztBQUVELFdBQU8sS0FBQSxLQUFBLENBQVAsS0FBTyxDQUFQO0FBekdKLEdBQUE7O0FBQUEsRUFBQSxPQUFBLENBQUEsR0FBQSxHQTRHVSxTQUFBLEdBQUEsQ0FBQSxLQUFBLEVBQUEsS0FBQSxFQUFnRDtBQUN0RCxRQUFJLEtBQUssSUFBSSxLQUFBLEtBQUEsQ0FBYixNQUFBLEVBQWdDO0FBQzlCLFlBQU0sSUFBQSxVQUFBLENBQUEsc0JBQUEsS0FBQSxHQUFBLHNCQUFBLEdBQStELEtBQUEsS0FBQSxDQUFyRSxNQUFNLENBQU47QUFDRDs7QUFFRCxTQUFBLEtBQUEsQ0FBQSxLQUFBLElBQUEsS0FBQTtBQWpISixHQUFBOztBQUFBLFNBQUEsZ0JBQUE7QUFBQSxDQUFBLEVBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEeW5hbWljU2NvcGUsXG4gIERpY3QsXG4gIFBhcnRpYWxTY29wZSxcbiAgU2NvcGVTbG90LFxuICBTY29wZUJsb2NrLFxuICBPcHRpb24sXG4gIFNjb3BlLFxuICBPd25lcixcbn0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IFJlZmVyZW5jZSwgVU5ERUZJTkVEX1JFRkVSRU5DRSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5cbmV4cG9ydCBjbGFzcyBEeW5hbWljU2NvcGVJbXBsIGltcGxlbWVudHMgRHluYW1pY1Njb3BlIHtcbiAgcHJpdmF0ZSBidWNrZXQ6IERpY3Q8UmVmZXJlbmNlPjtcblxuICBjb25zdHJ1Y3RvcihidWNrZXQ/OiBEaWN0PFJlZmVyZW5jZT4pIHtcbiAgICBpZiAoYnVja2V0KSB7XG4gICAgICB0aGlzLmJ1Y2tldCA9IGFzc2lnbih7fSwgYnVja2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWNrZXQgPSB7fTtcbiAgICB9XG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcpOiBSZWZlcmVuY2Uge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldFtrZXldO1xuICB9XG5cbiAgc2V0KGtleTogc3RyaW5nLCByZWZlcmVuY2U6IFJlZmVyZW5jZSk6IFJlZmVyZW5jZSB7XG4gICAgcmV0dXJuICh0aGlzLmJ1Y2tldFtrZXldID0gcmVmZXJlbmNlKTtcbiAgfVxuXG4gIGNoaWxkKCk6IER5bmFtaWNTY29wZUltcGwge1xuICAgIHJldHVybiBuZXcgRHluYW1pY1Njb3BlSW1wbCh0aGlzLmJ1Y2tldCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NvcGVSZWZlcmVuY2UoczogU2NvcGVTbG90KTogcyBpcyBSZWZlcmVuY2Uge1xuICBpZiAocyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHMpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY2xhc3MgUGFydGlhbFNjb3BlSW1wbCBpbXBsZW1lbnRzIFBhcnRpYWxTY29wZSB7XG4gIHN0YXRpYyByb290KHNlbGY6IFJlZmVyZW5jZTx1bmtub3duPiwgc2l6ZSA9IDAsIG93bmVyOiBPd25lcik6IFBhcnRpYWxTY29wZSB7XG4gICAgbGV0IHJlZnM6IFJlZmVyZW5jZTx1bmtub3duPltdID0gbmV3IEFycmF5KHNpemUgKyAxKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHNpemU7IGkrKykge1xuICAgICAgcmVmc1tpXSA9IFVOREVGSU5FRF9SRUZFUkVOQ0U7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQYXJ0aWFsU2NvcGVJbXBsKHJlZnMsIG93bmVyLCBudWxsLCBudWxsLCBudWxsKS5pbml0KHsgc2VsZiB9KTtcbiAgfVxuXG4gIHN0YXRpYyBzaXplZChzaXplID0gMCwgb3duZXI6IE93bmVyKTogU2NvcGUge1xuICAgIGxldCByZWZzOiBSZWZlcmVuY2U8dW5rbm93bj5bXSA9IG5ldyBBcnJheShzaXplICsgMSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBzaXplOyBpKyspIHtcbiAgICAgIHJlZnNbaV0gPSBVTkRFRklORURfUkVGRVJFTkNFO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUGFydGlhbFNjb3BlSW1wbChyZWZzLCBvd25lciwgbnVsbCwgbnVsbCwgbnVsbCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICAvLyB0aGUgMHRoIHNsb3QgaXMgYHNlbGZgXG4gICAgcmVhZG9ubHkgc2xvdHM6IEFycmF5PFNjb3BlU2xvdD4sXG4gICAgcmVhZG9ubHkgb3duZXI6IE93bmVyLFxuICAgIHByaXZhdGUgY2FsbGVyU2NvcGU6IFNjb3BlIHwgbnVsbCxcbiAgICAvLyBuYW1lZCBhcmd1bWVudHMgYW5kIGJsb2NrcyBwYXNzZWQgdG8gYSBsYXlvdXQgdGhhdCB1c2VzIGV2YWxcbiAgICBwcml2YXRlIGV2YWxTY29wZTogRGljdDxTY29wZVNsb3Q+IHwgbnVsbCxcbiAgICAvLyBsb2NhbHMgaW4gc2NvcGUgd2hlbiB0aGUgcGFydGlhbCB3YXMgaW52b2tlZFxuICAgIHByaXZhdGUgcGFydGlhbE1hcDogRGljdDxSZWZlcmVuY2U8dW5rbm93bj4+IHwgbnVsbFxuICApIHt9XG5cbiAgaW5pdCh7IHNlbGYgfTogeyBzZWxmOiBSZWZlcmVuY2U8dW5rbm93bj4gfSk6IHRoaXMge1xuICAgIHRoaXMuc2xvdHNbMF0gPSBzZWxmO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0U2VsZigpOiBSZWZlcmVuY2U8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLmdldDxSZWZlcmVuY2U8dW5rbm93bj4+KDApO1xuICB9XG5cbiAgZ2V0U3ltYm9sKHN5bWJvbDogbnVtYmVyKTogUmVmZXJlbmNlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQ8UmVmZXJlbmNlPHVua25vd24+PihzeW1ib2wpO1xuICB9XG5cbiAgZ2V0QmxvY2soc3ltYm9sOiBudW1iZXIpOiBPcHRpb248U2NvcGVCbG9jaz4ge1xuICAgIGxldCBibG9jayA9IHRoaXMuZ2V0KHN5bWJvbCk7XG4gICAgcmV0dXJuIGJsb2NrID09PSBVTkRFRklORURfUkVGRVJFTkNFID8gbnVsbCA6IChibG9jayBhcyBTY29wZUJsb2NrKTtcbiAgfVxuXG4gIGdldEV2YWxTY29wZSgpOiBPcHRpb248RGljdDxTY29wZVNsb3Q+PiB7XG4gICAgcmV0dXJuIHRoaXMuZXZhbFNjb3BlO1xuICB9XG5cbiAgZ2V0UGFydGlhbE1hcCgpOiBPcHRpb248RGljdDxSZWZlcmVuY2U8dW5rbm93bj4+PiB7XG4gICAgcmV0dXJuIHRoaXMucGFydGlhbE1hcDtcbiAgfVxuXG4gIGJpbmQoc3ltYm9sOiBudW1iZXIsIHZhbHVlOiBTY29wZVNsb3QpIHtcbiAgICB0aGlzLnNldChzeW1ib2wsIHZhbHVlKTtcbiAgfVxuXG4gIGJpbmRTZWxmKHNlbGY6IFJlZmVyZW5jZTx1bmtub3duPikge1xuICAgIHRoaXMuc2V0PFJlZmVyZW5jZTx1bmtub3duPj4oMCwgc2VsZik7XG4gIH1cblxuICBiaW5kU3ltYm9sKHN5bWJvbDogbnVtYmVyLCB2YWx1ZTogUmVmZXJlbmNlPHVua25vd24+KSB7XG4gICAgdGhpcy5zZXQoc3ltYm9sLCB2YWx1ZSk7XG4gIH1cblxuICBiaW5kQmxvY2soc3ltYm9sOiBudW1iZXIsIHZhbHVlOiBPcHRpb248U2NvcGVCbG9jaz4pIHtcbiAgICB0aGlzLnNldDxPcHRpb248U2NvcGVCbG9jaz4+KHN5bWJvbCwgdmFsdWUpO1xuICB9XG5cbiAgYmluZEV2YWxTY29wZShtYXA6IE9wdGlvbjxEaWN0PFNjb3BlU2xvdD4+KSB7XG4gICAgdGhpcy5ldmFsU2NvcGUgPSBtYXA7XG4gIH1cblxuICBiaW5kUGFydGlhbE1hcChtYXA6IERpY3Q8UmVmZXJlbmNlPHVua25vd24+Pikge1xuICAgIHRoaXMucGFydGlhbE1hcCA9IG1hcDtcbiAgfVxuXG4gIGJpbmRDYWxsZXJTY29wZShzY29wZTogT3B0aW9uPFNjb3BlPik6IHZvaWQge1xuICAgIHRoaXMuY2FsbGVyU2NvcGUgPSBzY29wZTtcbiAgfVxuXG4gIGdldENhbGxlclNjb3BlKCk6IE9wdGlvbjxTY29wZT4ge1xuICAgIHJldHVybiB0aGlzLmNhbGxlclNjb3BlO1xuICB9XG5cbiAgY2hpbGQoKTogU2NvcGUge1xuICAgIHJldHVybiBuZXcgUGFydGlhbFNjb3BlSW1wbChcbiAgICAgIHRoaXMuc2xvdHMuc2xpY2UoKSxcbiAgICAgIHRoaXMub3duZXIsXG4gICAgICB0aGlzLmNhbGxlclNjb3BlLFxuICAgICAgdGhpcy5ldmFsU2NvcGUsXG4gICAgICB0aGlzLnBhcnRpYWxNYXBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQ8VCBleHRlbmRzIFNjb3BlU2xvdD4oaW5kZXg6IG51bWJlcik6IFQge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnNsb3RzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEJVRzogY2Fubm90IGdldCAkJHtpbmRleH0gZnJvbSBzY29wZTsgbGVuZ3RoPSR7dGhpcy5zbG90cy5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2xvdHNbaW5kZXhdIGFzIFQ7XG4gIH1cblxuICBwcml2YXRlIHNldDxUIGV4dGVuZHMgU2NvcGVTbG90PihpbmRleDogbnVtYmVyLCB2YWx1ZTogVCk6IHZvaWQge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnNsb3RzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEJVRzogY2Fubm90IGdldCAkJHtpbmRleH0gZnJvbSBzY29wZTsgbGVuZ3RoPSR7dGhpcy5zbG90cy5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5zbG90c1tpbmRleF0gPSB2YWx1ZTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==