UNPKG

@metamask/polling-controller

Version:

Polling Controller is the base for controllers that polling by networkClientId

85 lines 4.11 kB
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; function $importDefault(module) { if (module?.__esModule) { return module.default; } return module; } import $stringify from "fast-json-stable-stringify"; const stringify = $importDefault($stringify); import { v4 as random } from "uuid"; export const getKey = (input) => stringify(input); /** * AbstractPollingControllerBaseMixin * * @param Base - The base class to mix onto. * @returns The composed class. */ // TODO: Either fix this lint violation or explain why it's necessary to ignore. // eslint-disable-next-line @typescript-eslint/naming-convention export function AbstractPollingControllerBaseMixin(Base) { var _AbstractPollingControllerBase_pollingTokenSets, _AbstractPollingControllerBase_callbacks; class AbstractPollingControllerBase extends Base { constructor() { super(...arguments); _AbstractPollingControllerBase_pollingTokenSets.set(this, new Map()); _AbstractPollingControllerBase_callbacks.set(this, new Map()); } startPolling(input) { const pollToken = random(); const key = getKey(input); const pollingTokenSet = __classPrivateFieldGet(this, _AbstractPollingControllerBase_pollingTokenSets, "f").get(key) ?? new Set(); pollingTokenSet.add(pollToken); __classPrivateFieldGet(this, _AbstractPollingControllerBase_pollingTokenSets, "f").set(key, pollingTokenSet); if (pollingTokenSet.size === 1) { this._startPolling(input); } return pollToken; } stopAllPolling() { __classPrivateFieldGet(this, _AbstractPollingControllerBase_pollingTokenSets, "f").forEach((tokenSet, _key) => { tokenSet.forEach((token) => { this.stopPollingByPollingToken(token); }); }); } stopPollingByPollingToken(pollingToken) { if (!pollingToken) { throw new Error('pollingToken required'); } let keyToDelete = null; for (const [key, tokenSet] of __classPrivateFieldGet(this, _AbstractPollingControllerBase_pollingTokenSets, "f")) { if (tokenSet.delete(pollingToken)) { if (tokenSet.size === 0) { keyToDelete = key; } break; } } if (keyToDelete) { this._stopPollingByPollingTokenSetId(keyToDelete); __classPrivateFieldGet(this, _AbstractPollingControllerBase_pollingTokenSets, "f").delete(keyToDelete); const callbacks = __classPrivateFieldGet(this, _AbstractPollingControllerBase_callbacks, "f").get(keyToDelete); if (callbacks) { for (const callback of callbacks) { callback(JSON.parse(keyToDelete)); } callbacks.clear(); } } } onPollingComplete(input, callback) { const key = getKey(input); const callbacks = __classPrivateFieldGet(this, _AbstractPollingControllerBase_callbacks, "f").get(key) ?? new Set(); callbacks.add(callback); __classPrivateFieldGet(this, _AbstractPollingControllerBase_callbacks, "f").set(key, callbacks); } } _AbstractPollingControllerBase_pollingTokenSets = new WeakMap(), _AbstractPollingControllerBase_callbacks = new WeakMap(); return AbstractPollingControllerBase; } //# sourceMappingURL=AbstractPollingController.mjs.map