@nlozgachev/pipelined 0.46.0 → 0.48.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/index.js CHANGED
@@ -21,12 +21,14 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
23
  Arr: () => Arr,
24
+ BigNum: () => BigNum,
24
25
  Brand: () => Brand,
25
26
  Combinable: () => Combinable,
26
27
  Deferred: () => Deferred,
27
28
  Dict: () => Dict,
28
29
  Duration: () => Duration,
29
30
  Equality: () => Equality,
31
+ Json: () => Json,
30
32
  Lazy: () => Lazy,
31
33
  Lens: () => Lens,
32
34
  Logged: () => Logged,
@@ -42,6 +44,7 @@ __export(src_exports, {
42
44
  RemoteData: () => RemoteData,
43
45
  Resource: () => Resource,
44
46
  Result: () => Result,
47
+ RetryPolicy: () => RetryPolicy,
45
48
  State: () => State,
46
49
  Str: () => Str,
47
50
  Task: () => Task,
@@ -77,9 +80,11 @@ __export(src_exports, {
77
80
  or: () => or,
78
81
  pipe: () => pipe,
79
82
  tap: () => tap,
83
+ tuple: () => tuple,
80
84
  uncurry: () => uncurry,
81
85
  uncurry3: () => uncurry3,
82
- uncurry4: () => uncurry4
86
+ uncurry4: () => uncurry4,
87
+ untuple: () => untuple
83
88
  });
84
89
  module.exports = __toCommonJS(src_exports);
85
90
 
@@ -281,6 +286,8 @@ var once = (f) => {
281
286
  };
282
287
  };
283
288
  var defaultTo = (fallback) => (a) => a === null || a === void 0 ? fallback : a;
289
+ var tuple = (f) => (args) => f(...args);
290
+ var untuple = (f) => (...args) => f(args);
284
291
 
285
292
  // src/Composition/juxt.ts
286
293
  function juxt(fns) {
@@ -288,8 +295,9 @@ function juxt(fns) {
288
295
  }
289
296
 
290
297
  // src/Composition/memoize.ts
291
- var memoize = (f, keyFn = (a) => a) => {
298
+ var memoize = (f, options) => {
292
299
  const cache = /* @__PURE__ */ new Map();
300
+ const keyFn = options?.key ?? ((a) => a);
293
301
  return (a) => {
294
302
  const key = keyFn(a);
295
303
  if (cache.has(key)) {
@@ -410,6 +418,29 @@ var Brand;
410
418
  Brand2.unwrap = (branded) => branded;
411
419
  })(Brand || (Brand = {}));
412
420
 
421
+ // src/Types/RetryPolicy.ts
422
+ var RetryPolicy;
423
+ ((RetryPolicy2) => {
424
+ RetryPolicy2.constant = (options) => ({
425
+ attempts: Math.max(1, options.attempts),
426
+ getDelay: () => options.delay
427
+ });
428
+ RetryPolicy2.exponential = (options) => {
429
+ const attempts = Math.max(1, options.attempts);
430
+ const initialMs = Duration.to.milliseconds(options.initial);
431
+ const factor = options.factor ?? 2;
432
+ const jitter = options.jitter ?? false;
433
+ return {
434
+ attempts,
435
+ getDelay: (attempt) => {
436
+ const rawMs = initialMs * factor ** Math.max(0, attempt - 1);
437
+ const finalMs = jitter ? Math.random() * rawMs : rawMs;
438
+ return Duration.milliseconds(finalMs);
439
+ }
440
+ };
441
+ };
442
+ })(RetryPolicy || (RetryPolicy = {}));
443
+
413
444
  // src/Types/Duration.ts
414
445
  var Duration;
415
446
  ((Duration2) => {
@@ -540,6 +571,26 @@ var Combinable;
540
571
  combine: (b) => (a) => Maybe.is.none(a) ? b : Maybe.is.none(b) ? a : Maybe.make.some(inner.combine(b.value)(a.value))
541
572
  });
542
573
  Combinable2.fold = (c) => (data) => data.reduce((acc, x) => c.combine(x)(acc), c.empty);
574
+ Combinable2.struct = (fields) => {
575
+ const empty = {};
576
+ for (const key in fields) {
577
+ if (Object.hasOwn(fields, key)) {
578
+ empty[key] = fields[key].empty;
579
+ }
580
+ }
581
+ return {
582
+ empty,
583
+ combine: (b) => (a) => {
584
+ const result = {};
585
+ for (const key in fields) {
586
+ if (Object.hasOwn(fields, key)) {
587
+ result[key] = fields[key].combine(b[key])(a[key]);
588
+ }
589
+ }
590
+ return result;
591
+ }
592
+ };
593
+ };
543
594
  })(Combinable || (Combinable = {}));
544
595
 
545
596
  // src/Core/Deferred.ts
@@ -556,6 +607,8 @@ var Deferred;
556
607
  ((to2) => {
557
608
  to2.Promise = (d) => new globalThis.Promise((resolve) => d.then(resolve));
558
609
  })(to = Deferred2.to || (Deferred2.to = {}));
610
+ Deferred2.all = (deferreds) => from.Promise(globalThis.Promise.all(deferreds.map((d) => to.Promise(d))));
611
+ Deferred2.race = (deferreds) => from.Promise(globalThis.Promise.race(deferreds.map((d) => to.Promise(d))));
559
612
  })(Deferred || (Deferred = {}));
560
613
 
561
614
  // src/Core/Equality.ts
