@nlozgachev/pipelined 0.32.0 → 0.34.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/utils.js CHANGED
@@ -43,35 +43,48 @@ var Deferred;
43
43
  var Result;
44
44
  ((Result2) => {
45
45
  Result2.ok = (value) => ({ kind: "Ok", value });
46
- Result2.error = (e) => ({ kind: "Error", error: e });
46
+ Result2.err = (e) => ({ kind: "Err", error: e });
47
47
  Result2.isOk = (data) => data.kind === "Ok";
48
- Result2.isError = (data) => data.kind === "Error";
48
+ Result2.isErr = (data) => data.kind === "Err";
49
49
  Result2.tryCatch = (f, onError) => {
50
50
  try {
51
51
  return (0, Result2.ok)(f());
52
- } catch (e) {
53
- return (0, Result2.error)(onError(e));
52
+ } catch (error) {
53
+ return (0, Result2.err)(onError(error));
54
54
  }
55
55
  };
56
56
  Result2.map = (f) => (data) => (0, Result2.isOk)(data) ? (0, Result2.ok)(f(data.value)) : data;
57
- Result2.mapError = (f) => (data) => (0, Result2.isError)(data) ? (0, Result2.error)(f(data.error)) : data;
57
+ Result2.mapError = (f) => (data) => (0, Result2.isErr)(data) ? (0, Result2.err)(f(data.error)) : data;
58
58
  Result2.chain = (f) => (data) => (0, Result2.isOk)(data) ? f(data.value) : data;
59
59
  Result2.fold = (onErr, onOk) => (data) => (0, Result2.isOk)(data) ? onOk(data.value) : onErr(data.error);
60
60
  Result2.match = (cases) => (data) => (0, Result2.isOk)(data) ? cases.ok(data.value) : cases.err(data.error);
61
61
  Result2.getOrElse = (defaultValue) => (data) => (0, Result2.isOk)(data) ? data.value : defaultValue();
62
62
  Result2.tap = (f) => (data) => {
63
- if ((0, Result2.isOk)(data)) f(data.value);
63
+ if ((0, Result2.isOk)(data)) {
64
+ f(data.value);
65
+ }
64
66
  return data;
65
67
  };
66
68
  Result2.tapError = (f) => (data) => {
67
- if ((0, Result2.isError)(data)) f(data.error);
69
+ if ((0, Result2.isErr)(data)) {
70
+ f(data.error);
71
+ }
68
72
  return data;
69
73
  };
70
- Result2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result2.ok)(a) : (0, Result2.error)(onFalse(a));
74
+ Result2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result2.ok)(a) : (0, Result2.err)(onFalse(a));
75
+ Result2.fromNullable = (onNull) => (value) => value === null || value === void 0 ? (0, Result2.err)(onNull()) : (0, Result2.ok)(value);
76
+ Result2.fromMaybe = (onNone) => (maybe) => Maybe.isNone(maybe) ? (0, Result2.err)(onNone()) : (0, Result2.ok)(maybe.value);
77
+ Result2.fromThrowable = (f, onError) => (...args) => {
78
+ try {
79
+ return (0, Result2.ok)(f(...args));
80
+ } catch (error) {
81
+ return (0, Result2.err)(onError(error));
82
+ }
83
+ };
71
84
  Result2.recover = (fallback) => (data) => (0, Result2.isOk)(data) ? data : fallback(data.error);
72
- Result2.recoverUnless = (isBlocked, fallback) => (data) => (0, Result2.isError)(data) && !isBlocked(data.error) ? fallback() : data;
85
+ Result2.recoverUnless = (isBlocked, fallback) => (data) => (0, Result2.isErr)(data) && !isBlocked(data.error) ? fallback() : data;
73
86
  Result2.toMaybe = (data) => (0, Result2.isOk)(data) ? Maybe.some(data.value) : Maybe.none();
74
- Result2.ap = (arg) => (data) => (0, Result2.isOk)(data) && (0, Result2.isOk)(arg) ? (0, Result2.ok)(data.value(arg.value)) : (0, Result2.isError)(data) ? data : arg;
87
+ Result2.ap = (arg) => (data) => (0, Result2.isOk)(data) && (0, Result2.isOk)(arg) ? (0, Result2.ok)(data.value(arg.value)) : (0, Result2.isErr)(data) ? data : arg;
75
88
  })(Result || (Result = {}));
76
89
 
77
90
  // src/Core/Maybe.ts
@@ -86,7 +99,7 @@ var Maybe;
86
99
  Maybe2.toNullable = (data) => (0, Maybe2.isSome)(data) ? data.value : null;
87
100
  Maybe2.toUndefined = (data) => (0, Maybe2.isSome)(data) ? data.value : void 0;
88
101
  Maybe2.fromPredicate = (pred) => (a) => pred(a) ? (0, Maybe2.some)(a) : (0, Maybe2.none)();
