import * as plugins from './domtools.plugins'; import { LitElement } from 'lit-element'; export class ElementInstrumenter { connectedElements = new plugins.lik.ObjectMap(); public instrumentElement(elementArg: LitElement) { const originalConnectedCallback = elementArg.connectedCallback; const originalDisconnectedCallback = elementArg.disconnectedCallback; if (!elementArg.parentElement) { elementArg.connectedCallback = () => { this.connectedElements.add(elementArg); originalConnectedCallback.apply(elementArg); }; } else { this.connectedElements.add(elementArg); } elementArg.disconnectedCallback = () => { this.connectedElements.remove(elementArg); originalDisconnectedCallback.apply(elementArg); }; } public async forEachelement(eachFuncArg: (elementArg: LitElement) => Promise) { for (const elementArg of this.connectedElements.getArray()) { await eachFuncArg(elementArg); } } }