@@ -568,6 +621,27 @@ var Equality;
568
621
  Equality3.array = (eq) => (a, b) => a.length === b.length && a.every((x, i) => eq(x, b[i]));
569
622
  Equality3.by = (f) => (eq) => (a, b) => eq(f(a), f(b));
570
623
  Equality3.and = (eq2) => (eq1) => (a, b) => eq1(a, b) && eq2(a, b);
624
+ Equality3.struct = (fields) => (a, b) => {
625
+ for (const key in fields) {
626
+ if (Object.hasOwn(fields, key)) {
627
+ if (!fields[key](a[key], b[key])) {
628
+ return false;
629
+ }
630
+ }
631
+ }
632
+ return true;
633
+ };
634
+ Equality3.tuple = (...equalities) => (a, b) => {
635
+ if (a.length !== b.length) {
636
+ return false;
637
+ }
638
+ for (let i = 0; i < equalities.length; i++) {
639
+ if (!equalities[i](a[i], b[i])) {
640
+ return false;
641
+ }
642
+ }
643
+ return true;
644
+ };
571
645
  })(Equality || (Equality = {}));
572
646
 
573
647
  // src/Core/Lazy.ts
@@ -647,6 +721,10 @@ var Logged;
647
721
  Logged2.bind = (key, f) => (data) => (0, Logged2.chain)(
648
722
  (a) => (0, Logged2.map)((b) => ({ ...a, [key]: b }))(f(a))
649
723
  )(data);
724
+ Logged2.focus = (lens) => (f) => (data) => ({
725
+ value: lens.set(f(lens.get(data.value)))(data.value),
726
+ log: data.log
727
+ });
650
728
  })(Logged || (Logged = {}));
651
729
 
652
730
  // src/Core/Maybe.ts
@@ -706,6 +784,7 @@ var Maybe;
706
784
  }
707
785
  return make.some(result);
708
786
  };
787
+ 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);
709
788
  })(Maybe || (Maybe = {}));
710
789
 
711
790
  // src/internal/Op.util.ts
@@ -1857,6 +1936,25 @@ var Ordering;
1857
1936
  return r !== 0 ? r : ord2(a, b);
1858
1937
  };
1859
1938
  Ordering3.by = (f) => (ord) => (a, b) => ord(f(a), f(b));
1939
+ Ordering3.byFields = (orderings) => (a, b) => {
1940
+ for (let i = 0; i < orderings.length; i++) {
1941
+ const res = orderings[i](a, b);
1942
+ if (res !== 0) {
1943
+ return res;
1944
+ }
1945
+ }
1946
+ return 0;
1947
+ };
1948
+ Ordering3.tuple = (...orderings) => (a, b) => {
1949
+ const len = Math.min(a.length, b.length);
1950
+ for (let i = 0; i < len; i++) {
1951
+ const res = orderings[i](a[i], b[i]);
1952
+ if (res !== 0) {
1953
+ return res;
1954
+ }
1955
+ }
1956
+ return a.length - b.length;
1957
+ };
1860
1958
  })(Ordering || (Ordering = {}));
1861
1959
 
1862
1960
  // src/Core/Predicate.ts
@@ -1872,6 +1970,15 @@ var Predicate;
1872
1970
  ((from2) => {
1873
1971
  from2.Refinement = (r) => r;
1874
1972
  })(from = Predicate2.from || (Predicate2.from = {}));
1973
+ Predicate2.match = (branches, fallback) => (a) => {
1974
+ for (let i = 0; i < branches.length; i++) {
1975
+ const [p, h] = branches[i];
1976
+ if (p(a)) {
1977
+ return h(a);
1978
+ }
1979
+ }
1980
+ return fallback(a);
1981
+ };
1875
1982
  })(Predicate || (Predicate = {}));
1876
1983
 
1877
1984
  // src/Core/Reader.ts
@@ -2071,11 +2178,11 @@ var Result;
2071
2178
  is2.ok = (data) => data.kind === "Ok";
2072
2179
  is2.err = (data) => data.kind === "Err";
2073
2180
  })(is = Result4.is || (Result4.is = {}));
2074
- Result4.tryCatch = (f, onError) => {
2181
+ Result4.tryCatch = (f, options) => {
2075
2182
  try {
2076
2183
  return make.ok(f());
2077
2184
  } catch (error) {
2078
- return make.err(onError(error));
2185
+ return make.err(options.onError(error));
2079
2186
  }
2080
2187
  };
2081
2188
  Result4.map = (f) => (data) => is.ok(data) ? make.ok(f(data.value)) : data;
@@ -2101,20 +2208,23 @@ var Result;
2101
2208
  from2.Predicate = (pred, onFalse) => (a) => pred(a) ? make.ok(a) : make.err(onFalse(a));
2102
2209
  from2.nullable = (onNull) => (value) => value === null || value === void 0 ? make.err(onNull()) : make.ok(value);
2103
2210
  from2.Maybe = (onNone) => (maybe) => Maybe.is.none(maybe) ? make.err(onNone()) : make.ok(maybe.value);
2104
- from2.throwable = (f, onError) => (...args) => {
2211
+ from2.throwable = (f, options) => (...args) => {
2105
2212
  try {
2106
2213
  return make.ok(f(...args));
2107
2214
  } catch (error) {
2108
- return make.err(onError(error));
2215
+ return make.err(options.onError(error));
2109
2216
  }
2110
2217
  };
2218
+ from2.Validation = (combineErrors) => (val) => Validation.is.passed(val) ? make.ok(val.value) : make.err(combineErrors(val.errors));
2111
2219
  })(from = Result4.from || (Result4.from = {}));
