UNPKG

@metamask/polling-controller

Version:

Polling Controller is the base for controllers that polling by networkClientId

86 lines 4.42 kB
"use strict"; 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); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AbstractPollingControllerBaseMixin = exports.getKey = void 0; const fast_json_stable_stringify_1 = __importDefault(require("fast-json-stable-stringify")); const uuid_1 = require("uuid"); const getKey = (input) => (0, fast_json_stable_stringify_1.default)(input); exports.getKey = getKey; /** * 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 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 = (0, uuid_1.v4)(); const key = (0, exports.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 = (0, exports.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; } exports.AbstractPollingControllerBaseMixin = AbstractPollingControllerBaseMixin; //# sourceMappingURL=AbstractPollingController.cjs.map