@adviser/cement 0.4.23 → 0.4.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/cjs/future.cjs +1 -1
  2. package/cjs/future.cjs.map +1 -1
  3. package/cjs/future.d.ts.map +1 -1
  4. package/cjs/is-promise.cjs +4 -0
  5. package/cjs/is-promise.cjs.map +1 -1
  6. package/cjs/is-promise.d.ts +2 -0
  7. package/cjs/is-promise.d.ts.map +1 -1
  8. package/cjs/option.cjs +3 -0
  9. package/cjs/option.cjs.map +1 -1
  10. package/cjs/option.d.ts +1 -0
  11. package/cjs/option.d.ts.map +1 -1
  12. package/cjs/resolve-once.cjs +265 -93
  13. package/cjs/resolve-once.cjs.map +1 -1
  14. package/cjs/resolve-once.d.ts +48 -18
  15. package/cjs/resolve-once.d.ts.map +1 -1
  16. package/cjs/resolve-once.test.cjs +115 -9
  17. package/cjs/resolve-once.test.cjs.map +1 -1
  18. package/cjs/version.cjs +1 -1
  19. package/deno.json +1 -1
  20. package/esm/future.d.ts.map +1 -1
  21. package/esm/future.js +1 -1
  22. package/esm/future.js.map +1 -1
  23. package/esm/is-promise.d.ts +2 -0
  24. package/esm/is-promise.d.ts.map +1 -1
  25. package/esm/is-promise.js +3 -0
  26. package/esm/is-promise.js.map +1 -1
  27. package/esm/option.d.ts +1 -0
  28. package/esm/option.d.ts.map +1 -1
  29. package/esm/option.js +3 -0
  30. package/esm/option.js.map +1 -1
  31. package/esm/resolve-once.d.ts +48 -18
  32. package/esm/resolve-once.d.ts.map +1 -1
  33. package/esm/resolve-once.js +262 -92
  34. package/esm/resolve-once.js.map +1 -1
  35. package/esm/resolve-once.test.js +116 -10
  36. package/esm/resolve-once.test.js.map +1 -1
  37. package/esm/version.js +1 -1
  38. package/package.json +3 -3
  39. package/src/future.ts +2 -1
  40. package/src/is-promise.ts +6 -0
  41. package/src/option.ts +4 -0
  42. package/src/resolve-once.ts +342 -114
  43. package/ts/cjs/future.d.ts.map +1 -1
  44. package/ts/cjs/future.js +1 -1
  45. package/ts/cjs/future.js.map +1 -1
  46. package/ts/cjs/is-promise.d.ts +2 -0
  47. package/ts/cjs/is-promise.d.ts.map +1 -1
  48. package/ts/cjs/is-promise.js +4 -0
  49. package/ts/cjs/is-promise.js.map +1 -1
  50. package/ts/cjs/option.d.ts +1 -0
  51. package/ts/cjs/option.d.ts.map +1 -1
  52. package/ts/cjs/option.js +3 -0
  53. package/ts/cjs/option.js.map +1 -1
  54. package/ts/cjs/resolve-once.d.ts +48 -18
  55. package/ts/cjs/resolve-once.d.ts.map +1 -1
  56. package/ts/cjs/resolve-once.js +265 -93
  57. package/ts/cjs/resolve-once.js.map +1 -1
  58. package/ts/cjs/resolve-once.test.js +115 -9
  59. package/ts/cjs/resolve-once.test.js.map +1 -1
  60. package/ts/cjs/version.js +1 -1
  61. package/ts/esm/future.d.ts.map +1 -1
  62. package/ts/esm/future.js +1 -1
  63. package/ts/esm/future.js.map +1 -1
  64. package/ts/esm/is-promise.d.ts +2 -0
  65. package/ts/esm/is-promise.d.ts.map +1 -1
  66. package/ts/esm/is-promise.js +3 -0
  67. package/ts/esm/is-promise.js.map +1 -1
  68. package/ts/esm/option.d.ts +1 -0
  69. package/ts/esm/option.d.ts.map +1 -1
  70. package/ts/esm/option.js +3 -0
  71. package/ts/esm/option.js.map +1 -1
  72. package/ts/esm/resolve-once.d.ts +48 -18
  73. package/ts/esm/resolve-once.d.ts.map +1 -1
  74. package/ts/esm/resolve-once.js +262 -92
  75. package/ts/esm/resolve-once.js.map +1 -1
  76. package/ts/esm/resolve-once.test.js +116 -10
  77. package/ts/esm/resolve-once.test.js.map +1 -1
  78. package/ts/esm/version.js +1 -1
