UNPKG

ember-legacy-class-transform

Version:
111 lines (87 loc) 10.5 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.TemplateIterator = undefined; exports.default = templateFactory; var _util = require('@glimmer/util'); var _builder = require('./builder'); var _scanner = require('./scanner'); var _scanner2 = _interopRequireDefault(_scanner); var _vm = require('./vm'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var TemplateIterator = exports.TemplateIterator = function () { function TemplateIterator(vm) { _classCallCheck(this, TemplateIterator); this.vm = vm; } TemplateIterator.prototype.next = function next() { return this.vm.next(); }; return TemplateIterator; }(); var clientId = 0; function templateFactory(_ref) { var templateId = _ref.id, meta = _ref.meta, block = _ref.block; var parsedBlock = void 0; var id = templateId || 'client-' + clientId++; var create = function (env, envMeta) { var newMeta = envMeta ? (0, _util.assign)({}, envMeta, meta) : meta; if (!parsedBlock) { parsedBlock = JSON.parse(block); } return new ScannableTemplate(id, newMeta, env, parsedBlock); }; return { id: id, meta: meta, create: create }; } var ScannableTemplate = function () { function ScannableTemplate(id, meta, env, rawBlock) { _classCallCheck(this, ScannableTemplate); this.id = id; this.meta = meta; this.env = env; this.entryPoint = null; this.layout = null; this.partial = null; this.block = null; this.scanner = new _scanner2.default(rawBlock, env); this.symbols = rawBlock.symbols; this.hasEval = rawBlock.hasEval; } ScannableTemplate.prototype.render = function render(self, appendTo, dynamicScope) { var env = this.env; var elementStack = _builder.ElementStack.forInitialRender(env, appendTo, null); var compiled = this.asEntryPoint().compileDynamic(env); var vm = _vm.VM.initial(env, self, dynamicScope, elementStack, compiled); return new TemplateIterator(vm); }; ScannableTemplate.prototype.asEntryPoint = function asEntryPoint() { if (!this.entryPoint) this.entryPoint = this.scanner.scanEntryPoint(this.compilationMeta()); return this.entryPoint; }; ScannableTemplate.prototype.asLayout = function asLayout(componentName, attrs) { if (!this.layout) this.layout = this.scanner.scanLayout(this.compilationMeta(), attrs || _util.EMPTY_ARRAY, componentName); return this.layout; }; ScannableTemplate.prototype.asPartial = function asPartial() { if (!this.partial) this.partial = this.scanner.scanEntryPoint(this.compilationMeta(true)); return this.partial; }; ScannableTemplate.prototype.asBlock = function asBlock() { if (!this.block) this.block = this.scanner.scanBlock(this.compilationMeta()); return this.block; }; ScannableTemplate.prototype.compilationMeta = function compilationMeta() { var asPartial = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; return { templateMeta: this.meta, symbols: this.symbols, asPartial: asPartial }; }; return ScannableTemplate; }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90ZW1wbGF0ZS5qcyJdLCJuYW1lcyI6WyJhc3NpZ24iLCJFTVBUWV9BUlJBWSIsIkVsZW1lbnRTdGFjayIsIlNjYW5uZXIiLCJWTSIsIlRlbXBsYXRlSXRlcmF0b3IiLCJ2bSIsIm5leHQiLCJjbGllbnRJZCIsInRlbXBsYXRlRmFjdG9yeSIsInRlbXBsYXRlSWQiLCJpZCIsIm1ldGEiLCJibG9jayIsInBhcnNlZEJsb2NrIiwiY3JlYXRlIiwiZW52IiwiZW52TWV0YSIsIm5ld01ldGEiLCJKU09OIiwicGFyc2UiLCJTY2FubmFibGVUZW1wbGF0ZSIsInJhd0Jsb2NrIiwiZW50cnlQb2ludCIsImxheW91dCIsInBhcnRpYWwiLCJzY2FubmVyIiwic3ltYm9scyIsImhhc0V2YWwiLCJyZW5kZXIiLCJzZWxmIiwiYXBwZW5kVG8iLCJkeW5hbWljU2NvcGUiLCJlbGVtZW50U3RhY2siLCJmb3JJbml0aWFsUmVuZGVyIiwiY29tcGlsZWQiLCJhc0VudHJ5UG9pbnQiLCJjb21waWxlRHluYW1pYyIsImluaXRpYWwiLCJzY2FuRW50cnlQb2ludCIsImNvbXBpbGF0aW9uTWV0YSIsImFzTGF5b3V0IiwiY29tcG9uZW50TmFtZSIsImF0dHJzIiwic2NhbkxheW91dCIsImFzUGFydGlhbCIsImFzQmxvY2siLCJzY2FuQmxvY2siLCJ0ZW1wbGF0ZU1ldGEiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsQUFBUyxBQUFULEFBQWlCLEFBQWpCLEFBQW9DLEFBQXBDOztBQUNBLEFBQVMsQUFBVCxBQUE2QixBQUE3Qjs7QUFDQSxBQUFPLEFBQVAsQUFBb0IsQUFBcEI7Ozs7QUFDQSxBQUFTLEFBQVQsQUFBbUIsQUFBbkIsQUFDQTs7Ozs7Ozs7OztJQUFhLEFBQWIsMERBQ0k7OEJBQVksQUFBWixJQUFnQjs4QkFDWjs7YUFBSyxBQUFMLEtBQVUsQUFBVixBQUNIO0FBSEw7OytCQUlJLEFBSkosdUJBSVcsQUFDSDtlQUFPLEtBQUssQUFBTCxHQUFRLEFBQVIsQUFBUCxB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Q0QsQSw2Q0FBbUM7WUFBbkIsQUFBbUIsZ0ZBQVAsQUFBTyxBQUMvQjs7ZUFBTyxFQUFFLGNBQWMsS0FBSyxBQUFyQixNQUEyQixTQUFTLEtBQUssQUFBekMsU0FBa0QsV0FBbEQsQUFBUCxBQUNIO0EiLCJmaWxlIjoibGliL3RlbXBsYXRlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzaWduLCBFTVBUWV9BUlJBWSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgRWxlbWVudFN0YWNrIH0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCBTY2FubmVyIGZyb20gJy4vc2Nhbm5lcic7XG5pbXBvcnQgeyBWTSB9IGZyb20gJy4vdm0nO1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlSXRlcmF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKHZtKSB7XG4gICAgICAgIHRoaXMudm0gPSB2bTtcbiAgICB9XG4gICAgbmV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudm0ubmV4dCgpO1xuICAgIH1cbn1cbmxldCBjbGllbnRJZCA9IDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0ZW1wbGF0ZUZhY3RvcnkoeyBpZDogdGVtcGxhdGVJZCwgbWV0YSwgYmxvY2sgfSkge1xuICAgIGxldCBwYXJzZWRCbG9jaztcbiAgICBsZXQgaWQgPSB0ZW1wbGF0ZUlkIHx8IGBjbGllbnQtJHtjbGllbnRJZCsrfWA7XG4gICAgbGV0IGNyZWF0ZSA9IChlbnYsIGVudk1ldGEpID0+IHtcbiAgICAgICAgbGV0IG5ld01ldGEgPSBlbnZNZXRhID8gYXNzaWduKHt9LCBlbnZNZXRhLCBtZXRhKSA6IG1ldGE7XG4gICAgICAgIGlmICghcGFyc2VkQmxvY2spIHtcbiAgICAgICAgICAgIHBhcnNlZEJsb2NrID0gSlNPTi5wYXJzZShibG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBTY2FubmFibGVUZW1wbGF0ZShpZCwgbmV3TWV0YSwgZW52LCBwYXJzZWRCbG9jayk7XG4gICAgfTtcbiAgICByZXR1cm4geyBpZCwgbWV0YSwgY3JlYXRlIH07XG59XG5jbGFzcyBTY2FubmFibGVUZW1wbGF0ZSB7XG4gICAgY29uc3RydWN0b3IoaWQsIG1ldGEsIGVudiwgcmF3QmxvY2spIHtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB0aGlzLm1ldGEgPSBtZXRhO1xuICAgICAgICB0aGlzLmVudiA9IGVudjtcbiAgICAgICAgdGhpcy5lbnRyeVBvaW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXlvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnBhcnRpYWwgPSBudWxsO1xuICAgICAgICB0aGlzLmJsb2NrID0gbnVsbDtcbiAgICAgICAgdGhpcy5zY2FubmVyID0gbmV3IFNjYW5uZXIocmF3QmxvY2ssIGVudik7XG4gICAgICAgIHRoaXMuc3ltYm9scyA9IHJhd0Jsb2NrLnN5bWJvbHM7XG4gICAgICAgIHRoaXMuaGFzRXZhbCA9IHJhd0Jsb2NrLmhhc0V2YWw7XG4gICAgfVxuICAgIHJlbmRlcihzZWxmLCBhcHBlbmRUbywgZHluYW1pY1Njb3BlKSB7XG4gICAgICAgIGxldCB7IGVudiB9ID0gdGhpcztcbiAgICAgICAgbGV0IGVsZW1lbnRTdGFjayA9IEVsZW1lbnRTdGFjay5mb3JJbml0aWFsUmVuZGVyKGVudiwgYXBwZW5kVG8sIG51bGwpO1xuICAgICAgICBsZXQgY29tcGlsZWQgPSB0aGlzLmFzRW50cnlQb2ludCgpLmNvbXBpbGVEeW5hbWljKGVudik7XG4gICAgICAgIGxldCB2bSA9IFZNLmluaXRpYWwoZW52LCBzZWxmLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjaywgY29tcGlsZWQpO1xuICAgICAgICByZXR1cm4gbmV3IFRlbXBsYXRlSXRlcmF0b3Iodm0pO1xuICAgIH1cbiAgICBhc0VudHJ5UG9pbnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbnRyeVBvaW50KSB0aGlzLmVudHJ5UG9pbnQgPSB0aGlzLnNjYW5uZXIuc2NhbkVudHJ5UG9pbnQodGhpcy5jb21waWxhdGlvbk1ldGEoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJ5UG9pbnQ7XG4gICAgfVxuICAgIGFzTGF5b3V0KGNvbXBvbmVudE5hbWUsIGF0dHJzKSB7XG4gICAgICAgIGlmICghdGhpcy5sYXlvdXQpIHRoaXMubGF5b3V0ID0gdGhpcy5zY2FubmVyLnNjYW5MYXlvdXQodGhpcy5jb21waWxhdGlvbk1ldGEoKSwgYXR0cnMgfHwgRU1QVFlfQVJSQVksIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXQ7XG4gICAgfVxuICAgIGFzUGFydGlhbCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBhcnRpYWwpIHRoaXMucGFydGlhbCA9IHRoaXMuc2Nhbm5lci5zY2FuRW50cnlQb2ludCh0aGlzLmNvbXBpbGF0aW9uTWV0YSh0cnVlKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnRpYWw7XG4gICAgfVxuICAgIGFzQmxvY2soKSB7XG4gICAgICAgIGlmICghdGhpcy5ibG9jaykgdGhpcy5ibG9jayA9IHRoaXMuc2Nhbm5lci5zY2FuQmxvY2sodGhpcy5jb21waWxhdGlvbk1ldGEoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2NrO1xuICAgIH1cbiAgICBjb21waWxhdGlvbk1ldGEoYXNQYXJ0aWFsID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHsgdGVtcGxhdGVNZXRhOiB0aGlzLm1ldGEsIHN5bWJvbHM6IHRoaXMuc3ltYm9scywgYXNQYXJ0aWFsIH07XG4gICAgfVxufSJdfQ==