UNPKG

@tai-kun/surrealdb

Version:

The SurrealDB SDK for JavaScript

125 lines (123 loc) 14.4 kB
var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); // src/utils/task-emitter.ts import StatefulPromise from "./stateful-promise.mjs"; import TaskQueue from "./task-queue.mjs"; var _TaskEmitter = class _TaskEmitter { constructor() { this._queue = new TaskQueue(); this._listeners = /* @__PURE__ */ new Map(); } /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-emitter/#on) */ on(event, listener) { let listeners = this._listeners.get(event); if (!listeners?.find(({ original }) => original === listener)) { if (!listeners) { this._listeners.set(event, listeners = []); } listeners.push({ original: listener, dispatch: /* @__PURE__ */ __name((args) => this._queue.add((rArgs) => listener.apply(this, [rArgs, ...args])), "dispatch") }); } } /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-emitter/#off) */ off(event, listener) { const listeners = this._listeners.get(event); if (listeners) { if (listener) { const i = listeners.findIndex(({ original }) => original === listener); if (i >= 0) { listeners.splice(i, 1); if (listeners.length === 0) { this._listeners.delete(event); } } } else { this._listeners.delete(event); } } } /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-emitter/#once) */ once(event, options = {}) { let cancelFn; const promise = new StatefulPromise( (resolve, reject) => { const { signal } = options; if (signal?.aborted) { reject(signal.reason); return; } const removeAllListeners = /* @__PURE__ */ __name(() => { signal?.removeEventListener("abort", abortHandler); this.off(event, taskListener); }, "removeAllListeners"); const taskListener = /* @__PURE__ */ __name((_, ...args) => { removeAllListeners(); resolve(args); }, "taskListener"); const abortHandler = /* @__PURE__ */ __name(() => { this.off(event, taskListener); reject(signal.reason); }, "abortHandler"); cancelFn = /* @__PURE__ */ __name(function cancel() { removeAllListeners(); if (this.state === "pending") { reject("canceled"); } return this.then(() => { }, () => { }); }, "cancel"); try { this.on(event, taskListener); signal?.addEventListener("abort", abortHandler, { once: true }); } catch (e) { try { signal?.removeEventListener("abort", abortHandler); } catch { } try { this.off(event, taskListener); } catch { } reject(e); } } ); return Object.assign(promise, { cancel: cancelFn.bind(promise) }); } /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-emitter/#emit) */ emit(event, ...args) { const listeners = this._listeners.get(event); return listeners && listeners.slice().map(({ dispatch }) => dispatch(args)); } /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-emitter/#idle) */ idle() { return this._queue.idle(); } /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-emitter/#abort) */ abort(reason) { this._queue.abort(reason); } }; __name(_TaskEmitter, "TaskEmitter"); var TaskEmitter = _TaskEmitter; export { TaskEmitter as default }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL3Rhc2stZW1pdHRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IFN0YXRlZnVsUHJvbWlzZSBmcm9tIFwiLi9zdGF0ZWZ1bC1wcm9taXNlXCI7XG5pbXBvcnQgVGFza1F1ZXVlLCB7IHR5cGUgVGFza09wdGlvbnMsIHR5cGUgVGFza1J1bm5lckFyZ3MgfSBmcm9tIFwiLi90YXNrLXF1ZXVlXCI7XG5cbmludGVyZmFjZSBUeXBlZE1hcDxUPiB7XG4gIGNsZWFyKCk6IHZvaWQ7XG4gIGRlbGV0ZShrZXk6IGtleW9mIFQpOiBib29sZWFuO1xuICBnZXQ8VEV2ZW50IGV4dGVuZHMga2V5b2YgVD4oa2V5OiBURXZlbnQpOiBUW1RFdmVudF0gfCB1bmRlZmluZWQ7XG4gIHNldDxURXZlbnQgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IFRFdmVudCwgdmFsdWU6IFRbVEV2ZW50XSk6IHRoaXM7XG4gIGtleXMoKTogSXRlcmFibGVJdGVyYXRvcjxrZXlvZiBUPjtcbn1cblxuLyoqXG4gKiBbQVBJIFJlZmVyZW5jZV0oaHR0cHM6Ly90YWkta3VuLmdpdGh1Yi5pby9zdXJyZWFsZGIuanMvdjIvYXBpL3V0aWxzL3Rhc2stZW1pdHRlci8pXG4gKi9cbmV4cG9ydCB0eXBlIFRhc2tMaXN0ZW5lcjxUQXJncyBleHRlbmRzIHVua25vd25bXT4gPSAoXG4gIHJ1bm5lckFyZ3M6IFRhc2tSdW5uZXJBcmdzLFxuICAuLi5hcmdzOiBUQXJnc1xuKSA9PiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD47XG5cbi8qKlxuICogW0FQSSBSZWZlcmVuY2VdKGh0dHBzOi8vdGFpLWt1bi5naXRodWIuaW8vc3VycmVhbGRiLmpzL3YyL2FwaS91dGlscy90YXNrLWVtaXR0ZXIvI29uY2UpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFza0xpc3RlbmVyT3B0aW9ucyBleHRlbmRzIFRhc2tPcHRpb25zIHt9XG5cbi8qKlxuICogW0FQSSBSZWZlcmVuY2VdKGh0dHBzOi8vdGFpLWt1bi5naXRodWIuaW8vc3VycmVhbGRiLmpzL3YyL2FwaS91dGlscy90YXNrLWVtaXR0ZXIvKVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYXNrRW1pdHRlcjxcbiAgVEV2ZW50TWFwIGV4dGVuZHMgUmVjb3JkPHN0cmluZyB8IG51bWJlciwgdW5rbm93bltdPixcbj4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3F1ZXVlID0gbmV3IFRhc2tRdWV1ZSgpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2xpc3RlbmVycyA9IG5ldyBNYXAoKSBhcyBUeXBlZE1hcDxcbiAgICB7XG4gICAgICBbUCBpbiBrZXlvZiBURXZlbnRNYXBdOiB7XG4gICAgICAgIG9yaWdpbmFsOiBUYXNrTGlzdGVuZXI8VEV2ZW50TWFwW1BdPjtcbiAgICAgICAgZGlzcGF0Y2g6IChhcmdzOiBURXZlbnRNYXBbUF0pID0+IFN0YXRlZnVsUHJvbWlzZTx1bmtub3duPjtcbiAgICAgIH1bXTtcbiAgICB9XG4gID47XG5cbiAgLyoqXG4gICAqIFtBUEkgUmVmZXJlbmNlXShodHRwczovL3RhaS1rdW4uZ2l0aHViLmlvL3N1cnJlYWxkYi5qcy92Mi9hcGkvdXRpbHMvdGFzay1lbWl0dGVyLyNvbilcbiAgICovXG4gIG9uPFRFdmVudCBleHRlbmRzIGtleW9mIFRFdmVudE1hcD4oXG4gICAgdGhpczogdGhpcyxcbiAgICBldmVudDogVEV2ZW50LFxuICAgIGxpc3RlbmVyOiBUYXNrTGlzdGVuZXI8VEV2ZW50TWFwW1RFdmVudF0+LFxuICApOiB2b2lkIHtcbiAgICBsZXQgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzLmdldChldmVudCk7XG5cbiAgICBpZiAoIWxpc3RlbmVycz8uZmluZCgoeyBvcmlnaW5hbCB9KSA9PiBvcmlnaW5hbCA9PT0gbGlzdGVuZXIpKSB7XG4gICAgICBpZiAoIWxpc3RlbmVycykge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnMuc2V0KGV2ZW50LCBsaXN0ZW5lcnMgPSBbXSk7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycy5wdXNoKHtcbiAgICAgICAgb3JpZ2luYWw6IGxpc3RlbmVyLFxuICAgICAgICBkaXNwYXRjaDogYXJncyA9PlxuICAgICAgICAgIHRoaXMuX3F1ZXVlLmFkZChyQXJncyA9PiBsaXN0ZW5lci5hcHBseSh0aGlzLCBbckFyZ3MsIC4uLmFyZ3NdKSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogW0FQSSBSZWZlcmVuY2VdKGh0dHBzOi8vdGFpLWt1bi5naXRodWIuaW8vc3VycmVhbGRiLmpzL3YyL2FwaS91dGlscy90YXNrLWVtaXR0ZXIvI29mZilcbiAgICovXG4gIG9mZjxURXZlbnQgZXh0ZW5kcyBrZXlvZiBURXZlbnRNYXA+KFxuICAgIGV2ZW50OiBURXZlbnQsXG4gICAgbGlzdGVuZXI/OiBUYXNrTGlzdGVuZXI8VEV2ZW50TWFwW1RFdmVudF0+LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnMuZ2V0KGV2ZW50KTtcblxuICAgIGlmIChsaXN0ZW5lcnMpIHtcbiAgICAgIGlmIChsaXN0ZW5lcikge1xuICAgICAgICBjb25zdCBpID0gbGlzdGVuZXJzLmZpbmRJbmRleCgoeyBvcmlnaW5hbCB9KSA9PiBvcmlnaW5hbCA9PT0gbGlzdGVuZXIpO1xuXG4gICAgICAgIGlmIChpID49IDApIHtcbiAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuXG4gICAgICAgICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVycy5kZWxldGUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzLmRlbGV0ZShldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFtBUEkgUmVmZXJlbmNlXShodHRwczovL3RhaS1rdW4uZ2l0aHViLmlvL3N1cnJlYWxkYi5qcy92Mi9hcGkvdXRpbHMvdGFzay1lbWl0dGVyLyNvbmNlKVxuICAgKi9cbiAgb25jZTxURXZlbnQgZXh0ZW5kcyBrZXlvZiBURXZlbnRNYXA+KFxuICAgIGV2ZW50OiBURXZlbnQsXG4gICAgb3B0aW9uczogVGFza0xpc3RlbmVyT3B0aW9ucyB8IHVuZGVmaW5lZCA9IHt9LFxuICApOiBTdGF0ZWZ1bFByb21pc2U8VEV2ZW50TWFwW1RFdmVudF0+ICYge1xuICAgIHJlYWRvbmx5IGNhbmNlbDogKCkgPT4gU3RhdGVmdWxQcm9taXNlPHZvaWQ+O1xuICB9IHtcbiAgICBsZXQgY2FuY2VsRm46ICgpID0+IFN0YXRlZnVsUHJvbWlzZTx2b2lkPjtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFN0YXRlZnVsUHJvbWlzZTxURXZlbnRNYXBbVEV2ZW50XT4oXG4gICAgICAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2lnbmFsIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlQWxsTGlzdGVuZXJzID0gKCkgPT4ge1xuICAgICAgICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgICAgICAgdGhpcy5vZmYoZXZlbnQsIHRhc2tMaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRhc2tMaXN0ZW5lcjogVGFza0xpc3RlbmVyPFRFdmVudE1hcFtURXZlbnRdPiA9IChcbiAgICAgICAgICBfLFxuICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgKSA9PiB7XG4gICAgICAgICAgcmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWJvcnRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMub2ZmKGV2ZW50LCB0YXNrTGlzdGVuZXIpO1xuICAgICAgICAgIHJlamVjdChzaWduYWwhLnJlYXNvbik7XG4gICAgICAgIH07XG4gICAgICAgIGNhbmNlbEZuID0gZnVuY3Rpb24gY2FuY2VsKFxuICAgICAgICAgIHRoaXM6IFN0YXRlZnVsUHJvbWlzZTxURXZlbnRNYXBbVEV2ZW50XT4sXG4gICAgICAgICkge1xuICAgICAgICAgIHJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFwicGVuZGluZ1wiKSB7XG4gICAgICAgICAgICByZWplY3QoXCJjYW5jZWxlZFwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy50aGVuKCgpID0+IHt9LCAoKSA9PiB7fSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLm9uKGV2ZW50LCB0YXNrTGlzdGVuZXIpO1xuICAgICAgICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgICAgICAgfSBjYXRjaCB7fVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMub2ZmKGV2ZW50LCB0YXNrTGlzdGVuZXIpO1xuICAgICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJvbWlzZSwge1xuICAgICAgY2FuY2VsOiBjYW5jZWxGbiEuYmluZChwcm9taXNlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbQVBJIFJlZmVyZW5jZV0oaHR0cHM6Ly90YWkta3VuLmdpdGh1Yi5pby9zdXJyZWFsZGIuanMvdjIvYXBpL3V0aWxzL3Rhc2stZW1pdHRlci8jZW1pdClcbiAgICovXG4gIGVtaXQ8VEV2ZW50IGV4dGVuZHMga2V5b2YgVEV2ZW50TWFwPihcbiAgICBldmVudDogVEV2ZW50LFxuICAgIC4uLmFyZ3M6IFRFdmVudE1hcFtURXZlbnRdXG4gICk6IHVuZGVmaW5lZCB8IFN0YXRlZnVsUHJvbWlzZTx1bmtub3duPltdIHtcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnMuZ2V0KGV2ZW50KTtcblxuICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICAgIC8vIFx1MzBCM1x1MzBENFx1MzBGQ1x1MzA1N1x1MzA2QVx1MzA0NFx1MzA2OCAub25jZSgpIFx1NTE4NVx1MzA2NyB0aGlzLm9mZigpIFx1MzA0Q1x1NTQ3Q1x1MzA3MFx1MzA4Q1x1MzA1Rlx1MzA2OFx1MzA0RCB0aGlzLl9saXN0ZW5lcnMgXHUzMDRDXHU1OTA5XHU2NkY0XHUzMDU1XHUzMDhDXHUzMDhCXG4gICAgICAvLyBcdTMwNkVcdTMwNjdcdTMwMDFcdTRFMDBcdTkwRThcdTMwNkVcdTMwQTRcdTMwRDlcdTMwRjNcdTMwQzhcdTMwRUFcdTMwQjlcdTMwQ0FcdTMwRkNcdTMwNENcdTU0N0NcdTMwNzNcdTUxRkFcdTMwNTVcdTMwOENcdTMwNkFcdTMwNEJcdTMwNjNcdTMwNUZcdTMwOEFcdTMwMDFcdTZCOEJcdTc1NTlcdTMwNTdcdTMwNkFcdTMwNEJcdTMwNjNcdTMwNUZcdTMwOEFcdTMwNTlcdTMwOEJcdTMwMDJcbiAgICAgICYmIGxpc3RlbmVycy5zbGljZSgpLm1hcCgoeyBkaXNwYXRjaCB9KSA9PiBkaXNwYXRjaChhcmdzKSk7XG4gIH1cblxuICAvKipcbiAgICogW0FQSSBSZWZlcmVuY2VdKGh0dHBzOi8vdGFpLWt1bi5naXRodWIuaW8vc3VycmVhbGRiLmpzL3YyL2FwaS91dGlscy90YXNrLWVtaXR0ZXIvI2lkbGUpXG4gICAqL1xuICBpZGxlKCk6IFN0YXRlZnVsUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmlkbGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbQVBJIFJlZmVyZW5jZV0oaHR0cHM6Ly90YWkta3VuLmdpdGh1Yi5pby9zdXJyZWFsZGIuanMvdjIvYXBpL3V0aWxzL3Rhc2stZW1pdHRlci8jYWJvcnQpXG4gICAqL1xuICBhYm9ydChyZWFzb24/OiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5fcXVldWUuYWJvcnQocmVhc29uKTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7OztBQUFBLE9BQU8scUJBQXFCO0FBQzVCLE9BQU8sZUFBMEQ7QUEwQmpFLElBQXFCLGVBQXJCLE1BQXFCLGFBRW5CO0FBQUEsRUFGRjtBQUdFLFNBQW1CLFNBQVMsSUFBSSxVQUFVO0FBQzFDLFNBQW1CLGFBQWEsb0JBQUksSUFBSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFZeEMsR0FFRSxPQUNBLFVBQ007QUFDTixRQUFJLFlBQVksS0FBSyxXQUFXLElBQUksS0FBSztBQUV6QyxRQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsRUFBRSxTQUFTLE1BQU0sYUFBYSxRQUFRLEdBQUc7QUFDN0QsVUFBSSxDQUFDLFdBQVc7QUFDZCxhQUFLLFdBQVcsSUFBSSxPQUFPLFlBQVksQ0FBQyxDQUFDO0FBQUEsTUFDM0M7QUFFQSxnQkFBVSxLQUFLO0FBQUEsUUFDYixVQUFVO0FBQUEsUUFDVixVQUFVLGlDQUNSLEtBQUssT0FBTyxJQUFJLFdBQVMsU0FBUyxNQUFNLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FEdkQ7QUFBQSxNQUVaLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsSUFDRSxPQUNBLFVBQ007QUFDTixVQUFNLFlBQVksS0FBSyxXQUFXLElBQUks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