UNPKG

@tai-kun/surrealdb

Version:

The SurrealDB SDK for JavaScript

80 lines (78 loc) 7.28 kB
var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); // src/utils/task-queue.ts import makeAbortApi from "./make-abort-api.mjs"; import StatefulPromise from "./stateful-promise.mjs"; var _TaskQueue = class _TaskQueue { constructor() { this._queue = []; this._idle = []; } rm(task) { const i = this._queue.indexOf(task); if (i >= 0) { this._queue.splice(i, 1); if (this._queue.length <= 0) { while (this._idle.length > 0) { this._idle.shift()(); } } } } /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-queue/#count) */ get count() { return this._queue.length; } /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-queue/#add) */ add(runner, options = {}) { let signal, abort; try { [signal, abort] = makeAbortApi(options.signal); } catch (e) { return StatefulPromise.reject(e); } const task = {}; task.abort = abort; task.promise = StatefulPromise.try(runner, { signal }).then( (x) => { this.rm(task); return x; }, (e) => { this.rm(task); throw e; } ); this._queue.push(task); return task.promise; } /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-queue/#idle) */ idle() { if (this._queue.length <= 0) { return StatefulPromise.resolve(); } return new StatefulPromise((resolve) => { this._idle.push(resolve); }); } /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-queue/#abort) */ abort(reason) { for (const t of this._queue) { t.abort(reason); } } }; __name(_TaskQueue, "TaskQueue"); var TaskQueue = _TaskQueue; export { TaskQueue as default }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL3Rhc2stcXVldWUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCBtYWtlQWJvcnRBcGkgZnJvbSBcIi4vbWFrZS1hYm9ydC1hcGlcIjtcbmltcG9ydCBTdGF0ZWZ1bFByb21pc2UgZnJvbSBcIi4vc3RhdGVmdWwtcHJvbWlzZVwiO1xuXG5pbnRlcmZhY2UgVGFzazxUVmFsdWUgPSB1bmtub3duPiB7XG4gIHJlYWRvbmx5IHByb21pc2U6IFN0YXRlZnVsUHJvbWlzZTxUVmFsdWU+O1xuICByZWFkb25seSBhYm9ydDogKHJlYXNvbj86IHVua25vd24pID0+IHZvaWQ7XG59XG5cbi8qKlxuICogW0FQSSBSZWZlcmVuY2VdKGh0dHBzOi8vdGFpLWt1bi5naXRodWIuaW8vc3VycmVhbGRiLmpzL3YyL2FwaS91dGlscy90YXNrLXF1ZXVlLyNhZGQpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFza1J1bm5lckFyZ3Mge1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xufVxuXG4vKipcbiAqIFtBUEkgUmVmZXJlbmNlXShodHRwczovL3RhaS1rdW4uZ2l0aHViLmlvL3N1cnJlYWxkYi5qcy92Mi9hcGkvdXRpbHMvdGFzay1xdWV1ZS8jYWRkKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tPcHRpb25zIHtcbiAgcmVhZG9ubHkgc2lnbmFsPzogQWJvcnRTaWduYWwgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogW0FQSSBSZWZlcmVuY2VdKGh0dHBzOi8vdGFpLWt1bi5naXRodWIuaW8vc3VycmVhbGRiLmpzL3YyL2FwaS91dGlscy90YXNrLXF1ZXVlLylcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFza1F1ZXVlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9xdWV1ZTogVGFza1tdID0gW107XG4gIHByb3RlY3RlZCByZWFkb25seSBfaWRsZTogKCgpID0+IHZvaWQpW10gPSBbXTtcblxuICBwcm90ZWN0ZWQgcm0odGFzazogVGFzayk6IHZvaWQge1xuICAgIGNvbnN0IGkgPSB0aGlzLl9xdWV1ZS5pbmRleE9mKHRhc2spO1xuXG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5fcXVldWUuc3BsaWNlKGksIDEpO1xuXG4gICAgICBpZiAodGhpcy5fcXVldWUubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2lkbGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuX2lkbGUuc2hpZnQoKSEoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBbQVBJIFJlZmVyZW5jZV0oaHR0cHM6Ly90YWkta3VuLmdpdGh1Yi5pby9zdXJyZWFsZGIuanMvdjIvYXBpL3V0aWxzL3Rhc2stcXVldWUvI2NvdW50KVxuICAgKi9cbiAgZ2V0IGNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBbQVBJIFJlZmVyZW5jZV0oaHR0cHM6Ly90YWkta3VuLmdpdGh1Yi5pby9zdXJyZWFsZGIuanMvdjIvYXBpL3V0aWxzL3Rhc2stcXVldWUvI2FkZClcbiAgICovXG4gIGFkZDxUVmFsdWU+KFxuICAgIHJ1bm5lcjogKGFyZ3M6IFRhc2tSdW5uZXJBcmdzKSA9PiBUVmFsdWUgfCBQcm9taXNlTGlrZTxUVmFsdWU+LFxuICAgIG9wdGlvbnM6IFRhc2tPcHRpb25zIHwgdW5kZWZpbmVkID0ge30sXG4gICk6IFN0YXRlZnVsUHJvbWlzZTxUVmFsdWU+IHtcbiAgICBsZXQgc2lnbmFsOiBBYm9ydFNpZ25hbCwgYWJvcnQ6IChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkO1xuXG4gICAgdHJ5IHtcbiAgICAgIFtzaWduYWwsIGFib3J0XSA9IG1ha2VBYm9ydEFwaShvcHRpb25zLnNpZ25hbCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIFN0YXRlZnVsUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGFzayA9IHt9IGFzIHsgLXJlYWRvbmx5IFtQIGluIGtleW9mIFRhc2s8VFZhbHVlPl06IFRhc2s8VFZhbHVlPltQXSB9O1xuICAgIHRhc2suYWJvcnQgPSBhYm9ydDtcbiAgICB0YXNrLnByb21pc2UgPSBTdGF0ZWZ1bFByb21pc2UudHJ5KHJ1bm5lciwgeyBzaWduYWwgfSkudGhlbihcbiAgICAgICh4KTogVFZhbHVlID0+IHtcbiAgICAgICAgdGhpcy5ybSh0YXNrKTtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgICB9LFxuICAgICAgKGUpOiBuZXZlciA9PiB7XG4gICAgICAgIHRoaXMucm0odGFzayk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9LFxuICAgICk7XG4gICAgdGhpcy5fcXVldWUucHVzaCh0YXNrKTtcblxuICAgIHJldHVybiB0YXNrLnByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogW0FQSSBSZWZlcmVuY2VdKGh0dHBzOi8vdGFpLWt1bi5naXRodWIuaW8vc3VycmVhbGRiLmpzL3YyL2FwaS91dGlscy90YXNrLXF1ZXVlLyNpZGxlKVxuICAgKi9cbiAgaWRsZSgpOiBTdGF0ZWZ1bFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9xdWV1ZS5sZW5ndGggPD0gMCkge1xuICAgICAgcmV0dXJuIFN0YXRlZnVsUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTdGF0ZWZ1bFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLl9pZGxlLnB1c2gocmVzb2x2ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogW0FQSSBSZWZlcmVuY2VdKGh0dHBzOi8vdGFpLWt1bi5naXRodWIuaW8vc3VycmVhbGRiLmpzL3YyL2FwaS91dGlscy90YXNrLXF1ZXVlLyNhYm9ydClcbiAgICovXG4gIGFib3J0KHJlYXNvbj86IHVua25vd24pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHQgb2YgdGhpcy5fcXVldWUpIHtcbiAgICAgIHQuYWJvcnQocmVhc29uKTtcbiAgICB9XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7QUFBQSxPQUFPLGtCQUFrQjtBQUN6QixPQUFPLHFCQUFxQjtBQXdCNUIsSUFBcUIsYUFBckIsTUFBcUIsV0FBVTtBQUFBLEVBQS9CO0FBQ0UsU0FBbUIsU0FBaUIsQ0FBQztBQUNyQyxTQUFtQixRQUF3QixDQUFDO0FBQUE7QUFBQSxFQUVsQyxHQUFHLE1BQWtCO0FBQzdCLFVBQU0sSUFBSSxLQUFLLE9BQU8sUUFBUSxJQUFJO0FBRWxDLFFBQUksS0FBSyxHQUFHO0FBQ1YsV0FBSyxPQUFPLE9BQU8sR0FBRyxDQUFDO0FBRXZCLFVBQUksS0FBSyxPQUFPLFVBQVUsR0FBRztBQUMzQixlQUFPLEtBQUssTUFBTSxTQUFTLEdBQUc7QUFDNUIsZUFBSyxNQUFNLE1BQU0sRUFBRztBQUFBLFFBQ3RCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxJQUFJLFFBQWdCO0FBQ2xCLFdBQU8sS0FBSyxPQUFPO0FBQUEsRUFDckI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLElBQ0UsUUFDQSxVQUFtQyxDQUFDLEdBQ1g7QUFDekIsUUFBSSxRQUFxQjtBQUV6QixRQUFJO0FBQ0YsT0FBQyxRQUFRLEtBQUssSUFBSSxhQUFhLFFBQVEsTUFBTTtBQUFBLElBQy9DLFNBQVMsR0FBRztBQUNWLGFBQU8sZ0JBQWdCLE9BQU8sQ0FBQztBQUFBLElBQ2pDO0FBRUEsVUFBTSxPQUFPLENBQUM7QUFDZCxTQUFLLFFBQVE7QUFDYixTQUFLLFVBQVUsZ0JBQWdCLElBQUksUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFO0FBQUEsTUFDckQsQ0FBQyxNQUFjO0FBQ2IsYUFBSyxHQUFHLElBQUk7QUFDWixlQUFPO0FBQUEsTUFDVDtBQUFBLE1BQ0EsQ0FBQyxNQUFhO0FBQ1osYUFBSyxHQUFHLElBQUk7QUFDWixjQUFNO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFDQSxTQUFLLE9BQU8sS0FBSyxJQUFJO0FBRXJCLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLE9BQThCO0FBQzVCLFFBQUksS0FBSyxPQUFPLFVBQVUsR0FBRztBQUMzQixhQUFPLGdCQUFnQixRQUFRO0FBQUEsSUFDakM7QUFFQSxXQUFPLElBQUksZ0JBQWdCLGFBQVc7QUFDcEMsV0FBSyxNQUFNLEtBQUssT0FBTztBQUFBLElBQ3pCLENBQUM7QUFBQSxFQUNIO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxNQUFNLFFBQXdCO0FBQzVCLGVBQVcsS0FBSyxLQUFLLFFBQVE7QUFDM0IsUUFBRSxNQUFNLE1BQU07QUFBQSxJQUNoQjtBQUFBLEVBQ0Y7QUFDRjtBQTlFK0I7QUFBL0IsSUFBcUIsWUFBckI7IiwKICAibmFtZXMiOiBbXQp9Cg==