UNPKG

@glimmer/compiler

Version:
154 lines (116 loc) 16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VISIT_STMTS = void 0; var _syntax = require("@glimmer/syntax"); var _list = require("../../../shared/list"); var _result = require("../../../shared/result"); var mir = _interopRequireWildcard(require("../../2-encoding/mir")); var _keywords = require("../keywords"); var _append = require("../keywords/append"); var _classified = require("./element/classified"); var _component = require("./element/component"); var _simpleElement = require("./element/simple-element"); var _expressions = require("./expressions"); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } class NormalizationStatements { visitList(nodes, state) { return new _result.ResultArray(nodes.map(e => VISIT_STMTS.visit(e, state))).toOptionalList().mapOk(list => list.filter(s => s !== null)); } visit(node, state) { switch (node.type) { case 'GlimmerComment': return (0, _result.Ok)(null); case 'AppendContent': return this.AppendContent(node, state); case 'HtmlText': return (0, _result.Ok)(this.TextNode(node)); case 'HtmlComment': return (0, _result.Ok)(this.HtmlComment(node)); case 'InvokeBlock': return this.InvokeBlock(node, state); case 'InvokeComponent': return this.Component(node, state); case 'SimpleElement': return this.SimpleElement(node, state); } } InvokeBlock(node, state) { let translated = _keywords.BLOCK_KEYWORDS.translate(node, state); if (translated !== null) { return translated; } let head = _expressions.VISIT_EXPRS.visit(node.callee, state); let args = _expressions.VISIT_EXPRS.Args(node.args, state); return _result.Result.all(head, args).andThen(([head, args]) => this.NamedBlocks(node.blocks, state).mapOk(blocks => new mir.InvokeBlock({ loc: node.loc, head, args, blocks }))); } NamedBlocks(blocks, state) { let list = new _result.ResultArray(blocks.blocks.map(b => this.NamedBlock(b, state))); return list.toArray().mapOk(list => new mir.NamedBlocks({ loc: blocks.loc, blocks: (0, _list.OptionalList)(list) })); } NamedBlock(named, state) { let body = state.visitBlock(named.block); return body.mapOk(body => { return new mir.NamedBlock({ loc: named.loc, name: named.name, body: body.toArray(), scope: named.block.scope }); }); } SimpleElement(element, state) { return new _classified.ClassifiedElement(element, new _simpleElement.ClassifiedSimpleElement(element.tag, element, (0, _classified.hasDynamicFeatures)(element)), state).toStatement(); } Component(component, state) { return _expressions.VISIT_EXPRS.visit(component.callee, state).andThen(callee => new _classified.ClassifiedElement(component, new _component.ClassifiedComponent(callee, component), state).toStatement()); } AppendContent(append, state) { let translated = _append.APPEND_KEYWORDS.translate(append, state); if (translated !== null) { return translated; } let value = _expressions.VISIT_EXPRS.visit(append.value, state); return value.mapOk(value => { if (append.trusting) { return new mir.AppendTrustedHTML({ loc: append.loc, html: value }); } else { return new mir.AppendTextNode({ loc: append.loc, text: value }); } }); } TextNode(text) { return new mir.AppendTextNode({ loc: text.loc, text: new _syntax.ASTv2.LiteralExpression({ loc: text.loc, value: text.chars }) }); } HtmlComment(comment) { return new mir.AppendComment({ loc: comment.loc, value: comment.text }); } } const VISIT_STMTS = new NormalizationStatements(); exports.VISIT_STMTS = VISIT_STMTS; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9wYXNzZXMvMS1ub3JtYWxpemF0aW9uL3Zpc2l0b3JzL3N0YXRlbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQSxNQUFBLHVCQUFBLENBQTZCO0FBQzNCLEVBQUEsU0FBUyxDQUFBLEtBQUEsRUFBQSxLQUFBLEVBRWtCO0FBRXpCLFdBQU8sSUFBQSxtQkFBQSxDQUFnQixLQUFLLENBQUwsR0FBQSxDQUFXLENBQUQsSUFBTyxXQUFXLENBQVgsS0FBQSxDQUFBLENBQUEsRUFBakMsS0FBaUMsQ0FBakIsQ0FBaEIsRUFBQSxjQUFBLEdBQUEsS0FBQSxDQUVHLElBQUQsSUFBVSxJQUFJLENBQUosTUFBQSxDQUFhLENBQUQsSUFBaUQsQ0FBQyxLQUZqRixJQUVtQixDQUZaLENBQVA7QUFHRDs7QUFFRCxFQUFBLEtBQUssQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUFtRDtBQUN0RCxZQUFRLElBQUksQ0FBWixJQUFBO0FBQ0UsV0FBQSxnQkFBQTtBQUNFLGVBQU8sZ0JBQVAsSUFBTyxDQUFQOztBQUNGLFdBQUEsZUFBQTtBQUNFLGVBQU8sS0FBQSxhQUFBLENBQUEsSUFBQSxFQUFQLEtBQU8sQ0FBUDs7QUFDRixXQUFBLFVBQUE7QUFDRSxlQUFPLGdCQUFHLEtBQUEsUUFBQSxDQUFWLElBQVUsQ0FBSCxDQUFQOztBQUNGLFdBQUEsYUFBQTtBQUNFLGVBQU8sZ0JBQUcsS0FBQSxXQUFBLENBQVYsSUFBVSxDQUFILENBQVA7O0FBQ0YsV0FBQSxhQUFBO0FBQ0UsZUFBTyxLQUFBLFdBQUEsQ0FBQSxJQUFBLEVBQVAsS0FBTyxDQUFQOztBQUNGLFdBQUEsaUJBQUE7QUFDRSxlQUFPLEtBQUEsU0FBQSxDQUFBLElBQUEsRUFBUCxLQUFP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M0IsTUFBQSxLQUFLLEVBQUUsT0FBTyxDQUFDO0FBRlksS0FBdEIsQ0FBUDtBQUlEOztBQS9IMEI7O0FBa0l0QixNQUFNLFdBQVcsR0FBRyxJQUFwQix1QkFBb0IsRUFBcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBU1R2MiB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5cbmltcG9ydCB7IE9wdGlvbmFsTGlzdCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saXN0JztcbmltcG9ydCB7IE9rLCBSZXN1bHQsIFJlc3VsdEFycmF5IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3Jlc3VsdCc7XG5pbXBvcnQgKiBhcyBtaXIgZnJvbSAnLi4vLi4vMi1lbmNvZGluZy9taXInO1xuaW1wb3J0IHsgTm9ybWFsaXphdGlvblN0YXRlIH0gZnJvbSAnLi4vY29udGV4dCc7XG5pbXBvcnQgeyBCTE9DS19LRVlXT1JEUyB9IGZyb20gJy4uL2tleXdvcmRzJztcbmltcG9ydCB7IEFQUEVORF9LRVlXT1JEUyB9IGZyb20gJy4uL2tleXdvcmRzL2FwcGVuZCc7XG5pbXBvcnQgeyBDbGFzc2lmaWVkRWxlbWVudCwgaGFzRHluYW1pY0ZlYXR1cmVzIH0gZnJvbSAnLi9lbGVtZW50L2NsYXNzaWZpZWQnO1xuaW1wb3J0IHsgQ2xhc3NpZmllZENvbXBvbmVudCB9IGZyb20gJy4vZWxlbWVudC9jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2xhc3NpZmllZFNpbXBsZUVsZW1lbnQgfSBmcm9tICcuL2VsZW1lbnQvc2ltcGxlLWVsZW1lbnQnO1xuaW1wb3J0IHsgVklTSVRfRVhQUlMgfSBmcm9tICcuL2V4cHJlc3Npb25zJztcblxuY2xhc3MgTm9ybWFsaXphdGlvblN0YXRlbWVudHMge1xuICB2aXNpdExpc3QoXG4gICAgbm9kZXM6IHJlYWRvbmx5IEFTVHYyLkNvbnRlbnROb2RlW10sXG4gICAgc3RhdGU6IE5vcm1hbGl6YXRpb25TdGF0ZVxuICApOiBSZXN1bHQ8T3B0aW9uYWxMaXN0PG1pci5TdGF0ZW1lbnQ+PiB7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHRBcnJheShub2Rlcy5tYXAoKGUpID0+IFZJU0lUX1NUTVRTLnZpc2l0KGUsIHN0YXRlKSkpXG4gICAgICAudG9PcHRpb25hbExpc3QoKVxuICAgICAgLm1hcE9rKChsaXN0KSA9PiBsaXN0LmZpbHRlcigoczogbWlyLlN0YXRlbWVudCB8IG51bGwpOiBzIGlzIG1pci5TdGF0ZW1lbnQgPT4gcyAhPT0gbnVsbCkpO1xuICB9XG5cbiAgdmlzaXQobm9kZTogQVNUdjIuQ29udGVudE5vZGUsIHN0YXRlOiBOb3JtYWxpemF0aW9uU3RhdGUpOiBSZXN1bHQ8bWlyLlN0YXRlbWVudCB8IG51bGw+IHtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSAnR2xpbW1lckNvbW1lbnQnOlxuICAgICAgICByZXR1cm4gT2sobnVsbCk7XG4gICAgICBjYXNlICdBcHBlbmRDb250ZW50JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuQXBwZW5kQ29udGVudChub2RlLCBzdGF0ZSk7XG4gICAgICBjYXNlICdIdG1sVGV4dCc6XG4gICAgICAgIHJldHVybiBPayh0aGlzLlRleHROb2RlKG5vZGUpKTtcbiAgICAgIGNhc2UgJ0h0bWxDb21tZW50JzpcbiAgICAgICAgcmV0dXJuIE9rKHRoaXMuSHRtbENvbW1lbnQobm9kZSkpO1xuICAgICAgY2FzZSAnSW52b2tlQmxvY2snOlxuICAgICAgICByZXR1cm4gdGhpcy5JbnZva2VCbG9jayhub2RlLCBzdGF0ZSk7XG4gICAgICBjYXNlICdJbnZva2VDb21wb25lbnQnOlxuICAgICAgICByZXR1cm4gdGhpcy5Db21wb25lbnQobm9kZSwgc3RhdGUpO1xuICAgICAgY2FzZSAnU2ltcGxlRWxlbWVudCc6XG4gICAgICAgIHJldHVybiB0aGlzLlNpbXBsZUVsZW1lbnQobm9kZSwgc3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIEludm9rZUJsb2NrKG5vZGU6IEFTVHYyLkludm9rZUJsb2NrLCBzdGF0ZTogTm9ybWFsaXphdGlvblN0YXRlKTogUmVzdWx0PG1pci5TdGF0ZW1lbnQ+IHtcbiAgICBsZXQgdHJhbnNsYXRlZCA9IEJMT0NLX0tFWVdPUkRTLnRyYW5zbGF0ZShub2RlLCBzdGF0ZSk7XG5cbiAgICBpZiAodHJhbnNsYXRlZCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQ7XG4gICAgfVxuXG4gICAgbGV0IGhlYWQgPSBWSVNJVF9FWFBSUy52aXNpdChub2RlLmNhbGxlZSwgc3RhdGUpO1xuICAgIGxldCBhcmdzID0gVklTSVRfRVhQUlMuQXJncyhub2RlLmFyZ3MsIHN0YXRlKTtcblxuICAgIHJldHVybiBSZXN1bHQuYWxsKGhlYWQsIGFyZ3MpLmFuZFRoZW4oKFtoZWFkLCBhcmdzXSkgPT5cbiAgICAgIHRoaXMuTmFtZWRCbG9ja3Mobm9kZS5ibG9ja3MsIHN0YXRlKS5tYXBPayhcbiAgICAgICAgKGJsb2NrcykgPT5cbiAgICAgICAgICBuZXcgbWlyLkludm9rZUJsb2NrKHtcbiAgICAgICAgICAgIGxvYzogbm9kZS5sb2MsXG4gICAgICAgICAgICBoZWFkLFxuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgIGJsb2NrcyxcbiAgICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBOYW1lZEJsb2NrcyhibG9ja3M6IEFTVHYyLk5hbWVkQmxvY2tzLCBzdGF0ZTogTm9ybWFsaXphdGlvblN0YXRlKTogUmVzdWx0PG1pci5OYW1lZEJsb2Nrcz4ge1xuICAgIGxldCBsaXN0ID0gbmV3IFJlc3VsdEFycmF5KGJsb2Nrcy5ibG9ja3MubWFwKChiKSA9PiB0aGlzLk5hbWVkQmxvY2soYiwgc3RhdGUpKSk7XG5cbiAgICByZXR1cm4gbGlzdFxuICAgICAgLnRvQXJyYXkoKVxuICAgICAgLm1hcE9rKChsaXN0KSA9PiBuZXcgbWlyLk5hbWVkQmxvY2tzKHsgbG9jOiBibG9ja3MubG9jLCBibG9ja3M6IE9wdGlvbmFsTGlzdChsaXN0KSB9KSk7XG4gIH1cblxuICBOYW1lZEJsb2NrKG5hbWVkOiBBU1R2Mi5OYW1lZEJsb2NrLCBzdGF0ZTogTm9ybWFsaXphdGlvblN0YXRlKTogUmVzdWx0PG1pci5OYW1lZEJsb2NrPiB7XG4gICAgbGV0IGJvZHkgPSBzdGF0ZS52aXNpdEJsb2NrKG5hbWVkLmJsb2NrKTtcblxuICAgIHJldHVybiBib2R5Lm1hcE9rKChib2R5KSA9PiB7XG4gICAgICByZXR1cm4gbmV3IG1pci5OYW1lZEJsb2NrKHtcbiAgICAgICAgbG9jOiBuYW1lZC5sb2MsXG4gICAgICAgIG5hbWU6IG5hbWVkLm5hbWUsXG4gICAgICAgIGJvZHk6IGJvZHkudG9BcnJheSgpLFxuICAgICAgICBzY29wZTogbmFtZWQuYmxvY2suc2NvcGUsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIFNpbXBsZUVsZW1lbnQoZWxlbWVudDogQVNUdjIuU2ltcGxlRWxlbWVudCwgc3RhdGU6IE5vcm1hbGl6YXRpb25TdGF0ZSk6IFJlc3VsdDxtaXIuU3RhdGVtZW50PiB7XG4gICAgcmV0dXJuIG5ldyBDbGFzc2lmaWVkRWxlbWVudChcbiAgICAgIGVsZW1lbnQsXG4gICAgICBuZXcgQ2xhc3NpZmllZFNpbXBsZUVsZW1lbnQoZWxlbWVudC50YWcsIGVsZW1lbnQsIGhhc0R5bmFtaWNGZWF0dXJlcyhlbGVtZW50KSksXG4gICAgICBzdGF0ZVxuICAgICkudG9TdGF0ZW1lbnQoKTtcbiAgfVxuXG4gIENvbXBvbmVudChjb21wb25lbnQ6IEFTVHYyLkludm9rZUNvbXBvbmVudCwgc3RhdGU6IE5vcm1hbGl6YXRpb25TdGF0ZSk6IFJlc3VsdDxtaXIuU3RhdGVtZW50PiB7XG4gICAgcmV0dXJuIFZJU0lUX0VYUFJTLnZpc2l0KGNvbXBvbmVudC5jYWxsZWUsIHN0YXRlKS5hbmRUaGVuKChjYWxsZWUpID0+XG4gICAgICBuZXcgQ2xhc3NpZmllZEVsZW1lbnQoXG4gICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgbmV3IENsYXNzaWZpZWRDb21wb25lbnQoY2FsbGVlLCBjb21wb25lbnQpLFxuICAgICAgICBzdGF0ZVxuICAgICAgKS50b1N0YXRlbWVudCgpXG4gICAgKTtcbiAgfVxuXG4gIEFwcGVuZENvbnRlbnQoYXBwZW5kOiBBU1R2Mi5BcHBlbmRDb250ZW50LCBzdGF0ZTogTm9ybWFsaXphdGlvblN0YXRlKTogUmVzdWx0PG1pci5TdGF0ZW1lbnQ+IHtcbiAgICBsZXQgdHJhbnNsYXRlZCA9IEFQUEVORF9LRVlXT1JEUy50cmFuc2xhdGUoYXBwZW5kLCBzdGF0ZSk7XG5cbiAgICBpZiAodHJhbnNsYXRlZCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQ7XG4gICAgfVxuXG4gICAgbGV0IHZhbHVlID0gVklTSVRfRVhQUlMudmlzaXQoYXBwZW5kLnZhbHVlLCBzdGF0ZSk7XG5cbiAgICByZXR1cm4gdmFsdWUubWFwT2soKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoYXBwZW5kLnRydXN0aW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgbWlyLkFwcGVuZFRydXN0ZWRIVE1MKHtcbiAgICAgICAgICBsb2M6IGFwcGVuZC5sb2MsXG4gICAgICAgICAgaHRtbDogdmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBtaXIuQXBwZW5kVGV4dE5vZGUoe1xuICAgICAgICAgIGxvYzogYXBwZW5kLmxvYyxcbiAgICAgICAgICB0ZXh0OiB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBUZXh0Tm9kZSh0ZXh0OiBBU1R2Mi5IdG1sVGV4dCk6IG1pci5TdGF0ZW1lbnQge1xuICAgIHJldHVybiBuZXcgbWlyLkFwcGVuZFRleHROb2RlKHtcbiAgICAgIGxvYzogdGV4dC5sb2MsXG4gICAgICB0ZXh0OiBuZXcgQVNUdjIuTGl0ZXJhbEV4cHJlc3Npb24oeyBsb2M6IHRleHQubG9jLCB2YWx1ZTogdGV4dC5jaGFycyB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIEh0bWxDb21tZW50KGNvbW1lbnQ6IEFTVHYyLkh0bWxDb21tZW50KTogbWlyLlN0YXRlbWVudCB7XG4gICAgcmV0dXJuIG5ldyBtaXIuQXBwZW5kQ29tbWVudCh7XG4gICAgICBsb2M6IGNvbW1lbnQubG9jLFxuICAgICAgdmFsdWU6IGNvbW1lbnQudGV4dCxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVklTSVRfU1RNVFMgPSBuZXcgTm9ybWFsaXphdGlvblN0YXRlbWVudHMoKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=