UNPKG

ember-legacy-class-transform

Version:
141 lines (114 loc) 15.9 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; } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 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 _compilableTemplate2.default(statements, { meta: meta, symbols: symbols, hasEval: hasEval }); }; Scanner.prototype.scanBlock = function scanBlock(meta) { var block = this.block; var statements = block.statements; return new _compilableTemplate2.default(statements, { meta: meta, parameters: _util.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 _compilableTemplate2.default(newStatements, symbolTable); }; return Scanner; }(); exports.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(_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.apply(buffer, attrs); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2FubmVyLmpzIl0sIm5hbWVzIjpbIkVNUFRZX0FSUkFZIiwiV2lyZUZvcm1hdCIsIkNsaWVudFNpZGUiLCJDb21waWxhYmxlVGVtcGxhdGUiLCJBVFRSU19CTE9DSyIsIk9wcyIsIlNjYW5uZXIiLCJibG9jayIsImVudiIsInNjYW5FbnRyeVBvaW50IiwibWV0YSIsInN0YXRlbWVudHMiLCJzeW1ib2xzIiwiaGFzRXZhbCIsInNjYW5CbG9jayIsInBhcmFtZXRlcnMiLCJzY2FuTGF5b3V0IiwiYXR0cnMiLCJjb21wb25lbnROYW1lIiwic3ltYm9sVGFibGUiLCJuZXdTdGF0ZW1lbnRzIiwidG9wbGV2ZWwiLCJpblRvcExldmVsIiwiaSIsImxlbmd0aCIsInN0YXRlbWVudCIsIlN0YXRlbWVudHMiLCJpc0NvbXBvbmVudCIsInRhZ05hbWUiLCJoYXNDb21wb25lbnREZWZpbml0aW9uIiwidGVtcGxhdGVNZXRhIiwidW5kZWZpbmVkIiwicHVzaCIsIk9wZW5FbGVtZW50IiwiZGVjb3JhdGVUb3BMZXZlbEVsZW1lbnQiLCJhZGRGYWxsYmFjayIsImlzT3BlbkVsZW1lbnQiLCJpc0ZsdXNoRWxlbWVudCIsImlzTW9kaWZpZXIiLCJFcnJvciIsIkNsaWVudFNpZGVTdGF0ZW1lbnQiLCJEaWRSZW5kZXJMYXlvdXQiLCJidWZmZXIiLCJGbHVzaEVsZW1lbnQiLCJDbG9zZUVsZW1lbnQiLCJhdHRyc1N5bWJvbCIsIk9wZW5Db21wb25lbnRFbGVtZW50IiwiRGlkQ3JlYXRlRWxlbWVudCIsIllpZWxkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxBQUFTLEFBQVQsQUFBNEIsQUFBNUI7O0FBQ0EsQUFBTzs7SUFBSyxBQUFaLEFBQTRCLEFBQTVCOztBQUNBLEFBQU87O0lBQUssQUFBWixBQUE0QixBQUE1Qjs7QUFDQSxBQUFPLEFBQVAsQUFBK0IsQUFBL0I7Ozs7QUFDQSxBQUFTLEFBQVQsQUFBNEIsQUFBNUI7Ozs7Ozs7Ozs7OztBQUNBLElBQUksTUFBTSxX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cUJBQTBCLFdBQVcsQUFBWCxJQUFlLEFBQXpDLHNCQUErRCxBQUEvRCxBQUFaLEFBQ0E7V0FBTyxBQUFQLEtBQVksQ0FBQyxJQUFJLEFBQUwscUJBQTBCLFdBQVcsQUFBWCxJQUFlLEFBQXpDLEFBQVosQUFDQTtXQUFPLEFBQVAsS0FBWSxDQUFDLElBQUksQUFBTCxPQUFZLEFBQVosQUFBeUIsQUFBekIsQUFBWixBQUNBO1dBQU8sQUFBUCxtQkFBZSxBQUFmLEFBQ0giLCJmaWxlIjoibGliL3NjYW5uZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFTVBUWV9BUlJBWSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0ICogYXMgV2lyZUZvcm1hdCBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5pbXBvcnQgKiBhcyBDbGllbnRTaWRlIGZyb20gJy4vc3ludGF4L2NsaWVudC1zaWRlJztcbmltcG9ydCBDb21waWxhYmxlVGVtcGxhdGUgZnJvbSAnLi9zeW50YXgvY29tcGlsYWJsZS10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBBVFRSU19CTE9DSyB9IGZyb20gJy4vc3ludGF4L2Z1bmN0aW9ucyc7XG52YXIgT3BzID0gV2lyZUZvcm1hdC5PcHM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTY2FubmVyIHtcbiAgICBjb25zdHJ1Y3RvcihibG9jaywgZW52KSB7XG4gICAgICAgIHRoaXMuYmxvY2sgPSBibG9jaztcbiAgICAgICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgfVxuICAgIHNjYW5FbnRyeVBvaW50KG1ldGEpIHtcbiAgICAgICAgbGV0IHsgYmxvY2sgfSA9IHRoaXM7XG4gICAgICAgIGxldCB7IHN0YXRlbWVudHMsIHN5bWJvbHMsIGhhc0V2YWwgfSA9IGJsb2NrO1xuICAgICAgICByZXR1cm4gbmV3IENvbXBpbGFibGVUZW1wbGF0ZShzdGF0ZW1lbnRzLCB7IG1ldGEsIHN5bWJvbHMsIGhhc0V2YWwgfSk7XG4gICAgfVxuICAgIHNjYW5CbG9jayhtZXRhKSB7XG4gICAgICAgIGxldCB7IGJsb2NrIH0gPSB0aGlzO1xuICAgICAgICBsZXQgeyBzdGF0ZW1lbnRzIH0gPSBibG9jaztcbiAgICAgICAgcmV0dXJuIG5ldyBDb21waWxhYmxlVGVtcGxhdGUoc3RhdGVtZW50cywgeyBtZXRhLCBwYXJhbWV0ZXJzOiBFTVBUWV9BUlJBWSB9KTtcbiAgICB9XG4gICAgc2NhbkxheW91dChtZXRhLCBhdHRycywgY29tcG9uZW50TmFtZSkge1xuICAgICAgICBsZXQgeyBibG9jayB9ID0gdGhpcztcbiAgICAgICAgbGV0IHsgc3RhdGVtZW50cywgc3ltYm9scywgaGFzRXZhbCB9ID0gYmxvY2s7XG4gICAgICAgIGxldCBzeW1ib2xUYWJsZSA9IHsgbWV0YSwgaGFzRXZhbCwgc3ltYm9scyB9O1xuICAgICAgICBsZXQgbmV3U3RhdGVtZW50cyA9IFtdO1xuICAgICAgICBsZXQgdG9wbGV2ZWw7XG4gICAgICAgIGxldCBpblRvcExldmVsID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhdGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHN0YXRlbWVudCA9IHN0YXRlbWVudHNbaV07XG4gICAgICAgICAgICBpZiAoV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLmlzQ29tcG9uZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdGFnTmFtZSA9IHN0YXRlbWVudFsxXTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZW52Lmhhc0NvbXBvbmVudERlZmluaXRpb24odGFnTmFtZSwgbWV0YS50ZW1wbGF0ZU1ldGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b3BsZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZW1lbnRzLnB1c2goW09wcy5PcGVuRWxlbWVudCwgdGFnTmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPSB0YWdOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb3JhdGVUb3BMZXZlbEVsZW1lbnQodGFnTmFtZSwgc3ltYm9scywgYXR0cnMsIG5ld1N0YXRlbWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFkZEZhbGxiYWNrKHN0YXRlbWVudCwgbmV3U3RhdGVtZW50cyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRvcGxldmVsID09PSB1bmRlZmluZWQgJiYgdGFnTmFtZSA9PT0gY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPSB0YWdOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb3JhdGVUb3BMZXZlbEVsZW1lbnQodGFnTmFtZSwgc3ltYm9scywgYXR0cnMsIG5ld1N0YXRlbWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmFsbGJhY2soc3RhdGVtZW50LCBuZXdTdGF0ZW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodG9wbGV2ZWwgPT09IHVuZGVmaW5lZCAmJiBXaXJlRm9ybWF0LlN0YXRlbWVudHMuaXNPcGVuRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcGxldmVsID0gc3RhdGVtZW50WzFdO1xuICAgICAgICAgICAgICAgICAgICBpblRvcExldmVsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZGVjb3JhdGVUb3BMZXZlbEVsZW1lbnQodG9wbGV2ZWwsIHN5bWJvbHMsIGF0dHJzLCBuZXdTdGF0ZW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5Ub3BMZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdpcmVGb3JtYXQuU3RhdGVtZW50cy5pc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Ub3BMZXZlbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChXaXJlRm9ybWF0LlN0YXRlbWVudHMuaXNNb2RpZmllcihzdGF0ZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYEZvdW5kIG1vZGlmaWVyIFwiJHtzdGF0ZW1lbnRbMV19XCIgb24gdGhlIHRvcC1sZXZlbCBlbGVtZW50IG9mIFwiJHtjb21wb25lbnROYW1lfVwiXFwuIE1vZGlmaWVycyBjYW5ub3QgYmUgb24gdGhlIHRvcC1sZXZlbCBlbGVtZW50YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5ld1N0YXRlbWVudHMucHVzaChbT3BzLkNsaWVudFNpZGVTdGF0ZW1lbnQsIENsaWVudFNpZGUuT3BzLkRpZFJlbmRlckxheW91dF0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbXBpbGFibGVUZW1wbGF0ZShuZXdTdGF0ZW1lbnRzLCBzeW1ib2xUYWJsZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkRmFsbGJhY2soc3RhdGVtZW50LCBidWZmZXIpIHtcbiAgICBsZXQgWywsIGF0dHJzLCwgYmxvY2tdID0gc3RhdGVtZW50O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYnVmZmVyLnB1c2goYXR0cnNbaV0pO1xuICAgIH1cbiAgICBidWZmZXIucHVzaChbT3BzLkZsdXNoRWxlbWVudF0pO1xuICAgIGlmIChibG9jaykge1xuICAgICAgICBsZXQgeyBzdGF0ZW1lbnRzIH0gPSBibG9jaztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0ZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBidWZmZXIucHVzaChzdGF0ZW1lbnRzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBidWZmZXIucHVzaChbT3BzLkNsb3NlRWxlbWVudF0pO1xufVxuZnVuY3Rpb24gZGVjb3JhdGVUb3BMZXZlbEVsZW1lbnQodGFnTmFtZSwgc3ltYm9scywgYXR0cnMsIGJ1ZmZlcikge1xuICAgIGxldCBhdHRyc1N5bWJvbCA9IHN5bWJvbHMucHVzaChBVFRSU19CTE9DSyk7XG4gICAgYnVmZmVyLnB1c2goW09wcy5DbGllbnRTaWRlU3RhdGVtZW50LCBDbGllbnRTaWRlLk9wcy5PcGVuQ29tcG9uZW50RWxlbWVudCwgdGFnTmFtZV0pO1xuICAgIGJ1ZmZlci5wdXNoKFtPcHMuQ2xpZW50U2lkZVN0YXRlbWVudCwgQ2xpZW50U2lkZS5PcHMuRGlkQ3JlYXRlRWxlbWVudF0pO1xuICAgIGJ1ZmZlci5wdXNoKFtPcHMuWWllbGQsIGF0dHJzU3ltYm9sLCBFTVBUWV9BUlJBWV0pO1xuICAgIGJ1ZmZlci5wdXNoKC4uLmF0dHJzKTtcbn0iXX0=