2112
2220
  Result4.recover = (fallback) => (data) => is.ok(data) ? data : fallback(data.error);
2113
2221
  Result4.recoverUnless = (isBlocked, fallback) => (data) => is.err(data) && !isBlocked(data.error) ? fallback() : data;
2114
2222
  let to;
2115
2223
  ((to2) => {
2116
2224
  to2.Maybe = (data) => is.ok(data) ? Maybe.make.some(data.value) : Maybe.make.none();
2225
+ to2.Validation = (data) => Validation.from.Result(data);
2117
2226
  })(to = Result4.to || (Result4.to = {}));
2227
+ 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();
2118
2228
  Result4.ap = (arg) => (data) => is.ok(data) && is.ok(arg) ? make.ok(data.value(arg.value)) : is.err(data) ? data : arg;
2119
2229
  Result4.bindTo = (key) => (data) => (0, Result4.map)((a) => ({ [key]: a }))(data);
2120
2230
  Result4.bind = (key, f) => (data) => (0, Result4.chain)(
@@ -2133,6 +2243,8 @@ var Result;
2133
2243
  }
2134
2244
  return make.ok(result);
2135
2245
  };
2246
+ Result4.ensure = (predicate, onFail) => (data) => is.err(data) ? data : predicate(data.value) ? data : make.err(onFail(data.value));
2247
+ Result4.bimap = (onErr, onOk) => (data) => is.ok(data) ? make.ok(onOk(data.value)) : make.err(onErr(data.error));
2136
2248
  })(Result || (Result = {}));
2137
2249
 
2138
2250
  // src/Core/State.ts
@@ -2168,13 +2280,23 @@ var State;
2168
2280
  State2.bind = (key, f) => (data) => (0, State2.chain)(
2169
2281
  (a) => (0, State2.map)((b) => ({ ...a, [key]: b }))(f(a))
2170
2282
  )(data);
2283
+ State2.focus = (lens) => (stateOp) => (s) => {
2284
+ const subState = lens.get(s);
2285
+ const [b, newSubState] = stateOp(subState);
2286
+ return [b, lens.set(newSubState)(s)];
2287
+ };
2171
2288
  })(State || (State = {}));
2172
2289
 
2173
2290
  // src/Core/TaskMaybe.ts
2174
2291
  var TaskMaybe;
