lit-analyzer
Version:
CLI that type checks bindings in lit-html templates
1,014 lines (1,013 loc) • 47.8 kB
JavaScript
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.HtmlDataSourceMerged = exports.HtmlDataSourceKind = void 0;
var html_tag_js_1 = require("../../parse/parse-html-data/html-tag.js");
var general_util_js_1 = require("../../util/general-util.js");
var iterable_util_js_1 = require("../../util/iterable-util.js");
var html_data_source_js_1 = require("./html-data-source.js");
var HtmlDataSourceKind;
(function (HtmlDataSourceKind) {
HtmlDataSourceKind[HtmlDataSourceKind["DECLARED"] = 0] = "DECLARED";
HtmlDataSourceKind[HtmlDataSourceKind["USER"] = 1] = "USER";
HtmlDataSourceKind[HtmlDataSourceKind["BUILT_IN"] = 2] = "BUILT_IN";
HtmlDataSourceKind[HtmlDataSourceKind["BUILT_IN_DECLARED"] = 3] = "BUILT_IN_DECLARED";
})(HtmlDataSourceKind || (exports.HtmlDataSourceKind = HtmlDataSourceKind = {}));
var HtmlDataSourceMerged = /** @class */ (function () {
function HtmlDataSourceMerged() {
this.subclassExtensions = new Map();
this.htmlDataSources = (function () {
var array = [];
array[HtmlDataSourceKind.BUILT_IN] = new html_data_source_js_1.HtmlDataSource();
array[HtmlDataSourceKind.BUILT_IN_DECLARED] = new html_data_source_js_1.HtmlDataSource();
array[HtmlDataSourceKind.USER] = new html_data_source_js_1.HtmlDataSource();
array[HtmlDataSourceKind.DECLARED] = new html_data_source_js_1.HtmlDataSource();
return array;
})();
this.combinedHtmlDataSource = new html_data_source_js_1.HtmlDataSource();
this.relatedForTagName = {
attrs: new Map(),
events: new Map(),
slots: new Map(),
props: new Map(),
cssParts: new Map(),
cssProperties: new Map()
};
}
Object.defineProperty(HtmlDataSourceMerged.prototype, "globalTags", {
get: function () {
return this.combinedHtmlDataSource.globalTags;
},
enumerable: false,
configurable: true
});
HtmlDataSourceMerged.prototype.invalidateCache = function (collection) {
var e_1, _a, e_2, _b;
var tags = collection.tags, _c = collection.global, attributes = _c.attributes, events = _c.events, cssParts = _c.cssParts;
if (tags && tags.length > 0) {
var allCaches = Object.values(this.relatedForTagName);
try {
for (var tags_1 = __values(tags), tags_1_1 = tags_1.next(); !tags_1_1.done; tags_1_1 = tags_1.next()) {
var tagName = tags_1_1.value;
try {
// Clear caches for the tag name
for (var allCaches_1 = (e_2 = void 0, __values(allCaches)), allCaches_1_1 = allCaches_1.next(); !allCaches_1_1.done; allCaches_1_1 = allCaches_1.next()) {
var map = allCaches_1_1.value;
map.delete(tagName);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (allCaches_1_1 && !allCaches_1_1.done && (_b = allCaches_1.return)) _b.call(allCaches_1);
}
finally { if (e_2) throw e_2.error; }
}
// "events", "css parts" and "css custom properties" are all considered "global" when returning matches
// Therefore we clear all caches if any invalidated tag included those
var tag = this.getHtmlTag(tagName);
if (tag != null) {
if ((tag.events.length || 0) > 0) {
this.relatedForTagName.events.clear();
}
if ((tag.cssParts.length || 0) > 0) {
this.relatedForTagName.cssParts.clear();
}
if ((tag.cssProperties.length || 0) > 0) {
this.relatedForTagName.cssProperties.clear();
}
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (tags_1_1 && !tags_1_1.done && (_a = tags_1.return)) _a.call(tags_1);
}
finally { if (e_1) throw e_1.error; }
}
}
if (attributes && attributes.length > 0) {
this.relatedForTagName.attrs.clear();
}
if (events && events.length > 0) {
this.relatedForTagName.events.clear();
}
if (cssParts && cssParts.length > 0) {
this.relatedForTagName.cssParts.clear();
}
};
HtmlDataSourceMerged.prototype.mergeDataSourcesAndInvalidate = function (collection) {
var e_3, _a, e_4, _b, e_5, _c, e_6, _d, e_7, _e, e_8, _f, e_9, _g;
var tags = collection.tags, _h = collection.global, events = _h.events, attributes = _h.attributes, properties = _h.properties, slots = _h.slots, cssParts = _h.cssParts, cssProperties = _h.cssProperties;
this.invalidateCache(collection);
if (tags != null) {
var _loop_1 = function (tagName) {
var allTags = (0, iterable_util_js_1.iterableDefined)(this_1.htmlDataSources.map(function (r) { return r.getGlobalTag(tagName); }));
if (allTags.length > 0) {
var mergedTags = allTags.length === 1 ? allTags : (0, html_tag_js_1.mergeHtmlTags)(allTags);
this_1.combinedHtmlDataSource.absorbCollection({ tags: mergedTags });
}
};
var this_1 = this;
try {
for (var tags_2 = __values(tags), tags_2_1 = tags_2.next(); !tags_2_1.done; tags_2_1 = tags_2.next()) {
var tagName = tags_2_1.value;
_loop_1(tagName);
}
}
catch (e_3_1) { e_3 = { error: e_3_1 }; }
finally {
try {
if (tags_2_1 && !tags_2_1.done && (_a = tags_2.return)) _a.call(tags_2);
}
finally { if (e_3) throw e_3.error; }
}
}
if (attributes != null) {
var _loop_2 = function (attrName) {
var allAttrs = (0, iterable_util_js_1.iterableDefined)(this_2.htmlDataSources.map(function (r) { return r.getGlobalAttribute(attrName); }));
if (allAttrs.length > 0) {
var mergedAttrs = allAttrs.length === 1 ? allAttrs : (0, html_tag_js_1.mergeHtmlAttrs)(allAttrs);
this_2.combinedHtmlDataSource.absorbCollection({ global: { attributes: mergedAttrs } });
}
};
var this_2 = this;
try {
for (var attributes_1 = __values(attributes), attributes_1_1 = attributes_1.next(); !attributes_1_1.done; attributes_1_1 = attributes_1.next()) {
var attrName = attributes_1_1.value;
_loop_2(attrName);
}
}
catch (e_4_1) { e_4 = { error: e_4_1 }; }
finally {
try {
if (attributes_1_1 && !attributes_1_1.done && (_b = attributes_1.return)) _b.call(attributes_1);
}
finally { if (e_4) throw e_4.error; }
}
}
if (events != null) {
var _loop_3 = function (eventName) {
var allEvents = (0, iterable_util_js_1.iterableDefined)(this_3.htmlDataSources.map(function (r) { return r.getGlobalEvent(eventName); }));
if (allEvents.length > 0) {
var mergedEvents = allEvents.length === 1 ? allEvents : (0, html_tag_js_1.mergeHtmlEvents)(allEvents);
this_3.combinedHtmlDataSource.absorbCollection({ global: { events: mergedEvents } });
}
};
var this_3 = this;
try {
for (var events_1 = __values(events), events_1_1 = events_1.next(); !events_1_1.done; events_1_1 = events_1.next()) {
var eventName = events_1_1.value;
_loop_3(eventName);
}
}
catch (e_5_1) { e_5 = { error: e_5_1 }; }
finally {
try {
if (events_1_1 && !events_1_1.done && (_c = events_1.return)) _c.call(events_1);
}
finally { if (e_5) throw e_5.error; }
}
}
if (properties != null) {
var _loop_4 = function (propName) {
var allProps = (0, iterable_util_js_1.iterableDefined)(this_4.htmlDataSources.map(function (r) { return r.getGlobalProperty(propName); }));
if (allProps.length > 0) {
var mergedProps = allProps.length === 1 ? allProps : (0, html_tag_js_1.mergeHtmlProps)(allProps);
this_4.combinedHtmlDataSource.absorbCollection({ global: { properties: mergedProps } });
}
};
var this_4 = this;
try {
for (var properties_1 = __values(properties), properties_1_1 = properties_1.next(); !properties_1_1.done; properties_1_1 = properties_1.next()) {
var propName = properties_1_1.value;
_loop_4(propName);
}
}
catch (e_6_1) { e_6 = { error: e_6_1 }; }
finally {
try {
if (properties_1_1 && !properties_1_1.done && (_d = properties_1.return)) _d.call(properties_1);
}
finally { if (e_6) throw e_6.error; }
}
}
if (slots != null) {
var _loop_5 = function (slotName) {
var allSlots = (0, iterable_util_js_1.iterableDefined)(this_5.htmlDataSources.map(function (r) { return r.getGlobalSlot(slotName); }));
if (allSlots.length > 0) {
var mergedSlots = allSlots.length === 1 ? allSlots : (0, html_tag_js_1.mergeHtmlSlots)(allSlots);
this_5.combinedHtmlDataSource.absorbCollection({ global: { slots: mergedSlots } });
}
};
var this_5 = this;
try {
for (var slots_1 = __values(slots), slots_1_1 = slots_1.next(); !slots_1_1.done; slots_1_1 = slots_1.next()) {
var slotName = slots_1_1.value;
_loop_5(slotName);
}
}
catch (e_7_1) { e_7 = { error: e_7_1 }; }
finally {
try {
if (slots_1_1 && !slots_1_1.done && (_e = slots_1.return)) _e.call(slots_1);
}
finally { if (e_7) throw e_7.error; }
}
}
if (cssProperties != null) {
var _loop_6 = function (cssPartName) {
var allCssProps = (0, iterable_util_js_1.iterableDefined)(this_6.htmlDataSources.map(function (r) { return r.getGlobalCssProperty(cssPartName); }));
if (allCssProps.length > 0) {
var mergedCssProps = allCssProps.length === 1 ? allCssProps : (0, html_tag_js_1.mergeCssProperties)(allCssProps);
this_6.combinedHtmlDataSource.absorbCollection({ global: { cssProperties: mergedCssProps } });
}
};
var this_6 = this;
try {
for (var cssProperties_1 = __values(cssProperties), cssProperties_1_1 = cssProperties_1.next(); !cssProperties_1_1.done; cssProperties_1_1 = cssProperties_1.next()) {
var cssPartName = cssProperties_1_1.value;
_loop_6(cssPartName);
}
}
catch (e_8_1) { e_8 = { error: e_8_1 }; }
finally {
try {
if (cssProperties_1_1 && !cssProperties_1_1.done && (_f = cssProperties_1.return)) _f.call(cssProperties_1);
}
finally { if (e_8) throw e_8.error; }
}
}
if (cssParts != null) {
var _loop_7 = function (cssPartName) {
var allCssParts = (0, iterable_util_js_1.iterableDefined)(this_7.htmlDataSources.map(function (r) { return r.getGlobalCssPart(cssPartName); }));
if (allCssParts.length > 0) {
var mergedCssParts = allCssParts.length === 1 ? allCssParts : (0, html_tag_js_1.mergeCssParts)(allCssParts);
this_7.combinedHtmlDataSource.absorbCollection({ global: { cssParts: mergedCssParts } });
}
};
var this_7 = this;
try {
for (var cssParts_1 = __values(cssParts), cssParts_1_1 = cssParts_1.next(); !cssParts_1_1.done; cssParts_1_1 = cssParts_1.next()) {
var cssPartName = cssParts_1_1.value;
_loop_7(cssPartName);
}
}
catch (e_9_1) { e_9 = { error: e_9_1 }; }
finally {
try {
if (cssParts_1_1 && !cssParts_1_1.done && (_g = cssParts_1.return)) _g.call(cssParts_1);
}
finally { if (e_9) throw e_9.error; }
}
}
};
HtmlDataSourceMerged.prototype.forgetCollection = function (collection, dataSource) {
if (dataSource == null) {
this.htmlDataSources.forEach(function (ds) { return ds.forgetCollection(collection); });
}
else {
this.htmlDataSources[dataSource].forgetCollection(collection);
}
this.mergeDataSourcesAndInvalidate(collection);
this.combinedHtmlDataSource.forgetCollection(collection);
};
HtmlDataSourceMerged.prototype.absorbCollection = function (collection, register) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
this.htmlDataSources[register].absorbCollection(collection);
this.mergeDataSourcesAndInvalidate({
tags: collection.tags.map(function (t) { return t.tagName; }),
global: {
events: (_b = (_a = collection.global) === null || _a === void 0 ? void 0 : _a.events) === null || _b === void 0 ? void 0 : _b.map(function (t) { return t.name; }),
attributes: (_d = (_c = collection.global) === null || _c === void 0 ? void 0 : _c.attributes) === null || _d === void 0 ? void 0 : _d.map(function (a) { return a.name; }),
properties: (_f = (_e = collection.global) === null || _e === void 0 ? void 0 : _e.properties) === null || _f === void 0 ? void 0 : _f.map(function (p) { return p.name; }),
slots: (_h = (_g = collection.global) === null || _g === void 0 ? void 0 : _g.slots) === null || _h === void 0 ? void 0 : _h.map(function (s) { return s.name; }),
cssParts: (_k = (_j = collection.global) === null || _j === void 0 ? void 0 : _j.cssParts) === null || _k === void 0 ? void 0 : _k.map(function (s) { return s.name; }),
cssProperties: (_m = (_l = collection.global) === null || _l === void 0 ? void 0 : _l.cssProperties) === null || _m === void 0 ? void 0 : _m.map(function (s) { return s.name; })
}
});
};
HtmlDataSourceMerged.prototype.getHtmlTag = function (tagName) {
return this.combinedHtmlDataSource.getGlobalTag(tagName);
};
HtmlDataSourceMerged.prototype.absorbSubclassExtension = function (name, extension) {
this.subclassExtensions.set(name, extension);
};
HtmlDataSourceMerged.prototype.getSubclassExtensions = function (tagName) {
// Right now, always return "HTMLElement" subclass extension
var extension = this.subclassExtensions.get("HTMLElement");
return extension != null ? [extension] : [];
};
HtmlDataSourceMerged.prototype.getAllAttributesForTag = function (tagName) {
if (!this.relatedForTagName.attrs.has(tagName)) {
this.relatedForTagName.attrs.set(tagName, mergeRelatedMembers(this.iterateAllAttributesForNode(tagName)));
}
return this.relatedForTagName.attrs.get(tagName);
};
HtmlDataSourceMerged.prototype.getAllPropertiesForTag = function (tagName) {
if (!this.relatedForTagName.props.has(tagName)) {
this.relatedForTagName.props.set(tagName, mergeRelatedMembers(this.iterateAllPropertiesForNode(tagName)));
}
return this.relatedForTagName.props.get(tagName);
};
HtmlDataSourceMerged.prototype.getAllEventsForTag = function (tagName) {
if (!this.relatedForTagName.events.has(tagName)) {
this.relatedForTagName.events.set(tagName, mergeRelatedEvents(this.iterateAllEventsForNode(tagName)));
}
return this.relatedForTagName.events.get(tagName);
};
HtmlDataSourceMerged.prototype.getAllSlotForTag = function (tagName) {
if (!this.relatedForTagName.slots.has(tagName)) {
this.relatedForTagName.slots.set(tagName, mergeRelatedSlots(this.iterateAllSlotsForNode(tagName)));
}
return this.relatedForTagName.slots.get(tagName);
};
HtmlDataSourceMerged.prototype.getAllCssPartsForTag = function (tagName) {
if (!this.relatedForTagName.cssParts.has(tagName)) {
this.relatedForTagName.cssParts.set(tagName, mergeRelatedCssParts(this.iterateAllCssPartsForNode(tagName)));
}
return this.relatedForTagName.cssParts.get(tagName);
};
HtmlDataSourceMerged.prototype.getAllCssPropertiesForTag = function (tagName) {
if (!this.relatedForTagName.cssProperties.has(tagName)) {
this.relatedForTagName.cssProperties.set(tagName, mergeRelatedCssProperties(this.iterateAllCssPropertiesForNode(tagName)));
}
return this.relatedForTagName.cssProperties.get(tagName);
};
HtmlDataSourceMerged.prototype.iterateGlobalAttributes = function () {
return this.combinedHtmlDataSource.globalAttributes.values();
};
HtmlDataSourceMerged.prototype.iterateGlobalEvents = function () {
return this.combinedHtmlDataSource.globalEvents.values();
};
HtmlDataSourceMerged.prototype.iterateGlobalProperties = function () {
return this.combinedHtmlDataSource.globalProperties.values();
};
HtmlDataSourceMerged.prototype.iterateGlobalSlots = function () {
return this.combinedHtmlDataSource.globalSlots.values();
};
HtmlDataSourceMerged.prototype.iterateGlobalCssParts = function () {
return this.combinedHtmlDataSource.globalCssParts.values();
};
HtmlDataSourceMerged.prototype.iterateGlobalCssProperties = function () {
return this.combinedHtmlDataSource.globalCssProperties.values();
};
HtmlDataSourceMerged.prototype.iterateAllPropertiesForNode = function (tagName) {
var htmlTag, extensions, extensions_1, extensions_1_1, extTag, e_10_1;
var e_10, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
htmlTag = this.getHtmlTag(tagName);
if (!(htmlTag != null)) return [3 /*break*/, 2];
return [5 /*yield**/, __values(htmlTag.properties)];
case 1:
_b.sent();
_b.label = 2;
case 2:
extensions = this.getSubclassExtensions(tagName);
_b.label = 3;
case 3:
_b.trys.push([3, 8, 9, 10]);
extensions_1 = __values(extensions), extensions_1_1 = extensions_1.next();
_b.label = 4;
case 4:
if (!!extensions_1_1.done) return [3 /*break*/, 7];
extTag = extensions_1_1.value;
return [5 /*yield**/, __values(extTag.properties)];
case 5:
_b.sent();
_b.label = 6;
case 6:
extensions_1_1 = extensions_1.next();
return [3 /*break*/, 4];
case 7: return [3 /*break*/, 10];
case 8:
e_10_1 = _b.sent();
e_10 = { error: e_10_1 };
return [3 /*break*/, 10];
case 9:
try {
if (extensions_1_1 && !extensions_1_1.done && (_a = extensions_1.return)) _a.call(extensions_1);
}
finally { if (e_10) throw e_10.error; }
return [7 /*endfinally*/];
case 10:
// Global propertjes
return [5 /*yield**/, __values(this.iterateGlobalProperties())];
case 11:
// Global propertjes
_b.sent();
return [2 /*return*/];
}
});
};
HtmlDataSourceMerged.prototype.iterateAllEventsForNode = function (tagName) {
var htmlTag, extensions, extensions_2, extensions_2_1, extTag, e_11_1, _a, _b, tag, e_12_1, eventNameSet, _c, _d, tag, _e, _f, evt, e_13_1, e_14_1, _g, _h, evt, e_15_1;
var e_11, _j, e_12, _k, e_14, _l, e_13, _m, e_15, _o;
return __generator(this, function (_p) {
switch (_p.label) {
case 0:
htmlTag = this.getHtmlTag(tagName);
if (!(htmlTag != null)) return [3 /*break*/, 2];
return [5 /*yield**/, __values(htmlTag.events)];
case 1:
_p.sent();
_p.label = 2;
case 2:
extensions = this.getSubclassExtensions(tagName);
_p.label = 3;
case 3:
_p.trys.push([3, 8, 9, 10]);
extensions_2 = __values(extensions), extensions_2_1 = extensions_2.next();
_p.label = 4;
case 4:
if (!!extensions_2_1.done) return [3 /*break*/, 7];
extTag = extensions_2_1.value;
return [5 /*yield**/, __values(extTag.events)];
case 5:
_p.sent();
_p.label = 6;
case 6:
extensions_2_1 = extensions_2.next();
return [3 /*break*/, 4];
case 7: return [3 /*break*/, 10];
case 8:
e_11_1 = _p.sent();
e_11 = { error: e_11_1 };
return [3 /*break*/, 10];
case 9:
try {
if (extensions_2_1 && !extensions_2_1.done && (_j = extensions_2.return)) _j.call(extensions_2);
}
finally { if (e_11) throw e_11.error; }
return [7 /*endfinally*/];
case 10:
if (!(htmlTag == null || htmlTag.events.length === 0)) return [3 /*break*/, 20];
_p.label = 11;
case 11:
_p.trys.push([11, 16, 17, 18]);
_a = __values(this.globalTags.values()), _b = _a.next();
_p.label = 12;
case 12:
if (!!_b.done) return [3 /*break*/, 15];
tag = _b.value;
if (!(tag.tagName !== tagName)) return [3 /*break*/, 14];
return [5 /*yield**/, __values(tag.events)];
case 13:
_p.sent();
_p.label = 14;
case 14:
_b = _a.next();
return [3 /*break*/, 12];
case 15: return [3 /*break*/, 18];
case 16:
e_12_1 = _p.sent();
e_12 = { error: e_12_1 };
return [3 /*break*/, 18];
case 17:
try {
if (_b && !_b.done && (_k = _a.return)) _k.call(_a);
}
finally { if (e_12) throw e_12.error; }
return [7 /*endfinally*/];
case 18:
// Global events
return [5 /*yield**/, __values(this.iterateGlobalEvents())];
case 19:
// Global events
_p.sent();
return [3 /*break*/, 41];
case 20:
eventNameSet = new Set(htmlTag.events.map(function (e) { return e.name; }));
_p.label = 21;
case 21:
_p.trys.push([21, 32, 33, 34]);
_c = __values(this.globalTags.values()), _d = _c.next();
_p.label = 22;
case 22:
if (!!_d.done) return [3 /*break*/, 31];
tag = _d.value;
if (!(tag.tagName !== tagName)) return [3 /*break*/, 30];
_p.label = 23;
case 23:
_p.trys.push([23, 28, 29, 30]);
_e = (e_13 = void 0, __values(tag.events)), _f = _e.next();
_p.label = 24;
case 24:
if (!!_f.done) return [3 /*break*/, 27];
evt = _f.value;
if (!!eventNameSet.has(evt.name)) return [3 /*break*/, 26];
return [4 /*yield*/, evt];
case 25:
_p.sent();
_p.label = 26;
case 26:
_f = _e.next();
return [3 /*break*/, 24];
case 27: return [3 /*break*/, 30];
case 28:
e_13_1 = _p.sent();
e_13 = { error: e_13_1 };
return [3 /*break*/, 30];
case 29:
try {
if (_f && !_f.done && (_m = _e.return)) _m.call(_e);
}
finally { if (e_13) throw e_13.error; }
return [7 /*endfinally*/];
case 30:
_d = _c.next();
return [3 /*break*/, 22];
case 31: return [3 /*break*/, 34];
case 32:
e_14_1 = _p.sent();
e_14 = { error: e_14_1 };
return [3 /*break*/, 34];
case 33:
try {
if (_d && !_d.done && (_l = _c.return)) _l.call(_c);
}
finally { if (e_14) throw e_14.error; }
return [7 /*endfinally*/];
case 34:
_p.trys.push([34, 39, 40, 41]);
_g = __values(this.iterateGlobalEvents()), _h = _g.next();
_p.label = 35;
case 35:
if (!!_h.done) return [3 /*break*/, 38];
evt = _h.value;
if (!!eventNameSet.has(evt.name)) return [3 /*break*/, 37];
return [4 /*yield*/, evt];
case 36:
_p.sent();
_p.label = 37;
case 37:
_h = _g.next();
return [3 /*break*/, 35];
case 38: return [3 /*break*/, 41];
case 39:
e_15_1 = _p.sent();
e_15 = { error: e_15_1 };
return [3 /*break*/, 41];
case 40:
try {
if (_h && !_h.done && (_o = _g.return)) _o.call(_g);
}
finally { if (e_15) throw e_15.error; }
return [7 /*endfinally*/];
case 41: return [2 /*return*/];
}
});
};
HtmlDataSourceMerged.prototype.iterateAllAttributesForNode = function (tagName) {
var htmlTag, extensions, extensions_3, extensions_3_1, extTag, e_16_1;
var e_16, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
htmlTag = this.getHtmlTag(tagName);
if (!(htmlTag != null)) return [3 /*break*/, 2];
return [5 /*yield**/, __values(htmlTag.attributes)];
case 1:
_b.sent();
_b.label = 2;
case 2:
extensions = this.getSubclassExtensions(tagName);
_b.label = 3;
case 3:
_b.trys.push([3, 8, 9, 10]);
extensions_3 = __values(extensions), extensions_3_1 = extensions_3.next();
_b.label = 4;
case 4:
if (!!extensions_3_1.done) return [3 /*break*/, 7];
extTag = extensions_3_1.value;
return [5 /*yield**/, __values(extTag.attributes)];
case 5:
_b.sent();
_b.label = 6;
case 6:
extensions_3_1 = extensions_3.next();
return [3 /*break*/, 4];
case 7: return [3 /*break*/, 10];
case 8:
e_16_1 = _b.sent();
e_16 = { error: e_16_1 };
return [3 /*break*/, 10];
case 9:
try {
if (extensions_3_1 && !extensions_3_1.done && (_a = extensions_3.return)) _a.call(extensions_3);
}
finally { if (e_16) throw e_16.error; }
return [7 /*endfinally*/];
case 10:
// Global attributes
return [5 /*yield**/, __values(this.iterateGlobalAttributes())];
case 11:
// Global attributes
_b.sent();
return [2 /*return*/];
}
});
};
HtmlDataSourceMerged.prototype.iterateAllSlotsForNode = function (tagName) {
var htmlTag, extensions, extensions_4, extensions_4_1, extTag, e_17_1;
var e_17, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
htmlTag = this.getHtmlTag(tagName);
if (!(htmlTag != null)) return [3 /*break*/, 2];
return [5 /*yield**/, __values(htmlTag.slots)];
case 1:
_b.sent();
_b.label = 2;
case 2:
extensions = this.getSubclassExtensions(tagName);
_b.label = 3;
case 3:
_b.trys.push([3, 8, 9, 10]);
extensions_4 = __values(extensions), extensions_4_1 = extensions_4.next();
_b.label = 4;
case 4:
if (!!extensions_4_1.done) return [3 /*break*/, 7];
extTag = extensions_4_1.value;
return [5 /*yield**/, __values(extTag.slots)];
case 5:
_b.sent();
_b.label = 6;
case 6:
extensions_4_1 = extensions_4.next();
return [3 /*break*/, 4];
case 7: return [3 /*break*/, 10];
case 8:
e_17_1 = _b.sent();
e_17 = { error: e_17_1 };
return [3 /*break*/, 10];
case 9:
try {
if (extensions_4_1 && !extensions_4_1.done && (_a = extensions_4.return)) _a.call(extensions_4);
}
finally { if (e_17) throw e_17.error; }
return [7 /*endfinally*/];
case 10:
// Global slots
return [5 /*yield**/, __values(this.iterateGlobalSlots())];
case 11:
// Global slots
_b.sent();
return [2 /*return*/];
}
});
};
HtmlDataSourceMerged.prototype.iterateAllCssPartsForNode = function (tagName) {
var _a, _b, tag, e_18_1, htmlTag, extensions, extensions_5, extensions_5_1, extTag, e_19_1;
var e_18, _c, e_19, _d;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
if (!(tagName === "")) return [3 /*break*/, 9];
_e.label = 1;
case 1:
_e.trys.push([1, 6, 7, 8]);
_a = __values(this.combinedHtmlDataSource.globalTags.values()), _b = _a.next();
_e.label = 2;
case 2:
if (!!_b.done) return [3 /*break*/, 5];
tag = _b.value;
return [5 /*yield**/, __values(tag.cssParts)];
case 3:
_e.sent();
_e.label = 4;
case 4:
_b = _a.next();
return [3 /*break*/, 2];
case 5: return [3 /*break*/, 8];
case 6:
e_18_1 = _e.sent();
e_18 = { error: e_18_1 };
return [3 /*break*/, 8];
case 7:
try {
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
}
finally { if (e_18) throw e_18.error; }
return [7 /*endfinally*/];
case 8: return [3 /*break*/, 11];
case 9:
htmlTag = this.getHtmlTag(tagName);
if (!(htmlTag != null)) return [3 /*break*/, 11];
return [5 /*yield**/, __values(htmlTag.cssParts)];
case 10:
_e.sent();
_e.label = 11;
case 11:
extensions = this.getSubclassExtensions(tagName);
_e.label = 12;
case 12:
_e.trys.push([12, 17, 18, 19]);
extensions_5 = __values(extensions), extensions_5_1 = extensions_5.next();
_e.label = 13;
case 13:
if (!!extensions_5_1.done) return [3 /*break*/, 16];
extTag = extensions_5_1.value;
return [5 /*yield**/, __values(extTag.cssParts)];
case 14:
_e.sent();
_e.label = 15;
case 15:
extensions_5_1 = extensions_5.next();
return [3 /*break*/, 13];
case 16: return [3 /*break*/, 19];
case 17:
e_19_1 = _e.sent();
e_19 = { error: e_19_1 };
return [3 /*break*/, 19];
case 18:
try {
if (extensions_5_1 && !extensions_5_1.done && (_d = extensions_5.return)) _d.call(extensions_5);
}
finally { if (e_19) throw e_19.error; }
return [7 /*endfinally*/];
case 19:
// Global slots
return [5 /*yield**/, __values(this.iterateGlobalCssParts())];
case 20:
// Global slots
_e.sent();
return [2 /*return*/];
}
});
};
HtmlDataSourceMerged.prototype.iterateAllCssPropertiesForNode = function (tagName) {
var _a, _b, tag, e_20_1, htmlTag, extensions, extensions_6, extensions_6_1, extTag, e_21_1;
var e_20, _c, e_21, _d;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
if (!(tagName === "")) return [3 /*break*/, 9];
_e.label = 1;
case 1:
_e.trys.push([1, 6, 7, 8]);
_a = __values(this.combinedHtmlDataSource.globalTags.values()), _b = _a.next();
_e.label = 2;
case 2:
if (!!_b.done) return [3 /*break*/, 5];
tag = _b.value;
return [5 /*yield**/, __values(tag.cssProperties)];
case 3:
_e.sent();
_e.label = 4;
case 4:
_b = _a.next();
return [3 /*break*/, 2];
case 5: return [3 /*break*/, 8];
case 6:
e_20_1 = _e.sent();
e_20 = { error: e_20_1 };
return [3 /*break*/, 8];
case 7:
try {
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
}
finally { if (e_20) throw e_20.error; }
return [7 /*endfinally*/];
case 8: return [3 /*break*/, 11];
case 9:
htmlTag = this.getHtmlTag(tagName);
if (!(htmlTag != null)) return [3 /*break*/, 11];
return [5 /*yield**/, __values(htmlTag.cssProperties)];
case 10:
_e.sent();
_e.label = 11;
case 11:
extensions = this.getSubclassExtensions(tagName);
_e.label = 12;
case 12:
_e.trys.push([12, 17, 18, 19]);
extensions_6 = __values(extensions), extensions_6_1 = extensions_6.next();
_e.label = 13;
case 13:
if (!!extensions_6_1.done) return [3 /*break*/, 16];
extTag = extensions_6_1.value;
return [5 /*yield**/, __values(extTag.cssProperties)];
case 14:
_e.sent();
_e.label = 15;
case 15:
extensions_6_1 = extensions_6.next();
return [3 /*break*/, 13];
case 16: return [3 /*break*/, 19];
case 17:
e_21_1 = _e.sent();
e_21 = { error: e_21_1 };
return [3 /*break*/, 19];
case 18:
try {
if (extensions_6_1 && !extensions_6_1.done && (_d = extensions_6.return)) _d.call(extensions_6);
}
finally { if (e_21) throw e_21.error; }
return [7 /*endfinally*/];
case 19:
// Global slots
return [5 /*yield**/, __values(this.iterateGlobalCssProperties())];
case 20:
// Global slots
_e.sent();
return [2 /*return*/];
}
});
};
return HtmlDataSourceMerged;
}());
exports.HtmlDataSourceMerged = HtmlDataSourceMerged;
function mergeRelatedMembers(members) {
var e_22, _a;
var mergedMembers = new Map();
var _loop_8 = function (member) {
// For now, lowercase all names because "parse5" doesn't distinguish between uppercase and lowercase
var name = member.name.toLowerCase();
var existingMember = mergedMembers.get(name);
if (existingMember == null) {
mergedMembers.set(name, member);
}
else {
var prevType_1 = existingMember.getType;
mergedMembers.set(name, __assign(__assign({}, existingMember), { description: undefined, required: existingMember.required && member.required, builtIn: existingMember.required && member.required, fromTagName: existingMember.fromTagName || member.fromTagName, getType: (0, general_util_js_1.lazy)(function () { return mergeRelatedTypeToUnion(prevType_1(), member.getType()); }), related: existingMember.related == null ? [existingMember, member] : __spreadArray(__spreadArray([], __read(existingMember.related), false), [member], false) }));
}
};
try {
for (var members_1 = __values(members), members_1_1 = members_1.next(); !members_1_1.done; members_1_1 = members_1.next()) {
var member = members_1_1.value;
_loop_8(member);
}
}
catch (e_22_1) { e_22 = { error: e_22_1 }; }
finally {
try {
if (members_1_1 && !members_1_1.done && (_a = members_1.return)) _a.call(members_1);
}
finally { if (e_22) throw e_22.error; }
}
return mergedMembers;
}
function mergeRelatedTypeToUnion(typeA, typeB) {
if (typeA.kind === typeB.kind) {
switch (typeA.kind) {
case "ANY":
return typeA;
}
}
switch (typeA.kind) {
case "UNION":
if (typeB.kind === "ANY" && typeA.types.find(function (t) { return t.kind === "ANY"; }) != null) {
return typeA;
}
else {
return __assign(__assign({}, typeA), { types: __spreadArray(__spreadArray([], __read(typeA.types), false), [typeB], false) });
}
}
return {
kind: "UNION",
types: [typeA, typeB]
};
}
function mergeNamedRelated(items) {
var e_23, _a;
var merged = new Map();
try {
for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {
var item = items_1_1.value;
// For now, lowercase all names because "parse5" doesn't distinguish between uppercase and lowercase
var name = item.name.toLowerCase();
var existingItem = merged.get(name);
if (existingItem != null) {
merged.set(name, __assign(__assign({}, item), { related: existingItem.related == null ? [existingItem, item] : [existingItem.related, item] }));
}
else {
merged.set(name, item);
}
}
}
catch (e_23_1) { e_23 = { error: e_23_1 }; }
finally {
try {
if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);
}
finally { if (e_23) throw e_23.error; }
}
return merged;
}
function mergeRelatedSlots(slots) {
return mergeNamedRelated(slots);
}
function mergeRelatedCssParts(cssParts) {
return mergeNamedRelated(cssParts);
}
function mergeRelatedCssProperties(cssProperties) {
return mergeNamedRelated(cssProperties);
}
function mergeRelatedEvents(events) {
var e_24, _a;
var mergedAttrs = new Map();
var _loop_9 = function (event) {
// For now, lowercase all names because "parse5" doesn't distinguish between uppercase and lowercase
var name = event.name.toLowerCase();
var existingEvent = mergedAttrs.get(name);
if (existingEvent == null) {
mergedAttrs.set(name, event);
}
else {
var prevType_2 = existingEvent.getType;
mergedAttrs.set(name, __assign(__assign({}, existingEvent), { global: existingEvent.global && event.global, description: undefined, getType: (0, general_util_js_1.lazy)(function () { return mergeRelatedTypeToUnion(prevType_2(), event.getType()); }), related: existingEvent.related == null ? [existingEvent, event] : __spreadArray(__spreadArray([], __read(existingEvent.related), false), [event], false), fromTagName: existingEvent.fromTagName || event.fromTagName }));
}
};
try {
for (var events_2 = __values(events), events_2_1 = events_2.next(); !events_2_1.done; events_2_1 = events_2.next()) {
var event = events_2_1.value;
_loop_9(event);
}
}
catch (e_24_1) { e_24 = { error: e_24_1 }; }
finally {
try {
if (events_2_1 && !events_2_1.done && (_a = events_2.return)) _a.call(events_2);
}
finally { if (e_24) throw e_24.error; }
}
return mergedAttrs;
}