@glimmer/runtime
Version:
Minimal runtime needed to render Glimmer templates
157 lines (123 loc) • 14 kB
JavaScript
import { assign } from '@glimmer/util';
import { UNDEFINED_REFERENCE } from '@glimmer/reference';
export var DynamicScopeImpl = /*#__PURE__*/function () {
function DynamicScopeImpl(bucket) {
if (bucket) {
this.bucket = 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;
}();
export function isScopeReference(s) {
if (s === null || Array.isArray(s)) return false;
return true;
}
export 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] = 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] = 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 === 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;
}();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL3Njb3BlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLFNBQUEsTUFBQSxRQUFBLGVBQUE7QUFDQSxTQUFBLG1CQUFBLFFBQUEsb0JBQUE7QUFFQSxXQUFNLGdCQUFOO0FBR0UsNEJBQUEsTUFBQSxFQUFvQztBQUNsQyxRQUFBLE1BQUEsRUFBWTtBQUNWLFdBQUEsTUFBQSxHQUFjLE1BQU0sQ0FBQSxFQUFBLEVBQXBCLE1BQW9CLENBQXBCO0FBREYsS0FBQSxNQUVPO0FBQ0wsV0FBQSxNQUFBLEdBQUEsRUFBQTtBQUNEO0FBQ0Y7O0FBVEg7O0FBQUEsU0FXRSxHQVhGLEdBV0UsYUFBRyxHQUFILEVBQWU7QUFDYixXQUFPLEtBQUEsTUFBQSxDQUFQLEdBQU8sQ0FBUDtBQUNELEdBYkg7O0FBQUEsU0FlRSxHQWZGLEdBZUUsYUFBRyxHQUFILEVBQUcsU0FBSCxFQUFxQztBQUNuQyxXQUFRLEtBQUEsTUFBQSxDQUFBLEdBQUEsSUFBUixTQUFBO0FBQ0QsR0FqQkg7O0FBQUEsU0FtQkUsS0FuQkYsR0FtQkUsaUJBQUs7QUFDSCxXQUFPLElBQUEsZ0JBQUEsQ0FBcUIsS0FBNUIsTUFBTyxDQUFQO0FBQ0QsR0FyQkg7O0FBQUE7QUFBQTtBQXdCQSxPQUFNLFNBQUEsZ0JBQUEsQ0FBQSxDQUFBLEVBQXVDO0FBQzNDLE1BQUksQ0FBQyxLQUFELElBQUEsSUFBYyxLQUFLLENBQUwsT0FBQSxDQUFsQixDQUFrQixDQUFsQixFQUFvQyxPQUFBLEtBQUE7QUFDcEMsU0FBQSxJQUFBO0FBQ0Q7QUFFRCxXQUFNLGdCQUFOO0FBcUJFLDZCQUNFO0FBREYsRUFBQSxLQUFBLEVBQUEsS0FBQSxFQUFBLFdBQUEsRUFLRTtBQUxGLEVBQUEsU0FBQSxFQU9FO0FBUEYsRUFBQSxVQUFBLEVBUXFEO0FBTjFDLFNBQUEsS0FBQSxHQUFBLEtBQUE7QUFDQSxTQUFBLEtBQUEsR0FBQSxLQUFBO0FBQ0Qs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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEeW5hbWljU2NvcGUsXG4gIERpY3QsXG4gIFBhcnRpYWxTY29wZSxcbiAgU2NvcGVTbG90LFxuICBTY29wZUJsb2NrLFxuICBPcHRpb24sXG4gIFNjb3BlLFxuICBPd25lcixcbn0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IFJlZmVyZW5jZSwgVU5ERUZJTkVEX1JFRkVSRU5DRSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5cbmV4cG9ydCBjbGFzcyBEeW5hbWljU2NvcGVJbXBsIGltcGxlbWVudHMgRHluYW1pY1Njb3BlIHtcbiAgcHJpdmF0ZSBidWNrZXQ6IERpY3Q8UmVmZXJlbmNlPjtcblxuICBjb25zdHJ1Y3RvcihidWNrZXQ/OiBEaWN0PFJlZmVyZW5jZT4pIHtcbiAgICBpZiAoYnVja2V0KSB7XG4gICAgICB0aGlzLmJ1Y2tldCA9IGFzc2lnbih7fSwgYnVja2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWNrZXQgPSB7fTtcbiAgICB9XG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcpOiBSZWZlcmVuY2Uge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldFtrZXldO1xuICB9XG5cbiAgc2V0KGtleTogc3RyaW5nLCByZWZlcmVuY2U6IFJlZmVyZW5jZSk6IFJlZmVyZW5jZSB7XG4gICAgcmV0dXJuICh0aGlzLmJ1Y2tldFtrZXldID0gcmVmZXJlbmNlKTtcbiAgfVxuXG4gIGNoaWxkKCk6IER5bmFtaWNTY29wZUltcGwge1xuICAgIHJldHVybiBuZXcgRHluYW1pY1Njb3BlSW1wbCh0aGlzLmJ1Y2tldCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NvcGVSZWZlcmVuY2UoczogU2NvcGVTbG90KTogcyBpcyBSZWZlcmVuY2Uge1xuICBpZiAocyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHMpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY2xhc3MgUGFydGlhbFNjb3BlSW1wbCBpbXBsZW1lbnRzIFBhcnRpYWxTY29wZSB7XG4gIHN0YXRpYyByb290KHNlbGY6IFJlZmVyZW5jZTx1bmtub3duPiwgc2l6ZSA9IDAsIG93bmVyOiBPd25lcik6IFBhcnRpYWxTY29wZSB7XG4gICAgbGV0IHJlZnM6IFJlZmVyZW5jZTx1bmtub3duPltdID0gbmV3IEFycmF5KHNpemUgKyAxKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHNpemU7IGkrKykge1xuICAgICAgcmVmc1tpXSA9IFVOREVGSU5FRF9SRUZFUkVOQ0U7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQYXJ0aWFsU2NvcGVJbXBsKHJlZnMsIG93bmVyLCBudWxsLCBudWxsLCBudWxsKS5pbml0KHsgc2VsZiB9KTtcbiAgfVxuXG4gIHN0YXRpYyBzaXplZChzaXplID0gMCwgb3duZXI6IE93bmVyKTogU2NvcGUge1xuICAgIGxldCByZWZzOiBSZWZlcmVuY2U8dW5rbm93bj5bXSA9IG5ldyBBcnJheShzaXplICsgMSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBzaXplOyBpKyspIHtcbiAgICAgIHJlZnNbaV0gPSBVTkRFRklORURfUkVGRVJFTkNFO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUGFydGlhbFNjb3BlSW1wbChyZWZzLCBvd25lciwgbnVsbCwgbnVsbCwgbnVsbCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICAvLyB0aGUgMHRoIHNsb3QgaXMgYHNlbGZgXG4gICAgcmVhZG9ubHkgc2xvdHM6IEFycmF5PFNjb3BlU2xvdD4sXG4gICAgcmVhZG9ubHkgb3duZXI6IE93bmVyLFxuICAgIHByaXZhdGUgY2FsbGVyU2NvcGU6IFNjb3BlIHwgbnVsbCxcbiAgICAvLyBuYW1lZCBhcmd1bWVudHMgYW5kIGJsb2NrcyBwYXNzZWQgdG8gYSBsYXlvdXQgdGhhdCB1c2VzIGV2YWxcbiAgICBwcml2YXRlIGV2YWxTY29wZTogRGljdDxTY29wZVNsb3Q+IHwgbnVsbCxcbiAgICAvLyBsb2NhbHMgaW4gc2NvcGUgd2hlbiB0aGUgcGFydGlhbCB3YXMgaW52b2tlZFxuICAgIHByaXZhdGUgcGFydGlhbE1hcDogRGljdDxSZWZlcmVuY2U8dW5rbm93bj4+IHwgbnVsbFxuICApIHt9XG5cbiAgaW5pdCh7IHNlbGYgfTogeyBzZWxmOiBSZWZlcmVuY2U8dW5rbm93bj4gfSk6IHRoaXMge1xuICAgIHRoaXMuc2xvdHNbMF0gPSBzZWxmO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0U2VsZigpOiBSZWZlcmVuY2U8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLmdldDxSZWZlcmVuY2U8dW5rbm93bj4+KDApO1xuICB9XG5cbiAgZ2V0U3ltYm9sKHN5bWJvbDogbnVtYmVyKTogUmVmZXJlbmNlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQ8UmVmZXJlbmNlPHVua25vd24+PihzeW1ib2wpO1xuICB9XG5cbiAgZ2V0QmxvY2soc3ltYm9sOiBudW1iZXIpOiBPcHRpb248U2NvcGVCbG9jaz4ge1xuICAgIGxldCBibG9jayA9IHRoaXMuZ2V0KHN5bWJvbCk7XG4gICAgcmV0dXJuIGJsb2NrID09PSBVTkRFRklORURfUkVGRVJFTkNFID8gbnVsbCA6IChibG9jayBhcyBTY29wZUJsb2NrKTtcbiAgfVxuXG4gIGdldEV2YWxTY29wZSgpOiBPcHRpb248RGljdDxTY29wZVNsb3Q+PiB7XG4gICAgcmV0dXJuIHRoaXMuZXZhbFNjb3BlO1xuICB9XG5cbiAgZ2V0UGFydGlhbE1hcCgpOiBPcHRpb248RGljdDxSZWZlcmVuY2U8dW5rbm93bj4+PiB7XG4gICAgcmV0dXJuIHRoaXMucGFydGlhbE1hcDtcbiAgfVxuXG4gIGJpbmQoc3ltYm9sOiBudW1iZXIsIHZhbHVlOiBTY29wZVNsb3QpIHtcbiAgICB0aGlzLnNldChzeW1ib2wsIHZhbHVlKTtcbiAgfVxuXG4gIGJpbmRTZWxmKHNlbGY6IFJlZmVyZW5jZTx1bmtub3duPikge1xuICAgIHRoaXMuc2V0PFJlZmVyZW5jZTx1bmtub3duPj4oMCwgc2VsZik7XG4gIH1cblxuICBiaW5kU3ltYm9sKHN5bWJvbDogbnVtYmVyLCB2YWx1ZTogUmVmZXJlbmNlPHVua25vd24+KSB7XG4gICAgdGhpcy5zZXQoc3ltYm9sLCB2YWx1ZSk7XG4gIH1cblxuICBiaW5kQmxvY2soc3ltYm9sOiBudW1iZXIsIHZhbHVlOiBPcHRpb248U2NvcGVCbG9jaz4pIHtcbiAgICB0aGlzLnNldDxPcHRpb248U2NvcGVCbG9jaz4+KHN5bWJvbCwgdmFsdWUpO1xuICB9XG5cbiAgYmluZEV2YWxTY29wZShtYXA6IE9wdGlvbjxEaWN0PFNjb3BlU2xvdD4+KSB7XG4gICAgdGhpcy5ldmFsU2NvcGUgPSBtYXA7XG4gIH1cblxuICBiaW5kUGFydGlhbE1hcChtYXA6IERpY3Q8UmVmZXJlbmNlPHVua25vd24+Pikge1xuICAgIHRoaXMucGFydGlhbE1hcCA9IG1hcDtcbiAgfVxuXG4gIGJpbmRDYWxsZXJTY29wZShzY29wZTogT3B0aW9uPFNjb3BlPik6IHZvaWQge1xuICAgIHRoaXMuY2FsbGVyU2NvcGUgPSBzY29wZTtcbiAgfVxuXG4gIGdldENhbGxlclNjb3BlKCk6IE9wdGlvbjxTY29wZT4ge1xuICAgIHJldHVybiB0aGlzLmNhbGxlclNjb3BlO1xuICB9XG5cbiAgY2hpbGQoKTogU2NvcGUge1xuICAgIHJldHVybiBuZXcgUGFydGlhbFNjb3BlSW1wbChcbiAgICAgIHRoaXMuc2xvdHMuc2xpY2UoKSxcbiAgICAgIHRoaXMub3duZXIsXG4gICAgICB0aGlzLmNhbGxlclNjb3BlLFxuICAgICAgdGhpcy5ldmFsU2NvcGUsXG4gICAgICB0aGlzLnBhcnRpYWxNYXBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQ8VCBleHRlbmRzIFNjb3BlU2xvdD4oaW5kZXg6IG51bWJlcik6IFQge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnNsb3RzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEJVRzogY2Fubm90IGdldCAkJHtpbmRleH0gZnJvbSBzY29wZTsgbGVuZ3RoPSR7dGhpcy5zbG90cy5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2xvdHNbaW5kZXhdIGFzIFQ7XG4gIH1cblxuICBwcml2YXRlIHNldDxUIGV4dGVuZHMgU2NvcGVTbG90PihpbmRleDogbnVtYmVyLCB2YWx1ZTogVCk6IHZvaWQge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnNsb3RzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEJVRzogY2Fubm90IGdldCAkJHtpbmRleH0gZnJvbSBzY29wZTsgbGVuZ3RoPSR7dGhpcy5zbG90cy5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5zbG90c1tpbmRleF0gPSB2YWx1ZTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==