89
- Maybe2.toResult = (onNone) => (data) => (0, Maybe2.isSome)(data) ? Result.ok(data.value) : Result.error(onNone());
102
+ Maybe2.toResult = (onNone) => (data) => (0, Maybe2.isSome)(data) ? Result.ok(data.value) : Result.err(onNone());
90
103
  Maybe2.fromResult = (data) => Result.isOk(data) ? (0, Maybe2.some)(data.value) : (0, Maybe2.none)();
91
104
  Maybe2.map = (f) => (data) => (0, Maybe2.isSome)(data) ? (0, Maybe2.some)(f(data.value)) : data;
92
105
  Maybe2.chain = (f) => (data) => (0, Maybe2.isSome)(data) ? f(data.value) : data;
@@ -94,7 +107,9 @@ var Maybe;
94
107
  Maybe2.match = (cases) => (data) => (0, Maybe2.isSome)(data) ? cases.some(data.value) : cases.none();
95
108
  Maybe2.getOrElse = (defaultValue) => (data) => (0, Maybe2.isSome)(data) ? data.value : defaultValue();
96
109
  Maybe2.tap = (f) => (data) => {
97
- if ((0, Maybe2.isSome)(data)) f(data.value);
110
+ if ((0, Maybe2.isSome)(data)) {
111
+ f(data.value);
112
+ }
98
113
  return data;
99
114
  };
100
115
  Maybe2.filter = (predicate) => (data) => (0, Maybe2.isSome)(data) ? predicate(data.value) ? data : (0, Maybe2.none)() : data;
@@ -102,8 +117,34 @@ var Maybe;
102
117
  Maybe2.ap = (arg) => (data) => (0, Maybe2.isSome)(data) && (0, Maybe2.isSome)(arg) ? (0, Maybe2.some)(data.value(arg.value)) : (0, Maybe2.none)();
103
118
  })(Maybe || (Maybe = {}));
104
119
 
120
+ // src/Types/Brand.ts
121
+ var Brand;
122
+ ((Brand2) => {
123
+ Brand2.wrap = () => (value) => value;
124
+ Brand2.unwrap = (branded) => branded;
125
+ })(Brand || (Brand = {}));
126
+
127
+ // src/Types/Duration.ts
128
+ var Duration;
129
+ ((Duration2) => {
130
+ const wrap = Brand.wrap();
131
+ Duration2.milliseconds = (ms) => wrap(ms);
132
+ Duration2.seconds = (s) => wrap(s * 1e3);
133
+ Duration2.minutes = (m) => wrap(m * 60 * 1e3);
134
+ Duration2.hours = (h) => wrap(h * 60 * 60 * 1e3);
135
+ Duration2.days = (d) => wrap(d * 24 * 60 * 60 * 1e3);
136
+ Duration2.toMilliseconds = (d) => Brand.unwrap(d);
137
+ Duration2.toSeconds = (d) => Brand.unwrap(d) / 1e3;
138
+ Duration2.toMinutes = (d) => Brand.unwrap(d) / (60 * 1e3);
139
+ Duration2.toHours = (d) => Brand.unwrap(d) / (60 * 60 * 1e3);
140
+ Duration2.toDays = (d) => Brand.unwrap(d) / (24 * 60 * 60 * 1e3);
141
+ Duration2.add = (other) => (self) => wrap(Brand.unwrap(self) + Brand.unwrap(other));
142
+ Duration2.subtract = (other) => (self) => wrap(Brand.unwrap(self) - Brand.unwrap(other));
143
+ })(Duration || (Duration = {}));
144
+
105
145
  // src/Core/Task.ts
106
146
  var toPromise = (task, signal) => Deferred.toPromise(task(signal));
147
+ var getMs = (duration) => Duration.toMilliseconds(duration);
107
148
  var Task;
