UNPKG

ember-legacy-class-transform

Version:
114 lines (102 loc) 15.2 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _util = require('@glimmer/util'); var _wireFormat = require('@glimmer/wire-format'); var WireFormat = _interopRequireWildcard(_wireFormat); var _clientSide = require('./syntax/client-side'); var ClientSide = _interopRequireWildcard(_clientSide); var _compilableTemplate = require('./syntax/compilable-template'); var _compilableTemplate2 = _interopRequireDefault(_compilableTemplate); var _functions = require('./syntax/functions'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } var Ops = WireFormat.Ops; class Scanner { constructor(block, env) { this.block = block; this.env = env; } scanEntryPoint(meta) { let { block } = this; let { statements, symbols, hasEval } = block; return new _compilableTemplate2.default(statements, { meta, symbols, hasEval }); } scanBlock(meta) { let { block } = this; let { statements } = block; return new _compilableTemplate2.default(statements, { meta, parameters: _util.EMPTY_ARRAY }); } scanLayout(meta, attrs, componentName) { let { block } = this; let { statements, symbols, hasEval } = block; let symbolTable = { meta, hasEval, symbols }; let newStatements = []; let toplevel; let inTopLevel = false; for (let i = 0; i < statements.length; i++) { let statement = statements[i]; if (WireFormat.Statements.isComponent(statement)) { let 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 _compilableTemplate2.default(newStatements, symbolTable); } } exports.default = Scanner; function addFallback(statement, buffer) { let [,, attrs,, block] = statement; for (let i = 0; i < attrs.length; i++) { buffer.push(attrs[i]); } buffer.push([Ops.FlushElement]); if (block) { let { statements } = block; for (let i = 0; i < statements.length; i++) { buffer.push(statements[i]); } } buffer.push([Ops.CloseElement]); } function decorateTopLevelElement(tagName, symbols, attrs, buffer) { let attrsSymbol = symbols.push(_functions.ATTRS_BLOCK); buffer.push([Ops.ClientSideStatement, ClientSide.Ops.OpenComponentElement, tagName]); buffer.push([Ops.ClientSideStatement, ClientSide.Ops.DidCreateElement]); buffer.push([Ops.Yield, attrsSymbol, _util.EMPTY_ARRAY]); buffer.push(...attrs); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2FubmVyLmpzIl0sIm5hbWVzIjpbIldpcmVGb3JtYXQiLCJDbGllbnRTaWRlIiwiT3BzIiwiU2Nhbm5lciIsImNvbnN0cnVjdG9yIiwiYmxvY2siLCJlbnYiLCJzY2FuRW50cnlQb2ludCIsIm1ldGEiLCJzdGF0ZW1lbnRzIiwic3ltYm9scyIsImhhc0V2YWwiLCJzY2FuQmxvY2siLCJwYXJhbWV0ZXJzIiwic2NhbkxheW91dCIsImF0dHJzIiwiY29tcG9uZW50TmFtZSIsInN5bWJvbFRhYmxlIiwibmV3U3RhdGVtZW50cyIsInRvcGxldmVsIiwiaW5Ub3BMZXZlbCIsImkiLCJsZW5ndGgiLCJzdGF0ZW1lbnQiLCJTdGF0ZW1lbnRzIiwiaXNDb21wb25lbnQiLCJ0YWdOYW1lIiwiaGFzQ29tcG9uZW50RGVmaW5pdGlvbiIsInRlbXBsYXRlTWV0YSIsInVuZGVmaW5lZCIsInB1c2giLCJPcGVuRWxlbWVudCIsImRlY29yYXRlVG9wTGV2ZWxFbGVtZW50IiwiYWRkRmFsbGJhY2siLCJpc09wZW5FbGVtZW50IiwiaXNGbHVzaEVsZW1lbnQiLCJpc01vZGlmaWVyIiwiRXJyb3IiLCJDbGllbnRTaWRlU3RhdGVtZW50IiwiRGlkUmVuZGVyTGF5b3V0IiwiYnVmZmVyIiwiRmx1c2hFbGVtZW50IiwiQ2xvc2VFbGVtZW50IiwiYXR0cnNTeW1ib2wiLCJPcGVuQ29tcG9uZW50RWxlbWVudCIsIkRpZENyZWF0ZUVsZW1lbnQiLCJZaWVsZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7O0lBQVlBLFU7O0FBQ1o7O0lBQVlDLFU7O0FBQ1o7Ozs7QUFDQTs7Ozs7O0FBQ0EsSUFBSUMsTUFBTUYsV0FBV0UsR0FBckI7QUFDZSxNQUFNQyxPQUFOLENBQWM7QUFDekJDLGdCQUFZQyxLQUFaLEVBQW1CQyxHQUFuQixFQUF3QjtBQUNwQixhQUFLRCxLQUFMLEdBQWFBLEtBQWI7QUFDQSxhQUFLQyxHQUFMLEdBQVdBLEdBQVg7QUFDSDtBQUNEQyxtQkFBZUMs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QS9ELENBQVo7QUFDQWMsV0FBT1YsSUFBUCxDQUFZLENBQUM1QixJQUFJb0MsbUJBQUwsRUFBMEJyQyxXQUFXQyxHQUFYLENBQWUyQyxnQkFBekMsQ0FBWjtBQUNBTCxXQUFPVixJQUFQLENBQVksQ0FBQzVCLElBQUk0QyxLQUFMLEVBQVlILFdBQVosb0JBQVo7QUFDQUgsV0FBT1YsSUFBUCxDQUFZLEdBQUdmLEtBQWY7QUFDSCIsImZpbGUiOiJsaWIvc2Nhbm5lci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVNUFRZX0FSUkFZIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgKiBhcyBXaXJlRm9ybWF0IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCAqIGFzIENsaWVudFNpZGUgZnJvbSAnLi9zeW50YXgvY2xpZW50LXNpZGUnO1xuaW1wb3J0IENvbXBpbGFibGVUZW1wbGF0ZSBmcm9tICcuL3N5bnRheC9jb21waWxhYmxlLXRlbXBsYXRlJztcbmltcG9ydCB7IEFUVFJTX0JMT0NLIH0gZnJvbSAnLi9zeW50YXgvZnVuY3Rpb25zJztcbnZhciBPcHMgPSBXaXJlRm9ybWF0Lk9wcztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjYW5uZXIge1xuICAgIGNvbnN0cnVjdG9yKGJsb2NrLCBlbnYpIHtcbiAgICAgICAgdGhpcy5ibG9jayA9IGJsb2NrO1xuICAgICAgICB0aGlzLmVudiA9IGVudjtcbiAgICB9XG4gICAgc2NhbkVudHJ5UG9pbnQobWV0YSkge1xuICAgICAgICBsZXQgeyBibG9jayB9ID0gdGhpcztcbiAgICAgICAgbGV0IHsgc3RhdGVtZW50cywgc3ltYm9scywgaGFzRXZhbCB9ID0gYmxvY2s7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGlsYWJsZVRlbXBsYXRlKHN0YXRlbWVudHMsIHsgbWV0YSwgc3ltYm9scywgaGFzRXZhbCB9KTtcbiAgICB9XG4gICAgc2NhbkJsb2NrKG1ldGEpIHtcbiAgICAgICAgbGV0IHsgYmxvY2sgfSA9IHRoaXM7XG4gICAgICAgIGxldCB7IHN0YXRlbWVudHMgfSA9IGJsb2NrO1xuICAgICAgICByZXR1cm4gbmV3IENvbXBpbGFibGVUZW1wbGF0ZShzdGF0ZW1lbnRzLCB7IG1ldGEsIHBhcmFtZXRlcnM6IEVNUFRZX0FSUkFZIH0pO1xuICAgIH1cbiAgICBzY2FuTGF5b3V0KG1ldGEsIGF0dHJzLCBjb21wb25lbnROYW1lKSB7XG4gICAgICAgIGxldCB7IGJsb2NrIH0gPSB0aGlzO1xuICAgICAgICBsZXQgeyBzdGF0ZW1lbnRzLCBzeW1ib2xzLCBoYXNFdmFsIH0gPSBibG9jaztcbiAgICAgICAgbGV0IHN5bWJvbFRhYmxlID0geyBtZXRhLCBoYXNFdmFsLCBzeW1ib2xzIH07XG4gICAgICAgIGxldCBuZXdTdGF0ZW1lbnRzID0gW107XG4gICAgICAgIGxldCB0b3BsZXZlbDtcbiAgICAgICAgbGV0IGluVG9wTGV2ZWwgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0ZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgc3RhdGVtZW50ID0gc3RhdGVtZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChXaXJlRm9ybWF0LlN0YXRlbWVudHMuaXNDb21wb25lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGxldCB0YWdOYW1lID0gc3RhdGVtZW50WzFdO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbnYuaGFzQ29tcG9uZW50RGVmaW5pdGlvbih0YWdOYW1lLCBtZXRhLnRlbXBsYXRlTWV0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRvcGxldmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlbWVudHMucHVzaChbT3BzLk9wZW5FbGVtZW50LCB0YWdOYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BsZXZlbCA9IHRhZ05hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvcmF0ZVRvcExldmVsRWxlbWVudCh0YWdOYW1lLCBzeW1ib2xzLCBhdHRycywgbmV3U3RhdGVtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWRkRmFsbGJhY2soc3RhdGVtZW50LCBuZXdTdGF0ZW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9wbGV2ZWwgPT09IHVuZGVmaW5lZCAmJiB0YWdOYW1lID09PSBjb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BsZXZlbCA9IHRhZ05hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvcmF0ZVRvcExldmVsRWxlbWVudCh0YWdOYW1lLCBzeW1ib2xzLCBhdHRycywgbmV3U3RhdGVtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRGYWxsYmFjayhzdGF0ZW1lbnQsIG5ld1N0YXRlbWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0b3BsZXZlbCA9PT0gdW5kZWZpbmVkICYmIFdpcmVGb3JtYXQuU3RhdGVtZW50cy5pc09wZW5FbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPSBzdGF0ZW1lbnRbMV07XG4gICAgICAgICAgICAgICAgICAgIGluVG9wTGV2ZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBkZWNvcmF0ZVRvcExldmVsRWxlbWVudCh0b3BsZXZlbCwgc3ltYm9scywgYXR0cnMsIG5ld1N0YXRlbWVudHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpblRvcExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLmlzRmx1c2hFbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblRvcExldmVsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFdpcmVGb3JtYXQuU3RhdGVtZW50cy5pc01vZGlmaWVyKHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgRm91bmQgbW9kaWZpZXIgXCIke3N0YXRlbWVudFsxXX1cIiBvbiB0aGUgdG9wLWxldmVsIGVsZW1lbnQgb2YgXCIke2NvbXBvbmVudE5hbWV9XCJcXC4gTW9kaWZpZXJzIGNhbm5vdCBiZSBvbiB0aGUgdG9wLWxldmVsIGVsZW1lbnRgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV3U3RhdGVtZW50cy5wdXNoKFtPcHMuQ2xpZW50U2lkZVN0YXRlbWVudCwgQ2xpZW50U2lkZS5PcHMuRGlkUmVuZGVyTGF5b3V0XSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGlsYWJsZVRlbXBsYXRlKG5ld1N0YXRlbWVudHMsIHN5bWJvbFRhYmxlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRGYWxsYmFjayhzdGF0ZW1lbnQsIGJ1ZmZlcikge1xuICAgIGxldCBbLCwgYXR0cnMsLCBibG9ja10gPSBzdGF0ZW1lbnQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBidWZmZXIucHVzaChhdHRyc1tpXSk7XG4gICAgfVxuICAgIGJ1ZmZlci5wdXNoKFtPcHMuRmx1c2hFbGVtZW50XSk7XG4gICAgaWYgKGJsb2NrKSB7XG4gICAgICAgIGxldCB7IHN0YXRlbWVudHMgfSA9IGJsb2NrO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXRlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHN0YXRlbWVudHNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGJ1ZmZlci5wdXNoKFtPcHMuQ2xvc2VFbGVtZW50XSk7XG59XG5mdW5jdGlvbiBkZWNvcmF0ZVRvcExldmVsRWxlbWVudCh0YWdOYW1lLCBzeW1ib2xzLCBhdHRycywgYnVmZmVyKSB7XG4gICAgbGV0IGF0dHJzU3ltYm9sID0gc3ltYm9scy5wdXNoKEFUVFJTX0JMT0NLKTtcbiAgICBidWZmZXIucHVzaChbT3BzLkNsaWVudFNpZGVTdGF0ZW1lbnQsIENsaWVudFNpZGUuT3BzLk9wZW5Db21wb25lbnRFbGVtZW50LCB0YWdOYW1lXSk7XG4gICAgYnVmZmVyLnB1c2goW09wcy5DbGllbnRTaWRlU3RhdGVtZW50LCBDbGllbnRTaWRlLk9wcy5EaWRDcmVhdGVFbGVtZW50XSk7XG4gICAgYnVmZmVyLnB1c2goW09wcy5ZaWVsZCwgYXR0cnNTeW1ib2wsIEVNUFRZX0FSUkFZXSk7XG4gICAgYnVmZmVyLnB1c2goLi4uYXR0cnMpO1xufSJdfQ==