@glimmer/runtime
Version:
Minimal runtime needed to render Glimmer templates
98 lines (74 loc) • 8.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.setDebuggerCallback = setDebuggerCallback;
exports.resetDebuggerCallback = resetDebuggerCallback;
var _reference = require("@glimmer/reference");
var _util = require("@glimmer/util");
var _opcodes = require("../../opcodes");
var _symbols2 = require("../../symbols");
function debugCallback(context, get) {
// eslint-disable-next-line no-console
console.info('Use `context`, and `get(<path>)` to debug this template.'); // for example...
// eslint-disable-next-line no-unused-expressions
context === get('this'); // eslint-disable-next-line no-debugger
debugger;
}
var callback = debugCallback; // For testing purposes
function setDebuggerCallback(cb) {
callback = cb;
}
function resetDebuggerCallback() {
callback = debugCallback;
}
var ScopeInspector = /*#__PURE__*/function () {
function ScopeInspector(scope, symbols, evalInfo) {
this.scope = scope;
this.locals = (0, _util.dict)();
for (var i = 0; i < evalInfo.length; i++) {
var slot = evalInfo[i];
var name = symbols[slot - 1];
var ref = scope.getSymbol(slot);
this.locals[name] = ref;
}
}
var _proto = ScopeInspector.prototype;
_proto.get = function get(path) {
var scope = this.scope,
locals = this.locals;
var parts = path.split('.');
var _path$split = path.split('.'),
head = _path$split[0],
tail = _path$split.slice(1);
var evalScope = scope.getEvalScope();
var ref;
if (head === 'this') {
ref = scope.getSelf();
} else if (locals[head]) {
ref = locals[head];
} else if (head.indexOf('@') === 0 && evalScope[head]) {
ref = evalScope[head];
} else {
ref = this.scope.getSelf();
tail = parts;
}
return tail.reduce(function (r, part) {
return (0, _reference.childRefFor)(r, part);
}, ref);
};
return ScopeInspector;
}();
_opcodes.APPEND_OPCODES.add(103
/* Debugger */
, function (vm, _ref) {
var _symbols = _ref.op1,
_evalInfo = _ref.op2;
var symbols = vm[_symbols2.CONSTANTS].getArray(_symbols);
var evalInfo = vm[_symbols2.CONSTANTS].getArray((0, _util.decodeHandle)(_evalInfo));
var inspector = new ScopeInspector(vm.scope(), symbols, evalInfo);
callback((0, _reference.valueForRef)(vm.getSelf()), function (path) {
return (0, _reference.valueForRef)(inspector.get(path));
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL2NvbXBpbGVkL29wY29kZXMvZGVidWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFNQSxTQUFBLGFBQUEsQ0FBQSxPQUFBLEVBQUEsR0FBQSxFQUFzRDtBQUNwRDtBQUNBLEVBQUEsT0FBTyxDQUFQLElBQUEsQ0FGb0QsMERBRXBELEVBRm9ELENBSXBEO0FBQ0E7O0FBQ0EsRUFBQSxPQUFPLEtBQUssR0FBRyxDQU5xQyxNQU1yQyxDQUFmLENBTm9ELENBUXBEOztBQUNBO0FBQ0Q7O0FBRUQsSUFBSSxRQUFRLEdBQVosYUFBQSxDLENBRUE7O0FBQ00sU0FBQSxtQkFBQSxDQUFBLEVBQUEsRUFBK0M7QUFDbkQsRUFBQSxRQUFRLEdBQVIsRUFBQTtBQUNEOztBQUVLLFNBQUEscUJBQUEsR0FBK0I7QUFDbkMsRUFBQSxRQUFRLEdBQVIsYUFBQTtBQUNEOztJQUVELGM7QUFHRSxXQUFBLGNBQUEsQ0FBQSxLQUFBLEVBQUEsT0FBQSxFQUFBLFFBQUEsRUFBdUU7QUFBbkQsU0FBQSxLQUFBLEdBQUEsS0FBQTtBQUZaLFNBQUEsTUFBQSxHQUFBLGlCQUFBOztBQUdOLFNBQUssSUFBSSxDQUFDLEdBQVYsQ0FBQSxFQUFnQixDQUFDLEdBQUcsUUFBUSxDQUE1QixNQUFBLEVBQXFDLENBQXJDLEVBQUEsRUFBMEM7QUFDeEMsVUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFuQixDQUFtQixDQUFuQjtBQUNBLFVBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQXZCLENBQWtCLENBQWxCO0FBQ0EsVUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFMLFNBQUEsQ0FBVixJQUFVLENBQVY7QUFDQSxXQUFBLE1BQUEsQ0FBQSxJQUFBLElBQUEsR0FBQTtBQUNEO0FBQ0Y7Ozs7U0FFRCxHLEdBQUEsU0FBQSxHQUFBLENBQUEsSUFBQSxFQUFnQjtBQUFBLFFBQ1YsS0FEVSxHQUFBLEtBQUEsS0FBQTtBQUFBLFFBQ0QsTUFEQyxHQUFBLEtBQUEsTUFBQTtBQUVkLFFBQUksS0FBSyxHQUFHLElBQUksQ0FBSixLQUFBLENBQVosR0FBWSxDQUFaOztBQUZjLFFBQUEsV0FBQSxHQUdRLElBQUksQ0FBSixLQUFBLENBSFIsR0FHUSxDQUhSO0FBQUEsUUFHVixJQUhVLEdBQUEsV0FBQSxDQUFBLENBQUEsQ0FBQTtBQUFBLFFBR1YsSUFIVSxHQUFBLFdBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBOztBQUtkLFFBQUksU0FBUyxHQUFHLEtBQUssQ0FBckIsWUFBZ0IsRUFBaEI7QUFDQSxRQUFBLEdBQUE7O0FBRUEsUUFBSSxJQUFJLEtBQVIsTUFBQSxFQUFxQjtBQUNuQixNQUFBLEdBQUcsR0FBRyxLQUFLLENBQVgsT0FBTSxFQUFOO0FBREYsS0FBQSxNQUVPLElBQUksTUFBTSxDQUFWLElBQVUsQ0FBVixFQUFrQjtBQUN2QixNQUFBLEdBQUcsR0FBRyxNQUFNLENBQVosSUFBWSxDQUFaO0FBREssS0FBQSxNQUVBLElBQUksSUFBSSxDQUFKLE9BQUEsQ0FBQSxHQUFBLE1BQUEsQ0FBQSxJQUEyQixTQUFTLENBQXhDLElBQXdDLENBQXhDLEVBQWdEO0FBQ3JELE1BQUEsR0FBRyxHQUFHLFNBQVMsQ0FBZixJQUFlLENBQWY7QUFESyxLQUFBLE1BRUE7QUFDTCxNQUFBLEdBQUcsR0FBRyxLQUFBLEtBQUEsQ0FBTixPQUFNLEVBQU47QUFDQSxNQUFBLElBQUksR0FBSixLQUFBO0FBQ0Q7O0FBRUQsV0FBTyxJQUFJLENBQUosTUFBQSxDQUFZLFVBQUEsQ0FBQSxFQUFBLElBQUEsRUFBQTtBQUFBLGFBQWEsNEJBQVcsQ0FBWCxFQUF6QixJQUF5QixDQUFiO0FBQVosS0FBQSxFQUFQLEdBQU8sQ0FBUDs7Ozs7O0FBSUosd0JBQUEsR0FBQSxDQUFrQjtBQUFBO0FBQWxCLEVBQWdDLFVBQUEsRUFBQSxFQUFBLElBQUEsRUFBMEM7QUFBQSxNQUFyQyxRQUFxQyxHQUFBLElBQUEsQ0FBbkMsR0FBbUM7QUFBQSxNQUFmLFNBQWUsR0FBQSxJQUFBLENBQXBCLEdBQW9COztBQUN4RSxNQUFJLE9BQU8sR0FBRyxFQUFFLENBQUYsbUJBQUUsQ0FBRixDQUFBLFFBQUEsQ0FBZCxRQUFjLENBQWQ7O0FBQ0EsTUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFGLG1CQUFFLENBQUYsQ0FBQSxRQUFBLENBQStCLHdCQUE5QyxTQUE4QyxDQUEvQixDQUFmOztBQUNBLE1BQUksU0FBUyxHQUFHLElBQUEsY0FBQSxDQUFtQixFQUFFLENBQXJCLEtBQW1CLEVBQW5CLEVBQUEsT0FBQSxFQUFoQixRQUFnQixDQUFoQjtBQUNBLEVBQUEsUUFBUSxDQUFDLDRCQUFZLEVBQUUsQ0FBZixPQUFhLEVBQVosQ0FBRCxFQUE2QixVQUFELElBQUMsRUFBRDtBQUFBLFdBQVUsNEJBQVksU0FBUyxDQUFULEdBQUEsQ0FBMUQsSUFBMEQsQ0FBWixDQUFWO0FBQXBDLEdBQVEsQ0FBUjtBQUpGLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcCwgU2NvcGUgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFJlZmVyZW5jZSwgY2hpbGRSZWZGb3IsIHZhbHVlRm9yUmVmIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IGRpY3QsIGRlY29kZUhhbmRsZSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IENPTlNUQU5UUyB9IGZyb20gJy4uLy4uL3N5bWJvbHMnO1xuXG5leHBvcnQgdHlwZSBEZWJ1Z0dldCA9IChwYXRoOiBzdHJpbmcpID0+IHVua25vd247XG5cbmV4cG9ydCB0eXBlIERlYnVnQ2FsbGJhY2sgPSAoY29udGV4dDogdW5rbm93biwgZ2V0OiBEZWJ1Z0dldCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gZGVidWdDYWxsYmFjayhjb250ZXh0OiB1bmtub3duLCBnZXQ6IERlYnVnR2V0KTogdm9pZCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUuaW5mbygnVXNlIGBjb250ZXh0YCwgYW5kIGBnZXQoPHBhdGg+KWAgdG8gZGVidWcgdGhpcyB0ZW1wbGF0ZS4nKTtcblxuICAvLyBmb3IgZXhhbXBsZS4uLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gIGNvbnRleHQgPT09IGdldCgndGhpcycpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kZWJ1Z2dlclxuICBkZWJ1Z2dlcjtcbn1cblxubGV0IGNhbGxiYWNrID0gZGVidWdDYWxsYmFjaztcblxuLy8gRm9yIHRlc3RpbmcgcHVycG9zZXNcbmV4cG9ydCBmdW5jdGlvbiBzZXREZWJ1Z2dlckNhbGxiYWNrKGNiOiBEZWJ1Z0NhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gY2I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldERlYnVnZ2VyQ2FsbGJhY2soKSB7XG4gIGNhbGxiYWNrID0gZGVidWdDYWxsYmFjaztcbn1cblxuY2xhc3MgU2NvcGVJbnNwZWN0b3Ige1xuICBwcml2YXRlIGxvY2FscyA9IGRpY3Q8UmVmZXJlbmNlPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2NvcGU6IFNjb3BlLCBzeW1ib2xzOiBzdHJpbmdbXSwgZXZhbEluZm86IG51bWJlcltdKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmFsSW5mby5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHNsb3QgPSBldmFsSW5mb1tpXTtcbiAgICAgIGxldCBuYW1lID0gc3ltYm9sc1tzbG90IC0gMV07XG4gICAgICBsZXQgcmVmID0gc2NvcGUuZ2V0U3ltYm9sKHNsb3QpO1xuICAgICAgdGhpcy5sb2NhbHNbbmFtZV0gPSByZWY7XG4gICAgfVxuICB9XG5cbiAgZ2V0KHBhdGg6IHN0cmluZyk6IFJlZmVyZW5jZSB7XG4gICAgbGV0IHsgc2NvcGUsIGxvY2FscyB9ID0gdGhpcztcbiAgICBsZXQgcGFydHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgbGV0IFtoZWFkLCAuLi50YWlsXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGxldCBldmFsU2NvcGUgPSBzY29wZS5nZXRFdmFsU2NvcGUoKSE7XG4gICAgbGV0IHJlZjogUmVmZXJlbmNlO1xuXG4gICAgaWYgKGhlYWQgPT09ICd0aGlzJykge1xuICAgICAgcmVmID0gc2NvcGUuZ2V0U2VsZigpO1xuICAgIH0gZWxzZSBpZiAobG9jYWxzW2hlYWRdKSB7XG4gICAgICByZWYgPSBsb2NhbHNbaGVhZF07XG4gICAgfSBlbHNlIGlmIChoZWFkLmluZGV4T2YoJ0AnKSA9PT0gMCAmJiBldmFsU2NvcGVbaGVhZF0pIHtcbiAgICAgIHJlZiA9IGV2YWxTY29wZVtoZWFkXSBhcyBSZWZlcmVuY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZiA9IHRoaXMuc2NvcGUuZ2V0U2VsZigpO1xuICAgICAgdGFpbCA9IHBhcnRzO1xuICAgIH1cblxuICAgIHJldHVybiB0YWlsLnJlZHVjZSgociwgcGFydCkgPT4gY2hpbGRSZWZGb3IociwgcGFydCksIHJlZik7XG4gIH1cbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkRlYnVnZ2VyLCAodm0sIHsgb3AxOiBfc3ltYm9scywgb3AyOiBfZXZhbEluZm8gfSkgPT4ge1xuICBsZXQgc3ltYm9scyA9IHZtW0NPTlNUQU5UU10uZ2V0QXJyYXk8c3RyaW5nPihfc3ltYm9scyk7XG4gIGxldCBldmFsSW5mbyA9IHZtW0NPTlNUQU5UU10uZ2V0QXJyYXk8bnVtYmVyPihkZWNvZGVIYW5kbGUoX2V2YWxJbmZvKSk7XG4gIGxldCBpbnNwZWN0b3IgPSBuZXcgU2NvcGVJbnNwZWN0b3Iodm0uc2NvcGUoKSwgc3ltYm9scywgZXZhbEluZm8pO1xuICBjYWxsYmFjayh2YWx1ZUZvclJlZih2bS5nZXRTZWxmKCkpLCAocGF0aCkgPT4gdmFsdWVGb3JSZWYoaW5zcGVjdG9yLmdldChwYXRoKSkpO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9