2175
2292
  ((TaskMaybe2) => {
2176
- TaskMaybe2.some = (value) => Task.resolve(Maybe.make.some(value));
2177
- TaskMaybe2.none = () => Task.resolve(Maybe.make.none());
2293
+ let make;
2294
+ ((make2) => {
2295
+ make2.some = (value) => Task.resolve(Maybe.make.some(value));
2296
+ make2.none = () => Task.resolve(Maybe.make.none());
2297
+ })(make = TaskMaybe2.make || (TaskMaybe2.make = {}));
2298
+ ({ some: TaskMaybe2.some } = make);
2299
+ ({ none: TaskMaybe2.none } = make);
2178
2300
  let from;
2179
2301
  ((from2) => {
2180
2302
  from2.Maybe = (option) => Task.resolve(option);
@@ -2230,19 +2352,28 @@ var TaskMaybe;
2230
2352
  // src/Core/TaskResult.ts
2231
2353
  var TaskResult;
2232
2354
  ((TaskResult2) => {
2233
- TaskResult2.ok = (value) => Task.resolve(Result.make.ok(value));
2234
- TaskResult2.err = (error) => Task.resolve(Result.make.err(error));
2355
+ let make;
2356
+ ((make2) => {
2357
+ make2.ok = (value) => Task.resolve(Result.make.ok(value));
2358
+ make2.err = (error) => Task.resolve(Result.make.err(error));
2359
+ })(make = TaskResult2.make || (TaskResult2.make = {}));
2360
+ ({ ok: TaskResult2.ok } = make);
2361
+ ({ err: TaskResult2.err } = make);
2235
2362
  let from;
2236
2363
  ((from2) => {
2237
2364
  from2.nullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Result.make.err(onNull()) : Result.make.ok(value));
2238
2365
  from2.Maybe = (onNone) => (maybe) => Task.resolve(Maybe.is.none(maybe) ? Result.make.err(onNone()) : Result.make.ok(maybe.value));
2239
2366
  from2.Result = (result) => Task.resolve(result);
2240
- from2.throwable = (f, onError) => (...args) => Task.from.Promise(
2241
- () => f(...args).then(Result.make.ok).catch((error) => Result.make.err(onError(error)))
2367
+ from2.throwable = (f, options) => (...args) => Task.from.Promise(
2368
+ () => f(...args).then(Result.make.ok).catch((error) => Result.make.err(options.onError(error)))
2242
2369
  );
2243
2370
  })(from = TaskResult2.from || (TaskResult2.from = {}));
2244
- TaskResult2.tryCatch = (f, onError) => Task.from.Promise(
2245
- (signal) => Promise.resolve(f(signal)).then(Result.make.ok).catch((error) => Result.make.err(onError(error)))
2371
+ let to;
2372
+ ((to2) => {
2373
+ to2.Maybe = (data) => Task.map(Result.to.Maybe)(data);
2374
+ })(to = TaskResult2.to || (TaskResult2.to = {}));
2375
+ TaskResult2.tryCatch = (f, options) => Task.from.Promise(
2376
+ (signal) => Promise.resolve(f(signal)).then(Result.make.ok).catch((error) => Result.make.err(options.onError(error)))
2246
2377
  );
2247
2378
  TaskResult2.map = (f) => (data) => Task.map(Result.map(f))(data);
2248
2379
  TaskResult2.mapError = (f) => (data) => Task.map(Result.mapError(f))(data);
@@ -2282,6 +2413,60 @@ var TaskResult;
2282
2413
  return Result.make.ok(record);
2283
2414
  });
2284
2415
  });
2416
+ TaskResult2.retry = (policy) => (task) => Task.from.Promise((signal) => {
2417
+ const { attempts } = policy;
2418
+ const wait = (duration) => new Promise((res) => {
2419
+ let timerId;
2420
+ const onAbort = () => {
2421
+ clearTimeout(timerId);
2422
+ res();
2423
+ };
2424
+ if (signal) {
2425
+ if (signal.aborted) {
2426
+ return res();
2427
+ }
2428
+ signal.addEventListener("abort", onAbort, { once: true });
2429
+ }
2430
+ timerId = setTimeout(() => {
2431
+ signal?.removeEventListener("abort", onAbort);
2432
+ res();
2433
+ }, Duration.to.milliseconds(duration));
2434
+ });
2435
+ const executeAttempt = (attempt) => Deferred.to.Promise(task(signal)).then((res) => {
2436
+ if (Result.is.ok(res) || attempt >= attempts || signal?.aborted) {
2437
+ return res;
2438
+ }
2439
+ const delay = policy.getDelay(attempt);
2440
+ return wait(delay).then(() => executeAttempt(attempt + 1));
2441
+ });
2442
+ return executeAttempt(1);
2443
+ });
2444
+ TaskResult2.memoize = (task) => Task.memoize(task);
2445
+ TaskResult2.timeout = (options) => (task) => Task.from.Promise((signal) => {
2446
+ const ms = Duration.to.milliseconds(options.duration);
2447
+ return new Promise((resolve) => {
2448
+ let timerId;
2449
+ const onAbort = () => {
2450
+ clearTimeout(timerId);
2451
+ };
2452
+ if (signal) {
2453
+ if (signal.aborted) {
2454
+ return Deferred.to.Promise(task(signal)).then(resolve);
2455
+ }
2456
+ signal.addEventListener("abort", onAbort, { once: true });
2457
+ }
2458
+ timerId = setTimeout(() => {
2459
+ signal?.removeEventListener("abort", onAbort);
2460
+ resolve(Result.make.err(options.onTimeout()));
2461
+ }, ms);
2462
+ Deferred.to.Promise(task(signal)).then((res) => {
2463
+ clearTimeout(timerId);
2464
+ signal?.removeEventListener("abort", onAbort);
2465
+ resolve(res);
2466
+ });
2467
+ });
2468
+ });
2469
+ TaskResult2.allSettled = (tasks) => Task.from.Promise((signal) => Promise.all(tasks.map((task) => Deferred.to.Promise(task(signal)))));
2285
2470
  })(TaskResult || (TaskResult = {}));
2286
2471
 
2287
2472
  // src/internal/InternalTypes.ts
@@ -2290,9 +2475,15 @@ var isNonEmptyArr = (list) => list.length > 0;
2290
2475
  // src/Core/TaskValidation.ts
2291
2476
  var TaskValidation;
2292
2477
  ((TaskValidation2) => {
2293
- TaskValidation2.passed = (value) => Task.resolve(Validation.make.passed(value));
2294
- TaskValidation2.failed = (error) => Task.resolve(Validation.make.failed(error));
2295
- TaskValidation2.failedAll = (errors) => Task.resolve(Validation.make.failedAll(errors));
2478
+ let make;
2479
+ ((make2) => {
2480
+ make2.passed = (value) => Task.resolve(Validation.make.passed(value));
2481
+ make2.failed = (error) => Task.resolve(Validation.make.failed(error));
2482
+ make2.failedAll = (errors) => Task.resolve(Validation.make.failedAll(errors));
2483
+ })(make = TaskValidation2.make || (TaskValidation2.make = {}));
2484
+ ({ passed: TaskValidation2.passed } = make);
2485
+ ({ failed: TaskValidation2.failed } = make);
2486
+ ({ failedAll: TaskValidation2.failedAll } = make);
2296
2487
  let from;
2297
2488
  ((from2) => {
2298
2489
  from2.Validation = (validation) => Task.resolve(validation);
@@ -2510,7 +2701,8 @@ var Task;
2510
2701
  }
2511
2702
  return results;
2512
2703
  });
2513
- Task2.timeout = (duration, onTimeout) => (task) => from.Promise((outerSignal) => {
2704
+ Task2.timeout = (options) => (task) => from.Promise((outerSignal) => {
2705
+ const { duration, onTimeout } = options;
2514
2706
  const controller = new AbortController();
2515
2707
  let timerId;
2516
2708
  let cleanUp = () => {
@@ -2567,6 +2759,30 @@ var Task;
2567
2759
  Task2.bind = (key, f) => (data) => (0, Task2.chain)(
2568
2760
  (a) => (0, Task2.map)((b) => ({ ...a, [key]: b }))(f(a))
2569
2761
  )(data);
2762
+ Task2.memoize = (task) => {
2763
+ let cached = null;
2764
+ return (signal) => {
2765
+ if (cached === null) {
2766
+ cached = task(signal);
2767
+ }
2768
+ return cached;
2769
+ };
2770
+ };
2771
+ Task2.withProgress = (onProgress) => (task) => (signal) => {
2772
+ onProgress(0);
2773
+ const d = task(signal);
2774
+ return Deferred.from.Promise(
2775
+ Deferred.to.Promise(d).then((res) => {
2776
+ onProgress(1);
2777
+ return res;
2778
+ })
2779
+ );
2780
+ };
2781
+ Task2.withLabel = (label) => (task) => {
2782
+ const fn = ((signal) => task(signal));
2783
+ Object.defineProperty(fn, "label", { value: label, writable: false, enumerable: true, configurable: true });
2784
+ return fn;
2785
+ };
2570
2786
  Task2.Maybe = TaskMaybe;
2571
2787
  Task2.Result = TaskResult;
2572
2788
  Task2.Validation = TaskValidation;
@@ -2673,23 +2889,23 @@ var Tuple;
2673
2889
  from2.pair = (first2, second2) => [first2, second2];
2674
2890
  from2.array = (arr) => arr;
2675
2891
  })(from = Tuple2.from || (Tuple2.from = {}));
2676
- Tuple2.first = (tuple) => tuple[0];
2677
- Tuple2.second = (tuple) => tuple[1];
2678
- Tuple2.mapFirst = (f) => (tuple) => [f(tuple[0]), tuple[1]];
2679
- Tuple2.mapSecond = (f) => (tuple) => [tuple[0], f(tuple[1])];
2680
- Tuple2.mapBoth = (onFirst, onSecond) => (tuple) => [
2681
- onFirst(tuple[0]),
2682
- onSecond(tuple[1])
2892
+ Tuple2.first = (tuple2) => tuple2[0];
2893
+ Tuple2.second = (tuple2) => tuple2[1];
2894
+ Tuple2.mapFirst = (f) => (tuple2) => [f(tuple2[0]), tuple2[1]];
2895
+ Tuple2.mapSecond = (f) => (tuple2) => [tuple2[0], f(tuple2[1])];
2896
+ Tuple2.mapBoth = (onFirst, onSecond) => (tuple2) => [
2897
+ onFirst(tuple2[0]),
2898
+ onSecond(tuple2[1])
2683
2899
  ];
2684
- Tuple2.fold = (f) => (tuple) => f(tuple[0], tuple[1]);
2685
- Tuple2.swap = (tuple) => [tuple[1], tuple[0]];
2900
+ Tuple2.fold = (f) => (tuple2) => f(tuple2[0], tuple2[1]);
2901
+ Tuple2.swap = (tuple2) => [tuple2[1], tuple2[0]];
2686
2902
  let to;
2687
2903
  ((to2) => {
2688
- to2.Array = (tuple) => [...tuple];
2904
+ to2.Array = (tuple2) => [...tuple2];
2689
2905
  })(to = Tuple2.to || (Tuple2.to = {}));
2690
- Tuple2.tap = (f) => (tuple) => {
2691
- f(tuple[0], tuple[1]);
2692
- return tuple;
2906
+ Tuple2.tap = (f) => (tuple2) => {
2907
+ f(tuple2[0], tuple2[1]);
2908
+ return tuple2;
2693
2909
  };
2694
2910
  })(Tuple || (Tuple = {}));
2695
2911
 
@@ -2707,6 +2923,13 @@ var Validation;
2707
2923
  is2.passed = (data) => data.kind === "Passed";
2708
2924
  is2.failed = (data) => data.kind === "Failed";
2709
2925
  })(is = Validation2.is || (Validation2.is = {}));
2926
+ Validation2.tryCatch = (f, options) => {
2927
+ try {
2928
+ return make.passed(f());
2929
+ } catch (error) {
2930
+ return make.failed(options.onError(error));
2931
+ }
2932
+ };
2710
2933
  let from;
2711
2934
  ((from2) => {
2712
2935
  from2.Predicate = (pred, onFalse) => (a) => pred(a) ? make.passed(a) : make.failed(onFalse(a));
@@ -2722,6 +2945,12 @@ var Validation;
2722
2945
  }
2723
2946
  return is.passed(arg) ? make.failedAll(data.errors) : make.failedAll([...data.errors, ...arg.errors]);
2724
2947
  };
2948
+ Validation2.apCustom = (concat) => (arg) => (data) => {
2949
+ if (is.passed(data)) {
2950
+ return is.passed(arg) ? make.passed(data.value(arg.value)) : make.failedAll(arg.errors);
2951
+ }
2952
+ return is.passed(arg) ? make.failedAll(data.errors) : make.failedAll(concat(data.errors, arg.errors));
2953
+ };
2725
2954
  Validation2.fold = (onFailed, onPassed) => (data) => is.passed(data) ? onPassed(data.value) : onFailed(data.errors);
2726
2955
  Validation2.match = (cases) => (data) => is.passed(data) ? cases.passed(data.value) : cases.failed(data.errors);
2727
2956
  Validation2.getOrElse = (defaultValue) => (data) => is.passed(data) ? data.value : defaultValue();
@@ -2741,7 +2970,14 @@ var Validation;
2741
2970
  Validation2.recoverUnless = (isBlocked, fallback) => (data) => is.failed(data) && !data.errors.some(isBlocked) ? fallback() : data;
2742
2971
  let to;
2743
2972
  ((to2) => {
2744
- to2.Result = (data) => is.passed(data) ? Result.make.ok(data.value) : Result.make.err(data.errors);
2973
+ function Result4(arg) {
2974
+ if (typeof arg === "function") {
2975
+ const combine = arg;
2976
+ return (val) => is.passed(val) ? Result.make.ok(val.value) : Result.make.err(combine(val.errors));
2977
+ }
2978
+ return is.passed(arg) ? Result.make.ok(arg.value) : Result.make.err(arg.errors);
2979
+ }
2980
+ to2.Result = Result4;
2745
2981
  to2.Maybe = (data) => is.passed(data) ? Maybe.make.some(data.value) : Maybe.make.none();
2746
2982
  })(to = Validation2.to || (Validation2.to = {}));
2747
2983
  Validation2.product = (first, second) => {
@@ -3164,9 +3400,154 @@ var Arr;
3164
3400
  const i = Math.max(0, index);
3165
3401
  return [data.slice(0, i), data.slice(i)];
3166
3402
  };
3403
+ Arr2.partitionMaybe = (f) => (data) => {
3404
+ const failures = [];
3405
+ const successes = [];
3406
+ for (let i = 0; i < data.length; i++) {
3407
+ const res = f(data[i]);
3408
+ if (res.kind === "Some") {
3409
+ successes.push(res.value);
3410
+ } else {
3411
+ failures.push(data[i]);
3412
+ }
3413
+ }
3414
+ return [failures, successes];
3415
+ };
3416
+ Arr2.at = (index) => (data) => {
3417
+ const targetIndex = index < 0 ? data.length + index : index;
3418
+ if (targetIndex < 0 || targetIndex >= data.length) {
3419
+ return Maybe.make.none();
3420
+ }
3421
+ return Maybe.make.some(data[targetIndex]);
3422
+ };
3423
+ Arr2.findMap = (f) => (data) => {
3424
+ for (let i = 0; i < data.length; i++) {
3425
+ const res = f(data[i]);
3426
+ if (res.kind === "Some") {
3427
+ return res;
3428
+ }
3429
+ }
3430
+ return Maybe.make.none();
3431
+ };
3432
+ Arr2.indexBy = (keyFn) => (data) => {
3433
+ const map2 = new globalThis.Map();
3434
+ for (let i = 0; i < data.length; i++) {
3435
+ map2.set(keyFn(data[i]), data[i]);
3436
+ }
3437
+ return map2;
3438
+ };
3439
+ Arr2.frequencies = (data) => {
3440
+ const map2 = new globalThis.Map();
3441
+ for (let i = 0; i < data.length; i++) {
3442
+ const item = data[i];
3443
+ map2.set(item, (map2.get(item) ?? 0) + 1);
3444
+ }
3445
+ return map2;
3446
+ };
3447
+ Arr2.chunkBy = (keyFn) => (data) => {
3448
+ if (data.length === 0) {
3449
+ return [];
3450
+ }
3451
+ const result = [];
3452
+ let currentChunk = [data[0]];
3453
+ let currentKey = keyFn(data[0]);
3454
+ for (let i = 1; i < data.length; i++) {
3455
+ const item = data[i];
3456
+ const key = keyFn(item);
3457
+ if (Object.is(key, currentKey)) {
3458
+ currentChunk.push(item);
3459
+ } else {
3460
+ result.push(currentChunk);
3461
+ currentChunk = [item];
3462
+ currentKey = key;
3463
+ }
3464
+ }
3465
+ result.push(currentChunk);
3466
+ return result;
3467
+ };
3468
+ Arr2.dedupeAdjacent = (eq = (a, b) => Object.is(a, b)) => (data) => {
3469
+ if (data.length === 0) {
3470
+ return [];
3471
+ }
3472
+ const result = [data[0]];
3473
+ for (let i = 1; i < data.length; i++) {
3474
+ if (!eq(data[i], result[result.length - 1])) {
3475
+ result.push(data[i]);
3476
+ }
3477
+ }
3478
+ return result;
3479
+ };
3480
+ Arr2.windowed = (size2, options) => (data) => {
3481
+ const step = options?.step ?? 1;
3482
+ if (size2 <= 0 || step <= 0 || data.length < size2) {
3483
+ return [];
3484
+ }
3485
+ const result = [];
3486
+ for (let i = 0; i <= data.length - size2; i += step) {
3487
+ result.push(data.slice(i, i + size2));
3488
+ }
3489
+ return result;
3490
+ };
3491
+ Arr2.unfold = (initial, f) => {
3492
+ const result = [];
3493
+ let currentState = initial;
3494
+ while (true) {
3495
+ const next = f(currentState);
3496
+ if (next.kind === "None") {
3497
+ break;
3498
+ }
3499
+ const [item, nextState] = next.value;
3500
+ result.push(item);
3501
+ currentState = nextState;
3502
+ }
3503
+ return result;
3504
+ };
3167
3505
  Arr2.NonEmpty = ArrNonEmpty;
3168
3506
  })(Arr || (Arr = {}));
3169
3507
 
3508
+ // src/Data/BigNum.ts
3509
+ var BigNum;
3510
+ ((BigNum2) => {
3511
+ let from;
3512
+ ((from2) => {
3513
+ from2.string = (s) => {
3514
+ try {
3515
+ if (s.trim() === "") {
3516
+ return Maybe.make.none();
3517
+ }
3518
+ return Maybe.make.some(BigInt(s));
3519
+ } catch {
3520
+ return Maybe.make.none();
3521
+ }
3522
+ };
3523
+ from2.number = (n) => {
3524
+ if (!Number.isInteger(n) || n < Number.MIN_SAFE_INTEGER || n > Number.MAX_SAFE_INTEGER) {
3525
+ return Maybe.make.none();
3526
+ }
3527
+ return Maybe.make.some(BigInt(n));
3528
+ };
3529
+ })(from = BigNum2.from || (BigNum2.from = {}));
3530
+ let to;
3531
+ ((to2) => {
3532
+ to2.number = (b) => {
3533
+ if (b < BigInt(Number.MIN_SAFE_INTEGER) || b > BigInt(Number.MAX_SAFE_INTEGER)) {
3534
+ return Maybe.make.none();
3535
+ }
3536
+ return Maybe.make.some(Number(b));
3537
+ };
3538
+ })(to = BigNum2.to || (BigNum2.to = {}));
3539
+ BigNum2.add = (b) => (a) => a + b;
3540
+ BigNum2.sub = (b) => (a) => a - b;
3541
+ BigNum2.mul = (b) => (a) => a * b;
3542
+ BigNum2.div = (b) => (a) => b === 0n ? Maybe.make.none() : Maybe.make.some(a / b);
3543
+ BigNum2.mod = (b) => (a) => b === 0n ? Maybe.make.none() : Maybe.make.some(a % b);
3544
+ BigNum2.clamp = (min2, max2) => (a) => a < min2 ? min2 : a > max2 ? max2 : a;
3545
+ BigNum2.inRange = (start, end) => (a) => a >= start && a < end;
3546
+ BigNum2.abs = (a) => a < 0n ? -a : a;
3547
+ BigNum2.min = (b) => (a) => a < b ? a : b;
3548
+ BigNum2.max = (b) => (a) => a > b ? a : b;
3549
+ })(BigNum || (BigNum = {}));
3550
+
3170
3551
  // src/Data/Dict.ts
3171
3552
  var DictNonEmpty;
3172
3553
  ((DictNonEmpty2) => {
@@ -3323,16 +3704,86 @@ var Dict;
3323
3704
  }
3324
3705
  return acc;
3325
3706
  };
3707
+ function mergeWith(combine) {
3708
+ return (arg1, arg2) => {
3709
+ if (arg2 !== void 0) {
3710
+ const first = arg1;
3711
+ const second2 = arg2;
3712
+ const res = new globalThis.Map(first);
3713
+ for (const [k, v] of second2) {
3714
+ if (res.has(k)) {
3715
+ res.set(k, combine(res.get(k), v));
3716
+ } else {
3717
+ res.set(k, v);
3718
+ }
3719
+ }
3720
+ return res;
3721
+ }
3722
+ const second = arg1;
3723
+ return (first) => {
3724
+ const res = new globalThis.Map(first);
3725
+ for (const [k, v] of second) {
3726
+ if (res.has(k)) {
3727
+ res.set(k, combine(res.get(k), v));
3728
+ } else {
3729
+ res.set(k, v);
3730
+ }
3731
+ }
3732
+ return res;
3733
+ };
3734
+ };
3735
+ }
3736
+ Dict2.mergeWith = mergeWith;
3326
3737
  let to;
3327
3738
  ((to2) => {
3328
3739
  to2.Record = (m) => Object.fromEntries(m);
3329
3740
  })(to = Dict2.to || (Dict2.to = {}));
3741
+ Dict2.mapEntries = (f) => (data) => {
3742
+ const res = new globalThis.Map();
3743
+ for (const [k, v] of data) {
3744
+ const [nk, nv] = f(k, v);
3745
+ res.set(nk, nv);
3746
+ }
3747
+ return res;
3748
+ };
3749
+ Dict2.mapKeys = (f) => (data) => {
3750
+ const res = new globalThis.Map();
3751
+ for (const [k, v] of data) {
3752
+ res.set(f(k), v);
3753
+ }
3754
+ return res;
3755
+ };
3330
3756
  Dict2.NonEmpty = DictNonEmpty;
3331
3757
  })(Dict || (Dict = {}));
