@opsimathically/deferred
Version:
Utility classes for working with the asynchronous deferral pattern.
111 lines (107 loc) • 3.36 kB
JavaScript
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var index_exports = {};
__export(index_exports, {
Deferred: () => Deferred,
DeferredMap: () => DeferredMap
});
module.exports = __toCommonJS(index_exports);
// src/Deferred.class.ts
var Deferred = class {
constructor(params) {
this.already_completed = false;
this.timeout = null;
this.deferred_map_ref = null;
const defer_ref = this;
this.promise = new Promise((resolve, reject) => {
defer_ref.resolve_real = resolve;
defer_ref.reject_real = reject;
});
if (params) {
if (typeof params.autotimeout_ms === "number") {
defer_ref.timeout = setTimeout(
(param) => {
param.resolve(null);
},
params.autotimeout_ms,
this
);
}
if (params.deferred_map_ref) {
defer_ref.deferred_map_ref = params.deferred_map_ref;
defer_ref.deferred_map_ref.set(defer_ref, defer_ref);
}
}
}
resolve(val) {
var _a;
if (this.already_completed) return;
this.already_completed = true;
if (this.timeout) clearTimeout(this.timeout);
this.resolve_real(val);
(_a = this.deferred_map_ref) == null ? void 0 : _a.delete(this);
}
reject(val) {
var _a;
if (this.already_completed) return;
this.already_completed = true;
if (this.timeout) clearTimeout(this.timeout);
this.reject_real(val);
(_a = this.deferred_map_ref) == null ? void 0 : _a.delete(this);
}
};
// src/DeferredMap.class.ts
var DeferredMap = class {
constructor() {
this.defer_sets = /* @__PURE__ */ new Map();
this.default_resolve_value = -987;
this.default_reject_value = -876;
}
get size() {
return this.defer_sets.size;
}
deferred(autotimeout_ms) {
const deferred = new Deferred({
deferred_map_ref: this.defer_sets,
autotimeout_ms
});
this.defer_sets.set(deferred, deferred);
return deferred;
}
resolveAll(resolve_value) {
if (resolve_value === void 0) resolve_value = this.default_resolve_value;
for (const [key, value] of this.defer_sets) {
value.resolve(this.default_resolve_value);
}
this.defer_sets = /* @__PURE__ */ new Map();
}
rejectAll(reject_value) {
if (reject_value === void 0) reject_value = this.default_reject_value;
for (const [key, value] of this.defer_sets) {
value.reject(this.default_reject_value);
}
this.defer_sets = /* @__PURE__ */ new Map();
}
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
Deferred,
DeferredMap
});