@glimmer/compiler
Version:
181 lines (139 loc) • 17.3 kB
JavaScript
;
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