UNPKG

@glimmer/runtime

Version:

Minimal runtime needed to render Glimmer templates

160 lines (122 loc) 12.8 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"); class DynamicScopeImpl { constructor(bucket) { if (bucket) { this.bucket = (0, _util.assign)({}, bucket); } else { this.bucket = {}; } } get(key) { return this.bucket[key]; } set(key, reference) { return this.bucket[key] = reference; } child() { return new DynamicScopeImpl(this.bucket); } } exports.DynamicScopeImpl = DynamicScopeImpl; function isScopeReference(s) { if (s === null || Array.isArray(s)) return false; return true; } class PartialScopeImpl { constructor( // 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; } static root(self, size = 0, owner) { let refs = new Array(size + 1); for (let i = 0; i <= size; i++) { refs[i] = _reference.UNDEFINED_REFERENCE; } return new PartialScopeImpl(refs, owner, null, null, null).init({ self }); } static sized(size = 0, owner) { let refs = new Array(size + 1); for (let i = 0; i <= size; i++) { refs[i] = _reference.UNDEFINED_REFERENCE; } return new PartialScopeImpl(refs, owner, null, null, null); } init({ self }) { this.slots[0] = self; return this; } getSelf() { return this.get(0); } getSymbol(symbol) { return this.get(symbol); } getBlock(symbol) { let block = this.get(symbol); return block === _reference.UNDEFINED_REFERENCE ? null : block; } getEvalScope() { return this.evalScope; } getPartialMap() { return this.partialMap; } bind(symbol, value) { this.set(symbol, value); } bindSelf(self) { this.set(0, self); } bindSymbol(symbol, value) { this.set(symbol, value); } bindBlock(symbol, value) { this.set(symbol, value); } bindEvalScope(map) { this.evalScope = map; } bindPartialMap(map) { this.partialMap = map; } bindCallerScope(scope) { this.callerScope = scope; } getCallerScope() { return this.callerScope; } child() { return new PartialScopeImpl(this.slots.slice(), this.owner, this.callerScope, this.evalScope, this.partialMap); } get(index) { if (index >= this.slots.length) { throw new RangeError(`BUG: cannot get $${index} from scope; length=${this.slots.length}`); } return this.slots[index]; } 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; } } exports.PartialScopeImpl = PartialScopeImpl; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL3Njb3BlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBVUE7O0FBQ0E7O0FBRU0sTUFBQSxnQkFBQSxDQUF1QjtBQUczQixFQUFBLFdBQUEsQ0FBQSxNQUFBLEVBQW9DO0FBQ2xDLFFBQUEsTUFBQSxFQUFZO0FBQ1YsV0FBQSxNQUFBLEdBQWMsa0JBQU0sRUFBTixFQUFkLE1BQWMsQ0FBZDtBQURGLEtBQUEsTUFFTztBQUNMLFdBQUEsTUFBQSxHQUFBLEVBQUE7QUFDRDtBQUNGOztBQUVELEVBQUEsR0FBRyxDQUFBLEdBQUEsRUFBWTtBQUNiLFdBQU8sS0FBQSxNQUFBLENBQVAsR0FBTyxDQUFQO0FBQ0Q7O0FBRUQsRUFBQSxHQUFHLENBQUEsR0FBQSxFQUFBLFNBQUEsRUFBa0M7QUFDbkMsV0FBUSxLQUFBLE1BQUEsQ0FBQSxHQUFBLElBQVIsU0FBQTtBQUNEOztBQUVELEVBQUEsS0FBSyxHQUFBO0FBQ0gsV0FBTyxJQUFBLGdCQUFBLENBQXFCLEtBQTVCLE1BQU8sQ0FBUDtBQUNEOztBQXJCMEI7Ozs7QUF3QnZCLFNBQUEsZ0JBQUEsQ0FBQSxDQUFBLEVBQXVDO0FBQzNDLE1BQUksQ0FBQyxLQUFELElBQUEsSUFBYyxLQUFLLENBQUwsT0FBQSxDQUFsQixDQUFrQixDQUFsQixFQUFvQyxPQUFBLEtBQUE7QUFDcEMsU0FBQSxJQUFBO0FBQ0Q7O0FBRUssTUFBQSxnQkFBQSxDQUF1QjtBQXFCM0IsRUFBQSxXQUFBLEVBQ0U7QUFERixFQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsV0FBQSxFQUtFO0FBTEYsRUFBQSxTQUFBLEVBT0U7QUFQRixFQUFBLFVBQUEsRUFRcUQ7QUFOMUMsU0FBQSxLQUFBLEdBQUEsS0FBQTtBQUNBLFNBQUEsS0FBQSxHQUFBLEtBQUE7QUFDRCxTQUFBLFdBQUEsR0FBQSxXQUFBO0FBRUEsU0FBQSxTQUFBLEdBQUEsU0FBQTtBQUVBLFNB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RkssS0FBQSxFQUdMLEtBSEssV0FBQSxFQUlMLEtBSkssU0FBQSxFQUtMLEtBTEYsVUFBTyxDQUFQO0FBT0Q7O0FBRU8sRUFBQSxHQUFHLENBQUEsS0FBQSxFQUFtQztBQUM1QyxRQUFJLEtBQUssSUFBSSxLQUFBLEtBQUEsQ0FBYixNQUFBLEVBQWdDO0FBQzlCLFlBQU0sSUFBQSxVQUFBLENBQWUsb0JBQW9CLEtBQUssdUJBQXVCLEtBQUEsS0FBQSxDQUFXLE1BQWhGLEVBQU0sQ0FBTjtBQUNEOztBQUVELFdBQU8sS0FBQSxLQUFBLENBQVAsS0FBTyxDQUFQO0FBQ0Q7O0FBRU8sRUFBQSxHQUFHLENBQUEsS0FBQSxFQUFBLEtBQUEsRUFBNkM7QUFDdEQsUUFBSSxLQUFLLElBQUksS0FBQSxLQUFBLENBQWIsTUFBQSxFQUFnQztBQUM5QixZQUFNLElBQUEsVUFBQSxDQUFlLG9CQUFvQixLQUFLLHVCQUF1QixLQUFBLEtBQUEsQ0FBVyxNQUFoRixFQUFNLENBQU47QUFDRDs7QUFFRCxTQUFBLEtBQUEsQ0FBQSxLQUFBLElBQUEsS0FBQTtBQUNEOztBQWxIMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEeW5hbWljU2NvcGUsXG4gIERpY3QsXG4gIFBhcnRpYWxTY29wZSxcbiAgU2NvcGVTbG90LFxuICBTY29wZUJsb2NrLFxuICBPcHRpb24sXG4gIFNjb3BlLFxuICBPd25lcixcbn0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IFJlZmVyZW5jZSwgVU5ERUZJTkVEX1JFRkVSRU5DRSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5cbmV4cG9ydCBjbGFzcyBEeW5hbWljU2NvcGVJbXBsIGltcGxlbWVudHMgRHluYW1pY1Njb3BlIHtcbiAgcHJpdmF0ZSBidWNrZXQ6IERpY3Q8UmVmZXJlbmNlPjtcblxuICBjb25zdHJ1Y3RvcihidWNrZXQ/OiBEaWN0PFJlZmVyZW5jZT4pIHtcbiAgICBpZiAoYnVja2V0KSB7XG4gICAgICB0aGlzLmJ1Y2tldCA9IGFzc2lnbih7fSwgYnVja2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWNrZXQgPSB7fTtcbiAgICB9XG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcpOiBSZWZlcmVuY2Uge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldFtrZXldO1xuICB9XG5cbiAgc2V0KGtleTogc3RyaW5nLCByZWZlcmVuY2U6IFJlZmVyZW5jZSk6IFJlZmVyZW5jZSB7XG4gICAgcmV0dXJuICh0aGlzLmJ1Y2tldFtrZXldID0gcmVmZXJlbmNlKTtcbiAgfVxuXG4gIGNoaWxkKCk6IER5bmFtaWNTY29wZUltcGwge1xuICAgIHJldHVybiBuZXcgRHluYW1pY1Njb3BlSW1wbCh0aGlzLmJ1Y2tldCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NvcGVSZWZlcmVuY2UoczogU2NvcGVTbG90KTogcyBpcyBSZWZlcmVuY2Uge1xuICBpZiAocyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHMpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY2xhc3MgUGFydGlhbFNjb3BlSW1wbCBpbXBsZW1lbnRzIFBhcnRpYWxTY29wZSB7XG4gIHN0YXRpYyByb290KHNlbGY6IFJlZmVyZW5jZTx1bmtub3duPiwgc2l6ZSA9IDAsIG93bmVyOiBPd25lcik6IFBhcnRpYWxTY29wZSB7XG4gICAgbGV0IHJlZnM6IFJlZmVyZW5jZTx1bmtub3duPltdID0gbmV3IEFycmF5KHNpemUgKyAxKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHNpemU7IGkrKykge1xuICAgICAgcmVmc1tpXSA9IFVOREVGSU5FRF9SRUZFUkVOQ0U7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQYXJ0aWFsU2NvcGVJbXBsKHJlZnMsIG93bmVyLCBudWxsLCBudWxsLCBudWxsKS5pbml0KHsgc2VsZiB9KTtcbiAgfVxuXG4gIHN0YXRpYyBzaXplZChzaXplID0gMCwgb3duZXI6IE93bmVyKTogU2NvcGUge1xuICAgIGxldCByZWZzOiBSZWZlcmVuY2U8dW5rbm93bj5bXSA9IG5ldyBBcnJheShzaXplICsgMSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBzaXplOyBpKyspIHtcbiAgICAgIHJlZnNbaV0gPSBVTkRFRklORURfUkVGRVJFTkNFO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUGFydGlhbFNjb3BlSW1wbChyZWZzLCBvd25lciwgbnVsbCwgbnVsbCwgbnVsbCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICAvLyB0aGUgMHRoIHNsb3QgaXMgYHNlbGZgXG4gICAgcmVhZG9ubHkgc2xvdHM6IEFycmF5PFNjb3BlU2xvdD4sXG4gICAgcmVhZG9ubHkgb3duZXI6IE93bmVyLFxuICAgIHByaXZhdGUgY2FsbGVyU2NvcGU6IFNjb3BlIHwgbnVsbCxcbiAgICAvLyBuYW1lZCBhcmd1bWVudHMgYW5kIGJsb2NrcyBwYXNzZWQgdG8gYSBsYXlvdXQgdGhhdCB1c2VzIGV2YWxcbiAgICBwcml2YXRlIGV2YWxTY29wZTogRGljdDxTY29wZVNsb3Q+IHwgbnVsbCxcbiAgICAvLyBsb2NhbHMgaW4gc2NvcGUgd2hlbiB0aGUgcGFydGlhbCB3YXMgaW52b2tlZFxuICAgIHByaXZhdGUgcGFydGlhbE1hcDogRGljdDxSZWZlcmVuY2U8dW5rbm93bj4+IHwgbnVsbFxuICApIHt9XG5cbiAgaW5pdCh7IHNlbGYgfTogeyBzZWxmOiBSZWZlcmVuY2U8dW5rbm93bj4gfSk6IHRoaXMge1xuICAgIHRoaXMuc2xvdHNbMF0gPSBzZWxmO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0U2VsZigpOiBSZWZlcmVuY2U8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLmdldDxSZWZlcmVuY2U8dW5rbm93bj4+KDApO1xuICB9XG5cbiAgZ2V0U3ltYm9sKHN5bWJvbDogbnVtYmVyKTogUmVmZXJlbmNlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQ8UmVmZXJlbmNlPHVua25vd24+PihzeW1ib2wpO1xuICB9XG5cbiAgZ2V0QmxvY2soc3ltYm9sOiBudW1iZXIpOiBPcHRpb248U2NvcGVCbG9jaz4ge1xuICAgIGxldCBibG9jayA9IHRoaXMuZ2V0KHN5bWJvbCk7XG4gICAgcmV0dXJuIGJsb2NrID09PSBVTkRFRklORURfUkVGRVJFTkNFID8gbnVsbCA6IChibG9jayBhcyBTY29wZUJsb2NrKTtcbiAgfVxuXG4gIGdldEV2YWxTY29wZSgpOiBPcHRpb248RGljdDxTY29wZVNsb3Q+PiB7XG4gICAgcmV0dXJuIHRoaXMuZXZhbFNjb3BlO1xuICB9XG5cbiAgZ2V0UGFydGlhbE1hcCgpOiBPcHRpb248RGljdDxSZWZlcmVuY2U8dW5rbm93bj4+PiB7XG4gICAgcmV0dXJuIHRoaXMucGFydGlhbE1hcDtcbiAgfVxuXG4gIGJpbmQoc3ltYm9sOiBudW1iZXIsIHZhbHVlOiBTY29wZVNsb3QpIHtcbiAgICB0aGlzLnNldChzeW1ib2wsIHZhbHVlKTtcbiAgfVxuXG4gIGJpbmRTZWxmKHNlbGY6IFJlZmVyZW5jZTx1bmtub3duPikge1xuICAgIHRoaXMuc2V0PFJlZmVyZW5jZTx1bmtub3duPj4oMCwgc2VsZik7XG4gIH1cblxuICBiaW5kU3ltYm9sKHN5bWJvbDogbnVtYmVyLCB2YWx1ZTogUmVmZXJlbmNlPHVua25vd24+KSB7XG4gICAgdGhpcy5zZXQoc3ltYm9sLCB2YWx1ZSk7XG4gIH1cblxuICBiaW5kQmxvY2soc3ltYm9sOiBudW1iZXIsIHZhbHVlOiBPcHRpb248U2NvcGVCbG9jaz4pIHtcbiAgICB0aGlzLnNldDxPcHRpb248U2NvcGVCbG9jaz4+KHN5bWJvbCwgdmFsdWUpO1xuICB9XG5cbiAgYmluZEV2YWxTY29wZShtYXA6IE9wdGlvbjxEaWN0PFNjb3BlU2xvdD4+KSB7XG4gICAgdGhpcy5ldmFsU2NvcGUgPSBtYXA7XG4gIH1cblxuICBiaW5kUGFydGlhbE1hcChtYXA6IERpY3Q8UmVmZXJlbmNlPHVua25vd24+Pikge1xuICAgIHRoaXMucGFydGlhbE1hcCA9IG1hcDtcbiAgfVxuXG4gIGJpbmRDYWxsZXJTY29wZShzY29wZTogT3B0aW9uPFNjb3BlPik6IHZvaWQge1xuICAgIHRoaXMuY2FsbGVyU2NvcGUgPSBzY29wZTtcbiAgfVxuXG4gIGdldENhbGxlclNjb3BlKCk6IE9wdGlvbjxTY29wZT4ge1xuICAgIHJldHVybiB0aGlzLmNhbGxlclNjb3BlO1xuICB9XG5cbiAgY2hpbGQoKTogU2NvcGUge1xuICAgIHJldHVybiBuZXcgUGFydGlhbFNjb3BlSW1wbChcbiAgICAgIHRoaXMuc2xvdHMuc2xpY2UoKSxcbiAgICAgIHRoaXMub3duZXIsXG4gICAgICB0aGlzLmNhbGxlclNjb3BlLFxuICAgICAgdGhpcy5ldmFsU2NvcGUsXG4gICAgICB0aGlzLnBhcnRpYWxNYXBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQ8VCBleHRlbmRzIFNjb3BlU2xvdD4oaW5kZXg6IG51bWJlcik6IFQge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnNsb3RzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEJVRzogY2Fubm90IGdldCAkJHtpbmRleH0gZnJvbSBzY29wZTsgbGVuZ3RoPSR7dGhpcy5zbG90cy5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2xvdHNbaW5kZXhdIGFzIFQ7XG4gIH1cblxuICBwcml2YXRlIHNldDxUIGV4dGVuZHMgU2NvcGVTbG90PihpbmRleDogbnVtYmVyLCB2YWx1ZTogVCk6IHZvaWQge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnNsb3RzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEJVRzogY2Fubm90IGdldCAkJHtpbmRleH0gZnJvbSBzY29wZTsgbGVuZ3RoPSR7dGhpcy5zbG90cy5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5zbG90c1tpbmRleF0gPSB2YWx1ZTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==