108
149
  ((Task2) => {
109
150
  Task2.resolve = (value) => () => Deferred.fromPromise(Promise.resolve(value));
@@ -111,12 +152,7 @@ var Task;
111
152
  Task2.fromSync = (f) => () => Deferred.fromPromise(Promise.resolve(f()));
112
153
  Task2.map = (f) => (data) => (0, Task2.from)((signal) => toPromise(data, signal).then(f));
113
154
  Task2.chain = (f) => (data) => (0, Task2.from)((signal) => toPromise(data, signal).then((a) => toPromise(f(a), signal)));
114
- Task2.ap = (arg) => (data) => (0, Task2.from)(
115
- (signal) => Promise.all([
116
- toPromise(data, signal),
117
- toPromise(arg, signal)
118
- ]).then(([f, a]) => f(a))
119
- );
155
+ Task2.ap = (arg) => (data) => (0, Task2.from)((signal) => Promise.all([toPromise(data, signal), toPromise(arg, signal)]).then(([f, a]) => f(a)));
120
156
  Task2.tap = (f) => (data) => (0, Task2.from)(
121
157
  (signal) => toPromise(data, signal).then((a) => {
122
158
  f(a);
@@ -126,35 +162,39 @@ var Task;
126
162
  Task2.all = (tasks) => (0, Task2.from)(
127
163
  (signal) => Promise.all(tasks.map((t) => toPromise(t, signal)))
128
164
  );
129
- Task2.delay = (ms) => (data) => (0, Task2.from)(
130
- (signal) => new Promise((resolve2) => {
131
- let timerId = void 0;
165
+ Task2.delay = (duration) => (data) => (0, Task2.from)(
166
+ (signal) => new Promise((res) => {
167
+ let timerId;
132
168
  const onAbort = () => {
133
169
  if (timerId !== void 0) {
134
170
  clearTimeout(timerId);
135
171
  }
136
- resolve2(toPromise(data, signal));
172
+ res(toPromise(data, signal));
137
173
  };
138
174
  if (signal) {
139
175
  if (signal.aborted) {
140
- return resolve2(toPromise(data, signal));
176
+ return res(toPromise(data, signal));
141
177
  }
142
178
  signal.addEventListener("abort", onAbort, { once: true });
143
179
  }
144
180
  timerId = setTimeout(() => {
145
181
  signal?.removeEventListener("abort", onAbort);
146
- resolve2(toPromise(data, signal));
147
- }, ms);
182
+ res(toPromise(data, signal));
183
+ }, getMs(duration));
148
184
  })
149
185
  );
150
186
  Task2.repeat = (options) => (task) => (0, Task2.from)((signal) => {
151
- const { times, delay: ms } = options;
152
- if (times <= 0) return Promise.resolve([]);
187
+ const { times, delay: delayDuration } = options;
188
+ if (times <= 0) {
189
+ return Promise.resolve([]);
190
+ }
153
191
  const results = [];
154
192
  const wait = () => {
155
- if (signal?.aborted) return Promise.resolve();
193
+ if (signal?.aborted) {
194
+ return Promise.resolve();
195
+ }
156
196
  return new Promise((r) => {
157
- let timerId = void 0;
197
+ let timerId;
158
198
  const onAbort = () => {
159
199
  if (timerId !== void 0) {
160
200
  clearTimeout(timerId);
@@ -167,7 +207,7 @@ var Task;
167
207
  timerId = setTimeout(() => {
168
208
  signal?.removeEventListener("abort", onAbort);
169
209
  r();
170
- }, ms || 0);
210
+ }, delayDuration ? getMs(delayDuration) : 0);
171
211
  });
172
212
  };
173
213
  const run2 = (left) => {
@@ -176,18 +216,22 @@ var Task;
176
216
  }
177
217
  return toPromise(task, signal).then((a) => {
178
218
  results.push(a);
179
- if (left <= 1 || signal?.aborted) return results;
219
+ if (left <= 1 || signal?.aborted) {
220
+ return results;
221
+ }
180
222
  return wait().then(() => run2(left - 1));
181
223
  });
182
224
  };
183
225
  return run2(times);
184
226
  });
185
227
  Task2.repeatUntil = (options) => (task) => (0, Task2.from)((signal) => {
186
- const { when: predicate, delay: ms, maxAttempts } = options;
228
+ const { when: predicate, delay: delayDuration, maxAttempts } = options;
187
229
  const wait = () => {
188
- if (signal?.aborted) return Promise.resolve();
230
+ if (signal?.aborted) {
231
+ return Promise.resolve();
232
+ }
189
233
  return new Promise((r) => {
190
- let timerId = void 0;
234
+ let timerId;
191
235
  const onAbort = () => {
192
236
  if (timerId !== void 0) {
193
237
  clearTimeout(timerId);
@@ -200,7 +244,7 @@ var Task;
200
244
  timerId = setTimeout(() => {
201
245
  signal?.removeEventListener("abort", onAbort);
202
246
  r();
203
- }, ms || 0);
247
+ }, delayDuration ? getMs(delayDuration) : 0);
204
248
  });
205
249
  };
206
250
  const run2 = (attempt, lastValue) => {
@@ -208,15 +252,55 @@ var Task;
208
252
  return Promise.resolve(lastValue);
209
253
  }
210
254
  return toPromise(task, signal).then((a) => {
211
- if (predicate(a)) return a;
212
- if (maxAttempts !== void 0 && attempt >= maxAttempts) return a;
213
- if (signal?.aborted) return a;
255
+ if (predicate(a)) {
256
+ return a;
257
+ }
258
+ if (maxAttempts !== void 0 && attempt >= maxAttempts) {
259
+ return a;
260
+ }
261
+ if (signal?.aborted) {
262
+ return a;
263
+ }
214
264
  return wait().then(() => run2(attempt + 1, a));
215
265
  });
216
266
  };
217
267
  return run2(1);
218
268
  });
219
- Task2.race = (tasks) => (0, Task2.from)((signal) => Promise.race(tasks.map((t) => toPromise(t, signal))));
269
+ Task2.race = (tasks) => {
270
+ if (tasks.length === 0) {
271
+ return () => Deferred.fromPromise(new Promise(() => {
272
+ }));
273
+ }
274
+ return (0, Task2.from)((outerSignal) => {
275
+ const controllers = tasks.map(() => new AbortController());
276
+ const onOuterAbort = () => {
277
+ for (const ctrl of controllers) {
278
+ ctrl.abort();
279
+ }
280
+ };
281
+ if (outerSignal) {
282
+ if (outerSignal.aborted) {
283
+ onOuterAbort();
284
+ } else {
285
+ outerSignal.addEventListener("abort", onOuterAbort, { once: true });
286
+ }
287
+ }
288
+ const promises = tasks.map((task, idx) => {
289
+ const ctrl = controllers[idx];
290
+ return toPromise(task, ctrl.signal).then((result) => {
291
+ for (let i = 0; i < controllers.length; i++) {
292
+ if (i !== idx) {
293
+ controllers[i].abort();
294
+ }
295
+ }
296
+ outerSignal?.removeEventListener("abort", onOuterAbort);
297
+ return result;
298
+ });
299
+ });
300
+ return Promise.race(promises);
301
+ });
302
+ };
303
+ Task2.sequence = (tasks) => (0, Task2.from)((signal) => Promise.all(tasks.map((t) => toPromise(t, signal))));
220
304
  Task2.sequential = (tasks) => (0, Task2.from)(async (signal) => {
221
305
  const results = [];
222
306
  for (const task of tasks) {
@@ -227,19 +311,19 @@ var Task;
227
311
  }
228
312
  return results;
229
313
  });
230
- Task2.timeout = (ms, onTimeout) => (task) => (0, Task2.from)((outerSignal) => {
314
+ Task2.timeout = (duration, onTimeout) => (task) => (0, Task2.from)((outerSignal) => {
231
315
  const controller = new AbortController();
232
316
  let timerId;
233
- const cleanUp = () => {
317
+ function cleanUp() {
234
318
  if (timerId !== void 0) {
235
319
  clearTimeout(timerId);
236
320
  }
237
321
  outerSignal?.removeEventListener("abort", onOuterAbort);
238
- };
239
- const onOuterAbort = () => {
322
+ }
323
+ function onOuterAbort() {
240
324
  cleanUp();
241
325
  controller.abort();
242
- };
326
+ }
243
327
  if (outerSignal) {
244
328
  if (outerSignal.aborted) {
245
329
  controller.abort();
@@ -252,12 +336,12 @@ var Task;
252
336
  cleanUp();
253
337
  return Result.ok(a);
254
338
  }),
255
- new Promise((resolve2) => {
339
+ new Promise((res) => {
256
340
  timerId = setTimeout(() => {
257
341
  controller.abort();
258
342
  cleanUp();
259
- resolve2(Result.error(onTimeout()));
260
- }, ms);
343
+ res(Result.err(onTimeout()));
344
+ }, getMs(duration));
261
345
  })
262
346
  ]);
263
347
  });
@@ -294,35 +378,43 @@ var Arr;
294
378
  Arr2.init = (data) => data.length > 0 ? Maybe.some(data.slice(0, -1)) : Maybe.none();
295
379
  Arr2.findFirst = (predicate) => (data) => {
296
380
  const idx = data.findIndex(predicate);
297
- return idx >= 0 ? Maybe.some(data[idx]) : Maybe.none();
381
+ return idx !== -1 ? Maybe.some(data[idx]) : Maybe.none();
298
382
  };
299
383
  Arr2.findLast = (predicate) => (data) => {
300
384
  for (let i = data.length - 1; i >= 0; i--) {
301
- if (predicate(data[i])) return Maybe.some(data[i]);
385
+ if (predicate(data[i])) {
386
+ return Maybe.some(data[i]);
387
+ }
302
388
  }
303
389
  return Maybe.none();
304
390
  };
305
391
  Arr2.findIndex = (predicate) => (data) => {
306
392
  const idx = data.findIndex(predicate);
307
- return idx >= 0 ? Maybe.some(idx) : Maybe.none();
393
+ return idx !== -1 ? Maybe.some(idx) : Maybe.none();
308
394
  };
309
395
  Arr2.map = (f) => (data) => {
310
396
  const n = data.length;
311
397
  const result = new Array(n);
312
- for (let i = 0; i < n; i++) result[i] = f(data[i]);
398
+ for (let i = 0; i < n; i++) {
399
+ result[i] = f(data[i]);
400
+ }
313
401
  return result;
314
402
  };
315
403
  Arr2.mapWithIndex = (f) => (data) => {
316
404
  const n = data.length;
317
405
  const result = new Array(n);
318
- for (let i = 0; i < n; i++) result[i] = f(i, data[i]);
406
+ for (let i = 0; i < n; i++) {
407
+ result[i] = f(i, data[i]);
408
+ }
319
409
  return result;
320
410
  };
321
411
  Arr2.filter = (predicate) => (data) => {
322
412
  const n = data.length;
323
413
  const result = [];
324
414
  for (let i = 0; i < n; i++) {
325
- if (predicate(data[i])) result.push(data[i]);
415
+ if (predicate(data[i])) {
416
+ result.push(data[i]);
417
+ }
326
418
  }
327
419
  return result;
328
420
  };
@@ -330,7 +422,9 @@ var Arr;
330
422
  const result = [];
331
423
  for (let i = 0; i < data.length; i++) {
332
424
  const mapped = f(data[i]);
333
- if (mapped.kind === "Some") result.push(mapped.value);
425
+ if (mapped.kind === "Some") {
426
+ result.push(mapped.value);
427
+ }
334
428
  }
335
429
  return result;
336
430
  };
@@ -342,18 +436,52 @@ var Arr;
342
436
  }
343
437
  return [pass, fail];
344
438
  };
439
+ Arr2.compact = (data) => {
440
+ const result = [];
441
+ for (const item of data) {
442
+ if (item.kind === "Some") {
443
+ result.push(item.value);
444
+ }
445
+ }
446
+ return result;
447
+ };
448
+ Arr2.separate = (data) => {
449
+ const errors = [];
450
+ const successes = [];
451
+ for (const item of data) {
452
+ if (item.kind === "Ok") {
453
+ successes.push(item.value);
454
+ } else {
455
+ errors.push(item.error);
456
+ }
457
+ }
458
+ return [errors, successes];
459
+ };
460
+ Arr2.partitionMap = (f) => (data) => {
461
+ const errors = [];
462
+ const successes = [];
463
+ for (const item of data) {
464
+ const mapped = f(item);
465
+ if (mapped.kind === "Ok") {
466
+ successes.push(mapped.value);
467
+ } else {
468
+ errors.push(mapped.error);
469
+ }
470
+ }
471
+ return [errors, successes];
472
+ };
345
473
  Arr2.groupBy = (f) => (data) => {
346
474
  const result = {};
347
475
  for (const a of data) {
348
476
  const key = f(a);
349
- if (!result[key]) result[key] = [];
477
+ if (!result[key]) {
478
+ result[key] = [];
479
+ }
350
480
  result[key].push(a);
351
481
  }
352
482
  return result;
353
483
  };
354
- Arr2.uniq = (data) => [
355
- ...new Set(data)
356
- ];
484
+ Arr2.uniq = (data) => [...new Set(data)];
357
485
  Arr2.uniqBy = (f) => (data) => {
358
486
  const seen = /* @__PURE__ */ new Set();
359
487
  const result = [];
@@ -377,12 +505,16 @@ var Arr;
377
505
  };
378
506
  Arr2.sortBy = (compare) => (data) => {
379
507
  const arr = data;
380
- if (typeof arr.toSorted === "function") return arr.toSorted(compare);
381
- return [...data].sort(compare);
508
+ if (typeof arr.toSorted === "function") {
509
+ return arr.toSorted(compare);
510
+ }
511
+ return [...data].toSorted(compare);
382
512
  };
383
513
  Arr2.sortWith = (ord) => (data) => {
384
514
  const arr = data;
385
- if (typeof arr.toSorted === "function") return arr.toSorted(ord);
515
+ if (typeof arr.toSorted === "function") {
516
+ return arr.toSorted(ord);
517
+ }
386
518
  return [...data].sort(ord);
387
519
  };
388
520
  Arr2.zip = (other) => (data) => {
@@ -402,7 +534,9 @@ var Arr;
402
534
  return result;
403
535
  };
404
536
  Arr2.intersperse = (sep) => (data) => {
405
- if (data.length <= 1) return data;
537
+ if (data.length <= 1) {
538
+ return data;
539
+ }
406
540
  const result = [data[0]];
407
541
  for (let i = 1; i < data.length; i++) {
408
542
  result.push(sep, data[i]);
@@ -410,7 +544,9 @@ var Arr;
410
544
  return result;
411
545
  };
412
546
  Arr2.chunksOf = (n) => (data) => {
413
- if (n <= 0) return [];
547
+ if (n <= 0) {
548
+ return [];
549
+ }
414
550
  const result = [];
415
551
  for (let i = 0; i < data.length; i += n) {
416
552
  result.push(data.slice(i, i + n));
@@ -440,7 +576,9 @@ var Arr;
440
576
  for (let i = 0; i < n; i++) {
441
577
  const chunk = f(data[i]);
442
578
  const m = chunk.length;
443
- for (let j = 0; j < m; j++) result.push(chunk[j]);
579
+ for (let j = 0; j < m; j++) {
580
+ result.push(chunk[j]);
581
+ }
444
582
  }
445
583
  return result;
446
584
  };
@@ -450,7 +588,9 @@ var Arr;
450
588
  const result = new Array(n);
451
589
  for (let i = 0; i < n; i++) {
452
590
  const mapped = f(data[i]);
453
- if (mapped.kind === "None") return Maybe.none();
591
+ if (mapped.kind === "None") {
592
+ return Maybe.none();
593
+ }
454
594
  result[i] = mapped.value;
455
595
  }
456
596
  return Maybe.some(result);
@@ -460,7 +600,9 @@ var Arr;
460
600
  const result = new Array(n);
461
601
  for (let i = 0; i < n; i++) {
462
602
  const mapped = f(data[i]);
463
- if (mapped.kind === "Error") return mapped;
603
+ if (mapped.kind === "Err") {
604
+ return mapped;
605
+ }
464
606
  result[i] = mapped.value;
465
607
  }
466
608
  return Result.ok(result);
@@ -473,7 +615,9 @@ var Arr;
473
615
  const result = [];
474
616
  for (const a of data) {
475
617
  const r = await Deferred.toPromise(f(a)());
476
- if (Result.isError(r)) return r;
618
+ if (Result.isErr(r)) {
619
+ return r;
620
+ }
477
621
  result.push(r.value);
478
622
  }
479
623
  return Result.ok(result);
@@ -483,27 +627,41 @@ var Arr;
483
627
  Arr2.size = (data) => data.length;
484
628
  Arr2.some = (predicate) => (data) => {
485
629
  const n = data.length;
486
- for (let i = 0; i < n; i++) if (predicate(data[i])) return true;
630
+ for (let i = 0; i < n; i++) {
631
+ if (predicate(data[i])) {
632
+ return true;
633
+ }
634
+ }
487
635
  return false;
488
636
  };
489
637
  Arr2.every = (predicate) => (data) => {
490
638
  const n = data.length;
491
- for (let i = 0; i < n; i++) if (!predicate(data[i])) return false;
639
+ for (let i = 0; i < n; i++) {
640
+ if (!predicate(data[i])) {
641
+ return false;
642
+ }
643
+ }
492
644
  return true;
493
645
  };
494
- Arr2.reverse = (data) => [...data].reverse();
646
+ Arr2.reverse = (data) => [...data].toReversed();
495
647
  Arr2.insertAt = (index, item) => (data) => {
496
648
  const i = Math.max(0, Math.min(index, data.length));
497
649
  const arr = data;
498
- if (typeof arr.toSpliced === "function") return arr.toSpliced(i, 0, item);
650
+ if (typeof arr.toSpliced === "function") {
651
+ return arr.toSpliced(i, 0, item);
652
+ }
499
653
  const result = [...data];
500
654
  result.splice(i, 0, item);
501
655
  return result;
502
656
  };
503
657
  Arr2.removeAt = (index) => (data) => {
504
- if (index < 0 || index >= data.length) return data;
658
+ if (index < 0 || index >= data.length) {
659
+ return data;
660
+ }
505
661
  const arr = data;
506
- if (typeof arr.toSpliced === "function") return arr.toSpliced(index, 1);
662
+ if (typeof arr.toSpliced === "function") {
663
+ return arr.toSpliced(index, 1);
664
+ }
507
665
  const result = [...data];
508
666
  result.splice(index, 1);
509
667
  return result;
@@ -513,14 +671,18 @@ var Arr;
513
671
  Arr2.takeWhile = (predicate) => (data) => {
514
672
  const result = [];
515
673
  for (const a of data) {
516
- if (!predicate(a)) break;
674
+ if (!predicate(a)) {
675
+ break;
676
+ }
517
677
  result.push(a);
518
678
  }
519
679
  return result;
520
680
  };
521
681
  Arr2.dropWhile = (predicate) => (data) => {
522
682
  let i = 0;
523
- while (i < data.length && predicate(data[i])) i++;
683
+ while (i < data.length && predicate(data[i])) {
684
+ i++;
685
+ }
524
686
  return data.slice(i);
525
687
  };
526
688
  Arr2.scan = (initial, f) => (data) => {
@@ -551,8 +713,11 @@ var Dict;
551
713
  for (const item of items) {
552
714
  const key = keyFn(item);
553
715
  const arr = result.get(key);
554
- if (arr !== void 0) arr.push(item);
555
- else result.set(key, [item]);
716
+ if (arr !== void 0) {
717
+ arr.push(item);
718
+ } else {
719
+ result.set(key, [item]);
720
+ }
556
721
  }
557
722
  return result;
558
723
  };
@@ -569,7 +734,9 @@ var Dict;
569
734
  return result;
570
735
  };
571
736
  Dict2.remove = (key) => (m) => {
572
- if (!m.has(key)) return m;
737
+ if (!m.has(key)) {
738
+ return m;
739
+ }
573
740
  const result = new globalThis.Map(m);
574
741
  result.delete(key);
575
742
  return result;
@@ -596,21 +763,27 @@ var Dict;
596
763
  Dict2.filter = (predicate) => (m) => {
597
764
  const result = new globalThis.Map();
598
765
  for (const [k, v] of m) {
599
- if (predicate(v)) result.set(k, v);
766
+ if (predicate(v)) {
767
+ result.set(k, v);
768
+ }
600
769
  }
601
770
  return result;
602
771
  };
603
772
  Dict2.filterWithKey = (predicate) => (m) => {
604
773
  const result = new globalThis.Map();
605
774
  for (const [k, v] of m) {
606
- if (predicate(k, v)) result.set(k, v);
775
+ if (predicate(k, v)) {
776
+ result.set(k, v);
777
+ }
607
778
  }
608
779
  return result;
609
780
  };
610
781
  Dict2.compact = (m) => {
611
782
  const result = new globalThis.Map();
612
783
  for (const [k, v] of m) {
613
- if (v.kind === "Some") result.set(k, v.value);
784
+ if (v.kind === "Some") {
785
+ result.set(k, v.value);
786
+ }
614
787
  }
615
788
  return result;
616
789
  };
@@ -618,7 +791,9 @@ var Dict;
618
791
  const result = new globalThis.Map();
619
792
  for (const [key, value] of m) {
620
793
  const mapped = f(value);
621
- if (mapped.kind === "Some") result.set(key, mapped.value);
794
+ if (mapped.kind === "Some") {
795
+ result.set(key, mapped.value);
796
+ }
622
797
  }
623
798
  return result;
624
799
  };
@@ -632,14 +807,18 @@ var Dict;
632
807
  Dict2.intersection = (other) => (m) => {
633
808
  const result = new globalThis.Map();
634
809
  for (const [k, v] of m) {
635
- if (other.has(k)) result.set(k, v);
810
+ if (other.has(k)) {
811
+ result.set(k, v);
812
+ }
636
813
  }
637
814
  return result;
638
815
  };
639
816
  Dict2.difference = (other) => (m) => {
640
817
  const result = new globalThis.Map();
641
818
  for (const [k, v] of m) {
642
- if (!other.has(k)) result.set(k, v);
819
+ if (!other.has(k)) {
820
+ result.set(k, v);
821
+ }
643
822
  }
644
823
  return result;
645
824
  };
@@ -664,7 +843,9 @@ var Dict;
664
843
  var Num;
665
844
  ((Num2) => {
666
845
  Num2.range = (from, to, step = 1) => {
667
- if (step <= 0 || from > to) return [];
846
+ if (step <= 0 || from > to) {
847
+ return [];
848
+ }
668
849
  const count = Math.floor((to - from) / step) + 1;
669
850
  const result = new Array(count);
670
851
  for (let i = 0; i < count; i++) {
@@ -675,7 +856,9 @@ var Num;
675
856
  Num2.clamp = (min2, max2) => (n) => Math.min(Math.max(n, min2), max2);
676
857
  Num2.between = (min2, max2) => (n) => n >= min2 && n <= max2;
677
858
  Num2.parse = (s) => {
678
- if (s.trim() === "") return Maybe.none();
859
+ if (s.trim() === "") {
860
+ return Maybe.none();
861
+ }
679
862
  const n = Number(s);
680
863
  return isNaN(n) ? Maybe.none() : Maybe.some(n);
681
864
  };
@@ -691,23 +874,33 @@ var Num;
691
874
  Num2.remainder = (divisor) => (n) => divisor === 0 ? Maybe.none() : Maybe.some(n % divisor);
692
875
  Num2.sum = (ns) => {
693
876
  let result = 0;
694
- for (let i = 0; i < ns.length; i++) result += ns[i];
877
+ for (let i = 0; i < ns.length; i++) {
878
+ result += ns[i];
879
+ }
695
880
  return result;
696
881
  };
697
882
  Num2.mean = (ns) => ns.length === 0 ? Maybe.none() : Maybe.some((0, Num2.sum)(ns) / ns.length);
698
883
  Num2.min = (ns) => {
699
- if (ns.length === 0) return Maybe.none();
884
+ if (ns.length === 0) {
885
+ return Maybe.none();
886
+ }
700
887
  let [result] = ns;
701
888
  for (let i = 1; i < ns.length; i++) {
702
- if (ns[i] < result) result = ns[i];
889
+ if (ns[i] < result) {
890
+ result = ns[i];
891
+ }
703
892
  }
704
893
  return Maybe.some(result);
705
894
  };
706
895
  Num2.max = (ns) => {
707
- if (ns.length === 0) return Maybe.none();
896
+ if (ns.length === 0) {
897
+ return Maybe.none();
898
+ }
708
899
  let [result] = ns;
709
900
  for (let i = 1; i < ns.length; i++) {
710
- if (ns[i] > result) result = ns[i];
901
+ if (ns[i] > result) {
902
+ result = ns[i];
903
+ }
711
904
  }
712
905
  return Maybe.some(result);
713
906
  };
@@ -719,16 +912,33 @@ var Rec;
719
912
  Rec2.map = (f) => (data) => {
720
913
  const keys2 = Object.keys(data);
721
914
  const vals = Object.values(data);
722
- const result = {};
915
+ const result = Object.create(Object.getPrototypeOf(data));
723
916
  for (let i = 0; i < keys2.length; i++) {
724
917
  Object.defineProperty(result, keys2[i], { value: f(vals[i]), writable: true, enumerable: true, configurable: true });
725
918
  }
726
919
  return result;
727
920
  };
921
+ Rec2.filterMap = (f) => (data) => {
922
+ const keys2 = Object.keys(data);
923
+ const vals = Object.values(data);
924
+ const result = Object.create(Object.getPrototypeOf(data));
925
+ for (let i = 0; i < keys2.length; i++) {
926
+ const maybeVal = f(vals[i]);
927
+ if (maybeVal.kind === "Some") {
928
+ Object.defineProperty(result, keys2[i], {
929
+ value: maybeVal.value,
930
+ writable: true,
931
+ enumerable: true,
932
+ configurable: true
933
+ });
934
+ }
935
+ }
936
+ return result;
937
+ };
728
938
  Rec2.mapWithKey = (f) => (data) => {
729
939
  const keys2 = Object.keys(data);
730
940
  const vals = Object.values(data);
731
- const result = {};
941
+ const result = Object.create(Object.getPrototypeOf(data));
732
942
  for (let i = 0; i < keys2.length; i++) {
733
943
  Object.defineProperty(result, keys2[i], {
734
944
  value: f(keys2[i], vals[i]),
@@ -740,10 +950,12 @@ var Rec;
740
950
  return result;
741
951
  };
742
952
  Rec2.filter = (predicate) => (data) => {
743
- const result = {};
744
- for (const [k, v] of Object.entries(data)) {
745
- if (predicate(v)) {
746
- Object.defineProperty(result, k, { value: v, writable: true, enumerable: true, configurable: true });
953
+ const keys2 = Object.keys(data);
954
+ const vals = Object.values(data);
955
+ const result = Object.create(Object.getPrototypeOf(data));
956
+ for (let i = 0; i < keys2.length; i++) {
957
+ if (predicate(vals[i])) {
958
+ Object.defineProperty(result, keys2[i], { value: vals[i], writable: true, enumerable: true, configurable: true });
747
959
  }
748
960
  }
749
961
  return result;
@@ -873,6 +1085,13 @@ var Str;
873
1085
  return isNaN(n) ? Maybe.none() : Maybe.some(n);
874
1086
  }
875
1087
  };
1088
+ Str2.parseJson = (s) => {
1089
+ try {
1090
+ return Result.ok(JSON.parse(s));
1091
+ } catch (error) {
1092
+ return Result.err(error);
1093
+ }
1094
+ };
876
1095
  })(Str || (Str = {}));
877
1096
 
878
1097
  // src/Utils/Uniq.ts
@@ -886,20 +1105,28 @@ var Uniq;
886
1105
  Uniq2.isEmpty = (s) => s.size === 0;
887
1106
  Uniq2.isSubsetOf = (other) => (s) => {
888
1107
  const set = s;
889
- if (typeof set.isSubsetOf === "function") return set.isSubsetOf(other);
1108
+ if (typeof set.isSubsetOf === "function") {
1109
+ return set.isSubsetOf(other);
1110
+ }
890
1111
  for (const item of s) {
891
- if (!other.has(item)) return false;
1112
+ if (!other.has(item)) {
1113
+ return false;
1114
+ }
892
1115
  }
893
1116
  return true;
894
1117
  };
895
1118
  Uniq2.insert = (item) => (s) => {
896
- if (s.has(item)) return s;
1119
+ if (s.has(item)) {
1120
+ return s;
1121
+ }
897
1122
  const result = new globalThis.Set(s);
898
1123
  result.add(item);
899
1124
  return result;
900
1125
  };
901
1126
  Uniq2.remove = (item) => (s) => {
902
- if (!s.has(item)) return s;
1127
+ if (!s.has(item)) {
1128
+ return s;
1129
+ }
903
1130
  const result = new globalThis.Set(s);
904
1131
  result.delete(item);
905
1132
  return result;
@@ -914,29 +1141,47 @@ var Uniq;
914
1141
  Uniq2.filter = (predicate) => (s) => {
915
1142
  const result = new globalThis.Set();
916
1143
  for (const item of s) {
917
- if (predicate(item)) result.add(item);
1144
+ if (predicate(item)) {
1145
+ result.add(item);
1146
+ }
918
1147
  }
919
1148
  return result;
920
1149
  };
921
1150
  Uniq2.union = (other) => (s) => {
922
1151
  const set = s;
923
- if (typeof set.union === "function") return set.union(other);
1152
+ if (typeof set.union === "function") {
1153
+ return set.union(other);
1154
+ }
924
1155
  const result = new globalThis.Set(s);
925
- for (const item of other) result.add(item);
1156
+ for (const item of other) {
1157
+ result.add(item);
1158
+ }
926
1159
  return result;
927
1160
  };
928
1161
  Uniq2.intersection = (other) => (s) => {
929
1162
  const set = s;
930
- if (typeof set.intersection === "function") return set.intersection(other);
1163
+ if (typeof set.intersection === "function") {
1164
+ return set.intersection(other);
1165
+ }
931
1166
  const result = new globalThis.Set();
932
- for (const item of s) if (other.has(item)) result.add(item);
1167
+ for (const item of s) {
1168
+ if (other.has(item)) {
1169
+ result.add(item);
1170
+ }
1171
+ }
933
1172
  return result;
934
1173
  };
935
1174
  Uniq2.difference = (other) => (s) => {
936
1175
  const set = s;
937
- if (typeof set.difference === "function") return set.difference(other);
1176
+ if (typeof set.difference === "function") {
1177
+ return set.difference(other);
1178
+ }
938
1179
  const result = new globalThis.Set();
939
- for (const item of s) if (!other.has(item)) result.add(item);
1180
+ for (const item of s) {
1181
+ if (!other.has(item)) {
1182
+ result.add(item);
1183
+ }
1184
+ }
940
1185
  return result;
941
1186
  };
942
1187
  Uniq2.reduce = (init, f) => (s) => {