UNPKG

@glimmer/compiler

Version:
181 lines (139 loc) 17.3 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; } var NormalizationStatements = /*#__PURE__*/function () { function NormalizationStatements() {} var _proto = NormalizationStatements.prototype; _proto.visitList = function visitList(nodes, state) { return new _result.ResultArray(nodes.map(function (e) { return VISIT_STMTS.visit(e, state); })).toOptionalList().mapOk(function (list) { return list.filter(function (s) { return s !== null; }); }); }; _proto.visit = function 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); } }; _proto.InvokeBlock = function InvokeBlock(node, state) { var _this = this; var translated = _keywords.BLOCK_KEYWORDS.translate(node, state); if (translated !== null) { return translated; } var head = _expressions.VISIT_EXPRS.visit(node.callee, state); var args = _expressions.VISIT_EXPRS.Args(node.args, state); return _result.Result.all(head, args).andThen(function (_ref) { var head = _ref[0], args = _ref[1]; return _this.NamedBlocks(node.blocks, state).mapOk(function (blocks) { return new mir.InvokeBlock({ loc: node.loc, head: head, args: args, blocks: blocks }); }); }); }; _proto.NamedBlocks = function NamedBlocks(blocks, state) { var _this2 = this; var list = new _result.ResultArray(blocks.blocks.map(function (b) { return _this2.NamedBlock(b, state); })); return list.toArray().mapOk(function (list) { return new mir.NamedBlocks({ loc: blocks.loc, blocks: (0, _list.OptionalList)(list) }); }); }; _proto.NamedBlock = function NamedBlock(named, state) { var body = state.visitBlock(named.block); return body.mapOk(function (body) { return new mir.NamedBlock({ loc: named.loc, name: named.name, body: body.toArray(), scope: named.block.scope }); }); }; _proto.SimpleElement = function SimpleElement(element, state) { return new _classified.ClassifiedElement(element, new _simpleElement.ClassifiedSimpleElement(element.tag, element, (0, _classified.hasDynamicFeatures)(element)), state).toStatement(); }; _proto.Component = function Component(component, state) { return _expressions.VISIT_EXPRS.visit(component.callee, state).andThen(function (callee) { return new _classified.ClassifiedElement(component, new _component.ClassifiedComponent(callee, component), state).toStatement(); }); }; _proto.AppendContent = function AppendContent(append, state) { var translated = _append.APPEND_KEYWORDS.translate(append, state); if (translated !== null) { return translated; } var value = _expressions.VISIT_EXPRS.visit(append.value, state); return value.mapOk(function (value) { if (append.trusting) { return new mir.AppendTrustedHTML({ loc: append.loc, html: value }); } else { return new mir.AppendTextNode({ loc: append.loc, text: value }); } }); }; _proto.TextNode = function TextNode(text) { return new mir.AppendTextNode({ loc: text.loc, text: new _syntax.ASTv2.LiteralExpression({ loc: text.loc, value: text.chars }) }); }; _proto.HtmlComment = function HtmlComment(comment) { return new mir.AppendComment({ loc: comment.loc, value: comment.text }); }; return NormalizationStatements; }(); var VISIT_STMTS = new NormalizationStatements(); exports.VISIT_STMTS = VISIT_STMTS; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9wYXNzZXMvMS1ub3JtYWxpemF0aW9uL3Zpc2l0b3JzL3N0YXRlbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7SUFFQSx1Qjs7Ozs7U0FDRSxTLEdBQUEsU0FBQSxTQUFBLENBQUEsS0FBQSxFQUFBLEtBQUEsRUFFMkI7QUFFekIsV0FBTyxJQUFBLG1CQUFBLENBQWdCLEtBQUssQ0FBTCxHQUFBLENBQVcsVUFBRCxDQUFDLEVBQUQ7QUFBQSxhQUFPLFdBQVcsQ0FBWCxLQUFBLENBQUEsQ0FBQSxFQUFqQyxLQUFpQyxDQUFQO0FBQTFCLEtBQWdCLENBQWhCLEVBQUEsY0FBQSxHQUFBLEtBQUEsQ0FFRyxVQUFELElBQUMsRUFBRDtBQUFBLGFBQVUsSUFBSSxDQUFKLE1BQUEsQ0FBYSxVQUFELENBQUMsRUFBRDtBQUFBLGVBQWlELENBQUMsS0FGakYsSUFFK0I7QUFBdEIsT0FBVSxDQUFWO0FBRlQsS0FBTyxDQUFQOzs7U0FLRixLLEdBQUEsU0FBQSxLQUFBLENBQUEsSUFBQSxFQUFBLEtBQUEsRUFBd0Q7QUFDdEQsWUFBUSxJQUFJLENBQVosSUFBQTtBQUNFLFdBQUEsZ0JBQUE7QUFDRSxlQUFPLGdCQUFQLElBQU8sQ0FBUDs7QUFDRixXQUFBLGVBQUE7QUFDRSxlQUFPLEtBQUEsYUFBQSxDQUFBLElBQUEsRUFBUCxLQUFPLENBQVA7O0FBQ0YsV0FBQSxVQUFBO0FBQ0UsZUFBTyxnQkFBRyxLQUFBLFFBQUEsQ0FBVixJQUFVLENBQUgsQ0FBUDs7QUFDRixXQUFBLGFBQUE7QUFDRSxlQUFPLGdCQUFHLEtBQUEsV0FBQSxDQUFWLElBQVUsQ0FBSCxDQUFQOztBQUNGLFdBQUEsYUFBQTtBQUNFLGVBQU8sS0FBQSxXQUFBLENBQUEs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Q0FBUDtBQUlEO0FBWEgsS0FBTyxDQUFQOzs7U0FlRixRLEdBQUEsU0FBQSxRQUFBLENBQUEsSUFBQSxFQUE2QjtBQUMzQixXQUFPLElBQUksR0FBRyxDQUFQLGNBQUEsQ0FBdUI7QUFDNUIsTUFBQSxHQUFHLEVBQUUsSUFBSSxDQURtQixHQUFBO0FBRTVCLE1BQUEsSUFBSSxFQUFFLElBQUksY0FBSixpQkFBQSxDQUE0QjtBQUFFLFFBQUEsR0FBRyxFQUFFLElBQUksQ0FBWCxHQUFBO0FBQWlCLFFBQUEsS0FBSyxFQUFFLElBQUksQ0FBQztBQUE3QixPQUE1QjtBQUZzQixLQUF2QixDQUFQOzs7U0FNRixXLEdBQUEsU0FBQSxXQUFBLENBQUEsT0FBQSxFQUFzQztBQUNwQyxXQUFPLElBQUksR0FBRyxDQUFQLGFBQUEsQ0FBc0I7QUFDM0IsTUFBQSxHQUFHLEVBQUUsT0FBTyxDQURlLEdBQUE7QUFFM0IsTUFBQSxLQUFLLEVBQUUsT0FBTyxDQUFDO0FBRlksS0FBdEIsQ0FBUDs7Ozs7O0FBT0csSUFBTSxXQUFXLEdBQUcsSUFBcEIsdUJBQW9CLEVBQXBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVNUdjIgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuXG5pbXBvcnQgeyBPcHRpb25hbExpc3QgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGlzdCc7XG5pbXBvcnQgeyBPaywgUmVzdWx0LCBSZXN1bHRBcnJheSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9yZXN1bHQnO1xuaW1wb3J0ICogYXMgbWlyIGZyb20gJy4uLy4uLzItZW5jb2RpbmcvbWlyJztcbmltcG9ydCB7IE5vcm1hbGl6YXRpb25TdGF0ZSB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgQkxPQ0tfS0VZV09SRFMgfSBmcm9tICcuLi9rZXl3b3Jkcyc7XG5pbXBvcnQgeyBBUFBFTkRfS0VZV09SRFMgfSBmcm9tICcuLi9rZXl3b3Jkcy9hcHBlbmQnO1xuaW1wb3J0IHsgQ2xhc3NpZmllZEVsZW1lbnQsIGhhc0R5bmFtaWNGZWF0dXJlcyB9IGZyb20gJy4vZWxlbWVudC9jbGFzc2lmaWVkJztcbmltcG9ydCB7IENsYXNzaWZpZWRDb21wb25lbnQgfSBmcm9tICcuL2VsZW1lbnQvY29tcG9uZW50JztcbmltcG9ydCB7IENsYXNzaWZpZWRTaW1wbGVFbGVtZW50IH0gZnJvbSAnLi9lbGVtZW50L3NpbXBsZS1lbGVtZW50JztcbmltcG9ydCB7IFZJU0lUX0VYUFJTIH0gZnJvbSAnLi9leHByZXNzaW9ucyc7XG5cbmNsYXNzIE5vcm1hbGl6YXRpb25TdGF0ZW1lbnRzIHtcbiAgdmlzaXRMaXN0KFxuICAgIG5vZGVzOiByZWFkb25seSBBU1R2Mi5Db250ZW50Tm9kZVtdLFxuICAgIHN0YXRlOiBOb3JtYWxpemF0aW9uU3RhdGVcbiAgKTogUmVzdWx0PE9wdGlvbmFsTGlzdDxtaXIuU3RhdGVtZW50Pj4ge1xuICAgIHJldHVybiBuZXcgUmVzdWx0QXJyYXkobm9kZXMubWFwKChlKSA9PiBWSVNJVF9TVE1UUy52aXNpdChlLCBzdGF0ZSkpKVxuICAgICAgLnRvT3B0aW9uYWxMaXN0KClcbiAgICAgIC5tYXBPaygobGlzdCkgPT4gbGlzdC5maWx0ZXIoKHM6IG1pci5TdGF0ZW1lbnQgfCBudWxsKTogcyBpcyBtaXIuU3RhdGVtZW50ID0+IHMgIT09IG51bGwpKTtcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IEFTVHYyLkNvbnRlbnROb2RlLCBzdGF0ZTogTm9ybWFsaXphdGlvblN0YXRlKTogUmVzdWx0PG1pci5TdGF0ZW1lbnQgfCBudWxsPiB7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ0dsaW1tZXJDb21tZW50JzpcbiAgICAgICAgcmV0dXJuIE9rKG51bGwpO1xuICAgICAgY2FzZSAnQXBwZW5kQ29udGVudCc6XG4gICAgICAgIHJldHVybiB0aGlzLkFwcGVuZENvbnRlbnQobm9kZSwgc3RhdGUpO1xuICAgICAgY2FzZSAnSHRtbFRleHQnOlxuICAgICAgICByZXR1cm4gT2sodGhpcy5UZXh0Tm9kZShub2RlKSk7XG4gICAgICBjYXNlICdIdG1sQ29tbWVudCc6XG4gICAgICAgIHJldHVybiBPayh0aGlzLkh0bWxDb21tZW50KG5vZGUpKTtcbiAgICAgIGNhc2UgJ0ludm9rZUJsb2NrJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuSW52b2tlQmxvY2sobm9kZSwgc3RhdGUpO1xuICAgICAgY2FzZSAnSW52b2tlQ29tcG9uZW50JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuQ29tcG9uZW50KG5vZGUsIHN0YXRlKTtcbiAgICAgIGNhc2UgJ1NpbXBsZUVsZW1lbnQnOlxuICAgICAgICByZXR1cm4gdGhpcy5TaW1wbGVFbGVtZW50KG5vZGUsIHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICBJbnZva2VCbG9jayhub2RlOiBBU1R2Mi5JbnZva2VCbG9jaywgc3RhdGU6IE5vcm1hbGl6YXRpb25TdGF0ZSk6IFJlc3VsdDxtaXIuU3RhdGVtZW50PiB7XG4gICAgbGV0IHRyYW5zbGF0ZWQgPSBCTE9DS19LRVlXT1JEUy50cmFuc2xhdGUobm9kZSwgc3RhdGUpO1xuXG4gICAgaWYgKHRyYW5zbGF0ZWQgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgIH1cblxuICAgIGxldCBoZWFkID0gVklTSVRfRVhQUlMudmlzaXQobm9kZS5jYWxsZWUsIHN0YXRlKTtcbiAgICBsZXQgYXJncyA9IFZJU0lUX0VYUFJTLkFyZ3Mobm9kZS5hcmdzLCBzdGF0ZSk7XG5cbiAgICByZXR1cm4gUmVzdWx0LmFsbChoZWFkLCBhcmdzKS5hbmRUaGVuKChbaGVhZCwgYXJnc10pID0+XG4gICAgICB0aGlzLk5hbWVkQmxvY2tzKG5vZGUuYmxvY2tzLCBzdGF0ZSkubWFwT2soXG4gICAgICAgIChibG9ja3MpID0+XG4gICAgICAgICAgbmV3IG1pci5JbnZva2VCbG9jayh7XG4gICAgICAgICAgICBsb2M6IG5vZGUubG9jLFxuICAgICAgICAgICAgaGVhZCxcbiAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICBibG9ja3MsXG4gICAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgTmFtZWRCbG9ja3MoYmxvY2tzOiBBU1R2Mi5OYW1lZEJsb2Nrcywgc3RhdGU6IE5vcm1hbGl6YXRpb25TdGF0ZSk6IFJlc3VsdDxtaXIuTmFtZWRCbG9ja3M+IHtcbiAgICBsZXQgbGlzdCA9IG5ldyBSZXN1bHRBcnJheShibG9ja3MuYmxvY2tzLm1hcCgoYikgPT4gdGhpcy5OYW1lZEJsb2NrKGIsIHN0YXRlKSkpO1xuXG4gICAgcmV0dXJuIGxpc3RcbiAgICAgIC50b0FycmF5KClcbiAgICAgIC5tYXBPaygobGlzdCkgPT4gbmV3IG1pci5OYW1lZEJsb2Nrcyh7IGxvYzogYmxvY2tzLmxvYywgYmxvY2tzOiBPcHRpb25hbExpc3QobGlzdCkgfSkpO1xuICB9XG5cbiAgTmFtZWRCbG9jayhuYW1lZDogQVNUdjIuTmFtZWRCbG9jaywgc3RhdGU6IE5vcm1hbGl6YXRpb25TdGF0ZSk6IFJlc3VsdDxtaXIuTmFtZWRCbG9jaz4ge1xuICAgIGxldCBib2R5ID0gc3RhdGUudmlzaXRCbG9jayhuYW1lZC5ibG9jayk7XG5cbiAgICByZXR1cm4gYm9keS5tYXBPaygoYm9keSkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBtaXIuTmFtZWRCbG9jayh7XG4gICAgICAgIGxvYzogbmFtZWQubG9jLFxuICAgICAgICBuYW1lOiBuYW1lZC5uYW1lLFxuICAgICAgICBib2R5OiBib2R5LnRvQXJyYXkoKSxcbiAgICAgICAgc2NvcGU6IG5hbWVkLmJsb2NrLnNjb3BlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBTaW1wbGVFbGVtZW50KGVsZW1lbnQ6IEFTVHYyLlNpbXBsZUVsZW1lbnQsIHN0YXRlOiBOb3JtYWxpemF0aW9uU3RhdGUpOiBSZXN1bHQ8bWlyLlN0YXRlbWVudD4ge1xuICAgIHJldHVybiBuZXcgQ2xhc3NpZmllZEVsZW1lbnQoXG4gICAgICBlbGVtZW50LFxuICAgICAgbmV3IENsYXNzaWZpZWRTaW1wbGVFbGVtZW50KGVsZW1lbnQudGFnLCBlbGVtZW50LCBoYXNEeW5hbWljRmVhdHVyZXMoZWxlbWVudCkpLFxuICAgICAgc3RhdGVcbiAgICApLnRvU3RhdGVtZW50KCk7XG4gIH1cblxuICBDb21wb25lbnQoY29tcG9uZW50OiBBU1R2Mi5JbnZva2VDb21wb25lbnQsIHN0YXRlOiBOb3JtYWxpemF0aW9uU3RhdGUpOiBSZXN1bHQ8bWlyLlN0YXRlbWVudD4ge1xuICAgIHJldHVybiBWSVNJVF9FWFBSUy52aXNpdChjb21wb25lbnQuY2FsbGVlLCBzdGF0ZSkuYW5kVGhlbigoY2FsbGVlKSA9PlxuICAgICAgbmV3IENsYXNzaWZpZWRFbGVtZW50KFxuICAgICAgICBjb21wb25lbnQsXG4gICAgICAgIG5ldyBDbGFzc2lmaWVkQ29tcG9uZW50KGNhbGxlZSwgY29tcG9uZW50KSxcbiAgICAgICAgc3RhdGVcbiAgICAgICkudG9TdGF0ZW1lbnQoKVxuICAgICk7XG4gIH1cblxuICBBcHBlbmRDb250ZW50KGFwcGVuZDogQVNUdjIuQXBwZW5kQ29udGVudCwgc3RhdGU6IE5vcm1hbGl6YXRpb25TdGF0ZSk6IFJlc3VsdDxtaXIuU3RhdGVtZW50PiB7XG4gICAgbGV0IHRyYW5zbGF0ZWQgPSBBUFBFTkRfS0VZV09SRFMudHJhbnNsYXRlKGFwcGVuZCwgc3RhdGUpO1xuXG4gICAgaWYgKHRyYW5zbGF0ZWQgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgIH1cblxuICAgIGxldCB2YWx1ZSA9IFZJU0lUX0VYUFJTLnZpc2l0KGFwcGVuZC52YWx1ZSwgc3RhdGUpO1xuXG4gICAgcmV0dXJuIHZhbHVlLm1hcE9rKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGFwcGVuZC50cnVzdGluZykge1xuICAgICAgICByZXR1cm4gbmV3IG1pci5BcHBlbmRUcnVzdGVkSFRNTCh7XG4gICAgICAgICAgbG9jOiBhcHBlbmQubG9jLFxuICAgICAgICAgIGh0bWw6IHZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgbWlyLkFwcGVuZFRleHROb2RlKHtcbiAgICAgICAgICBsb2M6IGFwcGVuZC5sb2MsXG4gICAgICAgICAgdGV4dDogdmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgVGV4dE5vZGUodGV4dDogQVNUdjIuSHRtbFRleHQpOiBtaXIuU3RhdGVtZW50IHtcbiAgICByZXR1cm4gbmV3IG1pci5BcHBlbmRUZXh0Tm9kZSh7XG4gICAgICBsb2M6IHRleHQubG9jLFxuICAgICAgdGV4dDogbmV3IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uKHsgbG9jOiB0ZXh0LmxvYywgdmFsdWU6IHRleHQuY2hhcnMgfSksXG4gICAgfSk7XG4gIH1cblxuICBIdG1sQ29tbWVudChjb21tZW50OiBBU1R2Mi5IdG1sQ29tbWVudCk6IG1pci5TdGF0ZW1lbnQge1xuICAgIHJldHVybiBuZXcgbWlyLkFwcGVuZENvbW1lbnQoe1xuICAgICAgbG9jOiBjb21tZW50LmxvYyxcbiAgICAgIHZhbHVlOiBjb21tZW50LnRleHQsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFZJU0lUX1NUTVRTID0gbmV3IE5vcm1hbGl6YXRpb25TdGF0ZW1lbnRzKCk7XG4iXSwic291cmNlUm9vdCI6IiJ9