3332
3758
 
3759
+ // src/Data/Json.ts
3760
+ var isSyntaxError = (err2) => typeof err2 === "object" && err2 !== null && "name" in err2 && err2.name === "SyntaxError";
3761
+ var isTypeError = (err2) => typeof err2 === "object" && err2 !== null && "name" in err2 && err2.name === "TypeError";
3762
+ var Json;
3763
+ ((Json2) => {
3764
+ Json2.parse = (text) => Result.tryCatch(() => JSON.parse(text), {
3765
+ onError: (err2) => isSyntaxError(err2) ? err2 : new SyntaxError(String(err2))
3766
+ });
3767
+ Json2.stringify = (value, replacer, space) => Result.tryCatch(() => JSON.stringify(value, replacer, space), {
3768
+ onError: (err2) => isTypeError(err2) ? err2 : new TypeError(String(err2))
3769
+ });
3770
+ })(Json || (Json = {}));
3771
+
3333
3772
  // src/Data/Num.ts
3334
3773
  var Num;
3335
3774
  ((Num2) => {
3775
+ let is;
3776
+ ((is2) => {
3777
+ is2.zero = (n) => n === 0;
3778
+ is2.integer = (n) => Number.isInteger(n);
3779
+ is2.float = (n) => Number.isFinite(n) && !Number.isInteger(n);
3780
+ is2.finite = (n) => Number.isFinite(n);
3781
+ is2.nan = (n) => Number.isNaN(n);
3782
+ is2.even = (n) => Number.isInteger(n) && n % 2 === 0;
3783
+ is2.odd = (n) => Number.isInteger(n) && n % 2 !== 0;
3784
+ is2.positive = (n) => n > 0;
3785
+ is2.negative = (n) => n < 0;
3786
+ })(is = Num2.is || (Num2.is = {}));
3336
3787
  Num2.range = (from, to, step = 1) => {
3337
3788
  if (step <= 0 || from > to) {
3338
3789
  return [];
@@ -3396,6 +3847,7 @@ var Num;
3396
3847
  }
3397
3848
  return Maybe.make.some(result);
3398
3849
  };
3850
+ Num2.format = (options, locales) => (n) => !Number.isFinite(n) ? Maybe.make.none() : Maybe.make.some(new Intl.NumberFormat(locales, options).format(n));
3399
3851
  })(Num || (Num = {}));
