@fuman/utils
Advanced tools
+36
-0
@@ -14,2 +14,38 @@ "use strict"; | ||
| } | ||
| class DeferredTracked { | ||
| #resolve; | ||
| #reject; | ||
| promise; | ||
| status; | ||
| constructor() { | ||
| this.status = { type: "pending" }; | ||
| this.promise = new Promise((res, rej) => { | ||
| this.#resolve = res; | ||
| this.#reject = rej; | ||
| }); | ||
| } | ||
| resolve(value) { | ||
| if (this.status.type !== "pending") return; | ||
| this.status = { type: "fulfilled", value }; | ||
| this.#resolve(value); | ||
| } | ||
| reject(reason) { | ||
| if (this.status.type !== "pending") return; | ||
| this.status = { type: "rejected", reason }; | ||
| this.#reject(reason); | ||
| } | ||
| get result() { | ||
| if (this.status.type === "fulfilled") { | ||
| return this.status.value; | ||
| } | ||
| return void 0; | ||
| } | ||
| get error() { | ||
| if (this.status.type === "rejected") { | ||
| return this.status.reason; | ||
| } | ||
| return void 0; | ||
| } | ||
| } | ||
| exports.Deferred = Deferred; | ||
| exports.DeferredTracked = DeferredTracked; |
+18
-0
@@ -7,1 +7,19 @@ export declare class Deferred<T = void> { | ||
| } | ||
| export declare class DeferredTracked<T = void> { | ||
| #private; | ||
| readonly promise: Promise<T>; | ||
| readonly status: { | ||
| type: 'pending'; | ||
| } | { | ||
| type: 'fulfilled'; | ||
| value: T; | ||
| } | { | ||
| type: 'rejected'; | ||
| reason: unknown; | ||
| }; | ||
| constructor(); | ||
| resolve(value: T): void; | ||
| reject(reason: unknown): void; | ||
| get result(): T | undefined; | ||
| get error(): unknown | undefined; | ||
| } |
+18
-0
@@ -7,1 +7,19 @@ export declare class Deferred<T = void> { | ||
| } | ||
| export declare class DeferredTracked<T = void> { | ||
| #private; | ||
| readonly promise: Promise<T>; | ||
| readonly status: { | ||
| type: 'pending'; | ||
| } | { | ||
| type: 'fulfilled'; | ||
| value: T; | ||
| } | { | ||
| type: 'rejected'; | ||
| reason: unknown; | ||
| }; | ||
| constructor(); | ||
| resolve(value: T): void; | ||
| reject(reason: unknown): void; | ||
| get result(): T | undefined; | ||
| get error(): unknown | undefined; | ||
| } |
+37
-1
@@ -12,4 +12,40 @@ class Deferred { | ||
| } | ||
| class DeferredTracked { | ||
| #resolve; | ||
| #reject; | ||
| promise; | ||
| status; | ||
| constructor() { | ||
| this.status = { type: "pending" }; | ||
| this.promise = new Promise((res, rej) => { | ||
| this.#resolve = res; | ||
| this.#reject = rej; | ||
| }); | ||
| } | ||
| resolve(value) { | ||
| if (this.status.type !== "pending") return; | ||
| this.status = { type: "fulfilled", value }; | ||
| this.#resolve(value); | ||
| } | ||
| reject(reason) { | ||
| if (this.status.type !== "pending") return; | ||
| this.status = { type: "rejected", reason }; | ||
| this.#reject(reason); | ||
| } | ||
| get result() { | ||
| if (this.status.type === "fulfilled") { | ||
| return this.status.value; | ||
| } | ||
| return void 0; | ||
| } | ||
| get error() { | ||
| if (this.status.type === "rejected") { | ||
| return this.status.reason; | ||
| } | ||
| return void 0; | ||
| } | ||
| } | ||
| export { | ||
| Deferred | ||
| Deferred, | ||
| DeferredTracked | ||
| }; |
+1
-0
@@ -41,2 +41,3 @@ "use strict"; | ||
| exports.Deferred = deferred.Deferred; | ||
| exports.DeferredTracked = deferred.DeferredTracked; | ||
| exports.Emitter = emitter.Emitter; | ||
@@ -43,0 +44,0 @@ exports.AggregateError = pool.AggregateError; |
+2
-1
@@ -9,3 +9,3 @@ import { noop } from "./misc/index.js"; | ||
| import { ConditionVariable } from "./async/condition-variable.js"; | ||
| import { Deferred } from "./async/deferred.js"; | ||
| import { Deferred, DeferredTracked } from "./async/deferred.js"; | ||
| import { Emitter } from "./async/emitter.js"; | ||
@@ -41,2 +41,3 @@ import { AggregateError, asyncPool, parallelMap } from "./async/pool.js"; | ||
| Deferred, | ||
| DeferredTracked, | ||
| Deque, | ||
@@ -43,0 +44,0 @@ Emitter, |
+1
-1
| { | ||
| "name": "@fuman/utils", | ||
| "type": "module", | ||
| "version": "0.0.15", | ||
| "version": "0.0.16", | ||
| "description": "various utils", | ||
@@ -6,0 +6,0 @@ "license": "MIT", |
172951
1.49%5082
1.84%