ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
83 lines (75 loc) • 9.55 kB
JavaScript
'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=