ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
91 lines (75 loc) • 10.4 kB
JavaScript
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
import { assign, EMPTY_ARRAY } from '@glimmer/util';
import { ElementStack } from './builder';
import Scanner from './scanner';
import { VM } from './vm';
export var 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;
export default 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 ? 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 Scanner(rawBlock, env);
this.symbols = rawBlock.symbols;
this.hasEval = rawBlock.hasEval;
}
ScannableTemplate.prototype.render = function render(self, appendTo, dynamicScope) {
var env = this.env;
var elementStack = ElementStack.forInitialRender(env, appendTo, null);
var compiled = this.asEntryPoint().compileDynamic(env);
var 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 || 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90ZW1wbGF0ZS5qcyJdLCJuYW1lcyI6WyJhc3NpZ24iLCJFTVBUWV9BUlJBWSIsIkVsZW1lbnRTdGFjayIsIlNjYW5uZXIiLCJWTSIsIlRlbXBsYXRlSXRlcmF0b3IiLCJ2bSIsIm5leHQiLCJjbGllbnRJZCIsInRlbXBsYXRlRmFjdG9yeSIsInRlbXBsYXRlSWQiLCJpZCIsIm1ldGEiLCJibG9jayIsInBhcnNlZEJsb2NrIiwiY3JlYXRlIiwiZW52IiwiZW52TWV0YSIsIm5ld01ldGEiLCJKU09OIiwicGFyc2UiLCJTY2FubmFibGVUZW1wbGF0ZSIsInJhd0Jsb2NrIiwiZW50cnlQb2ludCIsImxheW91dCIsInBhcnRpYWwiLCJzY2FubmVyIiwic3ltYm9scyIsImhhc0V2YWwiLCJyZW5kZXIiLCJzZWxmIiwiYXBwZW5kVG8iLCJkeW5hbWljU2NvcGUiLCJlbGVtZW50U3RhY2siLCJmb3JJbml0aWFsUmVuZGVyIiwiY29tcGlsZWQiLCJhc0VudHJ5UG9pbnQiLCJjb21waWxlRHluYW1pYyIsImluaXRpYWwiLCJzY2FuRW50cnlQb2ludCIsImNvbXBpbGF0aW9uTWV0YSIsImFzTGF5b3V0IiwiY29tcG9uZW50TmFtZSIsImF0dHJzIiwic2NhbkxheW91dCIsImFzUGFydGlhbCIsImFzQmxvY2siLCJzY2FuQmxvY2siLCJ0ZW1wbGF0ZU1ldGEiXSwibWFwcGluZ3MiOiI7O0FBQUEsU0FBU0EsTUFBVCxFQUFpQkMsV0FBakIsUUFBb0MsZUFBcEM7QUFDQSxTQUFTQyxZQUFULFFBQTZCLFdBQTdCO0FBQ0EsT0FBT0MsT0FBUCxNQUFvQixXQUFwQjtBQUNBLFNBQVNDLEVBQVQsUUFBbUIsTUFBbkI7QUFDQSxXQUFhQyxnQkFBYjtBQUNJLDhCQUFZQyxFQUFaLEVBQWdCO0FBQUE7O0FBQ1osYUFBS0EsRUFBTCxHQUFVQSxFQUFWO0FBQ0g7O0FBSEwsK0JBSUlDLElBSkosbUJBSVc7QUFDSCxlQUFPLEtBQUtELEVBQUwsQ0FBUUMsSUFBUixFQUFQO0FBQ0gs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QUFDSCxLOztnQ0FDRHFCLE8sc0JBQVU7QUFDTixZQUFJLENBQUMsS0FBS2pDLEtBQVYsRUFBaUIsS0FBS0EsS0FBTCxHQUFhLEtBQUthLE9BQUwsQ0FBYXFCLFNBQWIsQ0FBdUIsS0FBS1AsZUFBTCxFQUF2QixDQUFiO0FBQ2pCLGVBQU8sS0FBSzNCLEtBQVo7QUFDSCxLOztnQ0FDRDJCLGUsOEJBQW1DO0FBQUEsWUFBbkJLLFNBQW1CLHVFQUFQLEtBQU87O0FBQy9CLGVBQU8sRUFBRUcsY0FBYyxLQUFLcEMsSUFBckIsRUFBMkJlLFNBQVMsS0FBS0EsT0FBekMsRUFBa0RrQixvQkFBbEQsRUFBUDtBQUNILEsiLCJmaWxlIjoibGliL3RlbXBsYXRlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzaWduLCBFTVBUWV9BUlJBWSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgRWxlbWVudFN0YWNrIH0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCBTY2FubmVyIGZyb20gJy4vc2Nhbm5lcic7XG5pbXBvcnQgeyBWTSB9IGZyb20gJy4vdm0nO1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlSXRlcmF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKHZtKSB7XG4gICAgICAgIHRoaXMudm0gPSB2bTtcbiAgICB9XG4gICAgbmV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudm0ubmV4dCgpO1xuICAgIH1cbn1cbmxldCBjbGllbnRJZCA9IDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0ZW1wbGF0ZUZhY3RvcnkoeyBpZDogdGVtcGxhdGVJZCwgbWV0YSwgYmxvY2sgfSkge1xuICAgIGxldCBwYXJzZWRCbG9jaztcbiAgICBsZXQgaWQgPSB0ZW1wbGF0ZUlkIHx8IGBjbGllbnQtJHtjbGllbnRJZCsrfWA7XG4gICAgbGV0IGNyZWF0ZSA9IChlbnYsIGVudk1ldGEpID0+IHtcbiAgICAgICAgbGV0IG5ld01ldGEgPSBlbnZNZXRhID8gYXNzaWduKHt9LCBlbnZNZXRhLCBtZXRhKSA6IG1ldGE7XG4gICAgICAgIGlmICghcGFyc2VkQmxvY2spIHtcbiAgICAgICAgICAgIHBhcnNlZEJsb2NrID0gSlNPTi5wYXJzZShibG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBTY2FubmFibGVUZW1wbGF0ZShpZCwgbmV3TWV0YSwgZW52LCBwYXJzZWRCbG9jayk7XG4gICAgfTtcbiAgICByZXR1cm4geyBpZCwgbWV0YSwgY3JlYXRlIH07XG59XG5jbGFzcyBTY2FubmFibGVUZW1wbGF0ZSB7XG4gICAgY29uc3RydWN0b3IoaWQsIG1ldGEsIGVudiwgcmF3QmxvY2spIHtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB0aGlzLm1ldGEgPSBtZXRhO1xuICAgICAgICB0aGlzLmVudiA9IGVudjtcbiAgICAgICAgdGhpcy5lbnRyeVBvaW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXlvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnBhcnRpYWwgPSBudWxsO1xuICAgICAgICB0aGlzLmJsb2NrID0gbnVsbDtcbiAgICAgICAgdGhpcy5zY2FubmVyID0gbmV3IFNjYW5uZXIocmF3QmxvY2ssIGVudik7XG4gICAgICAgIHRoaXMuc3ltYm9scyA9IHJhd0Jsb2NrLnN5bWJvbHM7XG4gICAgICAgIHRoaXMuaGFzRXZhbCA9IHJhd0Jsb2NrLmhhc0V2YWw7XG4gICAgfVxuICAgIHJlbmRlcihzZWxmLCBhcHBlbmRUbywgZHluYW1pY1Njb3BlKSB7XG4gICAgICAgIGxldCB7IGVudiB9ID0gdGhpcztcbiAgICAgICAgbGV0IGVsZW1lbnRTdGFjayA9IEVsZW1lbnRTdGFjay5mb3JJbml0aWFsUmVuZGVyKGVudiwgYXBwZW5kVG8sIG51bGwpO1xuICAgICAgICBsZXQgY29tcGlsZWQgPSB0aGlzLmFzRW50cnlQb2ludCgpLmNvbXBpbGVEeW5hbWljKGVudik7XG4gICAgICAgIGxldCB2bSA9IFZNLmluaXRpYWwoZW52LCBzZWxmLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjaywgY29tcGlsZWQpO1xuICAgICAgICByZXR1cm4gbmV3IFRlbXBsYXRlSXRlcmF0b3Iodm0pO1xuICAgIH1cbiAgICBhc0VudHJ5UG9pbnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbnRyeVBvaW50KSB0aGlzLmVudHJ5UG9pbnQgPSB0aGlzLnNjYW5uZXIuc2NhbkVudHJ5UG9pbnQodGhpcy5jb21waWxhdGlvbk1ldGEoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJ5UG9pbnQ7XG4gICAgfVxuICAgIGFzTGF5b3V0KGNvbXBvbmVudE5hbWUsIGF0dHJzKSB7XG4gICAgICAgIGlmICghdGhpcy5sYXlvdXQpIHRoaXMubGF5b3V0ID0gdGhpcy5zY2FubmVyLnNjYW5MYXlvdXQodGhpcy5jb21waWxhdGlvbk1ldGEoKSwgYXR0cnMgfHwgRU1QVFlfQVJSQVksIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXQ7XG4gICAgfVxuICAgIGFzUGFydGlhbCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBhcnRpYWwpIHRoaXMucGFydGlhbCA9IHRoaXMuc2Nhbm5lci5zY2FuRW50cnlQb2ludCh0aGlzLmNvbXBpbGF0aW9uTWV0YSh0cnVlKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnRpYWw7XG4gICAgfVxuICAgIGFzQmxvY2soKSB7XG4gICAgICAgIGlmICghdGhpcy5ibG9jaykgdGhpcy5ibG9jayA9IHRoaXMuc2Nhbm5lci5zY2FuQmxvY2sodGhpcy5jb21waWxhdGlvbk1ldGEoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2NrO1xuICAgIH1cbiAgICBjb21waWxhdGlvbk1ldGEoYXNQYXJ0aWFsID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHsgdGVtcGxhdGVNZXRhOiB0aGlzLm1ldGEsIHN5bWJvbHM6IHRoaXMuc3ltYm9scywgYXNQYXJ0aWFsIH07XG4gICAgfVxufSJdfQ==