@tai-kun/surrealdb
Version:
The SurrealDB SDK for JavaScript
35 lines (33 loc) • 4.81 kB
JavaScript
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
// src/utils/mutex.ts
import { UnsupportedRuntimeError } from "../errors/index.mjs";
var MUTEX_QUEUE = /* @__PURE__ */ Symbol();
function mutex(method, context) {
if (context && typeof context === "object" && typeof context.addInitializer !== "function") {
throw new UnsupportedRuntimeError("Requires Stage 3 decorator support.");
}
context.addInitializer(function() {
if (!this[MUTEX_QUEUE]) {
Object.defineProperty(this, MUTEX_QUEUE, { value: [] });
}
});
return /* @__PURE__ */ __name(function mutexWrapper(...args) {
let queue = this[MUTEX_QUEUE], promise, resolve, dequeue = /* @__PURE__ */ __name(() => queue.shift()?.(), "dequeue");
if (queue.length) {
promise = new Promise((arg0) => {
resolve = arg0;
});
queue.push(resolve);
} else {
promise = Promise.resolve();
queue.push(dequeue);
}
return promise.then(() => method.apply(this, args)).finally(dequeue);
}, "mutexWrapper");
}
__name(mutex, "mutex");
export {
mutex as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL211dGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBVbnN1cHBvcnRlZFJ1bnRpbWVFcnJvciB9IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvZXJyb3JzXCI7XG5cbmNvbnN0IE1VVEVYX1FVRVVFID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpO1xuXG4vKipcbiAqIFtBUEkgUmVmZXJlbmNlXShodHRwczovL3RhaS1rdW4uZ2l0aHViLmlvL3N1cnJlYWxkYi5qcy92Mi9hcGkvdXRpbHMvbXV0ZXgvKVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtdXRleDxcbiAgVE1ldGhvZCBleHRlbmRzICguLi5hcmdzOiBhbnkpID0+IFByb21pc2VMaWtlPGFueT4sXG4+KFxuICBtZXRob2Q6IFRNZXRob2QsXG4gIGNvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCxcbik6IChcbiAgdGhpczogYW55LFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPFRNZXRob2Q+XG4pID0+IFByb21pc2U8QXdhaXRlZDxSZXR1cm5UeXBlPFRNZXRob2Q+Pj4ge1xuICBpZiAoXG4gICAgY29udGV4dFxuICAgICYmIHR5cGVvZiBjb250ZXh0ID09PSBcIm9iamVjdFwiXG4gICAgJiYgdHlwZW9mIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgIT09IFwiZnVuY3Rpb25cIlxuICApIHtcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRSdW50aW1lRXJyb3IoXCJSZXF1aXJlcyBTdGFnZSAzIGRlY29yYXRvciBzdXBwb3J0LlwiKTtcbiAgfVxuXG4gIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIoZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgaWYgKCF0aGlzW01VVEVYX1FVRVVFXSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIE1VVEVYX1FVRVVFLCB7IHZhbHVlOiBbXSB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiBtdXRleFdyYXBwZXIoLi4uYXJncykge1xuICAgIGxldCBxdWV1ZTogKCgpID0+IHZvaWQpW10gPSB0aGlzW01VVEVYX1FVRVVFXSxcbiAgICAgIHByb21pc2U6IFByb21pc2U8dm9pZD4sXG4gICAgICByZXNvbHZlOiAoKSA9PiB2b2lkLFxuICAgICAgZGVxdWV1ZSA9ICgpID0+IHF1ZXVlLnNoaWZ0KCk/LigpO1xuXG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGFyZzAgPT4ge1xuICAgICAgICByZXNvbHZlID0gYXJnMDtcbiAgICAgIH0pO1xuICAgICAgcXVldWUucHVzaChyZXNvbHZlISk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFx1MzBBRFx1MzBFNVx1MzBGQ1x1MzA0Q1x1N0E3QVx1MzA2RVx1NTgzNFx1NTQwOFx1MzA2Rlx1NUY4Q1x1N0Q5QVx1MzA2RVx1MzBCRlx1MzBCOVx1MzBBRlx1MzA0Q1x1NEUwQVx1MzA2RVx1Njc2MVx1NEVGNlx1MzA2Qlx1NTE2NVx1MzA4Qlx1MzA1M1x1MzA2OFx1MzA0Q1x1MzA2N1x1MzA0RFx1MzA4Qlx1MzA4OFx1MzA0Nlx1MzA2QiBxdWV1ZSBcdTMwNkIgZGVxdWV1ZSBcdTMwOTJcdThGRkRcdTUyQTBcdTMwMDJcbiAgICAgIC8vIGRlcXVldWUgXHUzMDZGIFByb21pc2UgXHUzMDZFXHU4OUUzXHU2QzdBXHU1RjhDXHUzMDZCXHUzMDgyXHU1NDdDXHUzMDczXHU1MUZBXHUzMDU1XHUzMDhDXHUzMDhCXHUzMDRDXHUzMDAxMiBcdTU2REVcdTkwMjNcdTdEOUFcdTMwNjcgZGVxdWV1ZSBcdTMwOTJcdTU0N0NcdTMwNzNcdTUxRkFcdTMwNTlcdTMwNTNcdTMwNjhcdTMwNjdcdTMwMDFcbiAgICAgIC8vIFx1NUY4Q1x1N0Q5QVx1MzA2RVx1MzBCRlx1MzBCOVx1MzBBRlx1MzA5Mlx1NUI5Rlx1ODg0Q1x1MzA1OVx1MzA4Qlx1MzA1M1x1MzA2OFx1MzA0Q1x1MzA2N1x1MzA0RFx1MzA4Qlx1MzAwMlxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgcXVldWUucHVzaChkZXF1ZXVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZVxuICAgICAgLnRoZW4oKCkgPT4gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpKVxuICAgICAgLmZpbmFsbHkoZGVxdWV1ZSk7XG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7O0FBQUEsU0FBUywrQkFBK0I7QUFFeEMsSUFBTSxjQUE4Qix1QkFBTztBQUs1QixTQUFSLE1BR0wsUUFDQSxTQUl5QztBQUN6QyxNQUNFLFdBQ0csT0FBTyxZQUFZLFlBQ25CLE9BQU8sUUFBUSxtQkFBbUIsWUFDckM7QUFDQSxVQUFNLElBQUksd0JBQXdCLHFDQUFxQztBQUFBLEVBQ3pFO0FBRUEsVUFBUSxlQUFlLFdBQW9CO0FBQ3pDLFFBQUksQ0FBQyxLQUFLLFdBQVcsR0FBRztBQUN0QixhQUFPLGVBQWUsTUFBTSxhQUFhLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUFBLElBQ3hEO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FBTyxnQ0FBUyxnQkFBZ0IsTUFBTTtBQUNwQyxRQUFJLFFBQXdCLEtBQUssV0FBVyxHQUMxQyxTQUNBLFNBQ0EsVUFBVSw2QkFBTSxNQUFNLE1BQU0sSUFBSSxHQUF0QjtBQUVaLFFBQUksTUFBTSxRQUFRO0FBQ2hCLGdCQUFVLElBQUksUUFBUSxVQUFRO0FBQzVCLGtCQUFVO0FBQUEsTUFDWixDQUFDO0FBQ0QsWUFBTSxLQUFLLE9BQVE7QUFBQSxJQUNyQixPQUFPO0FBSUwsZ0JBQVUsUUFBUSxRQUFRO0FBQzFCLFlBQU0sS0FBSyxPQUFPO0FBQUEsSUFDcEI7QUFFQSxXQUFPLFFBQ0osS0FBSyxNQUFNLE9BQU8sTUFBTSxNQUFNLElBQUksQ0FBQyxFQUNuQyxRQUFRLE9BQU87QUFBQSxFQUNwQixHQXRCTztBQXVCVDtBQTlDd0I7IiwKICAibmFtZXMiOiBbXQp9Cg==