3400
3852
 
3401
3853
  // src/Data/Rec.ts
@@ -3583,6 +4035,36 @@ var Rec;
3583
4035
  ...data,
3584
4036
  ...other
3585
4037
  });
4038
+ function mergeWith(combine) {
4039
+ return (arg1, arg2) => {
4040
+ if (arg2 !== void 0) {
4041
+ const first = arg1;
4042
+ const second2 = arg2;
4043
+ const result = { ...first };
4044
+ for (const [k, v] of Object.entries(second2)) {
4045
+ if (Object.hasOwn(result, k)) {
4046
+ result[k] = combine(result[k], v);
4047
+ } else {
4048
+ result[k] = v;
4049
+ }
4050
+ }
4051
+ return result;
4052
+ }
4053
+ const second = arg1;
4054
+ return (first) => {
4055
+ const result = { ...first };
4056
+ for (const [k, v] of Object.entries(second)) {
4057
+ if (Object.hasOwn(result, k)) {
4058
+ result[k] = combine(result[k], v);
4059
+ } else {
4060
+ result[k] = v;
4061
+ }
4062
+ }
4063
+ return result;
4064
+ };
4065
+ };
4066
+ }
4067
+ Rec2.mergeWith = mergeWith;
3586
4068
  Rec2.size = (data) => Object.keys(data).length;
