UNPKG

ember-legacy-class-transform

Version:
115 lines (101 loc) 15.6 kB
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } import { EMPTY_ARRAY } from '@glimmer/util'; import * as WireFormat from '@glimmer/wire-format'; import * as ClientSide from './syntax/client-side'; import CompilableTemplate from './syntax/compilable-template'; import { ATTRS_BLOCK } from './syntax/functions'; var Ops = WireFormat.Ops; var Scanner = function () { function Scanner(block, env) { _classCallCheck(this, Scanner); this.block = block; this.env = env; } Scanner.prototype.scanEntryPoint = function scanEntryPoint(meta) { var block = this.block; var statements = block.statements, symbols = block.symbols, hasEval = block.hasEval; return new CompilableTemplate(statements, { meta: meta, symbols: symbols, hasEval: hasEval }); }; Scanner.prototype.scanBlock = function scanBlock(meta) { var block = this.block; var statements = block.statements; return new CompilableTemplate(statements, { meta: meta, parameters: EMPTY_ARRAY }); }; Scanner.prototype.scanLayout = function scanLayout(meta, attrs, componentName) { var block = this.block; var statements = block.statements, symbols = block.symbols, hasEval = block.hasEval; var symbolTable = { meta: meta, hasEval: hasEval, symbols: symbols }; var newStatements = []; var toplevel = void 0; var inTopLevel = false; for (var i = 0; i < statements.length; i++) { var statement = statements[i]; if (WireFormat.Statements.isComponent(statement)) { var tagName = statement[1]; if (!this.env.hasComponentDefinition(tagName, meta.templateMeta)) { if (toplevel !== undefined) { newStatements.push([Ops.OpenElement, tagName]); } else { toplevel = tagName; decorateTopLevelElement(tagName, symbols, attrs, newStatements); } addFallback(statement, newStatements); } else { if (toplevel === undefined && tagName === componentName) { toplevel = tagName; decorateTopLevelElement(tagName, symbols, attrs, newStatements); addFallback(statement, newStatements); } else { newStatements.push(statement); } } } else { if (toplevel === undefined && WireFormat.Statements.isOpenElement(statement)) { toplevel = statement[1]; inTopLevel = true; decorateTopLevelElement(toplevel, symbols, attrs, newStatements); } else { if (inTopLevel) { if (WireFormat.Statements.isFlushElement(statement)) { inTopLevel = false; } else if (WireFormat.Statements.isModifier(statement)) { throw Error('Found modifier "' + statement[1] + '" on the top-level element of "' + componentName + '". Modifiers cannot be on the top-level element'); } } newStatements.push(statement); } } } newStatements.push([Ops.ClientSideStatement, ClientSide.Ops.DidRenderLayout]); return new CompilableTemplate(newStatements, symbolTable); }; return Scanner; }(); export default Scanner; function addFallback(statement, buffer) { var attrs = statement[2], block = statement[4]; for (var i = 0; i < attrs.length; i++) { buffer.push(attrs[i]); } buffer.push([Ops.FlushElement]); if (block) { var statements = block.statements; for (var _i = 0; _i < statements.length; _i++) { buffer.push(statements[_i]); } } buffer.push([Ops.CloseElement]); } function decorateTopLevelElement(tagName, symbols, attrs, buffer) { var attrsSymbol = symbols.push(ATTRS_BLOCK); buffer.push([Ops.ClientSideStatement, ClientSide.Ops.OpenComponentElement, tagName]); buffer.push([Ops.ClientSideStatement, ClientSide.Ops.DidCreateElement]); buffer.push([Ops.Yield, attrsSymbol, EMPTY_ARRAY]); buffer.push.apply(buffer, attrs); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2FubmVyLmpzIl0sIm5hbWVzIjpbIkVNUFRZX0FSUkFZIiwiV2lyZUZvcm1hdCIsIkNsaWVudFNpZGUiLCJDb21waWxhYmxlVGVtcGxhdGUiLCJBVFRSU19CTE9DSyIsIk9wcyIsIlNjYW5uZXIiLCJibG9jayIsImVudiIsInNjYW5FbnRyeVBvaW50IiwibWV0YSIsInN0YXRlbWVudHMiLCJzeW1ib2xzIiwiaGFzRXZhbCIsInNjYW5CbG9jayIsInBhcmFtZXRlcnMiLCJzY2FuTGF5b3V0IiwiYXR0cnMiLCJjb21wb25lbnROYW1lIiwic3ltYm9sVGFibGUiLCJuZXdTdGF0ZW1lbnRzIiwidG9wbGV2ZWwiLCJpblRvcExldmVsIiwiaSIsImxlbmd0aCIsInN0YXRlbWVudCIsIlN0YXRlbWVudHMiLCJpc0NvbXBvbmVudCIsInRhZ05hbWUiLCJoYXNDb21wb25lbnREZWZpbml0aW9uIiwidGVtcGxhdGVNZXRhIiwidW5kZWZpbmVkIiwicHVzaCIsIk9wZW5FbGVtZW50IiwiZGVjb3JhdGVUb3BMZXZlbEVsZW1lbnQiLCJhZGRGYWxsYmFjayIsImlzT3BlbkVsZW1lbnQiLCJpc0ZsdXNoRWxlbWVudCIsImlzTW9kaWZpZXIiLCJFcnJvciIsIkNsaWVudFNpZGVTdGF0ZW1lbnQiLCJEaWRSZW5kZXJMYXlvdXQiLCJidWZmZXIiLCJGbHVzaEVsZW1lbnQiLCJDbG9zZUVsZW1lbnQiLCJhdHRyc1N5bWJvbCIsIk9wZW5Db21wb25lbnRFbGVtZW50IiwiRGlkQ3JlYXRlRWxlbWVudCIsIllpZWxkIl0sIm1hcHBpbmdzIjoiOztBQUFBLFNBQVNBLFdBQVQsUUFBNEIsZUFBNUI7QUFDQSxPQUFPLEtBQUtDLFVBQVosTUFBNEIsc0JBQTVCO0FBQ0EsT0FBTyxLQUFLQyxVQUFaLE1BQTRCLHNCQUE1QjtBQUNBLE9BQU9DLGtCQUFQLE1BQStCLDhCQUEvQjtBQUNBLFNBQVNDLFdBQVQsUUFBNEIsb0JBQTVCO0FBQ0EsSUFBSUMsTUFBTUosV0FBV0ksR0FBckI7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V2EsTUFBL0IsRUFBdUNELElBQXZDLEVBQTRDO0FBQ3hDbUIsbUJBQU9WLElBQVAsQ0FBWXJCLFdBQVdZLEVBQVgsQ0FBWjtBQUNIO0FBQ0o7QUFDRG1CLFdBQU9WLElBQVAsQ0FBWSxDQUFDM0IsSUFBSXVDLFlBQUwsQ0FBWjtBQUNIO0FBQ0QsU0FBU1YsdUJBQVQsQ0FBaUNOLE9BQWpDLEVBQTBDaEIsT0FBMUMsRUFBbURLLEtBQW5ELEVBQTBEeUIsTUFBMUQsRUFBa0U7QUFDOUQsUUFBSUcsY0FBY2pDLFFBQVFvQixJQUFSLENBQWE1QixXQUFiLENBQWxCO0FBQ0FzQyxXQUFPVixJQUFQLENBQVksQ0FBQzNCLElBQUltQyxtQkFBTCxFQUEwQnRDLFdBQVdHLEdBQVgsQ0FBZXlDLG9CQUF6QyxFQUErRGxCLE9BQS9ELENBQVo7QUFDQWMsV0FBT1YsSUFBUCxDQUFZLENBQUMzQixJQUFJbUMsbUJBQUwsRUFBMEJ0QyxXQUFXRyxHQUFYLENBQWUwQyxnQkFBekMsQ0FBWjtBQUNBTCxXQUFPVixJQUFQLENBQVksQ0FBQzNCLElBQUkyQyxLQUFMLEVBQVlILFdBQVosRUFBeUI3QyxXQUF6QixDQUFaO0FBQ0EwQyxXQUFPVixJQUFQLGVBQWVmLEtBQWY7QUFDSCIsImZpbGUiOiJsaWIvc2Nhbm5lci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVNUFRZX0FSUkFZIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgKiBhcyBXaXJlRm9ybWF0IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCAqIGFzIENsaWVudFNpZGUgZnJvbSAnLi9zeW50YXgvY2xpZW50LXNpZGUnO1xuaW1wb3J0IENvbXBpbGFibGVUZW1wbGF0ZSBmcm9tICcuL3N5bnRheC9jb21waWxhYmxlLXRlbXBsYXRlJztcbmltcG9ydCB7IEFUVFJTX0JMT0NLIH0gZnJvbSAnLi9zeW50YXgvZnVuY3Rpb25zJztcbnZhciBPcHMgPSBXaXJlRm9ybWF0Lk9wcztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjYW5uZXIge1xuICAgIGNvbnN0cnVjdG9yKGJsb2NrLCBlbnYpIHtcbiAgICAgICAgdGhpcy5ibG9jayA9IGJsb2NrO1xuICAgICAgICB0aGlzLmVudiA9IGVudjtcbiAgICB9XG4gICAgc2NhbkVudHJ5UG9pbnQobWV0YSkge1xuICAgICAgICBsZXQgeyBibG9jayB9ID0gdGhpcztcbiAgICAgICAgbGV0IHsgc3RhdGVtZW50cywgc3ltYm9scywgaGFzRXZhbCB9ID0gYmxvY2s7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGlsYWJsZVRlbXBsYXRlKHN0YXRlbWVudHMsIHsgbWV0YSwgc3ltYm9scywgaGFzRXZhbCB9KTtcbiAgICB9XG4gICAgc2NhbkJsb2NrKG1ldGEpIHtcbiAgICAgICAgbGV0IHsgYmxvY2sgfSA9IHRoaXM7XG4gICAgICAgIGxldCB7IHN0YXRlbWVudHMgfSA9IGJsb2NrO1xuICAgICAgICByZXR1cm4gbmV3IENvbXBpbGFibGVUZW1wbGF0ZShzdGF0ZW1lbnRzLCB7IG1ldGEsIHBhcmFtZXRlcnM6IEVNUFRZX0FSUkFZIH0pO1xuICAgIH1cbiAgICBzY2FuTGF5b3V0KG1ldGEsIGF0dHJzLCBjb21wb25lbnROYW1lKSB7XG4gICAgICAgIGxldCB7IGJsb2NrIH0gPSB0aGlzO1xuICAgICAgICBsZXQgeyBzdGF0ZW1lbnRzLCBzeW1ib2xzLCBoYXNFdmFsIH0gPSBibG9jaztcbiAgICAgICAgbGV0IHN5bWJvbFRhYmxlID0geyBtZXRhLCBoYXNFdmFsLCBzeW1ib2xzIH07XG4gICAgICAgIGxldCBuZXdTdGF0ZW1lbnRzID0gW107XG4gICAgICAgIGxldCB0b3BsZXZlbDtcbiAgICAgICAgbGV0IGluVG9wTGV2ZWwgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0ZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgc3RhdGVtZW50ID0gc3RhdGVtZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChXaXJlRm9ybWF0LlN0YXRlbWVudHMuaXNDb21wb25lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGxldCB0YWdOYW1lID0gc3RhdGVtZW50WzFdO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbnYuaGFzQ29tcG9uZW50RGVmaW5pdGlvbih0YWdOYW1lLCBtZXRhLnRlbXBsYXRlTWV0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRvcGxldmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlbWVudHMucHVzaChbT3BzLk9wZW5FbGVtZW50LCB0YWdOYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BsZXZlbCA9IHRhZ05hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvcmF0ZVRvcExldmVsRWxlbWVudCh0YWdOYW1lLCBzeW1ib2xzLCBhdHRycywgbmV3U3RhdGVtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWRkRmFsbGJhY2soc3RhdGVtZW50LCBuZXdTdGF0ZW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9wbGV2ZWwgPT09IHVuZGVmaW5lZCAmJiB0YWdOYW1lID09PSBjb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BsZXZlbCA9IHRhZ05hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvcmF0ZVRvcExldmVsRWxlbWVudCh0YWdOYW1lLCBzeW1ib2xzLCBhdHRycywgbmV3U3RhdGVtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRGYWxsYmFjayhzdGF0ZW1lbnQsIG5ld1N0YXRlbWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0b3BsZXZlbCA9PT0gdW5kZWZpbmVkICYmIFdpcmVGb3JtYXQuU3RhdGVtZW50cy5pc09wZW5FbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPSBzdGF0ZW1lbnRbMV07XG4gICAgICAgICAgICAgICAgICAgIGluVG9wTGV2ZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBkZWNvcmF0ZVRvcExldmVsRWxlbWVudCh0b3BsZXZlbCwgc3ltYm9scywgYXR0cnMsIG5ld1N0YXRlbWVudHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpblRvcExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLmlzRmx1c2hFbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblRvcExldmVsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFdpcmVGb3JtYXQuU3RhdGVtZW50cy5pc01vZGlmaWVyKHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgRm91bmQgbW9kaWZpZXIgXCIke3N0YXRlbWVudFsxXX1cIiBvbiB0aGUgdG9wLWxldmVsIGVsZW1lbnQgb2YgXCIke2NvbXBvbmVudE5hbWV9XCJcXC4gTW9kaWZpZXJzIGNhbm5vdCBiZSBvbiB0aGUgdG9wLWxldmVsIGVsZW1lbnRgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV3U3RhdGVtZW50cy5wdXNoKFtPcHMuQ2xpZW50U2lkZVN0YXRlbWVudCwgQ2xpZW50U2lkZS5PcHMuRGlkUmVuZGVyTGF5b3V0XSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGlsYWJsZVRlbXBsYXRlKG5ld1N0YXRlbWVudHMsIHN5bWJvbFRhYmxlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRGYWxsYmFjayhzdGF0ZW1lbnQsIGJ1ZmZlcikge1xuICAgIGxldCBbLCwgYXR0cnMsLCBibG9ja10gPSBzdGF0ZW1lbnQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBidWZmZXIucHVzaChhdHRyc1tpXSk7XG4gICAgfVxuICAgIGJ1ZmZlci5wdXNoKFtPcHMuRmx1c2hFbGVtZW50XSk7XG4gICAgaWYgKGJsb2NrKSB7XG4gICAgICAgIGxldCB7IHN0YXRlbWVudHMgfSA9IGJsb2NrO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXRlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHN0YXRlbWVudHNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGJ1ZmZlci5wdXNoKFtPcHMuQ2xvc2VFbGVtZW50XSk7XG59XG5mdW5jdGlvbiBkZWNvcmF0ZVRvcExldmVsRWxlbWVudCh0YWdOYW1lLCBzeW1ib2xzLCBhdHRycywgYnVmZmVyKSB7XG4gICAgbGV0IGF0dHJzU3ltYm9sID0gc3ltYm9scy5wdXNoKEFUVFJTX0JMT0NLKTtcbiAgICBidWZmZXIucHVzaChbT3BzLkNsaWVudFNpZGVTdGF0ZW1lbnQsIENsaWVudFNpZGUuT3BzLk9wZW5Db21wb25lbnRFbGVtZW50LCB0YWdOYW1lXSk7XG4gICAgYnVmZmVyLnB1c2goW09wcy5DbGllbnRTaWRlU3RhdGVtZW50LCBDbGllbnRTaWRlLk9wcy5EaWRDcmVhdGVFbGVtZW50XSk7XG4gICAgYnVmZmVyLnB1c2goW09wcy5ZaWVsZCwgYXR0cnNTeW1ib2wsIEVNUFRZX0FSUkFZXSk7XG4gICAgYnVmZmVyLnB1c2goLi4uYXR0cnMpO1xufSJdfQ==