@tai-kun/surrealdb
Version:
The SurrealDB SDK for JavaScript
154 lines (152 loc) • 16 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/utils/task-emitter.ts
var task_emitter_exports = {};
__export(task_emitter_exports, {
default: () => TaskEmitter
});
module.exports = __toCommonJS(task_emitter_exports);
var import_stateful_promise = __toESM(require("./stateful-promise.cjs"), 1);
var import_task_queue = __toESM(require("./task-queue.cjs"), 1);
var _TaskEmitter = class _TaskEmitter {
constructor() {
this._queue = new import_task_queue.default();
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 import_stateful_promise.default(
(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;
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL3Rhc2stZW1pdHRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IFN0YXRlZnVsUHJvbWlzZSBmcm9tIFwiLi9zdGF0ZWZ1bC1wcm9taXNlXCI7XG5pbXBvcnQgVGFza1F1ZXVlLCB7IHR5cGUgVGFza09wdGlvbnMsIHR5cGUgVGFza1J1bm5lckFyZ3MgfSBmcm9tIFwiLi90YXNrLXF1ZXVlXCI7XG5cbmludGVyZmFjZSBUeXBlZE1hcDxUPiB7XG4gIGNsZWFyKCk6IHZvaWQ7XG4gIGRlbGV0ZShrZXk6IGtleW9mIFQpOiBib29sZWFuO1xuICBnZXQ8VEV2ZW50IGV4dGVuZHMga2V5b2YgVD4oa2V5OiBURXZlbnQpOiBUW1RFdmVudF0gfCB1bmRlZmluZWQ7XG4gIHNldDxURXZlbnQgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IFRFdmVudCwgdmFsdWU6IFRbVEV2ZW50XSk6IHRoaXM7XG4gIGtleXMoKTogSXRlcmFibGVJdGVyYXRvcjxrZXlvZiBUPjtcbn1cblxuLyoqXG4gKiBbQVBJIFJlZmVyZW5jZV0oaHR0cHM6Ly90YWkta3VuLmdpdGh1Yi5pby9zdXJyZWFsZGIuanMvdjIvYXBpL3V0aWxzL3Rhc2stZW1pdHRlci8pXG4gKi9cbmV4cG9ydCB0eXBlIFRhc2tMaXN0ZW5lcjxUQXJncyBleHRlbmRzIHVua25vd25bXT4gPSAoXG4gIHJ1bm5lckFyZ3M6IFRhc2tSdW5uZXJBcmdzLFxuICAuLi5hcmdzOiBUQXJnc1xuKSA9PiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD47XG5cbi8qKlxuICogW0FQSSBSZWZlcmVuY2VdKGh0dHBzOi8vdGFpLWt1bi5naXRodWIuaW8vc3VycmVhbGRiLmpzL3YyL2FwaS91dGlscy90YXNrLWVtaXR0ZXIvI29uY2UpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFza0xpc3RlbmVyT3B0aW9ucyBleHRlbmRzIFRhc2tPcHRpb25zIHt9XG5cbi8qKlxuICogW0FQSSBSZWZlcmVuY2VdKGh0dHBzOi8vdGFpLWt1bi5naXRodWIuaW8vc3VycmVhbGRiLmpzL3YyL2FwaS91dGlscy90YXNrLWVtaXR0ZXIvKVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYXNrRW1pdHRlcjxcbiAgVEV2ZW50TWFwIGV4dGVuZHMgUmVjb3JkPHN0cmluZyB8IG51bWJlciwgdW5rbm93bltdPixcbj4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3F1ZXVlID0gbmV3IFRhc2tRdWV1ZSgpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2xpc3RlbmVycyA9IG5ldyBNYXAoKSBhcyBUeXBlZE1hcDxcbiAgICB7XG4gICAgICBbUCBpbiBrZXlvZiBURXZlbnRNYXBdOiB7XG4gICAgICAgIG9yaWdpbmFsOiBUYXNrTGlzdGVuZXI8VEV2ZW50TWFwW1BdPjtcbiAgICAgICAgZGlzcGF0Y2g6IChhcmdzOiBURXZlbnRNYXBbUF0pID0+IFN0YXRlZnVsUHJvbWlzZTx1bmtub3duPjtcbiAgICAgIH1bXTtcbiAgICB9XG4gID47XG5cbiAgLyoqXG4gICAqIFtBUEkgUmVmZXJlbmNlXShodHRwczovL3RhaS1rdW4uZ2l0aHViLmlvL3N1cnJlYWxkYi5qcy92Mi9hcGkvdXRpbHMvdGFzay1lbWl0dGVyLyNvbilcbiAgICovXG4gIG9uPFRFdmVudCBleHRlbmRzIGtleW9mIFRFdmVudE1hcD4oXG4gICAgdGhpczogdGhpcyxcbiAgICBldmVudDogVEV2ZW50LFxuICAgIGxpc3RlbmVyOiBUYXNrTGlzdGVuZXI8VEV2ZW50TWFwW1RFdmVudF0+LFxuICApOiB2b2lkIHtcbiAgICBsZXQgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzLmdldChldmVudCk7XG5cbiAgICBpZiAoIWxpc3RlbmVycz8uZmluZCgoeyBvcmlnaW5hbCB9KSA9PiBvcmlnaW5hbCA9PT0gbGlzdGVuZXIpKSB7XG4gICAgICBpZiAoIWxpc3RlbmVycykge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnMuc2V0KGV2ZW50LCBsaXN0ZW5lcnMgPSBbXSk7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycy5wdXNoKHtcbiAgICAgICAgb3JpZ2luYWw6IGxpc3RlbmVyLFxuICAgICAgICBkaXNwYXRjaDogYXJncyA9PlxuICAgICAgICAgIHRoaXMuX3F1ZXVlLmFkZChyQXJncyA9PiBsaXN0ZW5lci5hcHBseSh0aGlzLCBbckFyZ3MsIC4uLmFyZ3NdKSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogW0FQSSBSZWZlcmVuY2VdKGh0dHBzOi8vdGFpLWt1bi5naXRodWIuaW8vc3VycmVhbGRiLmpzL3YyL2FwaS91dGlscy90YXNrLWVtaXR0ZXIvI29mZilcbiAgICovXG4gIG9mZjxURXZlbnQgZXh0ZW5kcyBrZXlvZiBURXZlbnRNYXA+KFxuICAgIGV2ZW50OiBURXZlbnQsXG4gICAgbGlzdGVuZXI/OiBUYXNrTGlzdGVuZXI8VEV2ZW50TWFwW1RFdmVudF0+LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnMuZ2V0KGV2ZW50KTtcblxuICAgIGlmIChsaXN0ZW5lcnMpIHtcbiAgICAgIGlmIChsaXN0ZW5lcikge1xuICAgICAgICBjb25zdCBpID0gbGlzdGVuZXJzLmZpbmRJbmRleCgoeyBvcmlnaW5hbCB9KSA9PiBvcmlnaW5hbCA9PT0gbGlzdGVuZXIpO1xuXG4gICAgICAgIGlmIChpID49IDApIHtcbiAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuXG4gICAgICAgICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVycy5kZWxldGUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzLmRlbGV0ZShldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFtBUEkgUmVmZXJlbmNlXShodHRwczovL3RhaS1rdW4uZ2l0aHViLmlvL3N1cnJlYWxkYi5qcy92Mi9hcGkvdXRpbHMvdGFzay1lbWl0dGVyLyNvbmNlKVxuICAgKi9cbiAgb25jZTxURXZlbnQgZXh0ZW5kcyBrZXlvZiBURXZlbnRNYXA+KFxuICAgIGV2ZW50OiBURXZlbnQsXG4gICAgb3B0aW9uczogVGFza0xpc3RlbmVyT3B0aW9ucyB8IHVuZGVmaW5lZCA9IHt9LFxuICApOiBTdGF0ZWZ1bFByb21pc2U8VEV2ZW50TWFwW1RFdmVudF0+ICYge1xuICAgIHJlYWRvbmx5IGNhbmNlbDogKCkgPT4gU3RhdGVmdWxQcm9taXNlPHZvaWQ+O1xuICB9IHtcbiAgICBsZXQgY2FuY2VsRm46ICgpID0+IFN0YXRlZnVsUHJvbWlzZTx2b2lkPjtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFN0YXRlZnVsUHJvbWlzZTxURXZlbnRNYXBbVEV2ZW50XT4oXG4gICAgICAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2lnbmFsIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlQWxsTGlzdGVuZXJzID0gKCkgPT4ge1xuICAgICAgICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgICAgICAgdGhpcy5vZmYoZXZlbnQsIHRhc2tMaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRhc2tMaXN0ZW5lcjogVGFza0xpc3RlbmVyPFRFdmVudE1hcFtURXZlbnRdPiA9IChcbiAgICAgICAgICBfLFxuICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgKSA9PiB7XG4gICAgICAgICAgcmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWJvcnRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMub2ZmKGV2ZW50LCB0YXNrTGlzdGVuZXIpO1xuICAgICAgICAgIHJlamVjdChzaWduYWwhLnJlYXNvbik7XG4gICAgICAgIH07XG4gICAgICAgIGNhbmNlbEZuID0gZnVuY3Rpb24gY2FuY2VsKFxuICAgICAgICAgIHRoaXM6IFN0YXRlZnVsUHJvbWlzZTxURXZlbnRNYXBbVEV2ZW50XT4sXG4gICAgICAgICkge1xuICAgICAgICAgIHJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFwicGVuZGluZ1wiKSB7XG4gICAgICAgICAgICByZWplY3QoXCJjYW5jZWxlZFwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy50aGVuKCgpID0+IHt9LCAoKSA9PiB7fSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLm9uKGV2ZW50LCB0YXNrTGlzdGVuZXIpO1xuICAgICAgICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgICAgICAgfSBjYXRjaCB7fVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMub2ZmKGV2ZW50LCB0YXNrTGlzdGVuZXIpO1xuICAgICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJvbWlzZSwge1xuICAgICAgY2FuY2VsOiBjYW5jZWxGbiEuYmluZChwcm9taXNlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbQVBJIFJlZmVyZW5jZV0oaHR0cHM6Ly90YWkta3VuLmdpdGh1Yi5pby9zdXJyZWFsZGIuanMvdjIvYXBpL3V0aWxzL3Rhc2stZW1pdHRlci8jZW1pdClcbiAgICovXG4gIGVtaXQ8VEV2ZW50IGV4dGVuZHMga2V5b2YgVEV2ZW50TWFwPihcbiAgICBldmVudDogVEV2ZW50LFxuICAgIC4uLmFyZ3M6IFRFdmVudE1hcFtURXZlbnRdXG4gICk6IHVuZGVmaW5lZCB8IFN0YXRlZnVsUHJvbWlzZTx1bmtub3duPltdIHtcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnMuZ2V0KGV2ZW50KTtcblxuICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICAgIC8vIFx1MzBCM1x1MzBENFx1MzBGQ1x1MzA1N1x1MzA2QVx1MzA0NFx1MzA2OCAub25jZSgpIFx1NTE4NVx1MzA2NyB0aGlzLm9mZigpIFx1MzA0Q1x1NTQ3Q1x1MzA3MFx1MzA4Q1x1MzA1Rlx1MzA2OFx1MzA0RCB0aGlzLl9saXN0ZW5lcnMgXHUzMDRDXHU1OTA5XHU2NkY0XHUzMDU1XHUzMDhDXHUzMDhCXG4gICAgICAvLyBcdTMwNkVcdTMwNjdcdTMwMDFcdTRFMDBcdTkwRThcdTMwNkVcdTMwQTRcdTMwRDlcdTMwRjNcdTMwQzhcdTMwRUFcdTMwQjlcdTMwQ0FcdTMwRkNcdTMwNENcdTU0N0NcdTMwNzNcdTUxRkFcdTMwNTVcdTMwOENcdTMwNkFcdTMwNEJcdTMwNjNcdTMwNUZcdTMwOEFcdTMwMDFcdTZCOEJcdTc1NTlcdTMwNTdcdTMwNkFcdTMwNEJcdTMwNjNcdTMwNUZcdTMwOEFcdTMwNTlcdTMwOEJcdTMwMDJcbiAgICAgICYmIGxpc3RlbmVycy5zbGljZSgpLm1hcCgoeyBkaXNwYXRjaCB9KSA9PiBkaXNwYXRjaChhcmdzKSk7XG4gIH1cblxuICAvKipcbiAgICogW0FQSSBSZWZlcmVuY2VdKGh0dHBzOi8vdGFpLWt1bi5naXRodWIuaW8vc3VycmVhbGRiLmpzL3YyL2FwaS91dGlscy90YXNrLWVtaXR0ZXIvI2lkbGUpXG4gICAqL1xuICBpZGxlKCk6IFN0YXRlZnVsUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmlkbGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbQVBJIFJlZmVyZW5jZV0oaHR0cHM6Ly90YWkta3VuLmdpdGh1Yi5pby9zdXJyZWFsZGIuanMvdjIvYXBpL3V0aWxzL3Rhc2stZW1pdHRlci8jYWJvcnQpXG4gICAqL1xuICBhYm9ydChyZWFzb24/OiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5fcXVldWUuYWJvcnQocmVhc29uKTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw4QkFBNEI7QUFDNUIsd0JBQWlFO0FBMEJqRSxJQUFxQixlQUFyQixNQUFxQixhQUVuQjtBQUFBLEVBRkY7QUFHRSxTQUFtQixTQUFTLElBQUksa0JBQUFBLFFBQVU7QUFDMUMsU0FBbUIsYUFBYSxvQkFBSSxJQUFJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVl4QyxHQUVFLE9BQ0EsVUFDTTtBQUNOLFFBQUksWUFBWSxLQUFLLFdBQVcsSUFBSSxLQUFLO0FBRXpDLFFBQUksQ0FBQyxXQUFXLEtBQUssQ0FBQyxFQUFFLFNBQVMsTUFBTSxhQUFhLFFBQVEsR0FBRztBQUM3RCxVQUFJLENBQUMsV0FBVztBQUNkLGFBQUssV0FBVyxJQUFJLE9BQU8sWUFBWSxDQUFDLENBQUM7QUFBQSxNQUMzQztBQUVBLGdCQUFVLEtBQUs7QUFBQSxRQUNiLFVBQVU7QUFBQSxRQUNWLFVBQVUsaUNBQ1IsS0FBSyxPQUFPLElBQUksV0FBUyxTQUFTLE1BQU0sTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUR2RDtBQUFBLE1BRVosQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEs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