3587
4069
  Rec2.mapKeys = (f) => (data) => {
3588
4070
  const result = {};
@@ -3600,6 +4082,25 @@ var Rec;
3600
4082
  }
3601
4083
  return result;
3602
4084
  };
4085
+ Rec2.mapEntries = (f) => (data) => {
4086
+ const result = {};
4087
+ for (const [k, v] of Object.entries(data)) {
4088
+ const [newKey, newVal] = f(k, v);
4089
+ Object.defineProperty(result, newKey, { value: newVal, writable: true, enumerable: true, configurable: true });
4090
+ }
4091
+ return result;
4092
+ };
4093
+ Rec2.updateIn = (path, f) => (data) => {
4094
+ const updateNode = (obj, keys2) => {
4095
+ const [head, ...tail] = keys2;
4096
+ if (tail.length === 0) {
4097
+ return { ...obj, [head]: f(obj?.[head]) };
4098
+ }
4099
+ const child = obj && typeof obj === "object" && head in obj ? obj[head] : {};
4100
+ return { ...obj, [head]: updateNode(child, tail) };
4101
+ };
4102
+ return updateNode(data, path);
4103
+ };
3603
4104
  let traverse;
3604
4105
  ((traverse2) => {
3605
4106
  traverse2.Maybe = RecMaybe.traverse;
@@ -3682,6 +4183,17 @@ var Str;
3682
4183
  return Result.make.err(error);
3683
4184
  }
3684
4185
  };
