@nlozgachev/pipelined 0.41.0 → 0.43.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
@@ -111,74 +111,227 @@ var Duration;
111
111
  Duration2.subtract = (other) => (self) => wrap(Brand.unwrap(self) - Brand.unwrap(other));
112
112
  })(Duration || (Duration = {}));
113
113
 
114
- // src/Types/NonEmptyList.ts
115
- var isNonEmptyList = (list) => list.length > 0;
116
-
117
114
  // src/Core/Result.ts
118
115
  var Result;
119
- ((Result2) => {
120
- Result2.ok = (value) => ({ kind: "Ok", value });
121
- Result2.err = (e) => ({ kind: "Err", error: e });
122
- Result2.isOk = (data) => data.kind === "Ok";
123
- Result2.isErr = (data) => data.kind === "Err";
124
- Result2.tryCatch = (f, onError) => {
116
+ ((Result3) => {
117
+ Result3.ok = (value) => ({ kind: "Ok", value });
118
+ Result3.err = (e) => ({ kind: "Err", error: e });
119
+ Result3.isOk = (data) => data.kind === "Ok";
120
+ Result3.isErr = (data) => data.kind === "Err";
121
+ Result3.tryCatch = (f, onError) => {
125
122
  try {
126
- return (0, Result2.ok)(f());
123
+ return (0, Result3.ok)(f());
127
124
  } catch (error) {
128
- return (0, Result2.err)(onError(error));
125
+ return (0, Result3.err)(onError(error));
129
126
  }
130
127
  };
131
- Result2.map = (f) => (data) => (0, Result2.isOk)(data) ? (0, Result2.ok)(f(data.value)) : data;
132
- Result2.mapError = (f) => (data) => (0, Result2.isErr)(data) ? (0, Result2.err)(f(data.error)) : data;
133
- Result2.chain = (f) => (data) => (0, Result2.isOk)(data) ? f(data.value) : data;
134
- Result2.fold = (onErr, onOk) => (data) => (0, Result2.isOk)(data) ? onOk(data.value) : onErr(data.error);
135
- Result2.match = (cases) => (data) => (0, Result2.isOk)(data) ? cases.ok(data.value) : cases.err(data.error);
136
- Result2.getOrElse = (defaultValue) => (data) => (0, Result2.isOk)(data) ? data.value : defaultValue();
137
- Result2.tap = (f) => (data) => {
138
- if ((0, Result2.isOk)(data)) {
128
+ Result3.map = (f) => (data) => (0, Result3.isOk)(data) ? (0, Result3.ok)(f(data.value)) : data;
129
+ Result3.mapError = (f) => (data) => (0, Result3.isErr)(data) ? (0, Result3.err)(f(data.error)) : data;
130
+ Result3.chain = (f) => (data) => (0, Result3.isOk)(data) ? f(data.value) : data;
131
+ Result3.fold = (onErr, onOk) => (data) => (0, Result3.isOk)(data) ? onOk(data.value) : onErr(data.error);
132
+ Result3.match = (cases) => (data) => (0, Result3.isOk)(data) ? cases.ok(data.value) : cases.err(data.error);
133
+ Result3.getOrElse = (defaultValue) => (data) => (0, Result3.isOk)(data) ? data.value : defaultValue();
134
+ Result3.tap = (f) => (data) => {
135
+ if ((0, Result3.isOk)(data)) {
139
136
  f(data.value);
140
137
  }
141
138
  return data;
142
139
  };
143
- Result2.tapError = (f) => (data) => {
144
- if ((0, Result2.isErr)(data)) {
140
+ Result3.tapError = (f) => (data) => {
141
+ if ((0, Result3.isErr)(data)) {
145
142
  f(data.error);
146
143
  }
147
144
  return data;
148
145
  };
149
- Result2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result2.ok)(a) : (0, Result2.err)(onFalse(a));
150
- Result2.fromNullable = (onNull) => (value) => value === null || value === void 0 ? (0, Result2.err)(onNull()) : (0, Result2.ok)(value);
151
- Result2.fromMaybe = (onNone) => (maybe) => Maybe.isNone(maybe) ? (0, Result2.err)(onNone()) : (0, Result2.ok)(maybe.value);
152
- Result2.fromThrowable = (f, onError) => (...args) => {
146
+ Result3.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result3.ok)(a) : (0, Result3.err)(onFalse(a));
147
+ Result3.fromNullable = (onNull) => (value) => value === null || value === void 0 ? (0, Result3.err)(onNull()) : (0, Result3.ok)(value);
148
+ Result3.fromMaybe = (onNone) => (maybe) => Maybe.isNone(maybe) ? (0, Result3.err)(onNone()) : (0, Result3.ok)(maybe.value);
149
+ Result3.fromThrowable = (f, onError) => (...args) => {
153
150
  try {
154
- return (0, Result2.ok)(f(...args));
151
+ return (0, Result3.ok)(f(...args));
155
152
  } catch (error) {
156
- return (0, Result2.err)(onError(error));
153
+ return (0, Result3.err)(onError(error));
157
154
  }
158
155
  };
159
- Result2.recover = (fallback) => (data) => (0, Result2.isOk)(data) ? data : fallback(data.error);
160
- Result2.recoverUnless = (isBlocked, fallback) => (data) => (0, Result2.isErr)(data) && !isBlocked(data.error) ? fallback() : data;
161
- Result2.toMaybe = (data) => (0, Result2.isOk)(data) ? Maybe.some(data.value) : Maybe.none();
162
- 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;
163
- Result2.bindTo = (key) => (data) => (0, Result2.map)((a) => ({ [key]: a }))(data);
164
- Result2.bind = (key, f) => (data) => (0, Result2.chain)(
165
- (a) => (0, Result2.map)((b) => ({ ...a, [key]: b }))(f(a))
156
+ Result3.recover = (fallback) => (data) => (0, Result3.isOk)(data) ? data : fallback(data.error);
157
+ Result3.recoverUnless = (isBlocked, fallback) => (data) => (0, Result3.isErr)(data) && !isBlocked(data.error) ? fallback() : data;
158
+ Result3.toMaybe = (data) => (0, Result3.isOk)(data) ? Maybe.some(data.value) : Maybe.none();
159
+ Result3.ap = (arg) => (data) => (0, Result3.isOk)(data) && (0, Result3.isOk)(arg) ? (0, Result3.ok)(data.value(arg.value)) : (0, Result3.isErr)(data) ? data : arg;
160
+ Result3.bindTo = (key) => (data) => (0, Result3.map)((a) => ({ [key]: a }))(data);
161
+ Result3.bind = (key, f) => (data) => (0, Result3.chain)(
162
+ (a) => (0, Result3.map)((b) => ({ ...a, [key]: b }))(f(a))
166
163
  )(data);
167
- Result2.struct = (fields) => {
164
+ Result3.struct = (fields) => {
168
165
  const result = {};
169
166
  for (const key in fields) {
170
167
  if (Object.hasOwn(fields, key)) {
171
168
  const res = fields[key];
172
- if ((0, Result2.isErr)(res)) {
169
+ if ((0, Result3.isErr)(res)) {
173
170
  return res;
174
171
  }
175
172
  result[key] = res.value;
176
173
  }
177
174
  }
178
- return (0, Result2.ok)(result);
175
+ return (0, Result3.ok)(result);
179
176
  };
180
177
  })(Result || (Result = {}));
181
178
 
179
+ // src/Core/TaskMaybe.ts
180
+ var TaskMaybe;
181
+ ((TaskMaybe2) => {
182
+ TaskMaybe2.some = (value) => Task.resolve(Maybe.some(value));
183
+ TaskMaybe2.none = () => Task.resolve(Maybe.none());
184
+ TaskMaybe2.fromMaybe = (option) => Task.resolve(option);
185
+ TaskMaybe2.fromNullable = (value) => Task.resolve(Maybe.fromNullable(value));
186
+ TaskMaybe2.fromResult = (result) => Task.resolve(Result.toMaybe(result));
187
+ TaskMaybe2.fromTask = (task) => Task.map(Maybe.some)(task);
188
+ TaskMaybe2.tryCatch = (f) => Task.from((signal) => Promise.resolve(f(signal)).then(Maybe.some).catch(() => Maybe.none()));
189
+ TaskMaybe2.map = (f) => (data) => Task.map(Maybe.map(f))(data);
190
+ TaskMaybe2.chain = (f) => (data) => Task.chain((option) => Maybe.isSome(option) ? f(option.value) : Task.resolve(Maybe.none()))(data);
191
+ TaskMaybe2.ap = (arg) => (data) => Task.from(
192
+ (signal) => Promise.all([Deferred.toPromise(data(signal)), Deferred.toPromise(arg(signal))]).then(
193
+ ([of_, oa]) => Maybe.ap(oa)(of_)
194
+ )
195
+ );
196
+ TaskMaybe2.fold = (onNone, onSome) => (data) => Task.map(Maybe.fold(onNone, onSome))(data);
197
+ TaskMaybe2.match = (cases) => (data) => Task.map(Maybe.match(cases))(data);
198
+ TaskMaybe2.getOrElse = (defaultValue) => (data) => Task.map(Maybe.getOrElse(defaultValue))(data);
199
+ TaskMaybe2.tap = (f) => (data) => Task.map(Maybe.tap(f))(data);
200
+ TaskMaybe2.filter = (predicate) => (data) => Task.map(Maybe.filter(predicate))(data);
201
+ TaskMaybe2.toResult = (onNone) => (data) => Task.map(Maybe.toResult(onNone))(data);
202
+ TaskMaybe2.bindTo = (key) => (data) => (0, TaskMaybe2.map)((a) => ({ [key]: a }))(data);
203
+ TaskMaybe2.bind = (key, f) => (data) => (0, TaskMaybe2.chain)(
204
+ (a) => (0, TaskMaybe2.map)((b) => ({ ...a, [key]: b }))(f(a))
205
+ )(data);
206
+ TaskMaybe2.recover = (fallback) => (data) => Task.chain((maybe) => Maybe.isNone(maybe) ? fallback() : Task.resolve(maybe))(data);
207
+ TaskMaybe2.struct = (fields) => Task.from((signal) => {
208
+ const keys = Object.keys(fields);
209
+ const promises = keys.map((key) => Deferred.toPromise(fields[key](signal)));
210
+ return Promise.all(promises).then((results) => {
211
+ const record = {};
212
+ for (let i = 0; i < keys.length; i++) {
213
+ const res = results[i];
214
+ if (Maybe.isNone(res)) {
215
+ return res;
216
+ }
217
+ record[keys[i]] = res.value;
218
+ }
219
+ return Maybe.some(record);
220
+ });
221
+ });
222
+ })(TaskMaybe || (TaskMaybe = {}));
223
+
224
+ // src/Core/TaskResult.ts
225
+ var TaskResult;
226
+ ((TaskResult2) => {
227
+ TaskResult2.ok = (value) => Task.resolve(Result.ok(value));
228
+ TaskResult2.err = (error) => Task.resolve(Result.err(error));
229
+ TaskResult2.fromNullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Result.err(onNull()) : Result.ok(value));
230
+ TaskResult2.fromMaybe = (onNone) => (maybe) => Task.resolve(Maybe.isNone(maybe) ? Result.err(onNone()) : Result.ok(maybe.value));
231
+ TaskResult2.fromResult = (result) => Task.resolve(result);
232
+ TaskResult2.fromThrowable = (f, onError) => (...args) => Task.from(() => f(...args).then(Result.ok).catch((error) => Result.err(onError(error))));
233
+ TaskResult2.tryCatch = (f, onError) => Task.from((signal) => Promise.resolve(f(signal)).then(Result.ok).catch((error) => Result.err(onError(error))));
234
+ TaskResult2.map = (f) => (data) => Task.map(Result.map(f))(data);
235
+ TaskResult2.mapError = (f) => (data) => Task.map(Result.mapError(f))(data);
236
+ TaskResult2.chain = (f) => (data) => Task.chain((result) => Result.isOk(result) ? f(result.value) : Task.resolve(Result.err(result.error)))(
237
+ data
238
+ );
239
+ TaskResult2.fold = (onErr, onOk) => (data) => Task.map(Result.fold(onErr, onOk))(data);
240
+ TaskResult2.match = (cases) => (data) => Task.map(Result.match(cases))(data);
241
+ TaskResult2.recover = (fallback) => (data) => Task.chain(
242
+ (result) => Result.isErr(result) ? fallback(result.error) : Task.resolve(result)
243
+ )(data);
244
+ TaskResult2.getOrElse = (defaultValue) => (data) => Task.map(Result.getOrElse(defaultValue))(data);
245
+ TaskResult2.tap = (f) => (data) => Task.map(Result.tap(f))(data);
246
+ TaskResult2.tapError = (f) => (data) => Task.map(Result.tapError(f))(data);
247
+ TaskResult2.ap = (arg) => (data) => Task.from(
248
+ (signal) => Promise.all([Deferred.toPromise(data(signal)), Deferred.toPromise(arg(signal))]).then(
249
+ ([of_, oa]) => Result.ap(oa)(of_)
250
+ )
251
+ );
252
+ TaskResult2.run = (signal) => (task) => task(signal);
253
+ TaskResult2.bindTo = (key) => (data) => (0, TaskResult2.map)((a) => ({ [key]: a }))(data);
254
+ TaskResult2.bind = (key, f) => (data) => (0, TaskResult2.chain)(
255
+ (a) => (0, TaskResult2.map)((b) => ({ ...a, [key]: b }))(f(a))
256
+ )(data);
257
+ TaskResult2.struct = (fields) => Task.from((signal) => {
258
+ const keys = Object.keys(fields);
259
+ const promises = keys.map((key) => Deferred.toPromise(fields[key](signal)));
260
+ return Promise.all(promises).then((results) => {
261
+ const record = {};
262
+ for (let i = 0; i < keys.length; i++) {
263
+ const res = results[i];
264
+ if (Result.isErr(res)) {
265
+ return res;
266
+ }
267
+ record[keys[i]] = res.value;
268
+ }
269
+ return Result.ok(record);
270
+ });
271
+ });
272
+ })(TaskResult || (TaskResult = {}));
273
+
274
+ // src/internal/InternalTypes.ts
275
+ var isNonEmptyArr = (list) => list.length > 0;
276
+
277
+ // src/Core/TaskValidation.ts
278
+ var TaskValidation;
279
+ ((TaskValidation2) => {
280
+ TaskValidation2.passed = (value) => Task.resolve(Validation.passed(value));
281
+ TaskValidation2.failed = (error) => Task.resolve(Validation.failed(error));
282
+ TaskValidation2.failedAll = (errors) => Task.resolve(Validation.failedAll(errors));
283
+ TaskValidation2.fromValidation = (validation) => Task.resolve(validation);
284
+ TaskValidation2.fromNullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Validation.failed(onNull()) : Validation.passed(value));
285
+ TaskValidation2.fromMaybe = (onNone) => (maybe) => Task.resolve(Maybe.isNone(maybe) ? Validation.failed(onNone()) : Validation.passed(maybe.value));
286
+ TaskValidation2.fromResult = (result) => Task.resolve(Validation.fromResult(result));
287
+ TaskValidation2.tryCatch = (f, onError) => Task.from(
288
+ (signal) => Promise.resolve(f(signal)).then(Validation.passed).catch((error) => Validation.failed(onError(error)))
289
+ );
290
+ TaskValidation2.map = (f) => (data) => Task.map(Validation.map(f))(data);
291
+ TaskValidation2.ap = (arg) => (data) => Task.from(
292
+ (signal) => Promise.all([Deferred.toPromise(data(signal)), Deferred.toPromise(arg(signal))]).then(
293
+ ([vf, va]) => Validation.ap(va)(vf)
294
+ )
295
+ );
296
+ TaskValidation2.fold = (onFailed, onPassed) => (data) => Task.map(Validation.fold(onFailed, onPassed))(data);
297
+ TaskValidation2.match = (cases) => (data) => Task.map(Validation.match(cases))(data);
298
+ TaskValidation2.getOrElse = (defaultValue) => (data) => Task.map(Validation.getOrElse(defaultValue))(data);
299
+ TaskValidation2.tap = (f) => (data) => Task.map(Validation.tap(f))(data);
300
+ TaskValidation2.recover = (fallback) => (data) => Task.chain(
301
+ (validation) => Validation.isPassed(validation) ? Task.resolve(validation) : fallback(validation.errors)
302
+ )(data);
303
+ TaskValidation2.product = (first, second) => Task.from(
304
+ (signal) => Promise.all([Deferred.toPromise(first(signal)), Deferred.toPromise(second(signal))]).then(
305
+ ([va, vb]) => Validation.product(va, vb)
306
+ )
307
+ );
308
+ TaskValidation2.productAll = (data) => Task.from(
309
+ (signal) => Promise.all(data.map((t) => Deferred.toPromise(t(signal)))).then((results) => {
310
+ const [first, ...rest] = results;
311
+ return Validation.productAll([first, ...rest]);
312
+ })
313
+ );
314
+ TaskValidation2.mapError = (f) => (data) => Task.map(Validation.mapError(f))(data);
315
+ TaskValidation2.tapError = (f) => (data) => Task.map(Validation.tapError(f))(data);
316
+ TaskValidation2.struct = (fields) => Task.from((signal) => {
317
+ const keys = Object.keys(fields);
318
+ const promises = keys.map((key) => Deferred.toPromise(fields[key](signal)));
319
+ return Promise.all(promises).then((results) => {
320
+ const record = {};
321
+ const errors = [];
322
+ for (let i = 0; i < keys.length; i++) {
323
+ const res = results[i];
324
+ if (Validation.isPassed(res)) {
325
+ record[keys[i]] = res.value;
326
+ } else {
327
+ errors.push(...res.errors);
328
+ }
329
+ }
330
+ return isNonEmptyArr(errors) ? Validation.failedAll(errors) : Validation.passed(record);
331
+ });
332
+ });
333
+ })(TaskValidation || (TaskValidation = {}));
334
+
182
335
  // src/Core/Task.ts
183
336
  var toPromise = (task, signal) => Deferred.toPromise(task(signal));
184
337
  var getMs = (duration) => Duration.toMilliseconds(duration);
@@ -203,9 +356,7 @@ var Task;
203
356
  (signal) => new Promise((res) => {
204
357
  let timerId;
205
358
  const onAbort = () => {
206
- if (timerId !== void 0) {
207
- clearTimeout(timerId);
208
- }
359
+ clearTimeout(timerId);
209
360
  res(toPromise(data, signal));
210
361
  };
211
362
  if (signal) {
@@ -226,27 +377,20 @@ var Task;
226
377
  return Promise.resolve([]);
227
378
  }
228
379
  const results = [];
229
- const wait = () => {
230
- if (signal?.aborted) {
231
- return Promise.resolve();
380
+ const wait = () => new Promise((r) => {
381
+ let timerId;
382
+ const onAbort = () => {
383
+ clearTimeout(timerId);
384
+ r();
385
+ };
386
+ if (signal) {
387
+ signal.addEventListener("abort", onAbort, { once: true });
232
388
  }
233
- return new Promise((r) => {
234
- let timerId;
235
- const onAbort = () => {
236
- if (timerId !== void 0) {
237
- clearTimeout(timerId);
238
- }
239
- r();
240
- };
241
- if (signal) {
242
- signal.addEventListener("abort", onAbort, { once: true });
243
- }
244
- timerId = setTimeout(() => {
245
- signal?.removeEventListener("abort", onAbort);
246
- r();
247
- }, delayDuration ? getMs(delayDuration) : 0);
248
- });
249
- };
389
+ timerId = setTimeout(() => {
390
+ signal?.removeEventListener("abort", onAbort);
391
+ r();
392
+ }, delayDuration ? getMs(delayDuration) : 0);
393
+ });
250
394
  const run2 = (left) => {
251
395
  if (signal?.aborted) {
252
396
  return Promise.resolve(results);
@@ -263,27 +407,20 @@ var Task;
263
407
  });
264
408
  Task2.repeatUntil = (options) => (task) => (0, Task2.from)((signal) => {
265
409
  const { when: predicate, delay: delayDuration, maxAttempts } = options;
266
- const wait = () => {
267
- if (signal?.aborted) {
268
- return Promise.resolve();
410
+ const wait = () => new Promise((r) => {
411
+ let timerId;
412
+ const onAbort = () => {
413
+ clearTimeout(timerId);
414
+ r();
415
+ };
416
+ if (signal) {
417
+ signal.addEventListener("abort", onAbort, { once: true });
269
418
  }
270
- return new Promise((r) => {
271
- let timerId;
272
- const onAbort = () => {
273
- if (timerId !== void 0) {
274
- clearTimeout(timerId);
275
- }
276
- r();
277
- };
278
- if (signal) {
279
- signal.addEventListener("abort", onAbort, { once: true });
280
- }
281
- timerId = setTimeout(() => {
282
- signal?.removeEventListener("abort", onAbort);
283
- r();
284
- }, delayDuration ? getMs(delayDuration) : 0);
285
- });
286
- };
419
+ timerId = setTimeout(() => {
420
+ signal?.removeEventListener("abort", onAbort);
421
+ r();
422
+ }, delayDuration ? getMs(delayDuration) : 0);
423
+ });
287
424
  const run2 = (attempt, lastValue) => {
288
425
  if (signal?.aborted && lastValue !== void 0) {
289
426
  return Promise.resolve(lastValue);
@@ -351,16 +488,16 @@ var Task;
351
488
  Task2.timeout = (duration, onTimeout) => (task) => (0, Task2.from)((outerSignal) => {
352
489
  const controller = new AbortController();
353
490
  let timerId;
354
- function cleanUp() {
355
- if (timerId !== void 0) {
356
- clearTimeout(timerId);
357
- }
358
- outerSignal?.removeEventListener("abort", onOuterAbort);
359
- }
360
- function onOuterAbort() {
491
+ let cleanUp = () => {
492
+ };
493
+ const onOuterAbort = () => {
361
494
  cleanUp();
362
495
  controller.abort();
363
- }
496
+ };
497
+ cleanUp = () => {
498
+ clearTimeout(timerId);
499
+ outerSignal?.removeEventListener("abort", onOuterAbort);
500
+ };
364
501
  if (outerSignal) {
365
502
  if (outerSignal.aborted) {
366
503
  controller.abort();
@@ -405,9 +542,148 @@ var Task;
405
542
  Task2.bind = (key, f) => (data) => (0, Task2.chain)(
406
543
  (a) => (0, Task2.map)((b) => ({ ...a, [key]: b }))(f(a))
407
544
  )(data);
545
+ Task2.Maybe = TaskMaybe;
546
+ Task2.Result = TaskResult;
547
+ Task2.Validation = TaskValidation;
408
548
  })(Task || (Task = {}));
409
549
 
550
+ // src/Core/Validation.ts
551
+ var Validation;
552
+ ((Validation2) => {
553
+ Validation2.passed = (value) => ({ kind: "Passed", value });
554
+ Validation2.failed = (error) => ({ kind: "Failed", errors: [error] });
555
+ Validation2.failedAll = (errors) => ({ kind: "Failed", errors });
556
+ Validation2.isPassed = (data) => data.kind === "Passed";
557
+ Validation2.isFailed = (data) => data.kind === "Failed";
558
+ Validation2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Validation2.passed)(a) : (0, Validation2.failed)(onFalse(a));
559
+ Validation2.fromNullable = (onNull) => (value) => value === null || value === void 0 ? (0, Validation2.failed)(onNull()) : (0, Validation2.passed)(value);
560
+ Validation2.fromMaybe = (onNone) => (maybe) => Maybe.isNone(maybe) ? (0, Validation2.failed)(onNone()) : (0, Validation2.passed)(maybe.value);
561
+ Validation2.map = (f) => (data) => (0, Validation2.isPassed)(data) ? (0, Validation2.passed)(f(data.value)) : data;
562
+ Validation2.mapError = (f) => (data) => (0, Validation2.isFailed)(data) ? (0, Validation2.failedAll)(data.errors.map(f)) : data;
563
+ Validation2.ap = (arg) => (data) => {
564
+ if ((0, Validation2.isPassed)(data)) {
565
+ return (0, Validation2.isPassed)(arg) ? (0, Validation2.passed)(data.value(arg.value)) : (0, Validation2.failedAll)(arg.errors);
566
+ }
567
+ return (0, Validation2.isPassed)(arg) ? (0, Validation2.failedAll)(data.errors) : (0, Validation2.failedAll)([...data.errors, ...arg.errors]);
568
+ };
569
+ Validation2.fold = (onFailed, onPassed) => (data) => (0, Validation2.isPassed)(data) ? onPassed(data.value) : onFailed(data.errors);
570
+ Validation2.match = (cases) => (data) => (0, Validation2.isPassed)(data) ? cases.passed(data.value) : cases.failed(data.errors);
571
+ Validation2.getOrElse = (defaultValue) => (data) => (0, Validation2.isPassed)(data) ? data.value : defaultValue();
572
+ Validation2.tap = (f) => (data) => {
573
+ if ((0, Validation2.isPassed)(data)) {
574
+ f(data.value);
575
+ }
576
+ return data;
577
+ };
578
+ Validation2.tapError = (f) => (data) => {
579
+ if ((0, Validation2.isFailed)(data)) {
580
+ f(data.errors);
581
+ }
582
+ return data;
583
+ };
584
+ Validation2.recover = (fallback) => (data) => (0, Validation2.isPassed)(data) ? data : fallback(data.errors);
585
+ Validation2.recoverUnless = (isBlocked, fallback) => (data) => (0, Validation2.isFailed)(data) && !data.errors.some(isBlocked) ? fallback() : data;
586
+ Validation2.toResult = (data) => (0, Validation2.isPassed)(data) ? Result.ok(data.value) : Result.err(data.errors);
587
+ Validation2.toMaybe = (data) => (0, Validation2.isPassed)(data) ? Maybe.some(data.value) : Maybe.none();
588
+ Validation2.fromResult = (data) => data.kind === "Ok" ? (0, Validation2.passed)(data.value) : (0, Validation2.failed)(data.error);
589
+ Validation2.product = (first, second) => {
590
+ if ((0, Validation2.isPassed)(first)) {
591
+ return (0, Validation2.isPassed)(second) ? (0, Validation2.passed)([first.value, second.value]) : (0, Validation2.failedAll)(second.errors);
592
+ }
593
+ return (0, Validation2.isPassed)(second) ? (0, Validation2.failedAll)(first.errors) : (0, Validation2.failedAll)([...first.errors, ...second.errors]);
594
+ };
595
+ Validation2.productAll = (data) => {
596
+ const values = [];
597
+ const errors = [];
598
+ for (const v of data) {
599
+ if ((0, Validation2.isPassed)(v)) {
600
+ values.push(v.value);
601
+ } else {
602
+ errors.push(...v.errors);
603
+ }
604
+ }
605
+ return isNonEmptyArr(errors) ? (0, Validation2.failedAll)(errors) : (0, Validation2.passed)(values);
606
+ };
607
+ Validation2.struct = (fields) => {
608
+ const record = {};
609
+ const errors = [];
610
+ for (const key in fields) {
611
+ if (Object.hasOwn(fields, key)) {
612
+ const val = fields[key];
613
+ if ((0, Validation2.isPassed)(val)) {
614
+ record[key] = val.value;
615
+ } else {
616
+ errors.push(...val.errors);
617
+ }
618
+ }
619
+ }
620
+ return isNonEmptyArr(errors) ? (0, Validation2.failedAll)(errors) : (0, Validation2.passed)(record);
621
+ };
622
+ })(Validation || (Validation = {}));
623
+
410
624
  // src/Data/Arr.ts
625
+ var ArrMaybe;
626
+ ((ArrMaybe2) => {
627
+ ArrMaybe2.traverse = (f) => (data) => {
628
+ const n = data.length;
629
+ const result = new Array(n);
630
+ for (let i = 0; i < n; i++) {
631
+ const mapped = f(data[i]);
632
+ if (mapped.kind === "None") {
633
+ return Maybe.none();
634
+ }
635
+ result[i] = mapped.value;
636
+ }
637
+ return Maybe.some(result);
638
+ };
639
+ ArrMaybe2.sequence = (data) => (0, ArrMaybe2.traverse)((a) => a)(data);
640
+ })(ArrMaybe || (ArrMaybe = {}));
641
+ var ArrResult;
642
+ ((ArrResult2) => {
643
+ ArrResult2.traverse = (f) => (data) => {
644
+ const n = data.length;
645
+ const result = new Array(n);
646
+ for (let i = 0; i < n; i++) {
647
+ const mapped = f(data[i]);
648
+ if (mapped.kind === "Err") {
649
+ return mapped;
650
+ }
651
+ result[i] = mapped.value;
652
+ }
653
+ return Result.ok(result);
654
+ };
655
+ ArrResult2.sequence = (data) => (0, ArrResult2.traverse)((a) => a)(data);
656
+ })(ArrResult || (ArrResult = {}));
657
+ var ArrTaskResult;
658
+ ((ArrTaskResult2) => {
659
+ ArrTaskResult2.traverse = (f) => (data) => Task.from(async () => {
660
+ const result = [];
661
+ for (const a of data) {
662
+ const r = await Deferred.toPromise(f(a)());
663
+ if (Result.isErr(r)) {
664
+ return r;
665
+ }
666
+ result.push(r.value);
667
+ }
668
+ return Result.ok(result);
669
+ });
670
+ ArrTaskResult2.sequence = (data) => (0, ArrTaskResult2.traverse)((a) => a)(data);
671
+ })(ArrTaskResult || (ArrTaskResult = {}));
672
+ var ArrTask;
673
+ ((ArrTask2) => {
674
+ ArrTask2.traverse = (f) => (data) => Task.from(() => Promise.all(data.map((a) => Deferred.toPromise(f(a)()))));
675
+ ArrTask2.sequence = (data) => (0, ArrTask2.traverse)((a) => a)(data);
676
+ ArrTask2.Result = ArrTaskResult;
677
+ })(ArrTask || (ArrTask = {}));
678
+ var ArrNonEmpty;
679
+ ((ArrNonEmpty2) => {
680
+ ArrNonEmpty2.singleton = (value) => [value];
681
+ ArrNonEmpty2.fromArray = (data) => isNonEmptyArr(data) ? Maybe.some(data) : Maybe.none();
682
+ ArrNonEmpty2.head = (data) => data[0];
683
+ ArrNonEmpty2.last = (data) => data[data.length - 1];
684
+ ArrNonEmpty2.tail = (data) => data.slice(1);
685
+ ArrNonEmpty2.reduce = (f) => (data) => data.reduce(f);
686
+ })(ArrNonEmpty || (ArrNonEmpty = {}));
411
687
  var Arr;
412
688
  ((Arr2) => {
413
689
  Arr2.head = (data) => data.length > 0 ? Maybe.some(data[0]) : Maybe.none();
@@ -581,6 +857,7 @@ var Arr;
581
857
  }
582
858
  return result;
583
859
  };
860
+ Arr2.concat = (other) => (data) => [...data, ...other];
584
861
  Arr2.chunksOf = (n) => (data) => {
585
862
  if (n <= 0) {
586
863
  return [];
@@ -621,47 +898,12 @@ var Arr;
621
898
  return result;
622
899
  };
623
900
  Arr2.reduce = (initial, f) => (data) => data.reduce(f, initial);
624
- Arr2.traverse = (f) => (data) => {
625
- const n = data.length;
626
- const result = new Array(n);
627
- for (let i = 0; i < n; i++) {
628
- const mapped = f(data[i]);
629
- if (mapped.kind === "None") {
630
- return Maybe.none();
631
- }
632
- result[i] = mapped.value;
633
- }
634
- return Maybe.some(result);
635
- };
636
- Arr2.traverseResult = (f) => (data) => {
637
- const n = data.length;
638
- const result = new Array(n);
639
- for (let i = 0; i < n; i++) {
640
- const mapped = f(data[i]);
641
- if (mapped.kind === "Err") {
642
- return mapped;
643
- }
644
- result[i] = mapped.value;
645
- }
646
- return Result.ok(result);
647
- };
648
- Arr2.traverseTask = (f) => (data) => Task.from(() => Promise.all(data.map((a) => Deferred.toPromise(f(a)()))));
649
- Arr2.sequence = (data) => (0, Arr2.traverse)((a) => a)(data);
650
- Arr2.sequenceResult = (data) => (0, Arr2.traverseResult)((a) => a)(data);
651
- Arr2.sequenceTask = (data) => (0, Arr2.traverseTask)((a) => a)(data);
652
- Arr2.traverseTaskResult = (f) => (data) => Task.from(async () => {
653
- const result = [];
654
- for (const a of data) {
655
- const r = await Deferred.toPromise(f(a)());
656
- if (Result.isErr(r)) {
657
- return r;
658
- }
659
- result.push(r.value);
660
- }
661
- return Result.ok(result);
662
- });
663
- Arr2.sequenceTaskResult = (data) => (0, Arr2.traverseTaskResult)((a) => a)(data);
664
- Arr2.isNonEmpty = (data) => isNonEmptyList(data);
901
+ Arr2.Maybe = ArrMaybe;
902
+ Arr2.Result = ArrResult;
903
+ Arr2.Task = ArrTask;
904
+ Arr2.isNonEmpty = (data) => isNonEmptyArr(data);
905
+ Arr2.prepend = (value) => (data) => [value, ...data];
906
+ Arr2.append = (value) => (data) => [...data, value];
665
907
  Arr2.size = (data) => data.length;
666
908
  Arr2.some = (predicate) => (data) => {
667
909
  const n = data.length;
@@ -737,6 +979,7 @@ var Arr;
737
979
  const i = Math.max(0, index);
738
980
  return [data.slice(0, i), data.slice(i)];
739
981
  };
982
+ Arr2.NonEmpty = ArrNonEmpty;
740
983
  })(Arr || (Arr = {}));
741
984
 
742
985
  // src/Data/Dict.ts
@@ -946,25 +1189,78 @@ var Num;
946
1189
  })(Num || (Num = {}));
947
1190
 
948
1191
  // src/Data/Rec.ts
1192
+ var _isNonEmpty = (data) => Object.keys(data).length > 0;
1193
+ var RecMaybe;
1194
+ ((RecMaybe2) => {
1195
+ RecMaybe2.traverse = (f) => (data) => {
1196
+ const recordKeys = Object.keys(data);
1197
+ const result = {};
1198
+ for (let i = 0; i < recordKeys.length; i++) {
1199
+ const key = recordKeys[i];
1200
+ const maybeVal = f(data[key]);
1201
+ if (maybeVal.kind === "None") {
1202
+ return maybeVal;
1203
+ }
1204
+ Object.defineProperty(result, key, { value: maybeVal.value, writable: true, enumerable: true, configurable: true });
1205
+ }
1206
+ return { kind: "Some", value: result };
1207
+ };
1208
+ RecMaybe2.sequence = (data) => (0, RecMaybe2.traverse)((a) => a)(data);
1209
+ })(RecMaybe || (RecMaybe = {}));
1210
+ var RecResult;
1211
+ ((RecResult2) => {
1212
+ RecResult2.traverse = (f) => (data) => {
1213
+ const recordKeys = Object.keys(data);
1214
+ const result = {};
1215
+ for (let i = 0; i < recordKeys.length; i++) {
1216
+ const key = recordKeys[i];
1217
+ const res = f(data[key]);
1218
+ if (res.kind === "Err") {
1219
+ return res;
1220
+ }
1221
+ Object.defineProperty(result, key, { value: res.value, writable: true, enumerable: true, configurable: true });
1222
+ }
1223
+ return { kind: "Ok", value: result };
1224
+ };
1225
+ RecResult2.sequence = (data) => (0, RecResult2.traverse)((a) => a)(data);
1226
+ })(RecResult || (RecResult = {}));
1227
+ var RecNonEmpty;
1228
+ ((RecNonEmpty2) => {
1229
+ RecNonEmpty2.singleton = (key, value) => ({ [key]: value });
1230
+ RecNonEmpty2.fromRecord = (data) => _isNonEmpty(data) ? Maybe.some(data) : Maybe.none();
1231
+ RecNonEmpty2.keys = (data) => Object.keys(data);
1232
+ RecNonEmpty2.values = (data) => Object.values(data);
1233
+ RecNonEmpty2.entries = (data) => Object.entries(data);
1234
+ RecNonEmpty2.reduce = (f) => (data) => {
1235
+ const recordVals = Object.values(data);
1236
+ return recordVals.reduce(f);
1237
+ };
1238
+ })(RecNonEmpty || (RecNonEmpty = {}));
949
1239
  var Rec;
950
1240
  ((Rec2) => {
951
- Rec2.map = (f) => (data) => {
952
- const keys2 = Object.keys(data);
953
- const vals = Object.values(data);
1241
+ Rec2.isNonEmpty = _isNonEmpty;
1242
+ Rec2.map = (f) => ((data) => {
1243
+ const recordKeys = Object.keys(data);
1244
+ const recordValues = Object.values(data);
954
1245
  const result = Object.create(Object.getPrototypeOf(data));
955
- for (let i = 0; i < keys2.length; i++) {
956
- Object.defineProperty(result, keys2[i], { value: f(vals[i]), writable: true, enumerable: true, configurable: true });
1246
+ for (let i = 0; i < recordKeys.length; i++) {
1247
+ Object.defineProperty(result, recordKeys[i], {
1248
+ value: f(recordValues[i]),
1249
+ writable: true,
1250
+ enumerable: true,
1251
+ configurable: true
1252
+ });
957
1253
  }
958
1254
  return result;
959
- };
1255
+ });
960
1256
  Rec2.filterMap = (f) => (data) => {
961
- const keys2 = Object.keys(data);
962
- const vals = Object.values(data);
1257
+ const recordKeys = Object.keys(data);
1258
+ const recordValues = Object.values(data);
963
1259
  const result = Object.create(Object.getPrototypeOf(data));
964
- for (let i = 0; i < keys2.length; i++) {
965
- const maybeVal = f(vals[i]);
1260
+ for (let i = 0; i < recordKeys.length; i++) {
1261
+ const maybeVal = f(recordValues[i]);
966
1262
  if (maybeVal.kind === "Some") {
967
- Object.defineProperty(result, keys2[i], {
1263
+ Object.defineProperty(result, recordKeys[i], {
968
1264
  value: maybeVal.value,
969
1265
  writable: true,
970
1266
  enumerable: true,
@@ -974,27 +1270,32 @@ var Rec;
974
1270
  }
975
1271
  return result;
976
1272
  };
977
- Rec2.mapWithKey = (f) => (data) => {
978
- const keys2 = Object.keys(data);
979
- const vals = Object.values(data);
1273
+ Rec2.mapWithKey = (f) => ((data) => {
1274
+ const recordKeys = Object.keys(data);
1275
+ const recordValues = Object.values(data);
980
1276
  const result = Object.create(Object.getPrototypeOf(data));
981
- for (let i = 0; i < keys2.length; i++) {
982
- Object.defineProperty(result, keys2[i], {
983
- value: f(keys2[i], vals[i]),
1277
+ for (let i = 0; i < recordKeys.length; i++) {
1278
+ Object.defineProperty(result, recordKeys[i], {
1279
+ value: f(recordKeys[i], recordValues[i]),
984
1280
  writable: true,
985
1281
  enumerable: true,
986
1282
  configurable: true
987
1283
  });
988
1284
  }
989
1285
  return result;
990
- };
1286
+ });
991
1287
  Rec2.filter = (predicate) => (data) => {
992
- const keys2 = Object.keys(data);
993
- const vals = Object.values(data);
1288
+ const recordKeys = Object.keys(data);
1289
+ const recordValues = Object.values(data);
994
1290
  const result = Object.create(Object.getPrototypeOf(data));
995
- for (let i = 0; i < keys2.length; i++) {
996
- if (predicate(vals[i])) {
997
- Object.defineProperty(result, keys2[i], { value: vals[i], writable: true, enumerable: true, configurable: true });
1291
+ for (let i = 0; i < recordKeys.length; i++) {
1292
+ if (predicate(recordValues[i])) {
1293
+ Object.defineProperty(result, recordKeys[i], {
1294
+ value: recordValues[i],
1295
+ writable: true,
1296
+ enumerable: true,
1297
+ configurable: true
1298
+ });
998
1299
  }
999
1300
  }
1000
1301
  return result;
@@ -1071,6 +1372,9 @@ var Rec;
1071
1372
  }
1072
1373
  return result;
1073
1374
  };
1375
+ Rec2.Maybe = RecMaybe;
1376
+ Rec2.Result = RecResult;
1377
+ Rec2.NonEmpty = RecNonEmpty;
1074
1378
  })(Rec || (Rec = {}));
1075
1379
 
1076
1380
  // src/Data/Str.ts