@@ -2,6 +2,7 @@ import { Future } from "./future.js";
2
2
  import { isPromise } from "./is-promise.js";
3
3
  import { LRUMap } from "./lru-map-set.js";
4
4
  import { Result } from "./result.js";
5
+ import { Option } from "./option.js";
5
6
  export class ResolveSeq {
6
7
  ctx;
7
8
  constructor(ctx) {
@@ -18,24 +19,33 @@ export class ResolveSeq {
18
19
  }
19
20
  return Promise.resolve();
20
21
  }
21
- _step(item) {
22
+ async _step(item) {
22
23
  if (!item) {
23
24
  this._flushWaiting.forEach((f) => f.resolve());
24
25
  this._flushWaiting?.splice(0, this._flushWaiting.length);
25
26
  return Promise.resolve();
26
27
  }
27
- item
28
- .fn(this.ctx)
29
- .then((value) => item.future.resolve(value))
30
- .catch((e) => item.future.reject(e))
31
- .finally(() => {
28
+ let value;
29
+ try {
30
+ const promiseOrValue = item.fn(this.ctx);
31
+ if (isPromise(promiseOrValue)) {
32
+ value = await promiseOrValue;
33
+ }
34
+ else {
35
+ value = promiseOrValue;
36
+ }
37
+ item.future.resolve(value);
38
+ }
39
+ catch (e) {
40
+ item.future.reject(e);
41
+ }
42
+ finally {
32
43
  this._seqFutures.shift();
33
- void this._step(this._seqFutures[0]);
34
- });
35
- return Promise.resolve();
44
+ }
45
+ return this._step(this._seqFutures[0]);
36
46
  }
37
47
  _seqFutures = [];
38
- async add(fn, id) {
48
+ add(fn, id) {
39
49
  const future = new Future();
40
50
  this._seqFutures.push({ future, fn, id });
41
51
  if (this._seqFutures.length === 1) {
@@ -44,110 +54,267 @@ export class ResolveSeq {
44
54
  return future.asPromise();
45
55
  }
46
56
  }
47
- export class ResolveOnce {
48
- _onceDone = false;
49
- _onceFutures = [];
50
- _onceOk = false;
51
- _onceValue;
52
- _onceError;
53
- _isPromise = false;
54
- _inProgress;
55
- ctx;
56
- constructor(ctx) {
57
- this.ctx = ctx;
57
+ export class SyncResolveOnce {
58
+ state = "initial";
59
+ #value;
60
+ #error;
61
+ queueLength = 0;
62
+ get value() {
63
+ return this.#value;
64
+ }
65
+ get error() {
66
+ return this.#error;
58
67
  }
59
68
  get ready() {
60
- return this._onceDone;
69
+ return this.state === "processed";
61
70
  }
62
- get value() {
63
- return this._onceDone ? this._onceValue : undefined;
71
+ #ctx;
72
+ constructor(ctx) {
73
+ this.#ctx = ctx;
64
74
  }
65
- reset() {
66
- this._onceDone = false;
67
- this._onceOk = false;
68
- this._onceValue = undefined;
69
- this._onceError = undefined;
70
- if (this._inProgress) {
71
- const idx = this._onceFutures.findIndex((f) => f === this._inProgress);
72
- if (idx >= 0) {
73
- this._onceFutures.push(...this._onceFutures.splice(2).slice(1));
75
+ resolve(fn) {
76
+ if (this.state === "initial") {
77
+ this.state = "processed";
78
+ try {
79
+ this.#value = fn(this.#ctx);
80
+ }
81
+ catch (e) {
82
+ this.#error = e;
83
+ }
84
+ if (isPromise(this.value)) {
85
+ throw new Error("SyncResolveOnce.once fn returned a promise");
74
86
  }
75
87
  }
76
- else {
77
- this._onceFutures.length = 0;
88
+ if (this.#error) {
89
+ throw this.#error;
78
90
  }
91
+ return this.#value;
79
92
  }
80
- once(fn) {
81
- if (this._onceDone) {
82
- if (this._onceError) {
83
- if (this._isPromise) {
84
- return Promise.reject(this._onceError);
85
- }
86
- else {
87
- throw this._onceError;
93
+ reset(fn) {
94
+ this.state = "initial";
95
+ this.#value = undefined;
96
+ this.#error = undefined;
97
+ if (fn) {
98
+ return this.resolve(fn);
99
+ }
100
+ return undefined;
101
+ }
102
+ }
103
+ class AsyncResolveItem {
104
+ id = Math.random();
105
+ #state = "initial";
106
+ #toResolve;
107
+ #value = Option.None();
108
+ #error;
109
+ constructor(fn) {
110
+ this.#toResolve = fn;
111
+ }
112
+ get value() {
113
+ return this.#value.IsSome() ? this.#value.unwrap() : undefined;
114
+ }
115
+ get error() {
116
+ return this.#error;
117
+ }
118
+ #queue = [];
119
+ get queuelength() {
120
+ return this.#queue.length;
121
+ }
122
+ isDisposable() {
123
+ return this.#state === "processed" && this.#queue.length === 0;
124
+ }
125
+ #resolveFuture(future) {
126
+ if (!future) {
127
+ return;
128
+ }
129
+ if (this.#error) {
130
+ future.reject(this.#error);
131
+ return;
132
+ }
133
+ if (this.#value.IsSome()) {
134
+ future.resolve(this.#value.Unwrap());
135
+ }
136
+ }
137
+ #promiseResult() {
138
+ if (this.#error) {
139
+ return Promise.reject(this.#error);
140
+ }
141
+ if (this.#value.IsSome()) {
142
+ return Promise.resolve(this.#value.Unwrap());
143
+ }
144
+ throw new Error("AsyncResolveItem.#promiseResult impossible");
145
+ }
146
+ resolve() {
147
+ if (this.#state === "initial") {
148
+ this.#state = "waiting";
149
+ const future = new Future();
150
+ this.#queue.push(future);
151
+ this.#toResolve
152
+ .then((value) => {
153
+ this.#value = Option.Some(value);
154
+ })
155
+ .catch((e) => {
156
+ this.#error = e;
157
+ })
158
+ .finally(() => {
159
+ this.#state = "processed";
160
+ while (this.#queue.length > 0) {
161
+ this.#resolveFuture(this.#queue.shift());
88
162
  }
89
- }
90
- if (this._onceOk) {
91
- if (this._isPromise) {
92
- return Promise.resolve(this._onceValue);
163
+ });
164
+ return future.asPromise();
165
+ }
166
+ if (this.#state === "processed") {
167
+ return this.#promiseResult();
168
+ }
169
+ if (this.#state === "waiting") {
170
+ const future = new Future();
171
+ this.#queue.push(future);
172
+ return future.asPromise();
173
+ }
174
+ throw new Error("AsyncResolveItem.resolve impossible");
175
+ }
176
+ }
177
+ export class AsyncResolveOnce {
178
+ state = "initial";
179
+ #queue = [];
180
+ #ctx;
181
+ constructor(ctx) {
182
+ this.#ctx = ctx;
183
+ }
184
+ #active() {
185
+ const r = this.#queue[this.#queue.length - 1];
186
+ if (!r) {
187
+ throw new Error("AsyncResolveOnce.#active impossible");
188
+ }
189
+ return r;
190
+ }
191
+ get queueLength() {
192
+ return this.#queue.reduce((acc, r) => acc + r.queuelength, this.#queue.length);
193
+ }
194
+ get ready() {
195
+ return this.state !== "initial";
196
+ }
197
+ get value() {
198
+ if (this.state === "initial") {
199
+ return undefined;
200
+ }
201
+ return this.#active().value;
202
+ }
203
+ get error() {
204
+ if (this.state === "initial") {
205
+ return undefined;
206
+ }
207
+ return this.#active().error;
208
+ }
209
+ resolve(fn) {
210
+ if (this.state === "initial") {
211
+ this.state = "waiting";
212
+ let promiseResult;
213
+ try {
214
+ const couldBePromise = fn(this.#ctx);
215
+ if (!isPromise(couldBePromise)) {
216
+ promiseResult = Promise.resolve(couldBePromise);
93
217
  }
94
218
  else {
95
- return this._onceValue;
219
+ promiseResult = couldBePromise;
96
220
  }
97
221
  }
98
- throw new Error("ResolveOnce.once impossible");
222
+ catch (e) {
223
+ promiseResult = Promise.reject(e);
224
+ }
225
+ this.#queue.push(new AsyncResolveItem(promiseResult));
99
226
  }
100
- const future = new Future();
101
- this._onceFutures.push(future);
102
- if (this._onceFutures.length === 1) {
103
- const okFn = (value) => {
104
- this._onceValue = value;
105
- this._onceOk = true;
106
- this._onceDone = true;
107
- if (this._isPromise) {
108
- this._onceFutures.forEach((f) => f.resolve(this._onceValue));
109
- }
110
- this._onceFutures.length = 0;
111
- };
112
- const catchFn = (e) => {
113
- this._onceError = e;
114
- this._onceOk = false;
115
- this._onceValue = undefined;
116
- this._onceDone = true;
117
- if (this._isPromise) {
118
- this._onceFutures.forEach((f) => f.reject(this._onceError));
119
- }
120
- this._onceFutures.length = 0;
121
- };
122
- this._inProgress = future;
227
+ this.#queue
228
+ .slice(0, -1)
229
+ .map((i, idx) => (i.isDisposable() ? idx : undefined))
230
+ .filter((i) => i !== undefined)
231
+ .reverse()
232
+ .forEach((idx) => this.#queue.splice(idx, 1));
233
+ return this.#active().resolve();
234
+ }
235
+ reset(fn) {
236
+ this.state = "initial";
237
+ if (fn) {
238
+ return this.resolve(fn);
239
+ }
240
+ return undefined;
241
+ }
242
+ }
243
+ export class ResolveOnce {
244
+ #state = "initial";
245
+ #syncOrAsync = Option.None();
246
+ #ctx;
247
+ constructor(ctx) {
248
+ this.#ctx = ctx;
249
+ }
250
+ get ready() {
251
+ return this.#state !== "initial" && this.#syncOrAsync.Unwrap().ready;
252
+ }
253
+ get value() {
254
+ if (this.#state === "initial") {
255
+ return undefined;
256
+ }
257
+ return this.#syncOrAsync.Unwrap().value;
258
+ }
259
+ get queueLength() {
260
+ if (this.#state === "initial") {
261
+ return 0;
262
+ }
263
+ return this.#syncOrAsync.Unwrap().queueLength;
264
+ }
265
+ get error() {
266
+ if (this.#state === "initial") {
267
+ return undefined;
268
+ }
269
+ return this.#syncOrAsync.Unwrap().error;
270
+ }
271
+ get state() {
272
+ if (this.#state === "initial") {
273
+ return "initial";
274
+ }
275
+ return this.#syncOrAsync.Unwrap().state;
276
+ }
277
+ once(fn) {
278
+ let resultFn;
279
+ if (this.#state === "initial") {
280
+ this.#state = "processing";
123
281
  try {
124
- const ret = fn(this.ctx);
125
- if (isPromise(ret)) {
126
- this._isPromise = true;
127
- ret
128
- .then(okFn)
129
- .catch(catchFn)
130
- .finally(() => {
131
- this._inProgress = undefined;
132
- });
282
+ const isSyncOrAsync = fn(this.#ctx);
283
+ if (isPromise(isSyncOrAsync)) {
284
+ this.#syncOrAsync = Option.Some(new AsyncResolveOnce(this.#ctx));
133
285
  }
134
286
  else {
135
- okFn(ret);
287
+ this.#syncOrAsync = Option.Some(new SyncResolveOnce(this.#ctx));
136
288
  }
289
+ resultFn = () => isSyncOrAsync;
137
290
  }
138
291
  catch (e) {
139
- catchFn(e);
292
+ this.#syncOrAsync = Option.Some(new SyncResolveOnce(this.#ctx));
293
+ resultFn = () => {
294
+ throw e;
295
+ };
140
296
  }
141
- if (!this._isPromise) {
142
- this._inProgress = undefined;
297
+ finally {
298
+ this.#state = "processed";
143
299
  }
144
300
  }
145
- if (this._isPromise) {
146
- return future.asPromise();
147
- }
148
301
  else {
302
+ resultFn = fn;
303
+ }
304
+ if (!this.#syncOrAsync) {
305
+ throw new Error("ResolveOnce.once impossible");
306
+ }
307
+ return this.#syncOrAsync.Unwrap().resolve(resultFn);
308
+ }
309
+ reset(fn) {
310
+ if (this.#state === "initial") {
149
311
  return this.once(fn);
150
312
  }
313
+ if (this.#state === "processing") {
314
+ console.warn("ResolveOnce.reset dropped was called while processing");
315
+ return undefined;
316
+ }
317
+ return this.#syncOrAsync.Unwrap().reset(fn);
151
318
  }
152
319
  }
153
320
  export class Keyed {
@@ -186,6 +353,9 @@ export class Keyed {
186
353
  }
187
354
  return this._map.has(key);
188
355
  }
356
+ delete(key) {
357
+ this._map.delete(key);
358
+ }
189
359
  unget(key) {
190
360
  const keyed = this._map.get(key);
191
361
  keyed?.reset();
@@ -202,14 +372,14 @@ export class KeyedResolvOnce extends Keyed {
202
372
  }
203
373
  *entries() {
204
374
  for (const [k, v] of this._map.entries()) {
205
- if (!v._onceDone) {
375
+ if (!v.ready) {
206
376
  continue;
207
377
  }
208
- if (v._onceError) {
209
- yield { key: k, value: Result.Err(v._onceError) };
378
+ if (v.error) {
379
+ yield { key: k, value: Result.Err(v.error) };
210
380
  }
211
381
  else {
212
- yield { key: k, value: Result.Ok(v._onceValue) };
382
+ yield { key: k, value: Result.Ok(v.value) };
213
383
  }
214
384
  }
215
385
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-once.js","sourceRoot":"","sources":["../../../src/resolve-once.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve-once.js","sourceRoot":"","sources":["../../../src/resolve-once.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAqB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQrC,MAAM,OAAO,UAAU;IACZ,GAAG,CAAK;IACjB,YAAY,GAAO,EAAE;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IAAA,CAChB;IACD,KAAK,GAAS;IAAC,CAEd;IAEQ,aAAa,GAAmB,EAAE,CAAC;IAC5C,KAAK,GAAkB;QACrB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,YAAY,GAAG,IAAI,MAAM,EAAQ,CAAC;YACxC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,OAAO,YAAY,CAAC,SAAS,EAAE,CAAC;QAClC,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAAA,CAC1B;IACD,KAAK,CAAC,KAAK,CAA0B,IAA8B,EAAiB;QAClF,IAAI,CAAC,IAAI,EAAE,CAAC;YAEV,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/C,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACzD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC9B,KAAK,GAAG,MAAM,cAAc,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,cAAc,CAAC;YACzB,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAU,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAU,CAAC,CAAC;QACjC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAAA,CACxC;IACQ,WAAW,GAA0C,EAAE,CAAC;IACjE,GAAG,CAA0B,EAAgB,EAAE,EAAW,EAA2B;QACnF,MAAM,MAAM,GAAG,IAAI,MAAM,EAAK,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,MAAM,CAAC,SAAS,EAA6B,CAAC;IAAA,CACtD;CACF;AAyBD,MAAM,OAAO,eAAe;IAC1B,KAAK,GAAiB,SAAS,CAAC;IAEhC,MAAM,CAAK;IACX,MAAM,CAAS;IAEN,WAAW,GAAG,CAAC,CAAC;IAEzB,IAAI,KAAK,GAAkB;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC;IAAA,CACpB;IAED,IAAI,KAAK,GAAsB;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC;IAAA,CACpB;IAED,IAAI,KAAK,GAAY;QACnB,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC;IAAA,CACnC;IAEQ,IAAI,CAAO;IACpB,YAAY,GAAS,EAAE;QACrB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAAA,CACjB;IAED,OAAO,CAAC,EAAoB,EAAK;QAC/B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;YACzB,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,GAAG,CAAU,CAAC;YAC3B,CAAC;YACD,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,MAAM,CAAC;QACpB,CAAC;QAED,OAAO,IAAI,CAAC,MAAW,CAAC;IAAA,CACzB;IAED,KAAK,CAAC,EAAmB,EAAiB;QACxC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,EAAE,EAAE,CAAC;YACP,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,SAAc,CAAC;IAAA,CACvB;CACF;AAED,MAAM,gBAAgB;IACX,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,MAAM,GAAiB,SAAS,CAAC;IACxB,UAAU,CAA0B;IAC7C,MAAM,GAA2B,MAAM,CAAC,IAAI,EAAE,CAAC;IAC/C,MAAM,CAAS;IAEf,YAAY,EAA2B,EAAE;QACvC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IAAA,CACtB;IAED,IAAI,KAAK,GAA+B;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAAA,CAChE;IAED,IAAI,KAAK,GAAsB;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC;IAAA,CACpB;IAEQ,MAAM,GAA6B,EAAE,CAAC;IAE/C,IAAI,WAAW,GAAW;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAAA,CAC3B;IAED,YAAY,GAAY;QACtB,OAAO,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAAA,CAChE;IAED,cAAc,CAAC,MAA+B,EAAQ;QACpD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACzB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACvC,CAAC;IAAA,CACF;IAED,cAAc,GAA4B;QACxC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAAA,CAC/D;IAED,OAAO,GAAM;QACX,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,MAAM,EAAkB,CAAC;YAE5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,IAAI,CAAC,UAAU;iBACZ,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAA,CAClC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACZ,IAAI,CAAC,MAAM,GAAG,CAAU,CAAC;YAAA,CAC1B,CAAC;iBACD,OAAO,CAAC,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;gBAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC3C,CAAC;YAAA,CACF,CAAC,CAAC;YACL,OAAO,MAAM,CAAC,SAAS,EAAO,CAAC;QACjC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,cAAc,EAAO,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,MAAM,EAAkB,CAAC;YAE5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,OAAO,MAAM,CAAC,SAAS,EAAO,CAAC;QACjC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAAA,CACxD;CACF;AAED,MAAM,OAAO,gBAAgB;IAE3B,KAAK,GAAiB,SAAS,CAAC;IAEvB,MAAM,GAA0B,EAAE,CAAC;IAEnC,IAAI,CAAO;IACpB,YAAY,GAAS,EAAE;QACrB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAAA,CACjB;IAED,OAAO,GAAwB;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,CAAC,CAAC;IAAA,CACV;IAED,IAAI,WAAW,GAAW;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAAA,CAChF;IAED,IAAI,KAAK,GAAY;QACnB,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;IAAA,CACjC;IACD,IAAI,KAAK,GAA+B;QACtC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;IAAA,CAC7B;IAED,IAAI,KAAK,GAAsB;QAC7B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;IAAA,CAC7B;IAED,OAAO,CAAC,EAAoB,EAAK;QAC/B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACvB,IAAI,aAAsC,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC/B,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,cAAgC,CAAC,CAAC;gBACpE,CAAC;qBAAM,CAAC;oBACN,aAAa,GAAG,cAAyC,CAAC;gBAC5D,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAU,CAAC,CAAC;YAC7C,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,MAAM;aACR,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;aACrD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;aAC9B,OAAO,EAAE;aACT,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAEhD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IAAA,CACjC;IAED,KAAK,CAAC,EAAmB,EAAK;QAC5B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,EAAE,EAAE,CAAC;YACP,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,SAAc,CAAC;IAAA,CACvB;CACF;AAED,MAAM,OAAO,WAAW;IACtB,MAAM,GAAiB,SAAS,CAAC;IAEjC,YAAY,GAAuE,MAAM,CAAC,IAAI,EAAE,CAAC;IAExF,IAAI,CAAO;IACpB,YAAY,GAAS,EAAE;QACrB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAAA,CACjB;IAED,IAAI,KAAK,GAAY;QACnB,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC;IAAA,CACtE;IAED,IAAI,KAAK,GAA+B;QACtC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,KAAuB,CAAC;IAAA,CAC3D;IAED,IAAI,WAAW,GAAW;QACxB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC;IAAA,CAC/C;IAED,IAAI,KAAK,GAAsB;QAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC;IAAA,CACzC;IAED,IAAI,KAAK,GAAiB;QACxB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC;IAAA,CACzC;IAED,IAAI,CAAuC,EAAkB,EAAK;QAChE,IAAI,QAA0B,CAAC;QAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;YAC3B,IAAI,CAAC;gBAEH,MAAM,aAAa,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAM,CAAC;gBACzC,IAAI,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAa,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/E,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,eAAe,CAAa,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC9E,CAAC;gBACD,QAAQ,GAAG,GAAM,EAAE,CAAC,aAAa,CAAC;YACpC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,eAAe,CAAa,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC5E,QAAQ,GAAG,GAAM,EAAE,CAAC;oBAClB,MAAM,CAAC,CAAC;gBAAA,CACT,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;YAC5B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAA8B,CAAM,CAAC;IAAA,CAChF;IAED,KAAK,CAAuC,EAAmB,EAAK;QAClE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAoB,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YAEjC,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YACtE,OAAO,SAAc,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAwB,CAAM,CAAC;IAAA,CACxE;CACF;AAMD,MAAM,OAAO,KAAK;IACG,IAAI,CAAe;IAG7B,OAAO,CAAgB;IAChC,YAAY,OAAsB,EAAE,MAA2B,EAAE;QAC/D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,CAAO,MAAM,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAAA,CACjE;IAED,KAAK,CAAC,EAA8B,EAAW;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAAA,CAC5B;IAED,QAAQ,CAAC,EAA8B,EAAW;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAAA,CAC/B;IAED,QAAQ,CAAC,MAAkB,EAAQ;QACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAAA,CAChC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAqB,EAAc;QAChD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAAA,CAC9B;IAED,GAAG,CAAC,GAAkB,EAAK;QACzB,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,GAAG,GAAI,GAAe,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,KAAK,CAAC;IAAA,CACd;IAED,GAAG,CAAC,GAAkB,EAAW;QAC/B,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,GAAG,GAAI,GAAe,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAAA,CAC3B;IAMD,MAAM,CAAC,GAAM,EAAQ;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAAA,CACvB;IAED,KAAK,CAAC,GAAM,EAAQ;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,KAAK,EAAE,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAAA,CACvB;IAED,KAAK,GAAS;QACZ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAAA,CACnB;CACF;AAOD,MAAM,OAAO,eAA+B,SAAQ,KAA2B;IAC7E,YAAY,EAAE,GAAwB,EAAE,EAAE;QACxC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,WAAW,CAAO,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAAA,CAChD;IAED,CAAC,OAAO,GAAoC;QAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBACb,SAAS;YACX,CAAC;YACD,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACZ,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAI,CAAC,CAAC,KAAU,CAAC,EAAE,CAAC;YACtD,CAAC;QACH,CAAC;IAAA,CACF;IAMD,MAAM,GAAoB;QACxB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAAA,CACnC;CACF;AAED,MAAM,OAAO,cAA8B,SAAQ,KAA0B;IAC3E,YAAY,EAAE,GAAwB,EAAE,EAAE;QACxC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,UAAU,CAAO,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAAA,CAC/C;CACF;AAED,MAAM,aAAa;IACR,WAAW,GAAG,IAAI,WAAW,EAAK,CAAC;IAE5C,IAAI,CAAuC,EAAW,EAA+B;QACnF,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAAA,CACxC;CACF;AAED,MAAM,UAAU,IAAI,CAAgC,EAAW,EAA+B;IAC5F,MAAM,IAAI,GAAG,IAAI,aAAa,EAAK,CAAC;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAsC,CAAgC,CAAC;AAAA,CACzF"}
@@ -1,4 +1,4 @@
1
- import { Result, KeyedResolvOnce, ResolveOnce, ResolveSeq, Lazy } from "@adviser/cement";
1
+ import { Result, KeyedResolvOnce, ResolveOnce, ResolveSeq, Lazy, Future } from "@adviser/cement";
2
2
  describe("resolve-once", () => {
3
3
  it("sequence", async () => {
4
4
  const once = new ResolveOnce();
@@ -41,7 +41,8 @@ describe("resolve-once", () => {
41
41
  expect(diff).toBeGreaterThanOrEqual(99);
42
42
  expect(diff).toBeLessThan(150);
43
43
  });
44
- it("works with void", async () => {
44
+ it("async works with void", async () => {
45
+ const cnt = 1;
45
46
  const once = new ResolveOnce();
46
47
  const reallyOnce = vi.fn(async () => {
47
48
  return new Promise((resolve) => {
@@ -50,16 +51,27 @@ describe("resolve-once", () => {
50
51
  }, 100);
51
52
  });
52
53
  });
53
- const fn = () => once.once(async () => reallyOnce());
54
+ const fn = () => once.once(() => {
55
+ return reallyOnce();
56
+ });
54
57
  const start = Date.now();
55
- expect(await Promise.all(Array(100)
58
+ expect(await Promise.all(Array(cnt)
56
59
  .fill(fn)
57
- .map((fn) => fn()))).toEqual(Array(100).fill(undefined));
60
+ .map((fn) => fn()))).toEqual(Array(cnt).fill(undefined));
58
61
  expect(reallyOnce).toHaveBeenCalledTimes(1);
59
62
  const diff = Date.now() - start;
60
- expect(diff).toBeGreaterThanOrEqual(99);
63
+ expect(diff).toBeGreaterThanOrEqual(95);
61
64
  expect(diff).toBeLessThan(150);
62
65
  });
66
+ it("sync works with void", () => {
67
+ const once = new ResolveOnce();
68
+ const reallyOnce = vi.fn(() => 19);
69
+ const val = once.once(() => {
70
+ reallyOnce();
71
+ });
72
+ expect(Array(100).fill(val)).toEqual(Array(100).fill(undefined));
73
+ expect(reallyOnce).toHaveBeenCalledTimes(1);
74
+ });
63
75
  it("throws", async () => {
64
76
  const once = new ResolveOnce();
65
77
  const reallyOnce = vi.fn(async () => {
@@ -155,13 +167,13 @@ describe("resolve-once", () => {
155
167
  await once.once(orderFn);
156
168
  await once.once(orderFn);
157
169
  await once.once(orderFn);
158
- once.reset();
170
+ void once.reset();
159
171
  await once.once(orderFn);
160
172
  await once.once(orderFn);
161
- once.reset();
173
+ void once.reset();
162
174
  await once.once(orderFn);
163
175
  await once.once(orderFn);
164
- once.reset();
176
+ void once.reset();
165
177
  expect(orderFn).toHaveBeenCalledTimes(3);
166
178
  });
167
179
  it("keyed", async () => {
@@ -424,7 +436,18 @@ describe("resolve-once", () => {
424
436
  once.once(() => 42);
425
437
  expect(once.ready).toBe(true);
426
438
  expect(once.value).toBe(42);
427
- once.reset();
439
+ void once.reset();
440
+ expect(once.ready).toBe(false);
441
+ expect(once.value).toBe(undefined);
442
+ });
443
+ it("async resolve once serves ready and value", async () => {
444
+ const once = new ResolveOnce();
445
+ expect(once.ready).toBe(false);
446
+ expect(once.value).toBe(undefined);
447
+ await once.once(() => Promise.resolve(42));
448
+ expect(once.ready).toBe(true);
449
+ expect(once.value).toBe(42);
450
+ void once.reset();
428
451
  expect(once.ready).toBe(false);
429
452
  expect(once.value).toBe(undefined);
430
453
  });
@@ -458,6 +481,89 @@ class MyLazy {
458
481
  };
459
482
  }
460
483
  }
484
+ describe("Reset does not remove pending futures", () => {
485
+ it("reset are queued", async () => {
486
+ const once = new ResolveOnce();
487
+ const actions = [];
488
+ const actionCnt = 3;
489
+ const onceCallCnt = 3;
490
+ for (let i = 0; i < actionCnt; i++) {
491
+ const loop = i;
492
+ const futures = Array(onceCallCnt)
493
+ .fill(0)
494
+ .map(() => {
495
+ const f = new Future();
496
+ return f;
497
+ });
498
+ actions.push({
499
+ futures,
500
+ results: Array(onceCallCnt)
501
+ .fill(0)
502
+ .map((_, fidx) => once.once(() => futures[fidx].asPromise().then(() => {
503
+ const ret = loop ? fidx + loop + 42 : fidx + loop + 63;
504
+ return ret;
505
+ }))),
506
+ reset: once.reset(() => {
507
+ const ret = loop + 97;
508
+ return Promise.resolve(ret);
509
+ }),
510
+ });
511
+ }
512
+ expect(once.queueLength).toBe(actionCnt * onceCallCnt + actionCnt + actionCnt + 1);
513
+ [...actions].reverse().forEach((a) => {
514
+ [...a.futures].reverse().forEach((f) => {
515
+ f.resolve();
516
+ });
517
+ });
518
+ await Promise.all(actions.map((a) => a.reset));
519
+ expect(once.queueLength).toBe(actionCnt + 1);
520
+ for (let i = 0; i < actionCnt; i++) {
521
+ const a = actions[i];
522
+ expect(await Promise.all(a.results)).toEqual(Array(onceCallCnt)
523
+ .fill(0)
524
+ .map(() => (i ? i + 96 : i + 63)));
525
+ }
526
+ });
527
+ it("Reset does not remove pending futures", async () => {
528
+ const cnt = 10;
529
+ const once = new ResolveOnce();
530
+ const releaseOnce = new Future();
531
+ const waiting = Promise.all(Array(cnt)
532
+ .fill(0)
533
+ .map(() => {
534
+ return once.once(() => releaseOnce.asPromise().then(() => 24));
535
+ }));
536
+ const newValue = new Future();
537
+ let newWaiting;
538
+ const never = vi.fn();
539
+ const resetResult = once.reset(async () => {
540
+ newWaiting = Promise.all(Array(cnt)
541
+ .fill(0)
542
+ .map(() => once.once(() => {
543
+ never();
544
+ return 46;
545
+ })));
546
+ await newValue.asPromise();
547
+ return 42;
548
+ });
549
+ releaseOnce.resolve();
550
+ newValue.resolve();
551
+ expect(await resetResult).toBe(42);
552
+ const resWaiting = await waiting;
553
+ expect(resWaiting).toEqual(Array(cnt).fill(24));
554
+ const newWaitingResult = await newWaiting;
555
+ expect(newWaitingResult).toEqual(Array(cnt).fill(24));
556
+ expect(never).not.toHaveBeenCalled();
557
+ const resolvedReset = await resetResult;
558
+ expect(resolvedReset).toBe(42);
559
+ expect(await Promise.all(Array(cnt)
560
+ .fill(0)
561
+ .map(() => once.once(() => {
562
+ never();
563
+ return 49;
564
+ })))).toEqual(Array(cnt).fill(42));
565
+ });
566
+ });
461
567
  describe("Lazy Initialization", () => {
462
568
  it("ResolveOnce could be used for LazyInitialization", async () => {
463
569
  const my = new MyLazy();