UNPKG

@glimmer/runtime

Version:

Minimal runtime needed to render Glimmer templates

121 lines (94 loc) 11.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.invokeHelper = invokeHelper; var _env = require("@glimmer/env"); var _validator = require("@glimmer/validator"); var _util = require("@glimmer/util"); var _manager = require("@glimmer/manager"); var _arguments = require("../vm/arguments"); var _owner = require("@glimmer/owner"); var _destroyable = require("@glimmer/destroyable"); function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var ARGS_CACHES = _env.DEBUG ? new WeakMap() : undefined; function getArgs(proxy) { return (0, _validator.getValue)(_env.DEBUG ? ARGS_CACHES.get(proxy) : proxy.argsCache); } var SimpleArgsProxy = /*#__PURE__*/function () { function SimpleArgsProxy(context, computeArgs) { if (computeArgs === void 0) { computeArgs = function computeArgs() { return _arguments.EMPTY_ARGS; }; } var argsCache = (0, _validator.createCache)(function () { return computeArgs(context); }); if (_env.DEBUG) { ARGS_CACHES.set(this, argsCache); Object.freeze(this); } else { this.argsCache = argsCache; } } _createClass(SimpleArgsProxy, [{ key: "named", get: function get() { return getArgs(this).named || _arguments.EMPTY_NAMED; } }, { key: "positional", get: function get() { return getArgs(this).positional || _arguments.EMPTY_POSITIONAL; } }]); return SimpleArgsProxy; }(); //////////// function invokeHelper(context, definition, computeArgs) { if (_env.DEBUG && (typeof context !== 'object' || context === null)) { throw new Error("Expected a context object to be passed as the first parameter to invokeHelper, got " + context); } var owner = (0, _owner.getOwner)(context); var internalManager = (0, _manager.getInternalHelperManager)(definition); // TODO: figure out why assert isn't using the TS assert thing if (_env.DEBUG && !internalManager) { throw new Error("Expected a helper definition to be passed as the second parameter to invokeHelper, but no helper manager was found. The definition value that was passed was `" + (0, _util.debugToString)(definition) + "`. Did you use setHelperManager to associate a helper manager with this value?"); } if (_env.DEBUG && typeof internalManager === 'function') { throw new Error('Found a helper manager, but it was an internal built-in helper manager. `invokeHelper` does not support internal helpers yet.'); } var manager = internalManager.getDelegateFor(owner); var args = new SimpleArgsProxy(context, computeArgs); var bucket = manager.createHelper(definition, args); var cache; if ((0, _manager.hasValue)(manager)) { cache = (0, _validator.createCache)(function () { if (_env.DEBUG && ((0, _destroyable.isDestroying)(cache) || (0, _destroyable.isDestroyed)(cache))) { throw new Error("You attempted to get the value of a helper after the helper was destroyed, which is not allowed"); } return manager.getValue(bucket); }); (0, _destroyable.associateDestroyableChild)(context, cache); } else { throw new Error('TODO: unreachable, to be implemented with hasScheduledEffect'); } if ((0, _manager.hasDestroyable)(manager)) { var destroyable = manager.getDestroyable(bucket); (0, _destroyable.associateDestroyableChild)(cache, destroyable); } return cache; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL2hlbHBlcnMvaW52b2tlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBSSxXQUFXLEdBQUcsYUFBUSxJQUFILE9BQUcsRUFBUixHQUFsQixTQUFBOztBQUVBLFNBQUEsT0FBQSxDQUFBLEtBQUEsRUFBdUM7QUFDckMsU0FBTyx5QkFBUyxhQUFRLFdBQVksQ0FBWixHQUFBLENBQUgsS0FBRyxDQUFSLEdBQW1DLEtBQUssQ0FBeEQsU0FBTyxDQUFQO0FBQ0Q7O0lBRUQsZTtBQUdFLFdBQUEsZUFBQSxDQUFBLE9BQUEsRUFBQSxXQUFBLEVBRXlFO0FBQUEsUUFBdkUsV0FBdUUsS0FBQSxLQUFBLENBQUEsRUFBQTtBQUF2RSxNQUFBLFdBQXVFLEdBQWhCLFNBQUEsV0FBQSxHQUFBO0FBQUEsZUFGekQscUJBRXlEO0FBQWdCLE9BQXZFO0FBQXVFOztBQUV2RSxRQUFJLFNBQVMsR0FBRyw0QkFBWSxZQUFBO0FBQUEsYUFBTSxXQUFXLENBQTdDLE9BQTZDLENBQWpCO0FBQTVCLEtBQWdCLENBQWhCOztBQUVBLFFBQUEsVUFBQSxFQUFXO0FBQ1QsTUFBQSxXQUFZLENBQVosR0FBQSxDQUFBLElBQUEsRUFBQSxTQUFBO0FBQ0EsTUFBQSxNQUFNLENBQU4sTUFBQSxDQUFBLElBQUE7QUFGRixLQUFBLE1BR087QUFDTCxXQUFBLFNBQUEsR0FBQSxTQUFBO0FBQ0Q7QUFDRjs7Ozt3QkFFUTtBQUNQLGFBQU8sT0FBTyxDQUFQLElBQU8sQ0FBUCxDQUFBLEtBQUEsSUFBUCxzQkFBQTtBQUNEOzs7d0JBRWE7QUFDWixhQUFPLE9BQU8sQ0FBUCxJQUFPLENBQVAsQ0FBQSxVQUFBLElBQVAsMkJBQUE7QUFDRDs7OztLQUdIOzs7QUFFTSxTQUFBLFlBQUEsQ0FBQSxPQUFBLEVBQUEsVUFBQSxFQUFBLFdBQUEsRUFHaUQ7QUFFckQsTUFBSSxlQUFVLE9BQUEsT0FBQSxLQUFBLFFBQUEsSUFBK0IsT0FBTyxLQUFwRCxJQUFJLENBQUosRUFBZ0U7QUFDOUQsVUFBTSxJQUFBLEtBQUEsQ0FBQSx3RkFBTixPQUFNLENBQU47QUFHRDs7QUFFRCxNQUFNLEtBQUssR0FBRyxxQkFBZCxPQUFjLENBQWQ7QUFDQSxNQUFNLGVBQWUsR0FBRyx1Q0FUNkIsVUFTN0IsQ0FBeEIsQ0FUcUQsQ0FXckQ7O0FBQ0EsTUFBSSxjQUFTLENBQWIsZUFBQSxFQUErQjtBQUM3QixVQUFNLElBQUEsS0FBQSxDQUFBLG1LQUM4Six5QkFEcEssVUFDb0ssQ0FEOUosR0FBTixnRkFBTSxDQUFOO0FBS0Q7O0FBRUQsTUFBSSxjQUFTLE9BQUEsZUFBQSxLQUFiLFVBQUEsRUFBb0Q7QUFDbEQsVUFBTSxJQUFBLEtBQUEsQ0FBTiwrSEFBTSxDQUFOO0FBR0Q7O0FBRUQsTUFBTSxPQUFPLEdBQUksZUFBaUQsQ0FBakQsY0FBQSxDQUFqQixLQUFpQixDQUFqQjtBQUNBLE1BQUksSUFBSSxHQUFHLElBQUEsZUFBQSxDQUFBLE9BQUEsRUFBWCxXQUFXLENBQVg7QUFDQSxNQUFJLE1BQU0sR0FBRyxPQUFPLENBQVAsWUFBQSxDQUFBLFVBQUEsRUFBYixJQUFhLENBQWI7QUFFQSxNQUFBLEtBQUE7O0FBRUEsTUFBSSx1QkFBSixPQUFJLENBQUosRUFBdUI7QUFDckIsSUFBQSxLQUFLLEdBQUcsNEJBQVksWUFBSztBQUN2QixVQUFJLGVBQVUsK0JBQUEsS0FBQSxLQUF1Qiw4QkFBckMsS0FBcUMsQ0FBakMsQ0FBSixFQUEwRDtBQUN4RCxjQUFNLElBQU4sS0FBTSxDQUFOLGlHQUFNLENBQU47QUFHRDs7QUFFRCxhQUFPLE9BQU8sQ0FBUCxRQUFBLENBQVAsTUFBTyxDQUFQO0FBUEYsS0FBUSxDQUFSO0FBVUEsZ0RBQXlCLE9BQXpCLEVBQUEsS0FBQTtBQVhGLEdBQUEsTUFZTztBQUNMLFVBQU0sSUFBQSxLQUFBLENBQU4sOERBQU0sQ0FBTjtBQUNEOztBQUVELE1BQUksNkJBQUosT0FBSSxDQUFKLEVBQTZCO0FBQzNCLFFBQUksV0FBVyxHQUFHLE9BQU8sQ0FBUCxjQUFBLENBQWxCLE1BQWtCLENBQWxCO0FBRUEsZ0RBQXlCLEtBQXpCLEVBQUEsV0FBQTtBQUNEOztBQUVELFNBQUEsS0FBQTtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHsgQ2FjaGUsIGNyZWF0ZUNhY2hlLCBnZXRWYWx1ZSB9IGZyb20gJ0BnbGltbWVyL3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBBcmd1bWVudHMsIEludGVybmFsSGVscGVyTWFuYWdlciB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZGVidWdUb1N0cmluZyB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgZ2V0SW50ZXJuYWxIZWxwZXJNYW5hZ2VyLCBoYXNEZXN0cm95YWJsZSwgaGFzVmFsdWUgfSBmcm9tICdAZ2xpbW1lci9tYW5hZ2VyJztcblxuaW1wb3J0IHsgRU1QVFlfQVJHUywgRU1QVFlfTkFNRUQsIEVNUFRZX1BPU0lUSU9OQUwgfSBmcm9tICcuLi92bS9hcmd1bWVudHMnO1xuaW1wb3J0IHsgZ2V0T3duZXIgfSBmcm9tICdAZ2xpbW1lci9vd25lcic7XG5pbXBvcnQgeyBhc3NvY2lhdGVEZXN0cm95YWJsZUNoaWxkLCBpc0Rlc3Ryb3llZCwgaXNEZXN0cm95aW5nIH0gZnJvbSAnQGdsaW1tZXIvZGVzdHJveWFibGUnO1xuXG5sZXQgQVJHU19DQUNIRVMgPSBERUJVRyA/IG5ldyBXZWFrTWFwPFNpbXBsZUFyZ3NQcm94eSwgQ2FjaGU8UGFydGlhbDxBcmd1bWVudHM+Pj4oKSA6IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gZ2V0QXJncyhwcm94eTogU2ltcGxlQXJnc1Byb3h5KTogUGFydGlhbDxBcmd1bWVudHM+IHtcbiAgcmV0dXJuIGdldFZhbHVlKERFQlVHID8gQVJHU19DQUNIRVMhLmdldChwcm94eSkhIDogcHJveHkuYXJnc0NhY2hlISkhO1xufVxuXG5jbGFzcyBTaW1wbGVBcmdzUHJveHkge1xuICBhcmdzQ2FjaGU/OiBDYWNoZTxQYXJ0aWFsPEFyZ3VtZW50cz4+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbnRleHQ6IG9iamVjdCxcbiAgICBjb21wdXRlQXJnczogKGNvbnRleHQ6IG9iamVjdCkgPT4gUGFydGlhbDxBcmd1bWVudHM+ID0gKCkgPT4gRU1QVFlfQVJHU1xuICApIHtcbiAgICBsZXQgYXJnc0NhY2hlID0gY3JlYXRlQ2FjaGUoKCkgPT4gY29tcHV0ZUFyZ3MoY29udGV4dCkpO1xuXG4gICAgaWYgKERFQlVHKSB7XG4gICAgICBBUkdTX0NBQ0hFUyEuc2V0KHRoaXMsIGFyZ3NDYWNoZSk7XG4gICAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFyZ3NDYWNoZSA9IGFyZ3NDYWNoZTtcbiAgICB9XG4gIH1cblxuICBnZXQgbmFtZWQoKSB7XG4gICAgcmV0dXJuIGdldEFyZ3ModGhpcykubmFtZWQgfHwgRU1QVFlfTkFNRUQ7XG4gIH1cblxuICBnZXQgcG9zaXRpb25hbCgpIHtcbiAgICByZXR1cm4gZ2V0QXJncyh0aGlzKS5wb3NpdGlvbmFsIHx8IEVNUFRZX1BPU0lUSU9OQUw7XG4gIH1cbn1cblxuLy8vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VIZWxwZXIoXG4gIGNvbnRleHQ6IG9iamVjdCxcbiAgZGVmaW5pdGlvbjogb2JqZWN0LFxuICBjb21wdXRlQXJncz86IChjb250ZXh0OiBvYmplY3QpID0+IFBhcnRpYWw8QXJndW1lbnRzPlxuKTogQ2FjaGU8dW5rbm93bj4ge1xuICBpZiAoREVCVUcgJiYgKHR5cGVvZiBjb250ZXh0ICE9PSAnb2JqZWN0JyB8fCBjb250ZXh0ID09PSBudWxsKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBFeHBlY3RlZCBhIGNvbnRleHQgb2JqZWN0IHRvIGJlIHBhc3NlZCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIGludm9rZUhlbHBlciwgZ290ICR7Y29udGV4dH1gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG93bmVyID0gZ2V0T3duZXIoY29udGV4dCk7XG4gIGNvbnN0IGludGVybmFsTWFuYWdlciA9IGdldEludGVybmFsSGVscGVyTWFuYWdlcihkZWZpbml0aW9uKSE7XG5cbiAgLy8gVE9ETzogZmlndXJlIG91dCB3aHkgYXNzZXJ0IGlzbid0IHVzaW5nIHRoZSBUUyBhc3NlcnQgdGhpbmdcbiAgaWYgKERFQlVHICYmICFpbnRlcm5hbE1hbmFnZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRXhwZWN0ZWQgYSBoZWxwZXIgZGVmaW5pdGlvbiB0byBiZSBwYXNzZWQgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gaW52b2tlSGVscGVyLCBidXQgbm8gaGVscGVyIG1hbmFnZXIgd2FzIGZvdW5kLiBUaGUgZGVmaW5pdGlvbiB2YWx1ZSB0aGF0IHdhcyBwYXNzZWQgd2FzIFxcYCR7ZGVidWdUb1N0cmluZyEoXG4gICAgICAgIGRlZmluaXRpb25cbiAgICAgICl9XFxgLiBEaWQgeW91IHVzZSBzZXRIZWxwZXJNYW5hZ2VyIHRvIGFzc29jaWF0ZSBhIGhlbHBlciBtYW5hZ2VyIHdpdGggdGhpcyB2YWx1ZT9gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChERUJVRyAmJiB0eXBlb2YgaW50ZXJuYWxNYW5hZ2VyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0ZvdW5kIGEgaGVscGVyIG1hbmFnZXIsIGJ1dCBpdCB3YXMgYW4gaW50ZXJuYWwgYnVpbHQtaW4gaGVscGVyIG1hbmFnZXIuIGBpbnZva2VIZWxwZXJgIGRvZXMgbm90IHN1cHBvcnQgaW50ZXJuYWwgaGVscGVycyB5ZXQuJ1xuICAgICk7XG4gIH1cblxuICBjb25zdCBtYW5hZ2VyID0gKGludGVybmFsTWFuYWdlciBhcyBJbnRlcm5hbEhlbHBlck1hbmFnZXI8b2JqZWN0PikuZ2V0RGVsZWdhdGVGb3Iob3duZXIpO1xuICBsZXQgYXJncyA9IG5ldyBTaW1wbGVBcmdzUHJveHkoY29udGV4dCwgY29tcHV0ZUFyZ3MpO1xuICBsZXQgYnVja2V0ID0gbWFuYWdlci5jcmVhdGVIZWxwZXIoZGVmaW5pdGlvbiwgYXJncyk7XG5cbiAgbGV0IGNhY2hlOiBDYWNoZTx1bmtub3duPjtcblxuICBpZiAoaGFzVmFsdWUobWFuYWdlcikpIHtcbiAgICBjYWNoZSA9IGNyZWF0ZUNhY2hlKCgpID0+IHtcbiAgICAgIGlmIChERUJVRyAmJiAoaXNEZXN0cm95aW5nKGNhY2hlKSB8fCBpc0Rlc3Ryb3llZChjYWNoZSkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgWW91IGF0dGVtcHRlZCB0byBnZXQgdGhlIHZhbHVlIG9mIGEgaGVscGVyIGFmdGVyIHRoZSBoZWxwZXIgd2FzIGRlc3Ryb3llZCwgd2hpY2ggaXMgbm90IGFsbG93ZWRgXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYW5hZ2VyLmdldFZhbHVlKGJ1Y2tldCk7XG4gICAgfSk7XG5cbiAgICBhc3NvY2lhdGVEZXN0cm95YWJsZUNoaWxkKGNvbnRleHQsIGNhY2hlKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RPRE86IHVucmVhY2hhYmxlLCB0byBiZSBpbXBsZW1lbnRlZCB3aXRoIGhhc1NjaGVkdWxlZEVmZmVjdCcpO1xuICB9XG5cbiAgaWYgKGhhc0Rlc3Ryb3lhYmxlKG1hbmFnZXIpKSB7XG4gICAgbGV0IGRlc3Ryb3lhYmxlID0gbWFuYWdlci5nZXREZXN0cm95YWJsZShidWNrZXQpO1xuXG4gICAgYXNzb2NpYXRlRGVzdHJveWFibGVDaGlsZChjYWNoZSwgZGVzdHJveWFibGUpO1xuICB9XG5cbiAgcmV0dXJuIGNhY2hlO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==