4186
+ Str2.uncapitalize = (s) => s.length === 0 ? "" : s.charAt(0).toLowerCase() + s.slice(1);
4187
+ Str2.truncate = (options) => (s) => {
4188
+ const { length: targetLength, suffix = "..." } = options;
4189
+ if (s.length <= targetLength) {
4190
+ return s;
4191
+ }
4192
+ if (targetLength <= suffix.length) {
4193
+ return suffix.slice(0, targetLength);
4194
+ }
4195
+ return s.slice(0, targetLength - suffix.length) + suffix;
4196
+ };
3685
4197
  Str2.NonEmpty = StrNonEmpty;
3686
4198
  })(Str || (Str = {}));
3687
4199
 
@@ -3812,12 +4324,14 @@ var Uniq;
3812
4324
  // Annotate the CommonJS export names for ESM import in node:
3813
4325
  0 && (module.exports = {
3814
4326
  Arr,
4327
+ BigNum,
3815
4328
  Brand,
3816
4329
  Combinable,
3817
4330
  Deferred,
3818
4331
  Dict,
3819
4332
  Duration,
3820
4333
  Equality,
4334
+ Json,
3821
4335
  Lazy,
3822
4336
  Lens,
3823
4337
  Logged,
@@ -3833,6 +4347,7 @@ var Uniq;
3833
4347
  RemoteData,
3834
4348
  Resource,
3835
4349
  Result,
4350
+ RetryPolicy,
3836
4351
  State,
3837
4352
  Str,
3838
4353
  Task,
@@ -3868,7 +4383,9 @@ var Uniq;
3868
4383
  or,
3869
4384
  pipe,
3870
4385
  tap,
4386
+ tuple,
3871
4387
  uncurry,
3872
4388
  uncurry3,
3873
- uncurry4
4389
+ uncurry4,
4390
+ untuple
3874
4391
  });