UNPKG

@thepassle/axobject-query

Version:

Programmatic access to information about the AXObject Model

46 lines (45 loc) 1.58 kB
import iterationDecorator from "./util/iterationDecorator.js"; import AXObjects from "./AXObjectsMap.js"; const AXObjectElements = []; for (let [name, def] of AXObjects.entries()) { const relatedConcepts = def.relatedConcepts; if (Array.isArray(relatedConcepts)) { relatedConcepts.forEach((relation) => { if (relation.module === "HTML") { const concept = relation.concept; if (concept) { let index = AXObjectElements.findIndex(([key]) => key === name); if (index === -1) { AXObjectElements.push([name, []]); index = AXObjectElements.length - 1; } AXObjectElements[index][1].push(concept); } } }); } } const AXObjectElementMap = { entries: function () { return AXObjectElements; }, forEach: function (fn, thisArg = null) { for (let [key, values] of AXObjectElements) { fn.call(thisArg, values, key, AXObjectElements); } }, get: function (key) { const item = AXObjectElements.find((tuple) => tuple[0] === key); return item && item[1]; }, has: function (key) { return !!AXObjectElementMap.get(key); }, keys: function () { return AXObjectElements.map(([key]) => key); }, values: function () { return AXObjectElements.map(([, values]) => values); }, }; export default iterationDecorator(AXObjectElementMap, AXObjectElementMap.entries());