UNPKG

@glimmer/runtime

Version:

Minimal runtime needed to render Glimmer templates

83 lines (68 loc) 8.38 kB
import { childRefFor, valueForRef } from '@glimmer/reference'; import { dict, decodeHandle } from '@glimmer/util'; import { APPEND_OPCODES } from '../../opcodes'; import { CONSTANTS } from '../../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 export function setDebuggerCallback(cb) { callback = cb; } export function resetDebuggerCallback() { callback = debugCallback; } var ScopeInspector = /*#__PURE__*/function () { function ScopeInspector(scope, symbols, evalInfo) { this.scope = scope; this.locals = 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 childRefFor(r, part); }, ref); }; return ScopeInspector; }(); APPEND_OPCODES.add(103 /* Debugger */ , function (vm, _ref) { var _symbols = _ref.op1, _evalInfo = _ref.op2; var symbols = vm[CONSTANTS].getArray(_symbols); var evalInfo = vm[CONSTANTS].getArray(decodeHandle(_evalInfo)); var inspector = new ScopeInspector(vm.scope(), symbols, evalInfo); callback(valueForRef(vm.getSelf()), function (path) { return valueForRef(inspector.get(path)); }); }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL2NvbXBpbGVkL29wY29kZXMvZGVidWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBQSxXQUFBLEVBQUEsV0FBQSxRQUFBLG9CQUFBO0FBQ0EsU0FBQSxJQUFBLEVBQUEsWUFBQSxRQUFBLGVBQUE7QUFDQSxTQUFBLGNBQUEsUUFBQSxlQUFBO0FBQ0EsU0FBQSxTQUFBLFFBQUEsZUFBQTs7QUFNQSxTQUFBLGFBQUEsQ0FBQSxPQUFBLEVBQUEsR0FBQSxFQUFzRDtBQUNwRDtBQUNBLEVBQUEsT0FBTyxDQUFQLElBQUEsQ0FGb0QsMERBRXBELEVBRm9ELENBSXBEO0FBQ0E7O0FBQ0EsRUFBQSxPQUFPLEtBQUssR0FBRyxDQU5xQyxNQU1yQyxDQUFmLENBTm9ELENBUXBEOztBQUNBO0FBQ0Q7O0FBRUQsSUFBSSxRQUFRLEdBQVosYUFBQSxDLENBRUE7O0FBQ0EsT0FBTSxTQUFBLG1CQUFBLENBQUEsRUFBQSxFQUErQztBQUNuRCxFQUFBLFFBQVEsR0FBUixFQUFBO0FBQ0Q7QUFFRCxPQUFNLFNBQUEscUJBQUEsR0FBK0I7QUFDbkMsRUFBQSxRQUFRLEdBQVIsYUFBQTtBQUNEOztJQUVELGM7QUFHRSwwQkFBQSxLQUFBLEVBQUEsT0FBQSxFQUFBLFFBQUEsRUFBdUU7QUFBbkQsU0FBQSxLQUFBLEdBQUEsS0FBQTtBQUZaLFNBQUEsTUFBQSxHQUFTLElBQVQsRUFBQTs7QUFHTixTQUFLLElBQUksQ0FBQyxHQUFWLENBQUEsRUFBZ0IsQ0FBQyxHQUFHLFFBQVEsQ0FBNUIsTUFBQSxFQUFxQyxDQUFyQyxFQUFBLEVBQTBDO0FBQ3hDLFVBQUksSUFBSSxHQUFHLFFBQVEsQ0FBbkIsQ0FBbUIsQ0FBbkI7QUFDQSxVQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUF2QixDQUFrQixDQUFsQjtBQUNBLFVBQUksR0FBRyxHQUFHLEtBQUssQ0FBTCxTQUFBLENBQVYsSUFBVSxDQUFWO0FBQ0EsV0FBQSxNQUFBLENBQUEsSUFBQSxJQUFBLEdBQUE7QUFDRDtBQUNGOzs7O1NBRUQsRyxHQUFBLGFBQUcsSUFBSCxFQUFnQjtBQUFBLFFBQ1YsS0FEVSxHQUNkLElBRGMsQ0FDVixLQURVO0FBQUEsUUFDRCxNQURDLEdBQ2QsSUFEYyxDQUNELE1BREM7QUFFZCxRQUFJLEtBQUssR0FBRyxJQUFJLENBQUosS0FBQSxDQUFaLEdBQVksQ0FBWjs7QUFGYyxzQkFHUSxJQUFJLENBQUosS0FBQSxDQUF0QixHQUFzQixDQUhSO0FBQUEsUUFHVixJQUhVO0FBQUEsUUFHVixJQUhVOztBQUtkLFFBQUksU0FBUyxHQUFHLEtBQUssQ0FBckIsWUFBZ0IsRUFBaEI7QUFDQSxRQUFBLEdBQUE7O0FBRUEsUUFBSSxJQUFJLEtBQVIsTUFBQSxFQUFxQjtBQUNuQixNQUFBLEdBQUcsR0FBRyxLQUFLLENBQVgsT0FBTSxFQUFOO0FBREYsS0FBQSxNQUVPLElBQUksTUFBTSxDQUFWLElBQVUsQ0FBVixFQUFrQjtBQUN2QixNQUFBLEdBQUcsR0FBRyxNQUFNLENBQVosSUFBWSxDQUFaO0FBREssS0FBQSxNQUVBLElBQUksSUFBSSxDQUFKLE9BQUEsQ0FBQSxHQUFBLE1BQUEsQ0FBQSxJQUEyQixTQUFTLENBQXhDLElBQXdDLENBQXhDLEVBQWdEO0FBQ3JELE1BQUEsR0FBRyxHQUFHLFNBQVMsQ0FBZixJQUFlLENBQWY7QUFESyxLQUFBLE1BRUE7QUFDTCxNQUFBLEdBQUcsR0FBRyxLQUFBLEtBQUEsQ0FBTixPQUFNLEVBQU47QUFDQSxNQUFBLElBQUksR0FBSixLQUFBO0FBQ0Q7O0FBRUQsV0FBTyxJQUFJLENBQUosTUFBQSxDQUFZLFVBQUEsQ0FBQSxFQUFBLElBQUE7QUFBQSxhQUFhLFdBQVcsQ0FBQSxDQUFBLEVBQXBDLElBQW9DLENBQXhCO0FBQUEsS0FBWixFQUFQLEdBQU8sQ0FBUDtBQUNELEc7Ozs7O0FBR0gsY0FBYyxDQUFkLEdBQUEsQ0FBa0I7QUFBQTtBQUFsQixFQUFnQyxVQUFBLEVBQUEsUUFBMEM7QUFBQSxNQUFyQyxRQUFxQyxRQUFuQyxHQUFtQztBQUFBLE1BQWYsU0FBZSxRQUFwQixHQUFvQjtBQUN4RSxNQUFJLE9BQU8sR0FBRyxFQUFFLENBQUYsU0FBRSxDQUFGLENBQUEsUUFBQSxDQUFkLFFBQWMsQ0FBZDtBQUNBLE1BQUksUUFBUSxHQUFHLEVBQUUsQ0FBRixTQUFFLENBQUYsQ0FBQSxRQUFBLENBQStCLFlBQVksQ0FBMUQsU0FBMEQsQ0FBM0MsQ0FBZjtBQUNBLE1BQUksU0FBUyxHQUFHLElBQUEsY0FBQSxDQUFtQixFQUFFLENBQXJCLEtBQW1CLEVBQW5CLEVBQUEsT0FBQSxFQUFoQixRQUFnQixDQUFoQjtBQUNBLEVBQUEsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQWYsT0FBYSxFQUFELENBQVosRUFBNkIsVUFBQSxJQUFEO0FBQUEsV0FBVSxXQUFXLENBQUMsU0FBUyxDQUFULEdBQUEsQ0FBMUQsSUFBMEQsQ0FBRCxDQUFyQjtBQUFBLEdBQTVCLENBQVI7QUFKRixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3AsIFNjb3BlIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSZWZlcmVuY2UsIGNoaWxkUmVmRm9yLCB2YWx1ZUZvclJlZiB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBkaWN0LCBkZWNvZGVIYW5kbGUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDT05TVEFOVFMgfSBmcm9tICcuLi8uLi9zeW1ib2xzJztcblxuZXhwb3J0IHR5cGUgRGVidWdHZXQgPSAocGF0aDogc3RyaW5nKSA9PiB1bmtub3duO1xuXG5leHBvcnQgdHlwZSBEZWJ1Z0NhbGxiYWNrID0gKGNvbnRleHQ6IHVua25vd24sIGdldDogRGVidWdHZXQpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIGRlYnVnQ2FsbGJhY2soY29udGV4dDogdW5rbm93biwgZ2V0OiBEZWJ1Z0dldCk6IHZvaWQge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmluZm8oJ1VzZSBgY29udGV4dGAsIGFuZCBgZ2V0KDxwYXRoPilgIHRvIGRlYnVnIHRoaXMgdGVtcGxhdGUuJyk7XG5cbiAgLy8gZm9yIGV4YW1wbGUuLi5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICBjb250ZXh0ID09PSBnZXQoJ3RoaXMnKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZGVidWdnZXJcbiAgZGVidWdnZXI7XG59XG5cbmxldCBjYWxsYmFjayA9IGRlYnVnQ2FsbGJhY2s7XG5cbi8vIEZvciB0ZXN0aW5nIHB1cnBvc2VzXG5leHBvcnQgZnVuY3Rpb24gc2V0RGVidWdnZXJDYWxsYmFjayhjYjogRGVidWdDYWxsYmFjaykge1xuICBjYWxsYmFjayA9IGNiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXREZWJ1Z2dlckNhbGxiYWNrKCkge1xuICBjYWxsYmFjayA9IGRlYnVnQ2FsbGJhY2s7XG59XG5cbmNsYXNzIFNjb3BlSW5zcGVjdG9yIHtcbiAgcHJpdmF0ZSBsb2NhbHMgPSBkaWN0PFJlZmVyZW5jZT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNjb3BlOiBTY29wZSwgc3ltYm9sczogc3RyaW5nW10sIGV2YWxJbmZvOiBudW1iZXJbXSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXZhbEluZm8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBzbG90ID0gZXZhbEluZm9baV07XG4gICAgICBsZXQgbmFtZSA9IHN5bWJvbHNbc2xvdCAtIDFdO1xuICAgICAgbGV0IHJlZiA9IHNjb3BlLmdldFN5bWJvbChzbG90KTtcbiAgICAgIHRoaXMubG9jYWxzW25hbWVdID0gcmVmO1xuICAgIH1cbiAgfVxuXG4gIGdldChwYXRoOiBzdHJpbmcpOiBSZWZlcmVuY2Uge1xuICAgIGxldCB7IHNjb3BlLCBsb2NhbHMgfSA9IHRoaXM7XG4gICAgbGV0IHBhcnRzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGxldCBbaGVhZCwgLi4udGFpbF0gPSBwYXRoLnNwbGl0KCcuJyk7XG5cbiAgICBsZXQgZXZhbFNjb3BlID0gc2NvcGUuZ2V0RXZhbFNjb3BlKCkhO1xuICAgIGxldCByZWY6IFJlZmVyZW5jZTtcblxuICAgIGlmIChoZWFkID09PSAndGhpcycpIHtcbiAgICAgIHJlZiA9IHNjb3BlLmdldFNlbGYoKTtcbiAgICB9IGVsc2UgaWYgKGxvY2Fsc1toZWFkXSkge1xuICAgICAgcmVmID0gbG9jYWxzW2hlYWRdO1xuICAgIH0gZWxzZSBpZiAoaGVhZC5pbmRleE9mKCdAJykgPT09IDAgJiYgZXZhbFNjb3BlW2hlYWRdKSB7XG4gICAgICByZWYgPSBldmFsU2NvcGVbaGVhZF0gYXMgUmVmZXJlbmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWYgPSB0aGlzLnNjb3BlLmdldFNlbGYoKTtcbiAgICAgIHRhaWwgPSBwYXJ0cztcbiAgICB9XG5cbiAgICByZXR1cm4gdGFpbC5yZWR1Y2UoKHIsIHBhcnQpID0+IGNoaWxkUmVmRm9yKHIsIHBhcnQpLCByZWYpO1xuICB9XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5EZWJ1Z2dlciwgKHZtLCB7IG9wMTogX3N5bWJvbHMsIG9wMjogX2V2YWxJbmZvIH0pID0+IHtcbiAgbGV0IHN5bWJvbHMgPSB2bVtDT05TVEFOVFNdLmdldEFycmF5PHN0cmluZz4oX3N5bWJvbHMpO1xuICBsZXQgZXZhbEluZm8gPSB2bVtDT05TVEFOVFNdLmdldEFycmF5PG51bWJlcj4oZGVjb2RlSGFuZGxlKF9ldmFsSW5mbykpO1xuICBsZXQgaW5zcGVjdG9yID0gbmV3IFNjb3BlSW5zcGVjdG9yKHZtLnNjb3BlKCksIHN5bWJvbHMsIGV2YWxJbmZvKTtcbiAgY2FsbGJhY2sodmFsdWVGb3JSZWYodm0uZ2V0U2VsZigpKSwgKHBhdGgpID0+IHZhbHVlRm9yUmVmKGluc3BlY3Rvci5nZXQocGF0aCkpKTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==