@nlozgachev/pipelined 0.53.0 → 0.55.0

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.
package/dist/core.js CHANGED
@@ -1,2667 +1,4 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/Core/index.ts
21
- var Core_exports = {};
22
- __export(Core_exports, {
23
- Combinable: () => Combinable,
24
- Deferred: () => Deferred,
25
- Equality: () => Equality,
26
- Lazy: () => Lazy,
27
- Lens: () => Lens,
28
- Logged: () => Logged,
29
- Maybe: () => Maybe,
30
- Op: () => Op,
31
- Optional: () => Optional,
32
- Ordering: () => Ordering,
33
- Predicate: () => Predicate,
34
- Reader: () => Reader,
35
- Refinement: () => Refinement,
36
- RemoteData: () => RemoteData,
37
- Resource: () => Resource,
38
- Result: () => Result,
39
- State: () => State,
40
- Stream: () => Stream,
41
- Task: () => Task,
42
- These: () => These,
43
- Tuple: () => Tuple,
44
- Validation: () => Validation
45
- });
46
- module.exports = __toCommonJS(Core_exports);
47
-
48
- // src/Core/Combinable.ts
49
- var Combinable;
50
- ((Combinable2) => {
51
- Combinable2.string = { empty: "", combine: (b) => (a) => a + b };
52
- Combinable2.sum = { empty: 0, combine: (b) => (a) => a + b };
53
- Combinable2.product = { empty: 1, combine: (b) => (a) => a * b };
54
- Combinable2.all = { empty: true, combine: (b) => (a) => a && b };
55
- Combinable2.any = { empty: false, combine: (b) => (a) => a || b };
56
- Combinable2.array = () => ({ empty: [], combine: (b) => (a) => [...a, ...b] });
57
- Combinable2.maybe = (inner) => ({
58
- empty: Maybe.make.none(),
59
- combine: (b) => (a) => Maybe.is.none(a) ? b : Maybe.is.none(b) ? a : Maybe.make.some(inner.combine(b.value)(a.value))
60
- });
61
- Combinable2.fold = (c) => (data) => data.reduce((acc, x) => c.combine(x)(acc), c.empty);
62
- Combinable2.struct = (fields) => {
63
- const empty = {};
64
- for (const key in fields) {
65
- if (Object.hasOwn(fields, key)) {
66
- empty[key] = fields[key].empty;
67
- }
68
- }
69
- return {
70
- empty,
71
- combine: (b) => (a) => {
72
- const result = {};
73
- for (const key in fields) {
74
- if (Object.hasOwn(fields, key)) {
75
- result[key] = fields[key].combine(b[key])(a[key]);
76
- }
77
- }
78
- return result;
79
- }
80
- };
81
- };
82
- })(Combinable || (Combinable = {}));
83
-
84
- // src/Core/Deferred.ts
85
- var Deferred;
86
- ((Deferred2) => {
87
- let from;
88
- ((from2) => {
89
- from2.Promise = (p) => (
90
- // eslint-disable-next-line unicorn/no-thenable -- Deferred is intentionally thenable; it is the mechanism that makes Task awaitable
91
- { then: ((f) => p.then(f)) }
92
- );
93
- })(from = Deferred2.from || (Deferred2.from = {}));
94
- let to;
95
- ((to2) => {
96
- to2.Promise = (d) => new globalThis.Promise((resolve) => d.then(resolve));
97
- })(to = Deferred2.to || (Deferred2.to = {}));
98
- Deferred2.all = (deferreds) => from.Promise(globalThis.Promise.all(deferreds.map((d) => to.Promise(d))));
99
- Deferred2.race = (deferreds) => from.Promise(globalThis.Promise.race(deferreds.map((d) => to.Promise(d))));
100
- })(Deferred || (Deferred = {}));
101
-
102
- // src/Core/Equality.ts
103
- var Equality;
104
- ((Equality2) => {
105
- Equality2.string = (a, b) => a === b;
106
- Equality2.number = (a, b) => a === b;
107
- Equality2.boolean = (a, b) => a === b;
108
- Equality2.date = (a, b) => a.getTime() === b.getTime();
109
- Equality2.array = (eq) => (a, b) => a.length === b.length && a.every((x, i) => eq(x, b[i]));
110
- Equality2.by = (f) => (eq) => (a, b) => eq(f(a), f(b));
111
- Equality2.and = (eq2) => (eq1) => (a, b) => eq1(a, b) && eq2(a, b);
112
- Equality2.struct = (fields) => (a, b) => {
113
- for (const key in fields) {
114
- if (Object.hasOwn(fields, key)) {
115
- if (!fields[key](a[key], b[key])) {
116
- return false;
117
- }
118
- }
119
- }
120
- return true;
121
- };
122
- Equality2.tuple = (...equalities) => (a, b) => {
123
- if (a.length !== b.length) {
124
- return false;
125
- }
126
- for (let i = 0; i < equalities.length; i++) {
127
- if (!equalities[i](a[i], b[i])) {
128
- return false;
129
- }
130
- }
131
- return true;
132
- };
133
- })(Equality || (Equality = {}));
134
-
135
- // src/Core/Lazy.ts
136
- var Lazy;
137
- ((Lazy2) => {
138
- Lazy2.from = (f) => {
139
- let done = false;
140
- let cache;
141
- return {
142
- get: () => {
143
- if (!done) {
144
- cache = f();
145
- done = true;
146
- }
147
- return cache;
148
- }
149
- };
150
- };
151
- Lazy2.evaluate = (lazy) => lazy.get();
152
- Lazy2.map = (f) => (lazy) => Lazy2.from(() => f(lazy.get()));
153
- Lazy2.chain = (f) => (lazy) => Lazy2.from(() => f(lazy.get()).get());
154
- Lazy2.tap = (f) => (lazy) => Lazy2.from(() => {
155
- const v = lazy.get();
156
- f(v);
157
- return v;
158
- });
159
- })(Lazy || (Lazy = {}));
160
-
161
- // src/Core/Lens.ts
162
- var Lens;
163
- ((Lens3) => {
164
- let from;
165
- ((from2) => {
166
- from2.accessors = (get2, set2) => ({ get: get2, set: set2 });
167
- from2.property = () => (key) => (0, from2.accessors)((s) => s[key], (a) => (s) => ({ ...s, [key]: a }));
168
- })(from = Lens3.from || (Lens3.from = {}));
169
- Lens3.get = (lens) => (s) => lens.get(s);
170
- Lens3.set = (lens) => (a) => (s) => lens.set(a)(s);
171
- Lens3.modify = (lens) => (f) => (s) => lens.set(f(lens.get(s)))(s);
172
- Lens3.andThen = (inner) => (outer) => from.accessors((s) => inner.get(outer.get(s)), (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s));
173
- Lens3.andThenOptional = (inner) => (outer) => ({
174
- get: (s) => inner.get(outer.get(s)),
175
- set: (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
176
- });
177
- Lens3.toOptional = (lens) => ({
178
- get: (s) => ({ kind: "Some", value: lens.get(s) }),
179
- set: lens.set
180
- });
181
- })(Lens || (Lens = {}));
182
-
183
- // src/Core/Logged.ts
184
- var Logged;
185
- ((Logged2) => {
186
- let from;
187
- ((from2) => {
188
- from2.value = (val) => ({ value: val, log: [] });
189
- from2.entry = (logEntry) => ({ value: void 0, log: [logEntry] });
190
- })(from = Logged2.from || (Logged2.from = {}));
191
- Logged2.map = (f) => (data) => ({
192
- value: f(data.value),
193
- log: data.log
194
- });
195
- Logged2.chain = (f) => (data) => {
196
- const next = f(data.value);
197
- return { value: next.value, log: [...data.log, ...next.log] };
198
- };
199
- Logged2.ap = (arg) => (data) => ({
200
- value: data.value(arg.value),
201
- log: [...data.log, ...arg.log]
202
- });
203
- Logged2.tap = (f) => (data) => {
204
- f(data.value);
205
- return data;
206
- };
207
- Logged2.run = (data) => [data.value, data.log];
208
- Logged2.bindTo = (key) => (data) => (0, Logged2.map)((a) => ({ [key]: a }))(data);
209
- Logged2.bind = (key, f) => (data) => (0, Logged2.chain)(
210
- (a) => (0, Logged2.map)((b) => ({ ...a, [key]: b }))(f(a))
211
- )(data);
212
- Logged2.focus = (lens) => (f) => (data) => ({
213
- value: lens.set(f(lens.get(data.value)))(data.value),
214
- log: data.log
215
- });
216
- })(Logged || (Logged = {}));
217
-
218
- // src/Core/Maybe.ts
219
- var _none = { kind: "None" };
220
- var Maybe;
221
- ((Maybe3) => {
222
- let make;
223
- ((make2) => {
224
- make2.some = (value) => ({ kind: "Some", value });
225
- make2.none = () => _none;
226
- })(make = Maybe3.make || (Maybe3.make = {}));
227
- let is;
228
- ((is2) => {
229
- is2.some = (data) => data.kind === "Some";
230
- is2.none = (data) => data.kind === "None";
231
- })(is = Maybe3.is || (Maybe3.is = {}));
232
- let to;
233
- ((to2) => {
234
- to2.nullable = (data) => is.some(data) ? data.value : null;
235
- to2.undefined = (data) => is.some(data) ? data.value : globalThis.undefined;
236
- to2.Result = (onNone) => (data) => is.some(data) ? Result.make.ok(data.value) : Result.make.err(onNone());
237
- })(to = Maybe3.to || (Maybe3.to = {}));
238
- let from;
239
- ((from2) => {
240
- from2.nullable = (value) => value === null || value === void 0 ? make.none() : make.some(value);
241
- from2.Predicate = (pred) => (a) => pred(a) ? make.some(a) : make.none();
242
- from2.Result = (data) => Result.is.ok(data) ? make.some(data.value) : make.none();
243
- })(from = Maybe3.from || (Maybe3.from = {}));
244
- Maybe3.map = (f) => (data) => is.some(data) ? make.some(f(data.value)) : data;
245
- Maybe3.chain = (f) => (data) => is.some(data) ? f(data.value) : data;
246
- Maybe3.fold = (onNone, onSome) => (data) => is.some(data) ? onSome(data.value) : onNone();
247
- Maybe3.match = (cases) => (data) => is.some(data) ? cases.some(data.value) : cases.none();
248
- Maybe3.getOrElse = (defaultValue) => (data) => is.some(data) ? data.value : defaultValue();
249
- Maybe3.tap = (f) => (data) => {
250
- if (is.some(data)) {
251
- f(data.value);
252
- }
253
- return data;
254
- };
255
- Maybe3.filter = (predicate) => (data) => is.some(data) ? predicate(data.value) ? data : make.none() : data;
256
- Maybe3.recover = (fallback) => (data) => is.some(data) ? data : fallback();
257
- Maybe3.ap = (arg) => (data) => is.some(data) && is.some(arg) ? make.some(data.value(arg.value)) : make.none();
258
- Maybe3.bindTo = (key) => (data) => (0, Maybe3.map)((a) => ({ [key]: a }))(data);
259
- Maybe3.bind = (key, f) => (data) => (0, Maybe3.chain)(
260
- (a) => (0, Maybe3.map)((b) => ({ ...a, [key]: b }))(f(a))
261
- )(data);
262
- Maybe3.struct = (fields) => {
263
- const result = {};
264
- for (const key in fields) {
265
- if (Object.hasOwn(fields, key)) {
266
- const res = fields[key];
267
- if (is.none(res)) {
268
- return res;
269
- }
270
- result[key] = res.value;
271
- }
272
- }
273
- return make.some(result);
274
- };
275
- Maybe3.transposeResult = (data) => is.none(data) ? Result.make.ok(make.none()) : Result.is.ok(data.value) ? Result.make.ok(make.some(data.value.value)) : Result.make.err(data.value.error);
276
- })(Maybe || (Maybe = {}));
277
-
278
- // src/Types/Brand.ts
279
- var Brand;
280
- ((Brand2) => {
281
- Brand2.wrap = () => (value) => value;
282
- Brand2.unwrap = (branded) => branded;
283
- })(Brand || (Brand = {}));
284
-
285
- // src/Types/Duration.ts
286
- var Duration;
287
- ((Duration2) => {
288
- const wrap = Brand.wrap();
289
- Duration2.milliseconds = (ms) => wrap(ms);
290
- Duration2.seconds = (s) => wrap(s * 1e3);
291
- Duration2.minutes = (m) => wrap(m * 60 * 1e3);
292
- Duration2.hours = (h) => wrap(h * 60 * 60 * 1e3);
293
- Duration2.days = (d) => wrap(d * 24 * 60 * 60 * 1e3);
294
- let to;
295
- ((to2) => {
296
- to2.milliseconds = (d) => Brand.unwrap(d);
297
- to2.seconds = (d) => Brand.unwrap(d) / 1e3;
298
- to2.minutes = (d) => Brand.unwrap(d) / (60 * 1e3);
299
- to2.hours = (d) => Brand.unwrap(d) / (60 * 60 * 1e3);
300
- to2.days = (d) => Brand.unwrap(d) / (24 * 60 * 60 * 1e3);
301
- })(to = Duration2.to || (Duration2.to = {}));
302
- Duration2.add = (other) => (self) => wrap(Brand.unwrap(self) + Brand.unwrap(other));
303
- Duration2.subtract = (other) => (self) => wrap(Brand.unwrap(self) - Brand.unwrap(other));
304
- })(Duration || (Duration = {}));
305
-
306
- // src/internal/Op.util.ts
307
- var _abortedNil = { kind: "OpNil", reason: "aborted" };
308
- var _droppedNil = { kind: "OpNil", reason: "dropped" };
309
- var _replacedNil = { kind: "OpNil", reason: "replaced" };
310
- var _evictedNil = { kind: "OpNil", reason: "evicted" };
311
- var _idle = { kind: "Idle" };
312
- var _pending = { kind: "Pending" };
313
- var ok = (value) => ({ kind: "OpOk", value });
314
- var err = (error) => ({ kind: "OpErr", error });
315
- var getMs = (duration) => Duration.to.milliseconds(duration);
316
- var cancellableWait = (duration, signal) => {
317
- const rawMs = getMs(duration);
318
- if (rawMs <= 0) {
319
- return Promise.resolve();
320
- }
321
- return new Promise((resolve) => {
322
- const id = setTimeout(resolve, rawMs);
323
- signal.addEventListener("abort", () => {
324
- clearTimeout(id);
325
- resolve();
326
- }, { once: true });
327
- });
328
- };
329
- var runWithRetry = (op, input, signal, options, onRetrying) => {
330
- const { attempts, backoff, when: shouldRetry } = options;
331
- const getDelay = (n) => {
332
- if (backoff === void 0) {
333
- return void 0;
334
- }
335
- return typeof backoff === "function" ? backoff(n) : backoff;
336
- };
337
- const attempt = async (left) => {
338
- const result = await Deferred.to.Promise(op._factory(input, signal));
339
- if (result === null || signal.aborted) {
340
- return null;
341
- }
342
- if (result.kind === "Ok") {
343
- return result;
344
- }
345
- if (left <= 1) {
346
- return result;
347
- }
348
- if (shouldRetry !== void 0 && !shouldRetry(result.error)) {
349
- return result;
350
- }
351
- const attemptNumber = attempts - left + 1;
352
- const delayDuration = getDelay(attemptNumber);
353
- const ms = delayDuration ? getMs(delayDuration) : 0;
354
- onRetrying({
355
- kind: "Retrying",
356
- attempt: attemptNumber,
357
- lastError: result.error,
358
- ...ms > 0 ? { nextRetryIn: ms } : {}
359
- });
360
- if (delayDuration) {
361
- await cancellableWait(delayDuration, signal);
362
- }
363
- if (signal.aborted) {
364
- return null;
365
- }
366
- return attempt(left - 1);
367
- };
368
- return attempt(attempts);
369
- };
370
- var execute = (op, input, controller, retryOptions, timeoutOptions, onRetrying) => {
371
- const { signal } = controller;
372
- const toOutcome = (r) => r === null ? _abortedNil : r.kind === "Ok" ? ok(r.value) : err(r.error);
373
- const runPromise = retryOptions !== void 0 && onRetrying !== void 0 ? runWithRetry(op, input, signal, retryOptions, onRetrying).then(toOutcome) : Deferred.to.Promise(op._factory(input, signal)).then(toOutcome);
374
- if (timeoutOptions === void 0) {
375
- return Deferred.from.Promise(runPromise);
376
- }
377
- let timerId;
378
- return Deferred.from.Promise(Promise.race([
379
- runPromise.then((outcome) => {
380
- clearTimeout(timerId);
381
- return outcome;
382
- }),
383
- new Promise((resolve) => {
384
- timerId = setTimeout(() => {
385
- controller.abort();
386
- resolve(err(timeoutOptions.onTimeout()));
387
- }, getMs(timeoutOptions.duration));
388
- })
389
- ]));
390
- };
391
- var makeRestartable = (op, minInterval, retryOptions, timeoutOptions) => {
392
- let currentState = _idle;
393
- let currentController;
394
- let currentResolve;
395
- let waitController;
396
- let lastStartTime = 0;
397
- const subscribers = /* @__PURE__ */ new Set();
398
- const emit = (state) => {
399
- currentState = state;
400
- subscribers.forEach((cb) => cb(state));
401
- };
402
- const run = (input) => Deferred.from.Promise(
403
- new Promise((resolve) => {
404
- waitController?.abort();
405
- waitController = void 0;
406
- currentController?.abort();
407
- const prev = currentResolve;
408
- currentResolve = resolve;
409
- currentController = new AbortController();
410
- const controller = currentController;
411
- prev?.(_replacedNil);
412
- const startExecution = () => {
413
- if (currentController !== controller) {
414
- return;
415
- }
416
- lastStartTime = Date.now();
417
- emit(_pending);
418
- const onRetrying = retryOptions ? (r) => {
419
- if (currentController === controller) {
420
- emit(r);
421
- }
422
- } : void 0;
423
- execute(op, input, controller, retryOptions, timeoutOptions, onRetrying).then((outcome) => {
424
- if (currentController !== controller) {
425
- return;
426
- }
427
- const r = currentResolve;
428
- currentResolve = void 0;
429
- currentController = void 0;
430
- emit(outcome);
431
- r?.(outcome);
432
- });
433
- };
434
- const gap = minInterval !== void 0 ? Math.max(0, getMs(minInterval) - (Date.now() - lastStartTime)) : 0;
435
- if (gap > 0) {
436
- waitController = new AbortController();
437
- const wc = waitController;
438
- cancellableWait(Duration.milliseconds(gap), wc.signal).then(() => {
439
- if (waitController === wc) {
440
- waitController = void 0;
441
- }
442
- startExecution();
443
- });
444
- } else {
445
- startExecution();
446
- }
447
- })
448
- );
449
- const abort = () => {
450
- waitController?.abort();
451
- waitController = void 0;
452
- currentController?.abort();
453
- currentController = void 0;
454
- const r = currentResolve;
455
- currentResolve = void 0;
456
- if (currentState.kind !== "Idle") {
457
- emit(_abortedNil);
458
- }
459
- r?.(_abortedNil);
460
- };
461
- return {
462
- get state() {
463
- return currentState;
464
- },
465
- run,
466
- abort,
467
- subscribe: (cb) => {
468
- subscribers.add(cb);
469
- if (currentState.kind !== "Idle") {
470
- cb(currentState);
471
- }
472
- return () => subscribers.delete(cb);
473
- },
474
- reset: () => emit(_idle),
475
- poll: (input, { interval }) => {
476
- void run(input);
477
- const id = setInterval(() => void run(input), getMs(interval));
478
- return () => clearInterval(id);
479
- }
480
- };
481
- };
482
- var makeExclusive = (op, cooldown, retryOptions, timeoutOptions) => {
483
- let currentState = _idle;
484
- let currentController;
485
- let currentResolve;
486
- let cooldownTimer;
487
- const subscribers = /* @__PURE__ */ new Set();
488
- const emit = (state) => {
489
- currentState = state;
490
- subscribers.forEach((cb) => cb(state));
491
- };
492
- const run = (input) => {
493
- if (currentController !== void 0 || cooldownTimer !== void 0) {
494
- return Deferred.from.Promise(Promise.resolve(_droppedNil));
495
- }
496
- return Deferred.from.Promise(
497
- new Promise((resolve) => {
498
- currentResolve = resolve;
499
- currentController = new AbortController();
500
- const controller = currentController;
501
- emit(_pending);
502
- const onRetrying = retryOptions ? (r) => {
503
- if (currentController === controller) {
504
- emit(r);
505
- }
506
- } : void 0;
507
- execute(op, input, controller, retryOptions, timeoutOptions, onRetrying).then((outcome) => {
508
- if (currentController !== controller) {
509
- return;
510
- }
511
- const r = currentResolve;
512
- currentResolve = void 0;
513
- currentController = void 0;
514
- emit(outcome);
515
- r?.(outcome);
516
- if (cooldown !== void 0) {
517
- const rawCooldown = getMs(cooldown);
518
- if (rawCooldown > 0) {
519
- cooldownTimer = setTimeout(() => {
520
- cooldownTimer = void 0;
521
- }, rawCooldown);
522
- }
523
- }
524
- });
525
- })
526
- );
527
- };
528
- const abort = () => {
529
- if (cooldownTimer !== void 0) {
530
- clearTimeout(cooldownTimer);
531
- cooldownTimer = void 0;
532
- }
533
- currentController?.abort();
534
- currentController = void 0;
535
- const r = currentResolve;
536
- currentResolve = void 0;
537
- if (currentState.kind !== "Idle") {
538
- emit(_abortedNil);
539
- }
540
- r?.(_abortedNil);
541
- };
542
- return {
543
- get state() {
544
- return currentState;
545
- },
546
- run,
547
- abort,
548
- subscribe: (cb) => {
549
- subscribers.add(cb);
550
- if (currentState.kind !== "Idle") {
551
- cb(currentState);
552
- }
553
- return () => subscribers.delete(cb);
554
- },
555
- reset: () => emit(_idle),
556
- poll: (input, { interval }) => {
557
- void run(input);
558
- const id = setInterval(() => void run(input), getMs(interval));
559
- return () => clearInterval(id);
560
- }
561
- };
562
- };
563
- var makeQueue = (op, maxSize, overflow, concurrency, dedupe, retryOptions, timeoutOptions) => {
564
- const maxConcurrency = concurrency ?? 1;
565
- let currentState = _idle;
566
- let generation = 0;
567
- let inFlight = 0;
568
- const queue = [];
569
- const inflightControllers = /* @__PURE__ */ new Set();
570
- const inflightResolvers = [];
571
- const subscribers = /* @__PURE__ */ new Set();
572
- const emit = (state) => {
573
- currentState = state;
574
- subscribers.forEach((cb) => cb(state));
575
- };
576
- const startOne = (input, resolve, myGeneration) => {
577
- inFlight++;
578
- const controller = new AbortController();
579
- inflightControllers.add(controller);
580
- inflightResolvers.push(resolve);
581
- emit(_pending);
582
- const onRetrying = retryOptions ? (r) => {
583
- if (generation === myGeneration && inflightControllers.has(controller)) {
584
- emit(r);
585
- }
586
- } : void 0;
587
- execute(op, input, controller, retryOptions, timeoutOptions, onRetrying).then((outcome) => {
588
- inflightControllers.delete(controller);
589
- const idx = inflightResolvers.indexOf(resolve);
590
- if (idx !== -1) {
591
- inflightResolvers.splice(idx, 1);
592
- }
593
- if (generation !== myGeneration) {
594
- resolve(_abortedNil);
595
- return;
596
- }
597
- inFlight--;
598
- emit(outcome);
599
- resolve(outcome);
600
- if (queue.length > 0) {
601
- const next = queue.shift();
602
- startOne(next.input, next.resolve, generation);
603
- }
604
- });
605
- };
606
- const run = (input) => {
607
- const myGeneration = generation;
608
- if (dedupe !== void 0) {
609
- const idx = queue.findIndex((item) => dedupe(input, item.input));
610
- if (idx !== -1) {
611
- const dup = queue.splice(idx, 1)[0];
612
- dup.resolve(_droppedNil);
613
- }
614
- }
615
- if (inFlight < maxConcurrency) {
616
- return Deferred.from.Promise(
617
- new Promise((resolve) => {
618
- startOne(input, resolve, myGeneration);
619
- })
620
- );
621
- }
622
- if (maxSize === void 0 || queue.length < maxSize) {
623
- return Deferred.from.Promise(
624
- new Promise((resolve) => {
625
- queue.push({ input, resolve });
626
- emit({ kind: "Queued", position: queue.length - 1 });
627
- })
628
- );
629
- }
630
- if (overflow === "replace-last") {
631
- return Deferred.from.Promise(
632
- new Promise((resolve) => {
633
- const tail = queue.pop();
634
- tail.resolve(_evictedNil);
635
- queue.push({ input, resolve });
636
- emit({ kind: "Queued", position: queue.length - 1 });
637
- })
638
- );
639
- }
640
- return Deferred.from.Promise(Promise.resolve(_droppedNil));
641
- };
642
- const abort = () => {
643
- generation++;
644
- inflightControllers.forEach((c) => c.abort());
645
- inflightControllers.clear();
646
- const toResolve = inflightResolvers.splice(0);
647
- const queuedResolvers = queue.splice(0).map((item) => item.resolve);
648
- inFlight = 0;
649
- if (currentState.kind !== "Idle") {
650
- emit(_abortedNil);
651
- }
652
- toResolve.forEach((r) => r(_abortedNil));
653
- queuedResolvers.forEach((r) => r(_abortedNil));
654
- };
655
- return {
656
- get state() {
657
- return currentState;
658
- },
659
- run,
660
- abort,
661
- subscribe: (cb) => {
662
- subscribers.add(cb);
663
- if (currentState.kind !== "Idle") {
664
- cb(currentState);
665
- }
666
- return () => subscribers.delete(cb);
667
- },
668
- reset: () => emit(_idle),
669
- poll: (input, { interval }) => {
670
- void run(input);
671
- const id = setInterval(() => void run(input), getMs(interval));
672
- return () => clearInterval(id);
673
- }
674
- };
675
- };
676
- var makeBuffered = (op, size, retryOptions, timeoutOptions) => {
677
- const bufferSize = size ?? 1;
678
- let currentState = _idle;
679
- let currentController;
680
- let currentResolve;
681
- const buffer = [];
682
- const subscribers = /* @__PURE__ */ new Set();
683
- const emit = (state) => {
684
- currentState = state;
685
- subscribers.forEach((cb) => cb(state));
686
- };
687
- const startRun = (input, resolve) => {
688
- currentResolve = resolve;
689
- currentController = new AbortController();
690
- const controller = currentController;
691
- emit(_pending);
692
- const onRetrying = retryOptions ? (r) => {
693
- if (currentController === controller) {
694
- emit(r);
695
- }
696
- } : void 0;
697
- execute(op, input, controller, retryOptions, timeoutOptions, onRetrying).then((outcome) => {
698
- if (currentController !== controller) {
699
- return;
700
- }
701
- const r = currentResolve;
702
- currentResolve = void 0;
703
- currentController = void 0;
704
- emit(outcome);
705
- r?.(outcome);
706
- if (buffer.length > 0) {
707
- const next = buffer.shift();
708
- startRun(next.input, next.resolve);
709
- }
710
- });
711
- };
712
- const run = (input) => Deferred.from.Promise(
713
- new Promise((resolve) => {
714
- if (currentController === void 0) {
715
- startRun(input, resolve);
716
- } else if (buffer.length < bufferSize) {
717
- buffer.push({ input, resolve });
718
- emit({ kind: "Queued", position: buffer.length - 1 });
719
- } else {
720
- const evicted = buffer.shift();
721
- evicted.resolve(_evictedNil);
722
- buffer.push({ input, resolve });
723
- emit({ kind: "Queued", position: buffer.length - 1 });
724
- }
725
- })
726
- );
727
- const abort = () => {
728
- currentController?.abort();
729
- currentController = void 0;
730
- const cr = currentResolve;
731
- currentResolve = void 0;
732
- const bufferedResolvers = buffer.splice(0).map((item) => item.resolve);
733
- if (currentState.kind !== "Idle") {
734
- emit(_abortedNil);
735
- }
736
- cr?.(_abortedNil);
737
- bufferedResolvers.forEach((r) => r(_abortedNil));
738
- };
739
- return {
740
- get state() {
741
- return currentState;
742
- },
743
- run,
744
- abort,
745
- subscribe: (cb) => {
746
- subscribers.add(cb);
747
- if (currentState.kind !== "Idle") {
748
- cb(currentState);
749
- }
750
- return () => subscribers.delete(cb);
751
- },
752
- reset: () => emit(_idle),
753
- poll: (input, { interval }) => {
754
- void run(input);
755
- const id = setInterval(() => void run(input), getMs(interval));
756
- return () => clearInterval(id);
757
- }
758
- };
759
- };
760
- var makeDebounced = (op, duration, leading, maxWait, retryOptions, timeoutOptions) => {
761
- let currentState = _idle;
762
- let currentController;
763
- let currentResolve;
764
- let leadingController;
765
- let leadingResolve;
766
- let pendingResolve;
767
- let timerId;
768
- let pendingInput;
769
- let firstCallAt = 0;
770
- const subscribers = /* @__PURE__ */ new Set();
771
- const emit = (state) => {
772
- currentState = state;
773
- subscribers.forEach((cb) => cb(state));
774
- };
775
- const fireLeading = (input, resolve) => {
776
- leadingController = new AbortController();
777
- const controller = leadingController;
778
- leadingResolve = resolve;
779
- emit(_pending);
780
- const onRetrying = retryOptions ? (r) => {
781
- if (leadingController === controller) {
782
- emit(r);
783
- }
784
- } : void 0;
785
- execute(op, input, controller, retryOptions, timeoutOptions, onRetrying).then((outcome) => {
786
- if (leadingController !== controller) {
787
- return;
788
- }
789
- const r = leadingResolve;
790
- leadingResolve = void 0;
791
- leadingController = void 0;
792
- emit(outcome);
793
- r?.(outcome);
794
- });
795
- };
796
- const fireTrailing = () => {
797
- timerId = void 0;
798
- firstCallAt = 0;
799
- const capturedResolve = pendingResolve;
800
- pendingResolve = void 0;
801
- if (capturedResolve === void 0) {
802
- return;
803
- }
804
- currentResolve = capturedResolve;
805
- const toRun = pendingInput;
806
- pendingInput = void 0;
807
- currentController = new AbortController();
808
- const controller = currentController;
809
- emit(_pending);
810
- const onRetrying = retryOptions ? (r) => {
811
- if (currentController === controller) {
812
- emit(r);
813
- }
814
- } : void 0;
815
- execute(op, toRun, controller, retryOptions, timeoutOptions, onRetrying).then((outcome) => {
816
- if (currentController !== controller) {
817
- return;
818
- }
819
- const r = currentResolve;
820
- currentResolve = void 0;
821
- currentController = void 0;
822
- emit(outcome);
823
- r?.(outcome);
824
- });
825
- };
826
- const scheduleTrailing = () => {
827
- if (timerId !== void 0) {
828
- clearTimeout(timerId);
829
- }
830
- let delay = getMs(duration);
831
- if (maxWait !== void 0 && firstCallAt > 0) {
832
- const maxDelay = firstCallAt + getMs(maxWait) - Date.now();
833
- delay = Math.min(getMs(duration), Math.max(0, maxDelay));
834
- }
835
- timerId = setTimeout(fireTrailing, delay);
836
- };
837
- const inDebounceWindow = () => timerId !== void 0 || leadingController !== void 0 || currentController !== void 0;
838
- const run = (input) => Deferred.from.Promise(
839
- new Promise((resolve) => {
840
- if (!inDebounceWindow()) {
841
- firstCallAt = Date.now();
842
- if (leading) {
843
- fireLeading(input, resolve);
844
- scheduleTrailing();
845
- } else {
846
- pendingInput = input;
847
- pendingResolve = resolve;
848
- scheduleTrailing();
849
- }
850
- } else {
851
- const prev = pendingResolve;
852
- pendingInput = input;
853
- pendingResolve = resolve;
854
- prev?.(_evictedNil);
855
- scheduleTrailing();
856
- }
857
- })
858
- );
859
- const abort = () => {
860
- if (timerId !== void 0) {
861
- clearTimeout(timerId);
862
- timerId = void 0;
863
- pendingInput = void 0;
864
- firstCallAt = 0;
865
- }
866
- const pr = pendingResolve;
867
- pendingResolve = void 0;
868
- const cr = currentResolve;
869
- currentResolve = void 0;
870
- currentController?.abort();
871
- currentController = void 0;
872
- const lr = leadingResolve;
873
- leadingResolve = void 0;
874
- leadingController?.abort();
875
- leadingController = void 0;
876
- if (currentState.kind !== "Idle") {
877
- emit(_abortedNil);
878
- }
879
- pr?.(_abortedNil);
880
- cr?.(_abortedNil);
881
- lr?.(_abortedNil);
882
- };
883
- return {
884
- get state() {
885
- return currentState;
886
- },
887
- run,
888
- abort,
889
- subscribe: (cb) => {
890
- subscribers.add(cb);
891
- if (currentState.kind !== "Idle") {
892
- cb(currentState);
893
- }
894
- return () => subscribers.delete(cb);
895
- },
896
- reset: () => emit(_idle),
897
- poll: (input, { interval }) => {
898
- void run(input);
899
- const id = setInterval(() => void run(input), getMs(interval));
900
- return () => clearInterval(id);
901
- }
902
- };
903
- };
904
- var makeThrottled = (op, duration, trailing, retryOptions, timeoutOptions) => {
905
- let currentState = _idle;
906
- let currentController;
907
- let currentResolve;
908
- let cooldownTimer;
909
- let pendingInput;
910
- let pendingResolve;
911
- const subscribers = /* @__PURE__ */ new Set();
912
- const emit = (state) => {
913
- currentState = state;
914
- subscribers.forEach((cb) => cb(state));
915
- };
916
- const fireOp = (input, resolve) => {
917
- currentResolve = resolve;
918
- currentController = new AbortController();
919
- const controller = currentController;
920
- emit(_pending);
921
- const onRetrying = retryOptions ? (r) => {
922
- if (currentController === controller) {
923
- emit(r);
924
- }
925
- } : void 0;
926
- execute(op, input, controller, retryOptions, timeoutOptions, onRetrying).then((outcome) => {
927
- if (currentController !== controller) {
928
- return;
929
- }
930
- const r = currentResolve;
931
- currentResolve = void 0;
932
- currentController = void 0;
933
- emit(outcome);
934
- r?.(outcome);
935
- });
936
- };
937
- const startCooldown = () => {
938
- cooldownTimer = setTimeout(() => {
939
- cooldownTimer = void 0;
940
- if (trailing && pendingInput !== void 0) {
941
- const input = pendingInput;
942
- const resolve = pendingResolve;
943
- pendingInput = void 0;
944
- pendingResolve = void 0;
945
- fireOp(input, resolve);
946
- startCooldown();
947
- }
948
- }, getMs(duration));
949
- };
950
- const run = (input) => {
951
- if (cooldownTimer !== void 0) {
952
- if (!trailing) {
953
- return Deferred.from.Promise(Promise.resolve(_droppedNil));
954
- }
955
- return Deferred.from.Promise(
956
- new Promise((resolve) => {
957
- const prev = pendingResolve;
958
- pendingInput = input;
959
- pendingResolve = resolve;
960
- prev?.(_evictedNil);
961
- })
962
- );
963
- }
964
- return Deferred.from.Promise(
965
- new Promise((resolve) => {
966
- fireOp(input, resolve);
967
- startCooldown();
968
- })
969
- );
970
- };
971
- const abort = () => {
972
- if (cooldownTimer !== void 0) {
973
- clearTimeout(cooldownTimer);
974
- cooldownTimer = void 0;
975
- }
976
- currentController?.abort();
977
- currentController = void 0;
978
- const cr = currentResolve;
979
- currentResolve = void 0;
980
- const pr = pendingResolve;
981
- pendingResolve = void 0;
982
- pendingInput = void 0;
983
- if (currentState.kind !== "Idle") {
984
- emit(_abortedNil);
985
- }
986
- cr?.(_abortedNil);
987
- pr?.(_abortedNil);
988
- };
989
- return {
990
- get state() {
991
- return currentState;
992
- },
993
- run,
994
- abort,
995
- subscribe: (cb) => {
996
- subscribers.add(cb);
997
- if (currentState.kind !== "Idle") {
998
- cb(currentState);
999
- }
1000
- return () => subscribers.delete(cb);
1001
- },
1002
- reset: () => emit(_idle),
1003
- poll: (input, { interval }) => {
1004
- void run(input);
1005
- const id = setInterval(() => void run(input), getMs(interval));
1006
- return () => clearInterval(id);
1007
- }
1008
- };
1009
- };
1010
- var makeConcurrent = (op, n, overflow, retryOptions, timeoutOptions) => {
1011
- let currentState = _idle;
1012
- let inflight = 0;
1013
- let generation = 0;
1014
- const controllers = /* @__PURE__ */ new Set();
1015
- const inflightResolvers = [];
1016
- const overflowQueue = [];
1017
- const subscribers = /* @__PURE__ */ new Set();
1018
- const emit = (state) => {
1019
- currentState = state;
1020
- subscribers.forEach((cb) => cb(state));
1021
- };
1022
- const startOne = (input, resolve, myGeneration) => {
1023
- inflight++;
1024
- const controller = new AbortController();
1025
- controllers.add(controller);
1026
- inflightResolvers.push(resolve);
1027
- emit(_pending);
1028
- const onRetrying = retryOptions ? (r) => {
1029
- if (generation === myGeneration && controllers.has(controller)) {
1030
- emit(r);
1031
- }
1032
- } : void 0;
1033
- execute(op, input, controller, retryOptions, timeoutOptions, onRetrying).then((outcome) => {
1034
- controllers.delete(controller);
1035
- const idx = inflightResolvers.indexOf(resolve);
1036
- if (idx !== -1) {
1037
- inflightResolvers.splice(idx, 1);
1038
- }
1039
- if (generation !== myGeneration) {
1040
- resolve(_abortedNil);
1041
- return;
1042
- }
1043
- inflight--;
1044
- emit(outcome);
1045
- resolve(outcome);
1046
- if (overflowQueue.length > 0) {
1047
- const next = overflowQueue.shift();
1048
- startOne(next.input, next.resolve, generation);
1049
- }
1050
- });
1051
- };
1052
- const run = (input) => {
1053
- const myGeneration = generation;
1054
- if (inflight < n) {
1055
- return Deferred.from.Promise(
1056
- new Promise((resolve) => {
1057
- startOne(input, resolve, myGeneration);
1058
- })
1059
- );
1060
- }
1061
- if (overflow === "drop") {
1062
- return Deferred.from.Promise(Promise.resolve(_droppedNil));
1063
- }
1064
- return Deferred.from.Promise(
1065
- new Promise((resolve) => {
1066
- overflowQueue.push({ input, resolve });
1067
- emit({ kind: "Queued", position: overflowQueue.length - 1 });
1068
- })
1069
- );
1070
- };
1071
- const abort = () => {
1072
- generation++;
1073
- controllers.forEach((c) => c.abort());
1074
- controllers.clear();
1075
- const toResolve = inflightResolvers.splice(0);
1076
- const queuedResolvers = overflowQueue.splice(0).map((item) => item.resolve);
1077
- inflight = 0;
1078
- if (currentState.kind !== "Idle") {
1079
- emit(_abortedNil);
1080
- }
1081
- toResolve.forEach((r) => r(_abortedNil));
1082
- queuedResolvers.forEach((r) => r(_abortedNil));
1083
- };
1084
- return {
1085
- get state() {
1086
- return currentState;
1087
- },
1088
- run,
1089
- abort,
1090
- subscribe: (cb) => {
1091
- subscribers.add(cb);
1092
- if (currentState.kind !== "Idle") {
1093
- cb(currentState);
1094
- }
1095
- return () => subscribers.delete(cb);
1096
- },
1097
- reset: () => emit(_idle),
1098
- poll: (input, { interval }) => {
1099
- void run(input);
1100
- const id = setInterval(() => void run(input), getMs(interval));
1101
- return () => clearInterval(id);
1102
- }
1103
- };
1104
- };
1105
- var makeKeyed = (op, keyFn, perKey, timeoutOptions) => {
1106
- const stateMap = /* @__PURE__ */ new Map();
1107
- const slots = /* @__PURE__ */ new Map();
1108
- const subscribers = /* @__PURE__ */ new Set();
1109
- const emitSnapshot = () => {
1110
- const snapshot = new Map(stateMap);
1111
- subscribers.forEach((cb) => cb(snapshot));
1112
- };
1113
- const run = (input) => {
1114
- const k = keyFn(input);
1115
- if (slots.has(k)) {
1116
- if (perKey === "exclusive") {
1117
- return Deferred.from.Promise(Promise.resolve(_droppedNil));
1118
- }
1119
- const existing = slots.get(k);
1120
- existing.controller.abort();
1121
- const prev = existing.resolve;
1122
- slots.delete(k);
1123
- prev(_replacedNil);
1124
- }
1125
- return Deferred.from.Promise(
1126
- new Promise((resolve) => {
1127
- const controller = new AbortController();
1128
- slots.set(k, { controller, resolve });
1129
- stateMap.set(k, _pending);
1130
- emitSnapshot();
1131
- execute(op, input, controller, void 0, timeoutOptions).then((outcome) => {
1132
- const slot = slots.get(k);
1133
- if (!slot || slot.controller !== controller) {
1134
- resolve(_abortedNil);
1135
- return;
1136
- }
1137
- slots.delete(k);
1138
- stateMap.set(k, outcome);
1139
- emitSnapshot();
1140
- resolve(outcome);
1141
- });
1142
- })
1143
- );
1144
- };
1145
- const abort = (key) => {
1146
- if (key !== void 0) {
1147
- const slot = slots.get(key);
1148
- if (slot) {
1149
- slot.controller.abort();
1150
- const r = slot.resolve;
1151
- slots.delete(key);
1152
- stateMap.set(key, _abortedNil);
1153
- emitSnapshot();
1154
- r(_abortedNil);
1155
- }
1156
- } else {
1157
- const toResolve = [];
1158
- for (const [k, slot] of slots) {
1159
- slot.controller.abort();
1160
- toResolve.push(slot.resolve);
1161
- stateMap.set(k, _abortedNil);
1162
- }
1163
- slots.clear();
1164
- if (toResolve.length > 0) {
1165
- emitSnapshot();
1166
- }
1167
- toResolve.forEach((r) => r(_abortedNil));
1168
- }
1169
- };
1170
- return {
1171
- get state() {
1172
- return new Map(stateMap);
1173
- },
1174
- run,
1175
- abort,
1176
- subscribe: (cb) => {
1177
- subscribers.add(cb);
1178
- if (stateMap.size > 0) {
1179
- cb(new Map(stateMap));
1180
- }
1181
- return () => subscribers.delete(cb);
1182
- },
1183
- reset: () => {
1184
- stateMap.clear();
1185
- emitSnapshot();
1186
- },
1187
- poll: (input, { interval }) => {
1188
- void run(input);
1189
- const id = setInterval(() => void run(input), getMs(interval));
1190
- return () => clearInterval(id);
1191
- }
1192
- };
1193
- };
1194
- var makeOnce = (op, retryOptions, timeoutOptions) => {
1195
- let currentState = _idle;
1196
- let currentController;
1197
- let currentResolve;
1198
- const subscribers = /* @__PURE__ */ new Set();
1199
- const emit = (state) => {
1200
- currentState = state;
1201
- subscribers.forEach((cb) => cb(state));
1202
- };
1203
- const run = (input) => {
1204
- if (currentState.kind !== "Idle") {
1205
- return Deferred.from.Promise(Promise.resolve(_droppedNil));
1206
- }
1207
- return Deferred.from.Promise(
1208
- new Promise((resolve) => {
1209
- currentResolve = resolve;
1210
- currentController = new AbortController();
1211
- const controller = currentController;
1212
- emit(_pending);
1213
- const onRetrying = retryOptions ? (r) => {
1214
- if (currentController === controller) {
1215
- emit(r);
1216
- }
1217
- } : void 0;
1218
- execute(op, input, controller, retryOptions, timeoutOptions, onRetrying).then((outcome) => {
1219
- if (currentController !== controller) {
1220
- return;
1221
- }
1222
- const r = currentResolve;
1223
- currentResolve = void 0;
1224
- currentController = void 0;
1225
- emit(outcome);
1226
- r?.(outcome);
1227
- });
1228
- })
1229
- );
1230
- };
1231
- const abort = () => {
1232
- currentController?.abort();
1233
- currentController = void 0;
1234
- const r = currentResolve;
1235
- currentResolve = void 0;
1236
- if (currentState.kind !== "Idle") {
1237
- emit(_abortedNil);
1238
- }
1239
- r?.(_abortedNil);
1240
- };
1241
- return {
1242
- get state() {
1243
- return currentState;
1244
- },
1245
- run,
1246
- abort,
1247
- subscribe: (cb) => {
1248
- subscribers.add(cb);
1249
- if (currentState.kind !== "Idle") {
1250
- cb(currentState);
1251
- }
1252
- return () => subscribers.delete(cb);
1253
- },
1254
- reset: () => emit(_idle),
1255
- poll: (input, { interval }) => {
1256
- void run(input);
1257
- const id = setInterval(() => void run(input), getMs(interval));
1258
- return () => clearInterval(id);
1259
- }
1260
- };
1261
- };
1262
-
1263
- // src/Core/Op.ts
1264
- var Op;
1265
- ((Op2) => {
1266
- Op2.nil = (reason) => ({ kind: "OpNil", reason });
1267
- Op2.create = (factory, onError) => ({
1268
- _factory: (input, signal) => Deferred.from.Promise(
1269
- factory(signal)(input).then((value) => Result.make.ok(value)).catch((error) => signal.aborted ? null : Result.make.err(onError(error)))
1270
- )
1271
- });
1272
- Op2.lift = (f) => (0, Op2.create)((signal) => (input) => f(input, signal), (e) => e);
1273
- Op2.ok = (value) => ({ kind: "OpOk", value });
1274
- Op2.err = (error) => ({ kind: "OpErr", error });
1275
- Op2.isIdle = (state) => state.kind === "Idle";
1276
- Op2.isPending = (state) => state.kind === "Pending";
1277
- Op2.isQueued = (state) => state.kind === "Queued";
1278
- Op2.isRetrying = (state) => state.kind === "Retrying";
1279
- Op2.isOk = (state) => state.kind === "OpOk";
1280
- Op2.isErr = (state) => state.kind === "OpErr";
1281
- Op2.isNil = (state) => state.kind === "OpNil";
1282
- Op2.match = (cases) => (outcome) => {
1283
- if (outcome.kind === "OpOk") {
1284
- return cases.ok(outcome.value);
1285
- }
1286
- if (outcome.kind === "OpErr") {
1287
- return cases.err(outcome.error);
1288
- }
1289
- return cases.nil();
1290
- };
1291
- Op2.fold = (onErr, onNil, onOk) => (outcome) => {
1292
- if (outcome.kind === "OpOk") {
1293
- return onOk(outcome.value);
1294
- }
1295
- if (outcome.kind === "OpErr") {
1296
- return onErr(outcome.error);
1297
- }
1298
- return onNil();
1299
- };
1300
- Op2.getOrElse = (defaultValue) => (outcome) => outcome.kind === "OpOk" ? outcome.value : defaultValue();
1301
- Op2.map = (f) => (outcome) => outcome.kind === "OpOk" ? (0, Op2.ok)(f(outcome.value)) : outcome;
1302
- Op2.mapError = (f) => (outcome) => outcome.kind === "OpErr" ? (0, Op2.err)(f(outcome.error)) : outcome;
1303
- Op2.chain = (f) => (outcome) => outcome.kind === "OpOk" ? f(outcome.value) : outcome;
1304
- Op2.tap = (f) => (outcome) => {
1305
- if (outcome.kind === "OpOk") {
1306
- f(outcome.value);
1307
- }
1308
- return outcome;
1309
- };
1310
- Op2.recover = (f) => (outcome) => outcome.kind === "OpErr" ? f(outcome.error) : outcome;
1311
- let to;
1312
- ((to2) => {
1313
- to2.Result = (onNil) => (outcome) => {
1314
- if (outcome.kind === "OpOk") {
1315
- return Result.make.ok(outcome.value);
1316
- }
1317
- if (outcome.kind === "OpErr") {
1318
- return Result.make.err(outcome.error);
1319
- }
1320
- return Result.make.err(onNil());
1321
- };
1322
- to2.Maybe = (outcome) => outcome.kind === "OpOk" ? Maybe.make.some(outcome.value) : Maybe.make.none();
1323
- })(to = Op2.to || (Op2.to = {}));
1324
- Op2.all = (invocations) => Deferred.from.Promise(Promise.all(invocations.map(Deferred.to.Promise)));
1325
- Op2.race = (invocations) => Deferred.from.Promise(Promise.race(invocations.map(Deferred.to.Promise)));
1326
- Op2.wire = (source, f) => source.subscribe((state) => {
1327
- if ((0, Op2.isOk)(state)) {
1328
- f(state.value);
1329
- }
1330
- });
1331
- function interpret(op, options) {
1332
- const { strategy, retry: retryOptions, timeout: timeoutOptions } = options;
1333
- switch (strategy) {
1334
- case "once": {
1335
- return makeOnce(op, retryOptions, timeoutOptions);
1336
- }
1337
- case "restartable": {
1338
- return makeRestartable(op, options.minInterval, retryOptions, timeoutOptions);
1339
- }
1340
- case "exclusive": {
1341
- return makeExclusive(op, options.cooldown, retryOptions, timeoutOptions);
1342
- }
1343
- case "queue": {
1344
- return makeQueue(
1345
- op,
1346
- options.maxSize,
1347
- options.overflow,
1348
- options.concurrency,
1349
- options.dedupe,
1350
- retryOptions,
1351
- timeoutOptions
1352
- );
1353
- }
1354
- case "buffered": {
1355
- return makeBuffered(op, options.size, retryOptions, timeoutOptions);
1356
- }
1357
- case "debounced": {
1358
- return makeDebounced(
1359
- op,
1360
- options.duration,
1361
- options.leading ?? false,
1362
- options.maxWait,
1363
- retryOptions,
1364
- timeoutOptions
1365
- );
1366
- }
1367
- case "throttled": {
1368
- return makeThrottled(op, options.duration, options.trailing ?? false, retryOptions, timeoutOptions);
1369
- }
1370
- case "concurrent": {
1371
- return makeConcurrent(
1372
- op,
1373
- options.n ?? 1,
1374
- options.overflow ?? "drop",
1375
- retryOptions,
1376
- timeoutOptions
1377
- );
1378
- }
1379
- case "keyed": {
1380
- return makeKeyed(op, options.key ?? ((i) => i), options.perKey ?? "exclusive", timeoutOptions);
1381
- }
1382
- }
1383
- }
1384
- Op2.interpret = interpret;
1385
- })(Op || (Op = {}));
1386
-
1387
- // src/Core/Optional.ts
1388
- var Optional;
1389
- ((Optional2) => {
1390
- let from;
1391
- ((from2) => {
1392
- from2.accessors = (get2, set2) => ({
1393
- get: get2,
1394
- set: set2
1395
- });
1396
- from2.property = () => (key) => (0, from2.accessors)((s) => {
1397
- const val = s[key];
1398
- return val !== null && val !== void 0 ? Maybe.make.some(val) : Maybe.make.none();
1399
- }, (a) => (s) => ({ ...s, [key]: a }));
1400
- })(from = Optional2.from || (Optional2.from = {}));
1401
- Optional2.index = (i) => from.accessors((arr) => i >= 0 && i < arr.length ? Maybe.make.some(arr[i]) : Maybe.make.none(), (a) => (arr) => {
1402
- if (i < 0 || i >= arr.length) {
1403
- return arr;
1404
- }
1405
- const copy = [...arr];
1406
- copy[i] = a;
1407
- return copy;
1408
- });
1409
- Optional2.get = (opt) => (s) => opt.get(s);
1410
- Optional2.set = (opt) => (a) => (s) => opt.set(a)(s);
1411
- Optional2.modify = (opt) => (f) => (s) => {
1412
- const val = opt.get(s);
1413
- return val.kind === "None" ? s : opt.set(f(val.value))(s);
1414
- };
1415
- Optional2.getOrElse = (opt) => (defaultValue) => (s) => {
1416
- const val = opt.get(s);
1417
- return val.kind === "Some" ? val.value : defaultValue();
1418
- };
1419
- Optional2.fold = (opt) => (onNone, onSome) => (s) => {
1420
- const val = opt.get(s);
1421
- return val.kind === "Some" ? onSome(val.value) : onNone();
1422
- };
1423
- Optional2.match = (opt) => (cases) => (s) => {
1424
- const val = opt.get(s);
1425
- return val.kind === "Some" ? cases.some(val.value) : cases.none();
1426
- };
1427
- Optional2.andThen = (inner) => (outer) => from.accessors((s) => {
1428
- const mid = outer.get(s);
1429
- return mid.kind === "None" ? Maybe.make.none() : inner.get(mid.value);
1430
- }, (b) => (s) => {
1431
- const mid = outer.get(s);
1432
- return mid.kind === "None" ? s : outer.set(inner.set(b)(mid.value))(s);
1433
- });
1434
- Optional2.andThenLens = (inner) => (outer) => from.accessors((s) => {
1435
- const mid = outer.get(s);
1436
- return mid.kind === "None" ? Maybe.make.none() : Maybe.make.some(inner.get(mid.value));
1437
- }, (b) => (s) => {
1438
- const mid = outer.get(s);
1439
- return mid.kind === "None" ? s : outer.set(inner.set(b)(mid.value))(s);
1440
- });
1441
- })(Optional || (Optional = {}));
1442
-
1443
- // src/Core/Ordering.ts
1444
- var Ordering;
1445
- ((Ordering2) => {
1446
- Ordering2.string = (a, b) => a < b ? -1 : a > b ? 1 : 0;
1447
- Ordering2.number = (a, b) => a - b;
1448
- Ordering2.date = (a, b) => a.getTime() - b.getTime();
1449
- Ordering2.reverse = (ord) => (a, b) => ord(b, a);
1450
- Ordering2.thenBy = (ord2) => (ord1) => (a, b) => {
1451
- const r = ord1(a, b);
1452
- return r !== 0 ? r : ord2(a, b);
1453
- };
1454
- Ordering2.by = (f) => (ord) => (a, b) => ord(f(a), f(b));
1455
- Ordering2.byFields = (orderings) => (a, b) => {
1456
- for (let i = 0; i < orderings.length; i++) {
1457
- const res = orderings[i](a, b);
1458
- if (res !== 0) {
1459
- return res;
1460
- }
1461
- }
1462
- return 0;
1463
- };
1464
- Ordering2.tuple = (...orderings) => (a, b) => {
1465
- const len = Math.min(a.length, b.length);
1466
- for (let i = 0; i < len; i++) {
1467
- const res = orderings[i](a[i], b[i]);
1468
- if (res !== 0) {
1469
- return res;
1470
- }
1471
- }
1472
- return a.length - b.length;
1473
- };
1474
- })(Ordering || (Ordering = {}));
1475
-
1476
- // src/Core/Predicate.ts
1477
- var Predicate;
1478
- ((Predicate2) => {
1479
- Predicate2.not = (p) => (a) => !p(a);
1480
- Predicate2.and = (second) => (first) => (a) => first(a) && second(a);
1481
- Predicate2.or = (second) => (first) => (a) => first(a) || second(a);
1482
- Predicate2.using = (f) => (p) => (b) => p(f(b));
1483
- Predicate2.all = (predicates) => (a) => predicates.every((p) => p(a));
1484
- Predicate2.any = (predicates) => (a) => predicates.some((p) => p(a));
1485
- let from;
1486
- ((from2) => {
1487
- from2.Refinement = (r) => r;
1488
- })(from = Predicate2.from || (Predicate2.from = {}));
1489
- Predicate2.match = (branches, fallback) => (a) => {
1490
- for (let i = 0; i < branches.length; i++) {
1491
- const [p, h] = branches[i];
1492
- if (p(a)) {
1493
- return h(a);
1494
- }
1495
- }
1496
- return fallback(a);
1497
- };
1498
- })(Predicate || (Predicate = {}));
1499
-
1500
- // src/Core/Reader.ts
1501
- var Reader;
1502
- ((Reader2) => {
1503
- Reader2.resolve = (value) => (_env) => value;
1504
- Reader2.ask = () => (env) => env;
1505
- Reader2.asks = (f) => (env) => f(env);
1506
- Reader2.map = (f) => (data) => (env) => f(data(env));
1507
- Reader2.chain = (f) => (data) => (env) => f(data(env))(env);
1508
- Reader2.ap = (arg) => (data) => (env) => data(env)(arg(env));
1509
- Reader2.tap = (f) => (data) => (env) => {
1510
- const a = data(env);
1511
- f(a);
1512
- return a;
1513
- };
1514
- Reader2.local = (f) => (data) => (env) => data(f(env));
1515
- Reader2.run = (env) => (data) => data(env);
1516
- Reader2.bindTo = (key) => (data) => (0, Reader2.map)((a) => ({ [key]: a }))(data);
1517
- Reader2.bind = (key, f) => (data) => (0, Reader2.chain)(
1518
- (a) => (0, Reader2.map)((b) => ({ ...a, [key]: b }))(f(a))
1519
- )(data);
1520
- })(Reader || (Reader = {}));
1521
-
1522
- // src/Core/Refinement.ts
1523
- var Refinement;
1524
- ((Refinement2) => {
1525
- let from;
1526
- ((from2) => {
1527
- from2.predicate = (f) => f;
1528
- })(from = Refinement2.from || (Refinement2.from = {}));
1529
- Refinement2.compose = (bc) => (ab) => (a) => ab(a) && bc(a);
1530
- Refinement2.and = (second) => (first) => (a) => first(a) && second(a);
1531
- Refinement2.or = (second) => (first) => (a) => first(a) || second(a);
1532
- let to;
1533
- ((to2) => {
1534
- to2.Maybe = (r) => (a) => r(a) ? Maybe.make.some(a) : Maybe.make.none();
1535
- to2.Result = (r, onFail) => (a) => r(a) ? Result.make.ok(a) : Result.make.err(onFail(a));
1536
- })(to = Refinement2.to || (Refinement2.to = {}));
1537
- })(Refinement || (Refinement = {}));
1538
-
1539
- // src/Core/RemoteData.ts
1540
- var _notAsked = { kind: "NotAsked" };
1541
- var _loading = { kind: "Loading" };
1542
- var RemoteData;
1543
- ((RemoteData2) => {
1544
- let make;
1545
- ((make2) => {
1546
- make2.notAsked = () => _notAsked;
1547
- make2.loading = () => _loading;
1548
- make2.failure = (error) => ({ kind: "Failure", error });
1549
- make2.success = (value) => ({ kind: "Success", value });
1550
- })(make = RemoteData2.make || (RemoteData2.make = {}));
1551
- let is;
1552
- ((is2) => {
1553
- is2.notAsked = (data) => data.kind === "NotAsked";
1554
- is2.loading = (data) => data.kind === "Loading";
1555
- is2.failure = (data) => data.kind === "Failure";
1556
- is2.success = (data) => data.kind === "Success";
1557
- })(is = RemoteData2.is || (RemoteData2.is = {}));
1558
- RemoteData2.map = (f) => (data) => is.success(data) ? make.success(f(data.value)) : data;
1559
- RemoteData2.mapError = (f) => (data) => is.failure(data) ? make.failure(f(data.error)) : data;
1560
- RemoteData2.chain = (f) => (data) => is.success(data) ? f(data.value) : data;
1561
- RemoteData2.ap = (arg) => (data) => {
1562
- if (is.success(data) && is.success(arg)) {
1563
- return make.success(data.value(arg.value));
1564
- }
1565
- if (is.failure(data)) {
1566
- return data;
1567
- }
1568
- if (is.failure(arg)) {
1569
- return arg;
1570
- }
1571
- if (is.loading(data) || is.loading(arg)) {
1572
- return make.loading();
1573
- }
1574
- return make.notAsked();
1575
- };
1576
- RemoteData2.fold = (onFailure, onNotAsked, onLoading, onSuccess) => (data) => {
1577
- switch (data.kind) {
1578
- case "Failure": {
1579
- return onFailure(data.error);
1580
- }
1581
- case "NotAsked": {
1582
- return onNotAsked();
1583
- }
1584
- case "Loading": {
1585
- return onLoading();
1586
- }
1587
- case "Success": {
1588
- return onSuccess(data.value);
1589
- }
1590
- }
1591
- };
1592
- RemoteData2.match = (cases) => (data) => {
1593
- switch (data.kind) {
1594
- case "NotAsked": {
1595
- return cases.notAsked();
1596
- }
1597
- case "Loading": {
1598
- return cases.loading();
1599
- }
1600
- case "Failure": {
1601
- return cases.failure(data.error);
1602
- }
1603
- case "Success": {
1604
- return cases.success(data.value);
1605
- }
1606
- }
1607
- };
1608
- RemoteData2.getOrElse = (defaultValue) => (data) => is.success(data) ? data.value : defaultValue();
1609
- RemoteData2.tap = (f) => (data) => {
1610
- if (is.success(data)) {
1611
- f(data.value);
1612
- }
1613
- return data;
1614
- };
1615
- RemoteData2.tapError = (f) => (data) => {
1616
- if (is.failure(data)) {
1617
- f(data.error);
1618
- }
1619
- return data;
1620
- };
1621
- RemoteData2.recover = (fallback) => (data) => is.failure(data) ? fallback(data.error) : data;
1622
- let to;
1623
- ((to2) => {
1624
- to2.Maybe = (data) => is.success(data) ? Maybe.make.some(data.value) : Maybe.make.none();
1625
- to2.Result = (onNotReady) => (data) => is.success(data) ? Result.make.ok(data.value) : Result.make.err(is.failure(data) ? data.error : onNotReady());
1626
- })(to = RemoteData2.to || (RemoteData2.to = {}));
1627
- let from;
1628
- ((from2) => {
1629
- from2.Result = (data) => Result.is.ok(data) ? make.success(data.value) : make.failure(data.error);
1630
- from2.Maybe = (onNone) => (data) => Maybe.is.some(data) ? make.success(data.value) : make.failure(onNone());
1631
- })(from = RemoteData2.from || (RemoteData2.from = {}));
1632
- RemoteData2.filter = (pred, onFalse) => (data) => is.success(data) ? pred(data.value) ? data : make.failure(onFalse(data.value)) : data;
1633
- })(RemoteData || (RemoteData = {}));
1634
-
1635
- // src/Core/Resource.ts
1636
- var Resource;
1637
- ((Resource2) => {
1638
- let from;
1639
- ((from2) => {
1640
- from2.handlers = (acquire, release) => ({
1641
- acquire,
1642
- release
1643
- });
1644
- from2.Task = (acquire, release) => ({
1645
- acquire: Task.map((a) => Result.make.ok(a))(acquire),
1646
- release
1647
- });
1648
- })(from = Resource2.from || (Resource2.from = {}));
1649
- Resource2.use = (f) => (resource) => Task.from.Promise(
1650
- (signal) => Deferred.to.Promise(resource.acquire(signal)).then(async (acquired) => {
1651
- if (Result.is.err(acquired)) {
1652
- return acquired;
1653
- }
1654
- const a = acquired.value;
1655
- try {
1656
- const usageResult = await Deferred.to.Promise(f(a)(signal));
1657
- return usageResult;
1658
- } finally {
1659
- await Deferred.to.Promise(resource.release(a)(signal));
1660
- }
1661
- })
1662
- );
1663
- Resource2.combine = (resourceA, resourceB) => ({
1664
- acquire: Task.from.Promise(
1665
- (signal) => Deferred.to.Promise(resourceA.acquire(signal)).then(async (acquiredA) => {
1666
- if (Result.is.err(acquiredA)) {
1667
- return acquiredA;
1668
- }
1669
- const a = acquiredA.value;
1670
- const acquiredB = await Deferred.to.Promise(resourceB.acquire(signal));
1671
- if (Result.is.err(acquiredB)) {
1672
- await Deferred.to.Promise(resourceA.release(a)(signal));
1673
- return acquiredB;
1674
- }
1675
- return Result.make.ok([a, acquiredB.value]);
1676
- })
1677
- ),
1678
- release: ([a, b]) => Task.from.Promise(
1679
- (signal) => Deferred.to.Promise(resourceB.release(b)(signal)).then(() => Deferred.to.Promise(resourceA.release(a)(signal)))
1680
- )
1681
- });
1682
- })(Resource || (Resource = {}));
1683
-
1684
- // src/Core/Result.ts
1685
- var Result;
1686
- ((Result4) => {
1687
- let make;
1688
- ((make2) => {
1689
- make2.ok = (value) => ({ kind: "Ok", value });
1690
- make2.err = (e) => ({ kind: "Err", error: e });
1691
- })(make = Result4.make || (Result4.make = {}));
1692
- let is;
1693
- ((is2) => {
1694
- is2.ok = (data) => data.kind === "Ok";
1695
- is2.err = (data) => data.kind === "Err";
1696
- })(is = Result4.is || (Result4.is = {}));
1697
- Result4.tryCatch = (f, options) => {
1698
- try {
1699
- return make.ok(f());
1700
- } catch (error) {
1701
- return make.err(options.onError(error));
1702
- }
1703
- };
1704
- Result4.map = (f) => (data) => is.ok(data) ? make.ok(f(data.value)) : data;
1705
- Result4.mapError = (f) => (data) => is.err(data) ? make.err(f(data.error)) : data;
1706
- Result4.chain = (f) => (data) => is.ok(data) ? f(data.value) : data;
1707
- Result4.fold = (onErr, onOk) => (data) => is.ok(data) ? onOk(data.value) : onErr(data.error);
1708
- Result4.match = (cases) => (data) => is.ok(data) ? cases.ok(data.value) : cases.err(data.error);
1709
- Result4.getOrElse = (defaultValue) => (data) => is.ok(data) ? data.value : defaultValue();
1710
- Result4.tap = (f) => (data) => {
1711
- if (is.ok(data)) {
1712
- f(data.value);
1713
- }
1714
- return data;
1715
- };
1716
- Result4.tapError = (f) => (data) => {
1717
- if (is.err(data)) {
1718
- f(data.error);
1719
- }
1720
- return data;
1721
- };
1722
- let from;
1723
- ((from2) => {
1724
- from2.Predicate = (pred, onFalse) => (a) => pred(a) ? make.ok(a) : make.err(onFalse(a));
1725
- from2.nullable = (onNull) => (value) => value === null || value === void 0 ? make.err(onNull()) : make.ok(value);
1726
- from2.Maybe = (onNone) => (maybe) => Maybe.is.none(maybe) ? make.err(onNone()) : make.ok(maybe.value);
1727
- from2.throwable = (f, options) => (...args) => {
1728
- try {
1729
- return make.ok(f(...args));
1730
- } catch (error) {
1731
- return make.err(options.onError(error));
1732
- }
1733
- };
1734
- from2.Validation = (combineErrors) => (val) => Validation.is.passed(val) ? make.ok(val.value) : make.err(combineErrors(val.errors));
1735
- })(from = Result4.from || (Result4.from = {}));
1736
- Result4.recover = (fallback) => (data) => is.ok(data) ? data : fallback(data.error);
1737
- Result4.recoverUnless = (isBlocked, fallback) => (data) => is.err(data) && !isBlocked(data.error) ? fallback() : data;
1738
- let to;
1739
- ((to2) => {
1740
- to2.Maybe = (data) => is.ok(data) ? Maybe.make.some(data.value) : Maybe.make.none();
1741
- to2.Validation = (data) => Validation.from.Result(data);
1742
- })(to = Result4.to || (Result4.to = {}));
1743
- Result4.transposeMaybe = (data) => is.err(data) ? Maybe.make.some(data) : Maybe.is.some(data.value) ? Maybe.make.some(make.ok(data.value.value)) : Maybe.make.none();
1744
- Result4.ap = (arg) => (data) => is.ok(data) && is.ok(arg) ? make.ok(data.value(arg.value)) : is.err(data) ? data : arg;
1745
- Result4.bindTo = (key) => (data) => (0, Result4.map)((a) => ({ [key]: a }))(data);
1746
- Result4.bind = (key, f) => (data) => (0, Result4.chain)(
1747
- (a) => (0, Result4.map)((b) => ({ ...a, [key]: b }))(f(a))
1748
- )(data);
1749
- Result4.struct = (fields) => {
1750
- const result = {};
1751
- for (const key in fields) {
1752
- if (Object.hasOwn(fields, key)) {
1753
- const res = fields[key];
1754
- if (is.err(res)) {
1755
- return res;
1756
- }
1757
- result[key] = res.value;
1758
- }
1759
- }
1760
- return make.ok(result);
1761
- };
1762
- Result4.ensure = (predicate, onFail) => (data) => is.err(data) ? data : predicate(data.value) ? data : make.err(onFail(data.value));
1763
- Result4.bimap = (onErr, onOk) => (data) => is.ok(data) ? make.ok(onOk(data.value)) : make.err(onErr(data.error));
1764
- })(Result || (Result = {}));
1765
-
1766
- // src/Core/State.ts
1767
- var State;
1768
- ((State2) => {
1769
- State2.resolve = (value) => (s) => [value, s];
1770
- State2.get = () => (s) => [s, s];
1771
- State2.gets = (f) => (s) => [f(s), s];
1772
- State2.put = (newState) => (_s) => [void 0, newState];
1773
- State2.modify = (f) => (s) => [void 0, f(s)];
1774
- State2.map = (f) => (st) => (s) => {
1775
- const [a, s1] = st(s);
1776
- return [f(a), s1];
1777
- };
1778
- State2.chain = (f) => (st) => (s) => {
1779
- const [a, s1] = st(s);
1780
- return f(a)(s1);
1781
- };
1782
- State2.ap = (arg) => (fn) => (s) => {
1783
- const [f, s1] = fn(s);
1784
- const [a, s2] = arg(s1);
1785
- return [f(a), s2];
1786
- };
1787
- State2.tap = (f) => (st) => (s) => {
1788
- const [a, s1] = st(s);
1789
- f(a);
1790
- return [a, s1];
1791
- };
1792
- State2.run = (initialState) => (st) => st(initialState);
1793
- State2.evaluate = (initialState) => (st) => st(initialState)[0];
1794
- State2.execute = (initialState) => (st) => st(initialState)[1];
1795
- State2.bindTo = (key) => (data) => (0, State2.map)((a) => ({ [key]: a }))(data);
1796
- State2.bind = (key, f) => (data) => (0, State2.chain)(
1797
- (a) => (0, State2.map)((b) => ({ ...a, [key]: b }))(f(a))
1798
- )(data);
1799
- State2.focus = (lens) => (stateOp) => (s) => {
1800
- const subState = lens.get(s);
1801
- const [b, newSubState] = stateOp(subState);
1802
- return [b, lens.set(newSubState)(s)];
1803
- };
1804
- })(State || (State = {}));
1805
-
1806
- // src/Core/Stream.ts
1807
- var Stream;
1808
- ((Stream2) => {
1809
- Stream2.make = (options) => ({
1810
- options,
1811
- _listeners: /* @__PURE__ */ new Set(),
1812
- _queue: [],
1813
- _isEmitting: false
1814
- });
1815
- Stream2.emit = (target, message) => {
1816
- const targets = Array.isArray(target) ? target : [target];
1817
- const msg = message;
1818
- for (const stream of targets) {
1819
- stream._queue.push(msg);
1820
- if (!stream._isEmitting) {
1821
- stream._isEmitting = true;
1822
- try {
1823
- while (stream._queue.length > 0) {
1824
- const nextMsg = stream._queue.shift();
1825
- const listeners = Array.from(stream._listeners);
1826
- for (const listener of listeners) {
1827
- try {
1828
- listener(nextMsg);
1829
- } catch (err2) {
1830
- if (stream.options?.onError) {
1831
- stream.options.onError(err2);
1832
- } else {
1833
- throw err2;
1834
- }
1835
- }
1836
- }
1837
- }
1838
- } finally {
1839
- stream._isEmitting = false;
1840
- }
1841
- }
1842
- }
1843
- };
1844
- Stream2.forward = (options) => {
1845
- const targets = Array.isArray(options.to) ? options.to : [options.to];
1846
- const filterSet = options.only ? new Set(options.only) : null;
1847
- const handler = (msg) => {
1848
- if (filterSet !== null && !filterSet.has(msg.kind)) {
1849
- return;
1850
- }
1851
- for (const target of targets) {
1852
- (0, Stream2.emit)(target, msg);
1853
- }
1854
- };
1855
- options.from._listeners.add(handler);
1856
- return () => {
1857
- options.from._listeners.delete(handler);
1858
- };
1859
- };
1860
- Stream2.listen = (stream, events, options) => {
1861
- const eventList = Array.isArray(events) ? events : [events];
1862
- const isOrdered = options?.ordered ?? false;
1863
- const isStrict = options?.strict ?? false;
1864
- const isOnce = options?.once ?? false;
1865
- const resetKinds = options?.reset ? new Set(Array.isArray(options.reset) ? options.reset : [options.reset]) : null;
1866
- const optionalKinds = options?.optional ? new Set(Array.isArray(options.optional) ? options.optional : [options.optional]) : null;
1867
- const createMatcher = (onMatch) => {
1868
- let sequenceIndex = 0;
1869
- return (msg) => {
1870
- if (resetKinds !== null && resetKinds.has(msg.kind)) {
1871
- sequenceIndex = 0;
1872
- return;
1873
- }
1874
- if (!isOrdered) {
1875
- if (eventList.includes(msg.kind)) {
1876
- onMatch(msg);
1877
- }
1878
- return;
1879
- }
1880
- let expectedKind = eventList[sequenceIndex];
1881
- if (expectedKind !== msg.kind && optionalKinds !== null) {
1882
- let lookaheadIndex = sequenceIndex;
1883
- while (lookaheadIndex < eventList.length && optionalKinds.has(eventList[lookaheadIndex]) && eventList[lookaheadIndex] !== msg.kind) {
1884
- lookaheadIndex++;
1885
- }
1886
- if (lookaheadIndex < eventList.length && eventList[lookaheadIndex] === msg.kind) {
1887
- sequenceIndex = lookaheadIndex;
1888
- expectedKind = eventList[sequenceIndex];
1889
- }
1890
- }
1891
- if (msg.kind === expectedKind) {
1892
- sequenceIndex++;
1893
- if (sequenceIndex === eventList.length) {
1894
- sequenceIndex = 0;
1895
- onMatch(msg);
1896
- }
1897
- } else if (isStrict) {
1898
- sequenceIndex = msg.kind === eventList[0] ? 1 : 0;
1899
- } else if (eventList.includes(msg.kind)) {
1900
- sequenceIndex = msg.kind === eventList[0] ? 1 : 0;
1901
- }
1902
- };
1903
- };
1904
- return {
1905
- reduce: (reducer, initialState) => {
1906
- let currentState = initialState;
1907
- const listenerFn = createMatcher((msg) => {
1908
- currentState = reducer(msg, currentState);
1909
- if (isOnce) {
1910
- stream._listeners.delete(listenerFn);
1911
- }
1912
- });
1913
- const unsubscribe = () => {
1914
- stream._listeners.delete(listenerFn);
1915
- };
1916
- stream._listeners.add(listenerFn);
1917
- return { unsubscribe, getState: () => currentState };
1918
- },
1919
- tap: (effect) => {
1920
- const listenerFn = createMatcher((msg) => {
1921
- effect(msg);
1922
- if (isOnce) {
1923
- stream._listeners.delete(listenerFn);
1924
- }
1925
- });
1926
- const unsubscribe = () => {
1927
- stream._listeners.delete(listenerFn);
1928
- };
1929
- stream._listeners.add(listenerFn);
1930
- return unsubscribe;
1931
- }
1932
- };
1933
- };
1934
- })(Stream || (Stream = {}));
1935
-
1936
- // src/Core/TaskMaybe.ts
1937
- var TaskMaybe;
1938
- ((TaskMaybe2) => {
1939
- let make;
1940
- ((make2) => {
1941
- make2.some = (value) => Task.resolve(Maybe.make.some(value));
1942
- make2.none = () => Task.resolve(Maybe.make.none());
1943
- })(make = TaskMaybe2.make || (TaskMaybe2.make = {}));
1944
- ({ some: TaskMaybe2.some } = make);
1945
- ({ none: TaskMaybe2.none } = make);
1946
- let from;
1947
- ((from2) => {
1948
- from2.Maybe = (option) => Task.resolve(option);
1949
- from2.nullable = (value) => Task.resolve(Maybe.from.nullable(value));
1950
- from2.Result = (result) => Task.resolve(Result.to.Maybe(result));
1951
- from2.Task = (task) => Task.map(Maybe.make.some)(task);
1952
- })(from = TaskMaybe2.from || (TaskMaybe2.from = {}));
1953
- TaskMaybe2.tryCatch = (f) => Task.from.Promise(
1954
- (signal) => Promise.resolve(f(signal)).then(Maybe.make.some).catch(() => Maybe.make.none())
1955
- );
1956
- TaskMaybe2.map = (f) => (data) => Task.map(Maybe.map(f))(data);
1957
- TaskMaybe2.chain = (f) => (data) => Task.chain(
1958
- (option) => Maybe.is.some(option) ? f(option.value) : Task.resolve(Maybe.make.none())
1959
- )(data);
1960
- TaskMaybe2.ap = (arg) => (data) => Task.from.Promise(
1961
- (signal) => Promise.all([Deferred.to.Promise(data(signal)), Deferred.to.Promise(arg(signal))]).then(
1962
- ([of_, oa]) => Maybe.ap(oa)(of_)
1963
- )
1964
- );
1965
- TaskMaybe2.fold = (onNone, onSome) => (data) => Task.map(Maybe.fold(onNone, onSome))(data);
1966
- TaskMaybe2.match = (cases) => (data) => Task.map(Maybe.match(cases))(data);
1967
- TaskMaybe2.getOrElse = (defaultValue) => (data) => Task.map(Maybe.getOrElse(defaultValue))(data);
1968
- TaskMaybe2.tap = (f) => (data) => Task.map(Maybe.tap(f))(data);
1969
- TaskMaybe2.filter = (predicate) => (data) => Task.map(Maybe.filter(predicate))(data);
1970
- let to;
1971
- ((to2) => {
1972
- to2.Result = (onNone) => (data) => Task.map(Maybe.to.Result(onNone))(data);
1973
- })(to = TaskMaybe2.to || (TaskMaybe2.to = {}));
1974
- TaskMaybe2.bindTo = (key) => (data) => (0, TaskMaybe2.map)((a) => ({ [key]: a }))(data);
1975
- TaskMaybe2.bind = (key, f) => (data) => (0, TaskMaybe2.chain)(
1976
- (a) => (0, TaskMaybe2.map)((b) => ({ ...a, [key]: b }))(f(a))
1977
- )(data);
1978
- TaskMaybe2.recover = (fallback) => (data) => Task.chain((maybe) => Maybe.is.none(maybe) ? fallback() : Task.resolve(maybe))(
1979
- data
1980
- );
1981
- TaskMaybe2.struct = (fields) => Task.from.Promise((signal) => {
1982
- const keys = Object.keys(fields);
1983
- const promises = keys.map((key) => Deferred.to.Promise(fields[key](signal)));
1984
- return Promise.all(promises).then((results) => {
1985
- const record = {};
1986
- for (let i = 0; i < keys.length; i++) {
1987
- const res = results[i];
1988
- if (Maybe.is.none(res)) {
1989
- return res;
1990
- }
1991
- record[keys[i]] = res.value;
1992
- }
1993
- return Maybe.make.some(record);
1994
- });
1995
- });
1996
- })(TaskMaybe || (TaskMaybe = {}));
1997
-
1998
- // src/Core/TaskResult.ts
1999
- var TaskResult;
2000
- ((TaskResult2) => {
2001
- let make;
2002
- ((make2) => {
2003
- make2.ok = (value) => Task.resolve(Result.make.ok(value));
2004
- make2.err = (error) => Task.resolve(Result.make.err(error));
2005
- })(make = TaskResult2.make || (TaskResult2.make = {}));
2006
- ({ ok: TaskResult2.ok } = make);
2007
- ({ err: TaskResult2.err } = make);
2008
- let from;
2009
- ((from2) => {
2010
- from2.nullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Result.make.err(onNull()) : Result.make.ok(value));
2011
- from2.Maybe = (onNone) => (maybe) => Task.resolve(Maybe.is.none(maybe) ? Result.make.err(onNone()) : Result.make.ok(maybe.value));
2012
- from2.Result = (result) => Task.resolve(result);
2013
- from2.throwable = (f, options) => (...args) => Task.from.Promise(
2014
- () => f(...args).then(Result.make.ok).catch((error) => Result.make.err(options.onError(error)))
2015
- );
2016
- })(from = TaskResult2.from || (TaskResult2.from = {}));
2017
- let to;
2018
- ((to2) => {
2019
- to2.Maybe = (data) => Task.map(Result.to.Maybe)(data);
2020
- })(to = TaskResult2.to || (TaskResult2.to = {}));
2021
- TaskResult2.tryCatch = (f, options) => Task.from.Promise(
2022
- (signal) => Promise.resolve(f(signal)).then(Result.make.ok).catch((error) => Result.make.err(options.onError(error)))
2023
- );
2024
- TaskResult2.map = (f) => (data) => Task.map(Result.map(f))(data);
2025
- TaskResult2.mapError = (f) => (data) => Task.map(Result.mapError(f))(data);
2026
- TaskResult2.chain = (f) => (data) => Task.chain(
2027
- (result) => Result.is.ok(result) ? f(result.value) : Task.resolve(Result.make.err(result.error))
2028
- )(data);
2029
- TaskResult2.fold = (onErr, onOk) => (data) => Task.map(Result.fold(onErr, onOk))(data);
2030
- TaskResult2.match = (cases) => (data) => Task.map(Result.match(cases))(data);
2031
- TaskResult2.recover = (fallback) => (data) => Task.chain(
2032
- (result) => Result.is.err(result) ? fallback(result.error) : Task.resolve(result)
2033
- )(data);
2034
- TaskResult2.getOrElse = (defaultValue) => (data) => Task.map(Result.getOrElse(defaultValue))(data);
2035
- TaskResult2.tap = (f) => (data) => Task.map(Result.tap(f))(data);
2036
- TaskResult2.tapError = (f) => (data) => Task.map(Result.tapError(f))(data);
2037
- TaskResult2.ap = (arg) => (data) => Task.from.Promise(
2038
- (signal) => Promise.all([Deferred.to.Promise(data(signal)), Deferred.to.Promise(arg(signal))]).then(
2039
- ([of_, oa]) => Result.ap(oa)(of_)
2040
- )
2041
- );
2042
- TaskResult2.run = (signal) => (task) => task(signal);
2043
- TaskResult2.bindTo = (key) => (data) => (0, TaskResult2.map)((a) => ({ [key]: a }))(data);
2044
- TaskResult2.bind = (key, f) => (data) => (0, TaskResult2.chain)(
2045
- (a) => (0, TaskResult2.map)((b) => ({ ...a, [key]: b }))(f(a))
2046
- )(data);
2047
- TaskResult2.struct = (fields) => Task.from.Promise((signal) => {
2048
- const keys = Object.keys(fields);
2049
- const promises = keys.map((key) => Deferred.to.Promise(fields[key](signal)));
2050
- return Promise.all(promises).then((results) => {
2051
- const record = {};
2052
- for (let i = 0; i < keys.length; i++) {
2053
- const res = results[i];
2054
- if (Result.is.err(res)) {
2055
- return res;
2056
- }
2057
- record[keys[i]] = res.value;
2058
- }
2059
- return Result.make.ok(record);
2060
- });
2061
- });
2062
- TaskResult2.retry = (policy) => (task) => Task.from.Promise((signal) => {
2063
- const { attempts } = policy;
2064
- const wait = (duration) => new Promise((res) => {
2065
- let timerId;
2066
- const onAbort = () => {
2067
- clearTimeout(timerId);
2068
- res();
2069
- };
2070
- if (signal) {
2071
- if (signal.aborted) {
2072
- return res();
2073
- }
2074
- signal.addEventListener("abort", onAbort, { once: true });
2075
- }
2076
- timerId = setTimeout(() => {
2077
- signal?.removeEventListener("abort", onAbort);
2078
- res();
2079
- }, Duration.to.milliseconds(duration));
2080
- });
2081
- const executeAttempt = (attempt) => Deferred.to.Promise(task(signal)).then((res) => {
2082
- if (Result.is.ok(res) || attempt >= attempts || signal?.aborted) {
2083
- return res;
2084
- }
2085
- const delay = policy.getDelay(attempt);
2086
- return wait(delay).then(() => executeAttempt(attempt + 1));
2087
- });
2088
- return executeAttempt(1);
2089
- });
2090
- TaskResult2.memoize = (task) => Task.memoize(task);
2091
- TaskResult2.timeout = (options) => (task) => Task.from.Promise((signal) => {
2092
- const ms = Duration.to.milliseconds(options.duration);
2093
- return new Promise((resolve) => {
2094
- let timerId;
2095
- const onAbort = () => {
2096
- clearTimeout(timerId);
2097
- };
2098
- if (signal) {
2099
- if (signal.aborted) {
2100
- return Deferred.to.Promise(task(signal)).then(resolve);
2101
- }
2102
- signal.addEventListener("abort", onAbort, { once: true });
2103
- }
2104
- timerId = setTimeout(() => {
2105
- signal?.removeEventListener("abort", onAbort);
2106
- resolve(Result.make.err(options.onTimeout()));
2107
- }, ms);
2108
- Deferred.to.Promise(task(signal)).then((res) => {
2109
- clearTimeout(timerId);
2110
- signal?.removeEventListener("abort", onAbort);
2111
- resolve(res);
2112
- });
2113
- });
2114
- });
2115
- TaskResult2.allSettled = (tasks) => Task.from.Promise((signal) => Promise.all(tasks.map((task) => Deferred.to.Promise(task(signal)))));
2116
- })(TaskResult || (TaskResult = {}));
2117
-
2118
- // src/internal/InternalTypes.ts
2119
- var isNonEmptyArr = (list) => list.length > 0;
2120
-
2121
- // src/Core/TaskValidation.ts
2122
- var TaskValidation;
2123
- ((TaskValidation2) => {
2124
- let make;
2125
- ((make2) => {
2126
- make2.passed = (value) => Task.resolve(Validation.make.passed(value));
2127
- make2.failed = (error) => Task.resolve(Validation.make.failed(error));
2128
- make2.failedAll = (errors) => Task.resolve(Validation.make.failedAll(errors));
2129
- })(make = TaskValidation2.make || (TaskValidation2.make = {}));
2130
- ({ passed: TaskValidation2.passed } = make);
2131
- ({ failed: TaskValidation2.failed } = make);
2132
- ({ failedAll: TaskValidation2.failedAll } = make);
2133
- let from;
2134
- ((from2) => {
2135
- from2.Validation = (validation) => Task.resolve(validation);
2136
- from2.nullable = (onNull) => (value) => Task.resolve(
2137
- value === null || value === void 0 ? Validation.make.failed(onNull()) : Validation.make.passed(value)
2138
- );
2139
- from2.Maybe = (onNone) => (maybe) => Task.resolve(
2140
- Maybe.is.none(maybe) ? Validation.make.failed(onNone()) : Validation.make.passed(maybe.value)
2141
- );
2142
- from2.Result = (result) => Task.resolve(Validation.from.Result(result));
2143
- })(from = TaskValidation2.from || (TaskValidation2.from = {}));
2144
- TaskValidation2.tryCatch = (f, onError) => Task.from.Promise(
2145
- (signal) => Promise.resolve(f(signal)).then(Validation.make.passed).catch(
2146
- (error) => Validation.make.failed(onError(error))
2147
- )
2148
- );
2149
- TaskValidation2.map = (f) => (data) => Task.map(Validation.map(f))(data);
2150
- TaskValidation2.ap = (arg) => (data) => Task.from.Promise(
2151
- (signal) => Promise.all([Deferred.to.Promise(data(signal)), Deferred.to.Promise(arg(signal))]).then(
2152
- ([vf, va]) => Validation.ap(va)(vf)
2153
- )
2154
- );
2155
- TaskValidation2.fold = (onFailed, onPassed) => (data) => Task.map(Validation.fold(onFailed, onPassed))(data);
2156
- TaskValidation2.match = (cases) => (data) => Task.map(Validation.match(cases))(data);
2157
- TaskValidation2.getOrElse = (defaultValue) => (data) => Task.map(Validation.getOrElse(defaultValue))(data);
2158
- TaskValidation2.tap = (f) => (data) => Task.map(Validation.tap(f))(data);
2159
- TaskValidation2.recover = (fallback) => (data) => Task.chain(
2160
- (validation) => Validation.is.passed(validation) ? Task.resolve(validation) : fallback(validation.errors)
2161
- )(data);
2162
- TaskValidation2.product = (first, second) => Task.from.Promise(
2163
- (signal) => Promise.all([Deferred.to.Promise(first(signal)), Deferred.to.Promise(second(signal))]).then(
2164
- ([va, vb]) => Validation.product(va, vb)
2165
- )
2166
- );
2167
- TaskValidation2.productAll = (data) => Task.from.Promise(
2168
- (signal) => Promise.all(data.map((t) => Deferred.to.Promise(t(signal)))).then((results) => {
2169
- const [first, ...rest] = results;
2170
- return Validation.productAll([first, ...rest]);
2171
- })
2172
- );
2173
- TaskValidation2.mapError = (f) => (data) => Task.map(Validation.mapError(f))(data);
2174
- TaskValidation2.tapError = (f) => (data) => Task.map(Validation.tapError(f))(data);
2175
- TaskValidation2.struct = (fields) => Task.from.Promise((signal) => {
2176
- const keys = Object.keys(fields);
2177
- const promises = keys.map((key) => Deferred.to.Promise(fields[key](signal)));
2178
- return Promise.all(promises).then((results) => {
2179
- const record = {};
2180
- const errors = [];
2181
- for (let i = 0; i < keys.length; i++) {
2182
- const res = results[i];
2183
- if (Validation.is.passed(res)) {
2184
- record[keys[i]] = res.value;
2185
- } else {
2186
- errors.push(...res.errors);
2187
- }
2188
- }
2189
- return isNonEmptyArr(errors) ? Validation.make.failedAll(errors) : Validation.make.passed(record);
2190
- });
2191
- });
2192
- })(TaskValidation || (TaskValidation = {}));
2193
-
2194
- // src/Core/Task.ts
2195
- var toPromise = (task, signal) => Deferred.to.Promise(task(signal));
2196
- var getMs2 = (duration) => Duration.to.milliseconds(duration);
2197
- var Task;
2198
- ((Task2) => {
2199
- Task2.resolve = (value) => () => Deferred.from.Promise(globalThis.Promise.resolve(value));
2200
- let from;
2201
- ((from2) => {
2202
- from2.Promise = (f) => (signal) => Deferred.from.Promise(f(signal));
2203
- from2.sync = (f) => () => Deferred.from.Promise(globalThis.Promise.resolve(f()));
2204
- })(from = Task2.from || (Task2.from = {}));
2205
- Task2.map = (f) => (data) => from.Promise((signal) => toPromise(data, signal).then(f));
2206
- Task2.chain = (f) => (data) => from.Promise((signal) => toPromise(data, signal).then((a) => toPromise(f(a), signal)));
2207
- Task2.ap = (arg) => (data) => from.Promise((signal) => Promise.all([toPromise(data, signal), toPromise(arg, signal)]).then(([f, a]) => f(a)));
2208
- Task2.tap = (f) => (data) => from.Promise(
2209
- (signal) => toPromise(data, signal).then((a) => {
2210
- f(a);
2211
- return a;
2212
- })
2213
- );
2214
- Task2.all = (tasks) => from.Promise(
2215
- (signal) => Promise.all(tasks.map((t) => toPromise(t, signal)))
2216
- );
2217
- Task2.delay = (duration) => (data) => from.Promise(
2218
- (signal) => new Promise((res) => {
2219
- let timerId;
2220
- const onAbort = () => {
2221
- clearTimeout(timerId);
2222
- res(toPromise(data, signal));
2223
- };
2224
- if (signal) {
2225
- if (signal.aborted) {
2226
- return res(toPromise(data, signal));
2227
- }
2228
- signal.addEventListener("abort", onAbort, { once: true });
2229
- }
2230
- timerId = setTimeout(() => {
2231
- signal?.removeEventListener("abort", onAbort);
2232
- res(toPromise(data, signal));
2233
- }, getMs2(duration));
2234
- })
2235
- );
2236
- Task2.repeat = (options) => (task) => from.Promise((signal) => {
2237
- const { times, delay: delayDuration } = options;
2238
- if (times <= 0) {
2239
- return Promise.resolve([]);
2240
- }
2241
- const results = [];
2242
- const wait = () => new Promise((r) => {
2243
- let timerId;
2244
- const onAbort = () => {
2245
- clearTimeout(timerId);
2246
- r();
2247
- };
2248
- if (signal) {
2249
- signal.addEventListener("abort", onAbort, { once: true });
2250
- }
2251
- timerId = setTimeout(() => {
2252
- signal?.removeEventListener("abort", onAbort);
2253
- r();
2254
- }, delayDuration ? getMs2(delayDuration) : 0);
2255
- });
2256
- const run2 = (left) => {
2257
- if (signal?.aborted) {
2258
- return Promise.resolve(results);
2259
- }
2260
- return toPromise(task, signal).then((a) => {
2261
- results.push(a);
2262
- if (left <= 1 || signal?.aborted) {
2263
- return results;
2264
- }
2265
- return wait().then(() => run2(left - 1));
2266
- });
2267
- };
2268
- return run2(times);
2269
- });
2270
- Task2.repeatUntil = (options) => (task) => from.Promise((signal) => {
2271
- const { when: predicate, delay: delayDuration, maxAttempts } = options;
2272
- const wait = () => new Promise((r) => {
2273
- let timerId;
2274
- const onAbort = () => {
2275
- clearTimeout(timerId);
2276
- r();
2277
- };
2278
- if (signal) {
2279
- signal.addEventListener("abort", onAbort, { once: true });
2280
- }
2281
- timerId = setTimeout(() => {
2282
- signal?.removeEventListener("abort", onAbort);
2283
- r();
2284
- }, delayDuration ? getMs2(delayDuration) : 0);
2285
- });
2286
- const run2 = (attempt, lastValue) => {
2287
- if (signal?.aborted && lastValue !== void 0) {
2288
- return Promise.resolve(lastValue);
2289
- }
2290
- return toPromise(task, signal).then((a) => {
2291
- if (predicate(a)) {
2292
- return a;
2293
- }
2294
- if (maxAttempts !== void 0 && attempt >= maxAttempts) {
2295
- return a;
2296
- }
2297
- if (signal?.aborted) {
2298
- return a;
2299
- }
2300
- return wait().then(() => run2(attempt + 1, a));
2301
- });
2302
- };
2303
- return run2(1);
2304
- });
2305
- Task2.race = (tasks) => {
2306
- if (tasks.length === 0) {
2307
- return () => Deferred.from.Promise(new Promise(() => {
2308
- }));
2309
- }
2310
- return from.Promise((outerSignal) => {
2311
- const controllers = tasks.map(() => new AbortController());
2312
- const onOuterAbort = () => {
2313
- for (const ctrl of controllers) {
2314
- ctrl.abort();
2315
- }
2316
- };
2317
- if (outerSignal) {
2318
- if (outerSignal.aborted) {
2319
- onOuterAbort();
2320
- } else {
2321
- outerSignal.addEventListener("abort", onOuterAbort, { once: true });
2322
- }
2323
- }
2324
- const promises = tasks.map((task, idx) => {
2325
- const ctrl = controllers[idx];
2326
- return toPromise(task, ctrl.signal).then((result) => {
2327
- for (let i = 0; i < controllers.length; i++) {
2328
- if (i !== idx) {
2329
- controllers[i].abort();
2330
- }
2331
- }
2332
- outerSignal?.removeEventListener("abort", onOuterAbort);
2333
- return result;
2334
- });
2335
- });
2336
- return Promise.race(promises);
2337
- });
2338
- };
2339
- Task2.sequence = (tasks) => from.Promise((signal) => Promise.all(tasks.map((t) => toPromise(t, signal))));
2340
- Task2.sequential = (tasks) => from.Promise(async (signal) => {
2341
- const results = [];
2342
- for (const task of tasks) {
2343
- if (signal?.aborted) {
2344
- break;
2345
- }
2346
- results.push(await toPromise(task, signal));
2347
- }
2348
- return results;
2349
- });
2350
- Task2.timeout = (options) => (task) => from.Promise((outerSignal) => {
2351
- const { duration, onTimeout } = options;
2352
- const controller = new AbortController();
2353
- let timerId;
2354
- let cleanUp = () => {
2355
- };
2356
- const onOuterAbort = () => {
2357
- cleanUp();
2358
- controller.abort();
2359
- };
2360
- cleanUp = () => {
2361
- clearTimeout(timerId);
2362
- outerSignal?.removeEventListener("abort", onOuterAbort);
2363
- };
2364
- if (outerSignal) {
2365
- if (outerSignal.aborted) {
2366
- controller.abort();
2367
- } else {
2368
- outerSignal.addEventListener("abort", onOuterAbort, { once: true });
2369
- }
2370
- }
2371
- return Promise.race([
2372
- toPromise(task, controller.signal).then((a) => {
2373
- cleanUp();
2374
- return Result.make.ok(a);
2375
- }),
2376
- new Promise((res) => {
2377
- timerId = setTimeout(() => {
2378
- controller.abort();
2379
- cleanUp();
2380
- res(Result.make.err(onTimeout()));
2381
- }, getMs2(duration));
2382
- })
2383
- ]);
2384
- });
2385
- Task2.abortable = (factory) => {
2386
- let currentController = null;
2387
- const abort = () => currentController?.abort();
2388
- const task = (outerSignal) => {
2389
- currentController?.abort();
2390
- currentController = new AbortController();
2391
- const controller = currentController;
2392
- if (outerSignal) {
2393
- if (outerSignal.aborted) {
2394
- controller.abort(outerSignal.reason);
2395
- } else {
2396
- outerSignal.addEventListener("abort", () => controller.abort(outerSignal.reason), { once: true });
2397
- }
2398
- }
2399
- return Deferred.from.Promise(factory(controller.signal));
2400
- };
2401
- return { task, abort };
2402
- };
2403
- Task2.run = (signal) => (task) => task(signal);
2404
- Task2.bindTo = (key) => (data) => (0, Task2.map)((a) => ({ [key]: a }))(data);
2405
- Task2.bind = (key, f) => (data) => (0, Task2.chain)(
2406
- (a) => (0, Task2.map)((b) => ({ ...a, [key]: b }))(f(a))
2407
- )(data);
2408
- Task2.memoize = (task) => {
2409
- let cached = null;
2410
- return (signal) => {
2411
- if (cached === null) {
2412
- cached = task(signal);
2413
- }
2414
- return cached;
2415
- };
2416
- };
2417
- Task2.withProgress = (onProgress) => (task) => (signal) => {
2418
- onProgress(0);
2419
- const d = task(signal);
2420
- return Deferred.from.Promise(
2421
- Deferred.to.Promise(d).then((res) => {
2422
- onProgress(1);
2423
- return res;
2424
- })
2425
- );
2426
- };
2427
- Task2.withLabel = (label) => (task) => {
2428
- const fn = ((signal) => task(signal));
2429
- Object.defineProperty(fn, "label", { value: label, writable: false, enumerable: true, configurable: true });
2430
- return fn;
2431
- };
2432
- Task2.Maybe = TaskMaybe;
2433
- Task2.Result = TaskResult;
2434
- Task2.Validation = TaskValidation;
2435
- })(Task || (Task = {}));
2436
-
2437
- // src/Core/These.ts
2438
- var These;
2439
- ((These2) => {
2440
- let make;
2441
- ((make2) => {
2442
- make2.first = (value) => ({ kind: "First", first: value });
2443
- make2.second = (value) => ({ kind: "Second", second: value });
2444
- make2.both = (f, s) => ({ kind: "Both", first: f, second: s });
2445
- })(make = These2.make || (These2.make = {}));
2446
- let is;
2447
- ((is2) => {
2448
- is2.first = (data) => data.kind === "First";
2449
- is2.second = (data) => data.kind === "Second";
2450
- is2.both = (data) => data.kind === "Both";
2451
- })(is = These2.is || (These2.is = {}));
2452
- These2.hasFirst = (data) => data.kind === "First" || data.kind === "Both";
2453
- These2.hasSecond = (data) => data.kind === "Second" || data.kind === "Both";
2454
- These2.mapFirst = (f) => (data) => {
2455
- if (is.second(data)) {
2456
- return data;
2457
- }
2458
- if (is.first(data)) {
2459
- return make.first(f(data.first));
2460
- }
2461
- return make.both(f(data.first), data.second);
2462
- };
2463
- These2.mapSecond = (f) => (data) => {
2464
- if (is.first(data)) {
2465
- return data;
2466
- }
2467
- if (is.second(data)) {
2468
- return make.second(f(data.second));
2469
- }
2470
- return make.both(data.first, f(data.second));
2471
- };
2472
- These2.mapBoth = (onFirst, onSecond) => (data) => {
2473
- if (is.second(data)) {
2474
- return make.second(onSecond(data.second));
2475
- }
2476
- if (is.first(data)) {
2477
- return make.first(onFirst(data.first));
2478
- }
2479
- return make.both(onFirst(data.first), onSecond(data.second));
2480
- };
2481
- These2.chainFirst = (f) => (data) => {
2482
- if (is.second(data)) {
2483
- return data;
2484
- }
2485
- return f(data.first);
2486
- };
2487
- These2.chainSecond = (f) => (data) => {
2488
- if (is.first(data)) {
2489
- return data;
2490
- }
2491
- return f(data.second);
2492
- };
2493
- These2.fold = (onFirst, onSecond, onBoth) => (data) => {
2494
- if (is.second(data)) {
2495
- return onSecond(data.second);
2496
- }
2497
- if (is.first(data)) {
2498
- return onFirst(data.first);
2499
- }
2500
- return onBoth(data.first, data.second);
2501
- };
2502
- These2.match = (cases) => (data) => {
2503
- if (is.second(data)) {
2504
- return cases.second(data.second);
2505
- }
2506
- if (is.first(data)) {
2507
- return cases.first(data.first);
2508
- }
2509
- return cases.both(data.first, data.second);
2510
- };
2511
- These2.getFirstOrElse = (defaultValue) => (data) => (0, These2.hasFirst)(data) ? data.first : defaultValue();
2512
- These2.getSecondOrElse = (defaultValue) => (data) => (0, These2.hasSecond)(data) ? data.second : defaultValue();
2513
- These2.tap = (f) => (data) => {
2514
- if ((0, These2.hasFirst)(data)) {
2515
- f(data.first);
2516
- }
2517
- return data;
2518
- };
2519
- These2.swap = (data) => {
2520
- if (is.second(data)) {
2521
- return make.first(data.second);
2522
- }
2523
- if (is.first(data)) {
2524
- return make.second(data.first);
2525
- }
2526
- return make.both(data.second, data.first);
2527
- };
2528
- })(These || (These = {}));
2529
-
2530
- // src/Core/Tuple.ts
2531
- var Tuple;
2532
- ((Tuple2) => {
2533
- let from;
2534
- ((from2) => {
2535
- from2.pair = (first2, second2) => [first2, second2];
2536
- from2.array = (arr) => arr;
2537
- })(from = Tuple2.from || (Tuple2.from = {}));
2538
- Tuple2.first = (tuple) => tuple[0];
2539
- Tuple2.second = (tuple) => tuple[1];
2540
- Tuple2.mapFirst = (f) => (tuple) => [f(tuple[0]), tuple[1]];
2541
- Tuple2.mapSecond = (f) => (tuple) => [tuple[0], f(tuple[1])];
2542
- Tuple2.mapBoth = (onFirst, onSecond) => (tuple) => [
2543
- onFirst(tuple[0]),
2544
- onSecond(tuple[1])
2545
- ];
2546
- Tuple2.fold = (f) => (tuple) => f(tuple[0], tuple[1]);
2547
- Tuple2.swap = (tuple) => [tuple[1], tuple[0]];
2548
- let to;
2549
- ((to2) => {
2550
- to2.Array = (tuple) => [...tuple];
2551
- })(to = Tuple2.to || (Tuple2.to = {}));
2552
- Tuple2.tap = (f) => (tuple) => {
2553
- f(tuple[0], tuple[1]);
2554
- return tuple;
2555
- };
2556
- })(Tuple || (Tuple = {}));
2557
-
2558
- // src/Core/Validation.ts
2559
- var Validation;
2560
- ((Validation2) => {
2561
- let make;
2562
- ((make2) => {
2563
- make2.passed = (value) => ({ kind: "Passed", value });
2564
- make2.failed = (error) => ({ kind: "Failed", errors: [error] });
2565
- make2.failedAll = (errors) => ({ kind: "Failed", errors });
2566
- })(make = Validation2.make || (Validation2.make = {}));
2567
- let is;
2568
- ((is2) => {
2569
- is2.passed = (data) => data.kind === "Passed";
2570
- is2.failed = (data) => data.kind === "Failed";
2571
- })(is = Validation2.is || (Validation2.is = {}));
2572
- Validation2.tryCatch = (f, options) => {
2573
- try {
2574
- return make.passed(f());
2575
- } catch (error) {
2576
- return make.failed(options.onError(error));
2577
- }
2578
- };
2579
- let from;
2580
- ((from2) => {
2581
- from2.Predicate = (pred, onFalse) => (a) => pred(a) ? make.passed(a) : make.failed(onFalse(a));
2582
- from2.nullable = (onNull) => (value) => value === null || value === void 0 ? make.failed(onNull()) : make.passed(value);
2583
- from2.Maybe = (onNone) => (maybe) => Maybe.is.none(maybe) ? make.failed(onNone()) : make.passed(maybe.value);
2584
- from2.Result = (data) => data.kind === "Ok" ? make.passed(data.value) : make.failed(data.error);
2585
- })(from = Validation2.from || (Validation2.from = {}));
2586
- Validation2.map = (f) => (data) => is.passed(data) ? make.passed(f(data.value)) : data;
2587
- Validation2.mapError = (f) => (data) => is.failed(data) ? make.failedAll(data.errors.map(f)) : data;
2588
- Validation2.ap = (arg) => (data) => {
2589
- if (is.passed(data)) {
2590
- return is.passed(arg) ? make.passed(data.value(arg.value)) : make.failedAll(arg.errors);
2591
- }
2592
- return is.passed(arg) ? make.failedAll(data.errors) : make.failedAll([...data.errors, ...arg.errors]);
2593
- };
2594
- Validation2.apCustom = (concat) => (arg) => (data) => {
2595
- if (is.passed(data)) {
2596
- return is.passed(arg) ? make.passed(data.value(arg.value)) : make.failedAll(arg.errors);
2597
- }
2598
- return is.passed(arg) ? make.failedAll(data.errors) : make.failedAll(concat(data.errors, arg.errors));
2599
- };
2600
- Validation2.fold = (onFailed, onPassed) => (data) => is.passed(data) ? onPassed(data.value) : onFailed(data.errors);
2601
- Validation2.match = (cases) => (data) => is.passed(data) ? cases.passed(data.value) : cases.failed(data.errors);
2602
- Validation2.getOrElse = (defaultValue) => (data) => is.passed(data) ? data.value : defaultValue();
2603
- Validation2.tap = (f) => (data) => {
2604
- if (is.passed(data)) {
2605
- f(data.value);
2606
- }
2607
- return data;
2608
- };
2609
- Validation2.tapError = (f) => (data) => {
2610
- if (is.failed(data)) {
2611
- f(data.errors);
2612
- }
2613
- return data;
2614
- };
2615
- Validation2.recover = (fallback) => (data) => is.passed(data) ? data : fallback(data.errors);
2616
- Validation2.recoverUnless = (isBlocked, fallback) => (data) => is.failed(data) && !data.errors.some(isBlocked) ? fallback() : data;
2617
- let to;
2618
- ((to2) => {
2619
- function Result4(arg) {
2620
- if (typeof arg === "function") {
2621
- const combine = arg;
2622
- return (val) => is.passed(val) ? Result.make.ok(val.value) : Result.make.err(combine(val.errors));
2623
- }
2624
- return is.passed(arg) ? Result.make.ok(arg.value) : Result.make.err(arg.errors);
2625
- }
2626
- to2.Result = Result4;
2627
- to2.Maybe = (data) => is.passed(data) ? Maybe.make.some(data.value) : Maybe.make.none();
2628
- })(to = Validation2.to || (Validation2.to = {}));
2629
- Validation2.product = (first, second) => {
2630
- if (is.passed(first)) {
2631
- return is.passed(second) ? make.passed([first.value, second.value]) : make.failedAll(second.errors);
2632
- }
2633
- return is.passed(second) ? make.failedAll(first.errors) : make.failedAll([...first.errors, ...second.errors]);
2634
- };
2635
- Validation2.productAll = (data) => {
2636
- const values = [];
2637
- const errors = [];
2638
- for (const v of data) {
2639
- if (is.passed(v)) {
2640
- values.push(v.value);
2641
- } else {
2642
- errors.push(...v.errors);
2643
- }
2644
- }
2645
- return isNonEmptyArr(errors) ? make.failedAll(errors) : make.passed(values);
2646
- };
2647
- Validation2.struct = (fields) => {
2648
- const record = {};
2649
- const errors = [];
2650
- for (const key in fields) {
2651
- if (Object.hasOwn(fields, key)) {
2652
- const val = fields[key];
2653
- if (is.passed(val)) {
2654
- record[key] = val.value;
2655
- } else {
2656
- errors.push(...val.errors);
2657
- }
2658
- }
2659
- }
2660
- return isNonEmptyArr(errors) ? make.failedAll(errors) : make.passed(record);
2661
- };
2662
- })(Validation || (Validation = {}));
2663
- // Annotate the CommonJS export names for ESM import in node:
2664
- 0 && (module.exports = {
1
+ import {
2665
2
  Combinable,
2666
3
  Deferred,
2667
4
  Equality,
@@ -2684,4 +21,29 @@ var Validation;
2684
21
  These,
2685
22
  Tuple,
2686
23
  Validation
2687
- });
24
+ } from "./chunk-MFJXL6J2.js";
25
+ import "./chunk-OIIOGDHK.js";
26
+ export {
27
+ Combinable,
28
+ Deferred,
29
+ Equality,
30
+ Lazy,
31
+ Lens,
32
+ Logged,
33
+ Maybe,
34
+ Op,
35
+ Optional,
36
+ Ordering,
37
+ Predicate,
38
+ Reader,
39
+ Refinement,
40
+ RemoteData,
41
+ Resource,
42
+ Result,
43
+ State,
44
+ Stream,
45
+ Task,
46
+ These,
47
+ Tuple,
48
+ Validation
49
+ };