UNPKG

ember-legacy-class-transform

Version:
83 lines (75 loc) 9.55 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 }; } class TemplateIterator { constructor(vm) { this.vm = vm; } next() { return this.vm.next(); } } exports.TemplateIterator = TemplateIterator; let clientId = 0; function templateFactory({ id: templateId, meta, block }) { let parsedBlock; let id = templateId || `client-${clientId++}`; let create = (env, envMeta) => { let newMeta = envMeta ? (0, _util.assign)({}, envMeta, meta) : meta; if (!parsedBlock) { parsedBlock = JSON.parse(block); } return new ScannableTemplate(id, newMeta, env, parsedBlock); }; return { id, meta, create }; } class ScannableTemplate { constructor(id, meta, env, rawBlock) { 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; } render(self, appendTo, dynamicScope) { let { env } = this; let elementStack = _builder.ElementStack.forInitialRender(env, appendTo, null); let compiled = this.asEntryPoint().compileDynamic(env); let vm = _vm.VM.initial(env, self, dynamicScope, elementStack, compiled); return new TemplateIterator(vm); } asEntryPoint() { if (!this.entryPoint) this.entryPoint = this.scanner.scanEntryPoint(this.compilationMeta()); return this.entryPoint; } asLayout(componentName, attrs) { if (!this.layout) this.layout = this.scanner.scanLayout(this.compilationMeta(), attrs || _util.EMPTY_ARRAY, componentName); return this.layout; } asPartial() { if (!this.partial) this.partial = this.scanner.scanEntryPoint(this.compilationMeta(true)); return this.partial; } asBlock() { if (!this.block) this.block = this.scanner.scanBlock(this.compilationMeta()); return this.block; } compilationMeta(asPartial = false) { return { templateMeta: this.meta, symbols: this.symbols, asPartial }; } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90ZW1wbGF0ZS5qcyJdLCJuYW1lcyI6WyJ0ZW1wbGF0ZUZhY3RvcnkiLCJUZW1wbGF0ZUl0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJ2bSIsIm5leHQiLCJjbGllbnRJZCIsImlkIiwidGVtcGxhdGVJZCIsIm1ldGEiLCJibG9jayIsInBhcnNlZEJsb2NrIiwiY3JlYXRlIiwiZW52IiwiZW52TWV0YSIsIm5ld01ldGEiLCJKU09OIiwicGFyc2UiLCJTY2FubmFibGVUZW1wbGF0ZSIsInJhd0Jsb2NrIiwiZW50cnlQb2ludCIsImxheW91dCIsInBhcnRpYWwiLCJzY2FubmVyIiwic3ltYm9scyIsImhhc0V2YWwiLCJyZW5kZXIiLCJzZWxmIiwiYXBwZW5kVG8iLCJkeW5hbWljU2NvcGUiLCJlbGVtZW50U3RhY2siLCJmb3JJbml0aWFsUmVuZGVyIiwiY29tcGlsZWQiLCJhc0VudHJ5UG9pbnQiLCJjb21waWxlRHluYW1pYyIsImluaXRpYWwiLCJzY2FuRW50cnlQb2ludCIsImNvbXBpbGF0aW9uTWV0YSIsImFzTGF5b3V0IiwiY29tcG9uZW50TmFtZSIsImF0dHJzIiwic2NhbkxheW91dCIsImFzUGFydGlhbCIsImFzQmxvY2siLCJzY2FuQmxvY2siLCJ0ZW1wbGF0ZU1ldGEiXSwibWFwcGluZ3MiOiI7Ozs7OztrQkFhd0JBLGU7O0FBYnhCOztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDTyxNQUFNQyxnQkFBTixDQUF1QjtBQUMxQkMsZ0JBQVlDLEVBQVosRUFBZ0I7QUFDWixhQUFLQSxFQUFMLEdBQVVBLEVBQVY7QUFDSDtBQUNEQyxXQUFPO0FBQ0gsZUFBTyxLQUFLRCxFQUFMLENBQVFDLElBQVIsRUFBUDtBQUNIO0FBTnlCO1FBQWpCSCxnQixHQUFBQSxnQjtBQVFiLElBQUlJLFdBQVcsQ0FBZjtBQUNlLFNBQVNMLGVBQVQsQ0FBeUIsRUFBRU0sSUFBSUMsVUFBTixFQUFrQkMsSUFBbEIsRUFBd0JDLEtBQXhCLEVBQXpCLEVBQTBEO0FBQ3JFLFFB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LGVBQU8sRUFBRUcsY0FBYyxLQUFLcEMsSUFBckIsRUFBMkJlLFNBQVMsS0FBS0EsT0FBekMsRUFBa0RrQixTQUFsRCxFQUFQO0FBQ0g7QUF0Q21CIiwiZmlsZSI6ImxpYi90ZW1wbGF0ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2lnbiwgRU1QVFlfQVJSQVkgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IEVsZW1lbnRTdGFjayB9IGZyb20gJy4vYnVpbGRlcic7XG5pbXBvcnQgU2Nhbm5lciBmcm9tICcuL3NjYW5uZXInO1xuaW1wb3J0IHsgVk0gfSBmcm9tICcuL3ZtJztcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUl0ZXJhdG9yIHtcbiAgICBjb25zdHJ1Y3Rvcih2bSkge1xuICAgICAgICB0aGlzLnZtID0gdm07XG4gICAgfVxuICAgIG5leHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZtLm5leHQoKTtcbiAgICB9XG59XG5sZXQgY2xpZW50SWQgPSAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGVtcGxhdGVGYWN0b3J5KHsgaWQ6IHRlbXBsYXRlSWQsIG1ldGEsIGJsb2NrIH0pIHtcbiAgICBsZXQgcGFyc2VkQmxvY2s7XG4gICAgbGV0IGlkID0gdGVtcGxhdGVJZCB8fCBgY2xpZW50LSR7Y2xpZW50SWQrK31gO1xuICAgIGxldCBjcmVhdGUgPSAoZW52LCBlbnZNZXRhKSA9PiB7XG4gICAgICAgIGxldCBuZXdNZXRhID0gZW52TWV0YSA/IGFzc2lnbih7fSwgZW52TWV0YSwgbWV0YSkgOiBtZXRhO1xuICAgICAgICBpZiAoIXBhcnNlZEJsb2NrKSB7XG4gICAgICAgICAgICBwYXJzZWRCbG9jayA9IEpTT04ucGFyc2UoYmxvY2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgU2Nhbm5hYmxlVGVtcGxhdGUoaWQsIG5ld01ldGEsIGVudiwgcGFyc2VkQmxvY2spO1xuICAgIH07XG4gICAgcmV0dXJuIHsgaWQsIG1ldGEsIGNyZWF0ZSB9O1xufVxuY2xhc3MgU2Nhbm5hYmxlVGVtcGxhdGUge1xuICAgIGNvbnN0cnVjdG9yKGlkLCBtZXRhLCBlbnYsIHJhd0Jsb2NrKSB7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YTtcbiAgICAgICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgICAgIHRoaXMuZW50cnlQb2ludCA9IG51bGw7XG4gICAgICAgIHRoaXMubGF5b3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wYXJ0aWFsID0gbnVsbDtcbiAgICAgICAgdGhpcy5ibG9jayA9IG51bGw7XG4gICAgICAgIHRoaXMuc2Nhbm5lciA9IG5ldyBTY2FubmVyKHJhd0Jsb2NrLCBlbnYpO1xuICAgICAgICB0aGlzLnN5bWJvbHMgPSByYXdCbG9jay5zeW1ib2xzO1xuICAgICAgICB0aGlzLmhhc0V2YWwgPSByYXdCbG9jay5oYXNFdmFsO1xuICAgIH1cbiAgICByZW5kZXIoc2VsZiwgYXBwZW5kVG8sIGR5bmFtaWNTY29wZSkge1xuICAgICAgICBsZXQgeyBlbnYgfSA9IHRoaXM7XG4gICAgICAgIGxldCBlbGVtZW50U3RhY2sgPSBFbGVtZW50U3RhY2suZm9ySW5pdGlhbFJlbmRlcihlbnYsIGFwcGVuZFRvLCBudWxsKTtcbiAgICAgICAgbGV0IGNvbXBpbGVkID0gdGhpcy5hc0VudHJ5UG9pbnQoKS5jb21waWxlRHluYW1pYyhlbnYpO1xuICAgICAgICBsZXQgdm0gPSBWTS5pbml0aWFsKGVudiwgc2VsZiwgZHluYW1pY1Njb3BlLCBlbGVtZW50U3RhY2ssIGNvbXBpbGVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBUZW1wbGF0ZUl0ZXJhdG9yKHZtKTtcbiAgICB9XG4gICAgYXNFbnRyeVBvaW50KCkge1xuICAgICAgICBpZiAoIXRoaXMuZW50cnlQb2ludCkgdGhpcy5lbnRyeVBvaW50ID0gdGhpcy5zY2FubmVyLnNjYW5FbnRyeVBvaW50KHRoaXMuY29tcGlsYXRpb25NZXRhKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbnRyeVBvaW50O1xuICAgIH1cbiAgICBhc0xheW91dChjb21wb25lbnROYW1lLCBhdHRycykge1xuICAgICAgICBpZiAoIXRoaXMubGF5b3V0KSB0aGlzLmxheW91dCA9IHRoaXMuc2Nhbm5lci5zY2FuTGF5b3V0KHRoaXMuY29tcGlsYXRpb25NZXRhKCksIGF0dHJzIHx8IEVNUFRZX0FSUkFZLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0O1xuICAgIH1cbiAgICBhc1BhcnRpYWwoKSB7XG4gICAgICAgIGlmICghdGhpcy5wYXJ0aWFsKSB0aGlzLnBhcnRpYWwgPSB0aGlzLnNjYW5uZXIuc2NhbkVudHJ5UG9pbnQodGhpcy5jb21waWxhdGlvbk1ldGEodHJ1ZSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJ0aWFsO1xuICAgIH1cbiAgICBhc0Jsb2NrKCkge1xuICAgICAgICBpZiAoIXRoaXMuYmxvY2spIHRoaXMuYmxvY2sgPSB0aGlzLnNjYW5uZXIuc2NhbkJsb2NrKHRoaXMuY29tcGlsYXRpb25NZXRhKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5ibG9jaztcbiAgICB9XG4gICAgY29tcGlsYXRpb25NZXRhKGFzUGFydGlhbCA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB7IHRlbXBsYXRlTWV0YTogdGhpcy5tZXRhLCBzeW1ib2xzOiB0aGlzLnN5bWJvbHMsIGFzUGFydGlhbCB9O1xuICAgIH1cbn0iXX0=