@nlozgachev/pipelined 0.45.0 → 0.46.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.d.ts CHANGED
@@ -2,55 +2,6 @@ import { a as NonEmptyArr, N as NonEmpty } from './InternalTypes-Mssktd7z.js';
2
2
  import { M as Maybe, R as Result, E as Equality, b as Ordering, T as Task } from './Validation-BMsvixWH.js';
3
3
  import { Brand } from './types.js';
4
4
 
5
- declare namespace ArrMaybe {
6
- /**
7
- * Maps each element to a Maybe and collects the results.
8
- * Returns None if any mapping returns None.
9
- *
10
- * @example
11
- * ```ts
12
- * const parseNum = (s: string): Maybe<number> => {
13
- * const n = Number(s);
14
- * return isNaN(n) ? Maybe.make.none() : Maybe.make.some(n);
15
- * };
16
- *
17
- * pipe(["1", "2", "3"], Arr.Maybe.traverse(parseNum)); // Some([1, 2, 3])
18
- * pipe(["1", "x", "3"], Arr.Maybe.traverse(parseNum)); // None
19
- * ```
20
- */
21
- const traverse: <A, B>(f: (a: A) => Maybe<B>) => (data: readonly A[]) => Maybe<readonly B[]>;
22
- /**
23
- * Collects an array of Maybe instances into a Maybe of array.
24
- * Returns None if any element is None.
25
- *
26
- * @example
27
- * ```ts
28
- * Arr.Maybe.sequence([Maybe.make.some(1), Maybe.make.some(2)]); // Some([1, 2])
29
- * Arr.Maybe.sequence([Maybe.make.some(1), Maybe.make.none()]); // None
30
- * ```
31
- */
32
- const sequence: <A>(data: readonly Maybe<A>[]) => Maybe<readonly A[]>;
33
- }
34
- declare namespace ArrResult {
35
- /**
36
- * Maps each element to a Result and collects the results.
37
- * Returns the first Err if any mapping fails.
38
- *
39
- * @example
40
- * ```ts
41
- * pipe(
42
- * [1, 2, 3],
43
- * Arr.Result.traverse(n => n > 0 ? Result.make.ok(n) : Result.make.err("negative"))
44
- * ); // Ok([1, 2, 3])
45
- * ```
46
- */
47
- const traverse: <E, A, B>(f: (a: A) => Result<E, B>) => (data: readonly A[]) => Result<E, readonly B[]>;
48
- /**
49
- * Collects an array of Results into a Result of array.
50
- * Returns the first Err if any element is Err.
51
- */
52
- const sequence: <E, A>(data: readonly Result<E, A>[]) => Result<E, readonly A[]>;
53
- }
54
5
  declare namespace ArrTaskResult {
55
6
  /**
56
7
  * Maps each element to a Task.Result and runs them sequentially.
@@ -79,25 +30,6 @@ declare namespace ArrTaskResult {
79
30
  */
80
31
  const sequence: <E, A>(data: readonly Task<Result<E, A>>[]) => Task<Result<E, readonly A[]>>;
81
32
  }
82
- declare namespace ArrTask {
83
- /**
84
- * Maps each element to a Task and runs all in parallel.
85
- *
86
- * @example
87
- * ```ts
88
- * pipe(
89
- * [1, 2, 3],
90
- * Arr.Task.traverse(n => Task.resolve(n * 2))
91
- * )(); // Promise<[2, 4, 6]>
92
- * ```
93
- */
94
- const traverse: <A, B>(f: (a: A) => Task<B>) => (data: readonly A[]) => Task<readonly B[]>;
95
- /**
96
- * Collects an array of Tasks into a Task of array. Runs in parallel.
97
- */
98
- const sequence: <A>(data: readonly Task<A>[]) => Task<readonly A[]>;
99
- const Result: typeof ArrTaskResult;
100
- }
101
33
  declare namespace ArrNonEmpty {
102
34
  /**
103
35
  * Creates a single-element list.
@@ -227,7 +159,7 @@ declare namespace Arr {
227
159
  * const list: Arr.NonEmpty<number> = [1, 2, 3];
228
160
  * ```
229
161
  */
230
- type NonEmpty<A> = NonEmptyArr<A>;
162
+ export type NonEmpty<A> = NonEmptyArr<A>;
231
163
  /**
232
164
  * Returns the first element of an array, or None if the array is empty.
233
165
  *
@@ -237,7 +169,7 @@ declare namespace Arr {
237
169
  * Arr.head([]); // None
238
170
  * ```
239
171
  */
240
- const head: <A>(data: readonly A[]) => Maybe<A>;
172
+ export const head: <A>(data: readonly A[]) => Maybe<A>;
241
173
  /**
242
174
  * Returns the last element of an array, or None if the array is empty.
243
175
  *
@@ -247,7 +179,7 @@ declare namespace Arr {
247
179
  * Arr.last([]); // None
248
180
  * ```
249
181
  */
250
- const last: <A>(data: readonly A[]) => Maybe<A>;
182
+ export const last: <A>(data: readonly A[]) => Maybe<A>;
251
183
  /**
252
184
  * Returns all elements except the first, or None if the array is empty.
253
185
  *
@@ -257,7 +189,7 @@ declare namespace Arr {
257
189
  * Arr.tail([]); // None
258
190
  * ```
259
191
  */
260
- const tail: <A>(data: readonly A[]) => Maybe<readonly A[]>;
192
+ export const tail: <A>(data: readonly A[]) => Maybe<readonly A[]>;
261
193
  /**
262
194
  * Returns all elements except the last, or None if the array is empty.
263
195
  *
@@ -267,7 +199,7 @@ declare namespace Arr {
267
199
  * Arr.init([]); // None
268
200
  * ```
269
201
  */
270
- const init: <A>(data: readonly A[]) => Maybe<readonly A[]>;
202
+ export const init: <A>(data: readonly A[]) => Maybe<readonly A[]>;
271
203
  /**
272
204
  * Returns the first element matching the predicate, or None.
273
205
  *
@@ -276,7 +208,7 @@ declare namespace Arr {
276
208
  * pipe([1, 2, 3, 4], Arr.findFirst(n => n > 2)); // Some(3)
277
209
  * ```
278
210
  */
279
- const findFirst: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => Maybe<A>;
211
+ export const findFirst: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => Maybe<A>;
280
212
  /**
281
213
  * Returns the last element matching the predicate, or None.
282
214
  *
@@ -285,7 +217,7 @@ declare namespace Arr {
285
217
  * pipe([1, 2, 3, 4], Arr.findLast(n => n > 2)); // Some(4)
286
218
  * ```
287
219
  */
288
- const findLast: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => Maybe<A>;
220
+ export const findLast: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => Maybe<A>;
289
221
  /**
290
222
  * Returns the index of the first element matching the predicate, or None.
291
223
  *
@@ -294,7 +226,7 @@ declare namespace Arr {
294
226
  * pipe([1, 2, 3, 4], Arr.findIndex(n => n > 2)); // Some(2)
295
227
  * ```
296
228
  */
297
- const findIndex: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => Maybe<number>;
229
+ export const findIndex: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => Maybe<number>;
298
230
  /**
299
231
  * Transforms each element of an array.
300
232
  *
@@ -303,7 +235,7 @@ declare namespace Arr {
303
235
  * pipe([1, 2, 3], Arr.map(n => n * 2)); // [2, 4, 6]
304
236
  * ```
305
237
  */
306
- const map: <A, B>(f: (a: A) => B) => (data: readonly A[]) => readonly B[];
238
+ export const map: <A, B>(f: (a: A) => B) => (data: readonly A[]) => readonly B[];
307
239
  /**
308
240
  * Transforms each element using both its value and its zero-based index.
309
241
  *
@@ -315,7 +247,7 @@ declare namespace Arr {
315
247
  * ); // [{ position: 1, value: "a" }, { position: 2, value: "b" }, { position: 3, value: "c" }]
316
248
  * ```
317
249
  */
318
- const mapWithIndex: <A, B>(f: (i: number, a: A) => B) => (data: readonly A[]) => readonly B[];
250
+ export const mapWithIndex: <A, B>(f: (i: number, a: A) => B) => (data: readonly A[]) => readonly B[];
319
251
  /**
320
252
  * Filters elements that satisfy the predicate.
321
253
  *
@@ -324,7 +256,7 @@ declare namespace Arr {
324
256
  * pipe([1, 2, 3, 4], Arr.filter(n => n % 2 === 0)); // [2, 4]
325
257
  * ```
326
258
  */
327
- const filter: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => readonly A[];
259
+ export const filter: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => readonly A[];
328
260
  /**
329
261
  * Maps each element to a Maybe and collects only the Some values.
330
262
  * Combines map and filter in a single pass.
@@ -339,7 +271,7 @@ declare namespace Arr {
339
271
  * pipe(["1", "abc", "3"], Arr.filterMap(parseNum)); // [1, 3]
340
272
  * ```
341
273
  */
342
- const filterMap: <A, B>(f: (a: A) => Maybe<B>) => (data: readonly A[]) => readonly B[];
274
+ export const filterMap: <A, B>(f: (a: A) => Maybe<B>) => (data: readonly A[]) => readonly B[];
343
275
  /**
344
276
  * Splits an array into two groups based on a predicate.
345
277
  * First group contains elements that satisfy the predicate,
@@ -350,7 +282,7 @@ declare namespace Arr {
350
282
  * pipe([1, 2, 3, 4], Arr.partition(n => n % 2 === 0)); // [[2, 4], [1, 3]]
351
283
  * ```
352
284
  */
353
- const partition: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => readonly [readonly A[], readonly A[]];
285
+ export const partition: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => readonly [readonly A[], readonly A[]];
354
286
  /**
355
287
  * Narrows a list of Maybe values down to a list of their underlying values,
356
288
  * discarding all None instances.
@@ -360,7 +292,7 @@ declare namespace Arr {
360
292
  * Arr.compact([Maybe.make.some(1), Maybe.make.none(), Maybe.make.some(3)]); // [1, 3]
361
293
  * ```
362
294
  */
363
- const compact: <A>(data: readonly Maybe<A>[]) => readonly A[];
295
+ export const compact: <A>(data: readonly Maybe<A>[]) => readonly A[];
364
296
  /**
365
297
  * Separates an array of Result values into two separate lists of errors and successes.
366
298
  * Returns a tuple containing `[errors, successes]`.
@@ -370,7 +302,7 @@ declare namespace Arr {
370
302
  * Arr.separate([Result.make.ok(1), Result.make.err("bad"), Result.make.ok(3)]); // [["bad"], [1, 3]]
371
303
  * ```
372
304
  */
373
- const separate: <E, A>(data: readonly Result<E, A>[]) => readonly [readonly E[], readonly A[]];
305
+ export const separate: <E, A>(data: readonly Result<E, A>[]) => readonly [readonly E[], readonly A[]];
374
306
  /**
375
307
  * Maps each element to a Result, and separates the results into a tuple of failures and successes.
376
308
  *
@@ -382,7 +314,7 @@ declare namespace Arr {
382
314
  * ); // [["odd: 1", "odd: 3"], [2, 4]]
383
315
  * ```
384
316
  */
385
- const partitionMap: <A, E, B>(f: (a: A) => Result<E, B>) => (data: readonly A[]) => readonly [readonly E[], readonly B[]];
317
+ export const partitionMap: <A, E, B>(f: (a: A) => Result<E, B>) => (data: readonly A[]) => readonly [readonly E[], readonly B[]];
386
318
  /**
387
319
  * Groups elements by a key function.
388
320
  *
@@ -394,7 +326,7 @@ declare namespace Arr {
394
326
  * ); // { a: ["apple", "avocado"], b: ["banana"] }
395
327
  * ```
396
328
  */
397
- const groupBy: <A>(f: (a: A) => string) => (data: readonly A[]) => Record<string, NonEmptyArr<A>>;
329
+ export const groupBy: <A>(f: (a: A) => string) => (data: readonly A[]) => Record<string, NonEmptyArr<A>>;
398
330
  /**
399
331
  * Removes duplicate elements using strict equality.
400
332
  *
@@ -403,7 +335,7 @@ declare namespace Arr {
403
335
  * Arr.uniq([1, 2, 2, 3, 1]); // [1, 2, 3]
404
336
  * ```
405
337
  */
406
- const uniq: <A>(data: readonly A[]) => readonly A[];
338
+ export const uniq: <A>(data: readonly A[]) => readonly A[];
407
339
  /**
408
340
  * Removes duplicate elements by comparing the result of a key function.
409
341
  *
@@ -415,7 +347,7 @@ declare namespace Arr {
415
347
  * ); // [{id: 1, name: "a"}, {id: 2, name: "c"}]
416
348
  * ```
417
349
  */
418
- const uniqBy: <A, B>(f: (a: A) => B) => (data: readonly A[]) => readonly A[];
350
+ export const uniqBy: <A, B>(f: (a: A) => B) => (data: readonly A[]) => readonly A[];
419
351
  /**
420
352
  * Removes duplicate elements using a custom equality check.
421
353
  * Preserves the order of first occurrences. Complements `uniq` (reference equality)
@@ -432,7 +364,7 @@ declare namespace Arr {
432
364
  * ); // [{ x: 1, y: 1 }, { x: 2, y: 2 }]
433
365
  * ```
434
366
  */
435
- const uniqWith: <A>(eq: Equality<A>) => (data: readonly A[]) => readonly A[];
367
+ export const uniqWith: <A>(eq: Equality<A>) => (data: readonly A[]) => readonly A[];
436
368
  /**
437
369
  * Sorts an array using a comparison function. Returns a new array.
438
370
  * To sort with a typed `Ordering<A>`, prefer `Arr.sortWith`.
@@ -442,7 +374,7 @@ declare namespace Arr {
442
374
  * pipe([3, 1, 2], Arr.sortBy((a, b) => a - b)); // [1, 2, 3]
443
375
  * ```
444
376
  */
445
- const sortBy: <A>(compare: (a: A, b: A) => number) => (data: readonly A[]) => readonly A[];
377
+ export const sortBy: <A>(compare: (a: A, b: A) => number) => (data: readonly A[]) => readonly A[];
446
378
  /**
447
379
  * Sorts an array using an `Ordering<A>`. Returns a new array without mutating the original.
448
380
  * Use this over `sortBy` when you have a typed `Ordering<A>` from the `Ordering` module.
@@ -455,7 +387,7 @@ declare namespace Arr {
455
387
  * pipe(products, Arr.sortWith(byPrice));
456
388
  * ```
457
389
  */
458
- const sortWith: <A>(ord: Ordering<A>) => (data: readonly A[]) => readonly A[];
390
+ export const sortWith: <A>(ord: Ordering<A>) => (data: readonly A[]) => readonly A[];
459
391
  /**
460
392
  * Pairs up elements from two arrays. Stops at the shorter array.
461
393
  *
@@ -464,7 +396,7 @@ declare namespace Arr {
464
396
  * pipe([1, 2, 3], Arr.zip(["a", "b"])); // [[1, "a"], [2, "b"]]
465
397
  * ```
466
398
  */
467
- const zip: <B>(other: readonly B[]) => <A>(data: readonly A[]) => readonly (readonly [A, B])[];
399
+ export const zip: <B>(other: readonly B[]) => <A>(data: readonly A[]) => readonly (readonly [A, B])[];
468
400
  /**
469
401
  * Combines elements from two arrays using a function. Stops at the shorter array.
470
402
  *
@@ -473,7 +405,7 @@ declare namespace Arr {
473
405
  * pipe([1, 2], Arr.zipWith((a, b) => a + b, ["a", "b"])); // ["1a", "2b"]
474
406
  * ```
475
407
  */
476
- const zipWith: <A, B, C>(f: (a: A, b: B) => C) => (other: readonly B[]) => (data: readonly A[]) => readonly C[];
408
+ export const zipWith: <A, B, C>(f: (a: A, b: B) => C) => (other: readonly B[]) => (data: readonly A[]) => readonly C[];
477
409
  /**
478
410
  * Inserts a separator between every element.
479
411
  *
@@ -482,7 +414,7 @@ declare namespace Arr {
482
414
  * pipe([1, 2, 3], Arr.intersperse(0)); // [1, 0, 2, 0, 3]
483
415
  * ```
484
416
  */
485
- const intersperse: <A>(sep: A) => (data: readonly A[]) => readonly A[];
417
+ export const intersperse: <A>(sep: A) => (data: readonly A[]) => readonly A[];
486
418
  /**
487
419
  * Concatenates a standard array with another array.
488
420
  *
@@ -491,7 +423,7 @@ declare namespace Arr {
491
423
  * pipe([1, 2], Arr.concat([3, 4])); // [1, 2, 3, 4]
492
424
  * ```
493
425
  */
494
- const concat: <A>(other: readonly A[]) => (data: readonly A[]) => readonly A[];
426
+ export const concat: <A>(other: readonly A[]) => (data: readonly A[]) => readonly A[];
495
427
  /**
496
428
  * Splits an array into chunks of the given size.
497
429
  *
@@ -500,7 +432,7 @@ declare namespace Arr {
500
432
  * pipe([1, 2, 3, 4, 5], Arr.chunksOf(2)); // [[1, 2], [3, 4], [5]]
501
433
  * ```
502
434
  */
503
- const chunksOf: (n: number) => <A>(data: readonly A[]) => readonly (readonly A[])[];
435
+ export const chunksOf: (n: number) => <A>(data: readonly A[]) => readonly (readonly A[])[];
504
436
  /**
505
437
  * Flattens a nested array by one level.
506
438
  *
@@ -509,7 +441,7 @@ declare namespace Arr {
509
441
  * Arr.flatten([[1, 2], [3], [4, 5]]); // [1, 2, 3, 4, 5]
510
442
  * ```
511
443
  */
512
- const flatten: <A>(data: readonly (readonly A[])[]) => readonly A[];
444
+ export const flatten: <A>(data: readonly (readonly A[])[]) => readonly A[];
513
445
  /**
514
446
  * Maps each element to an array and flattens the result.
515
447
  *
@@ -518,7 +450,7 @@ declare namespace Arr {
518
450
  * pipe([1, 2, 3], Arr.flatMap(n => [n, n * 10])); // [1, 10, 2, 20, 3, 30]
519
451
  * ```
520
452
  */
521
- const flatMap: <A, B>(f: (a: A) => readonly B[]) => (data: readonly A[]) => readonly B[];
453
+ export const flatMap: <A, B>(f: (a: A) => readonly B[]) => (data: readonly A[]) => readonly B[];
522
454
  /**
523
455
  * Reduces an array from the left.
524
456
  *
@@ -527,11 +459,26 @@ declare namespace Arr {
527
459
  * pipe([1, 2, 3], Arr.reduce(0, (acc, n) => acc + n)); // 6
528
460
  * ```
529
461
  */
530
- const reduce: <A, B>(initial: B, f: (acc: B, a: A) => B) => (data: readonly A[]) => B;
531
- const Maybe: typeof ArrMaybe;
532
- const Result: typeof ArrResult;
533
- const Task: typeof ArrTask;
534
- namespace is {
462
+ export const reduce: <A, B>(initial: B, f: (acc: B, a: A) => B) => (data: readonly A[]) => B;
463
+ interface TaskTraverse {
464
+ <A, B>(f: (a: A) => Task<B>): (data: readonly A[]) => Task<readonly B[]>;
465
+ Result: typeof ArrTaskResult.traverse;
466
+ }
467
+ interface TaskSequence {
468
+ <A>(data: readonly Task<A>[]): Task<readonly A[]>;
469
+ Result: typeof ArrTaskResult.sequence;
470
+ }
471
+ export namespace traverse {
472
+ const Maybe: <A, B>(f: (a: A) => Maybe<B>) => (data: readonly A[]) => Maybe<readonly B[]>;
473
+ const Result: <E, A, B>(f: (a: A) => Result<E, B>) => (data: readonly A[]) => Result<E, readonly B[]>;
474
+ const Task: TaskTraverse;
475
+ }
476
+ export namespace sequence {
477
+ const Maybe: <A>(data: readonly Maybe<A>[]) => Maybe<readonly A[]>;
478
+ const Result: <E, A>(data: readonly Result<E, A>[]) => Result<E, readonly A[]>;
479
+ const Task: TaskSequence;
480
+ }
481
+ export namespace is {
535
482
  /**
536
483
  * Returns true if the array is empty.
537
484
  */
@@ -549,7 +496,7 @@ declare namespace Arr {
549
496
  * pipe([1, 2], Arr.prepend(0)); // [0, 1, 2]
550
497
  * ```
551
498
  */
552
- const prepend: <A>(value: A) => (data: readonly A[]) => NonEmpty<A>;
499
+ export const prepend: <A>(value: A) => (data: readonly A[]) => NonEmpty<A>;
553
500
  /**
554
501
  * Appends a value to the end of an array, returning a NonEmptyArr.
555
502
  *
@@ -558,11 +505,11 @@ declare namespace Arr {
558
505
  * pipe([1, 2], Arr.append(3)); // [1, 2, 3]
559
506
  * ```
560
507
  */
561
- const append: <A>(value: A) => (data: readonly A[]) => NonEmpty<A>;
508
+ export const append: <A>(value: A) => (data: readonly A[]) => NonEmpty<A>;
562
509
  /**
563
510
  * Returns the length of an array.
564
511
  */
565
- const size: <A>(data: readonly A[]) => number;
512
+ export const size: <A>(data: readonly A[]) => number;
566
513
  /**
567
514
  * Returns true if any element satisfies the predicate.
568
515
  *
@@ -571,7 +518,7 @@ declare namespace Arr {
571
518
  * pipe([1, 2, 3], Arr.some(n => n > 2)); // true
572
519
  * ```
573
520
  */
574
- const some: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => boolean;
521
+ export const some: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => boolean;
575
522
  /**
576
523
  * Returns true if all elements satisfy the predicate.
577
524
  *
@@ -580,7 +527,7 @@ declare namespace Arr {
580
527
  * pipe([1, 2, 3], Arr.every(n => n > 0)); // true
581
528
  * ```
582
529
  */
583
- const every: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => boolean;
530
+ export const every: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => boolean;
584
531
  /**
585
532
  * Reverses an array. Returns a new array.
586
533
  *
@@ -589,7 +536,7 @@ declare namespace Arr {
589
536
  * Arr.reverse([1, 2, 3]); // [3, 2, 1]
590
537
  * ```
591
538
  */
592
- const reverse: <A>(data: readonly A[]) => readonly A[];
539
+ export const reverse: <A>(data: readonly A[]) => readonly A[];
593
540
  /**
594
541
  * Returns a new array with `item` inserted before the element at `index`.
595
542
  * Negative indices are clamped to 0; indices beyond the array length append to the end.
@@ -601,7 +548,7 @@ declare namespace Arr {
601
548
  * pipe([1, 2, 3], Arr.insertAt(3, 99)); // [1, 2, 3, 99]
602
549
  * ```
603
550
  */
604
- const insertAt: <A>(index: number, item: A) => (data: readonly A[]) => readonly A[];
551
+ export const insertAt: <A>(index: number, item: A) => (data: readonly A[]) => readonly A[];
605
552
  /**
606
553
  * Returns a new array with the element at `index` removed.
607
554
  * Returns the original array unchanged if `index` is out of bounds.
@@ -613,7 +560,7 @@ declare namespace Arr {
613
560
  * pipe([1, 2, 3], Arr.removeAt(5)); // [1, 2, 3]
614
561
  * ```
615
562
  */
616
- const removeAt: (index: number) => <A>(data: readonly A[]) => readonly A[];
563
+ export const removeAt: (index: number) => <A>(data: readonly A[]) => readonly A[];
617
564
  /**
618
565
  * Takes the first n elements from an array.
619
566
  *
@@ -622,7 +569,7 @@ declare namespace Arr {
622
569
  * pipe([1, 2, 3, 4], Arr.take(2)); // [1, 2]
623
570
  * ```
624
571
  */
625
- const take: (n: number) => <A>(data: readonly A[]) => readonly A[];
572
+ export const take: (n: number) => <A>(data: readonly A[]) => readonly A[];
626
573
  /**
627
574
  * Drops the first n elements from an array.
628
575
  *
@@ -631,7 +578,7 @@ declare namespace Arr {
631
578
  * pipe([1, 2, 3, 4], Arr.drop(2)); // [3, 4]
632
579
  * ```
633
580
  */
634
- const drop: (n: number) => <A>(data: readonly A[]) => readonly A[];
581
+ export const drop: (n: number) => <A>(data: readonly A[]) => readonly A[];
635
582
  /**
636
583
  * Takes elements from the start while the predicate holds.
637
584
  *
@@ -640,7 +587,7 @@ declare namespace Arr {
640
587
  * pipe([1, 2, 3, 1], Arr.takeWhile(n => n < 3)); // [1, 2]
641
588
  * ```
642
589
  */
643
- const takeWhile: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => readonly A[];
590
+ export const takeWhile: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => readonly A[];
644
591
  /**
645
592
  * Drops elements from the start while the predicate holds.
646
593
  *
@@ -649,7 +596,7 @@ declare namespace Arr {
649
596
  * pipe([1, 2, 3, 1], Arr.dropWhile(n => n < 3)); // [3, 1]
650
597
  * ```
651
598
  */
652
- const dropWhile: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => readonly A[];
599
+ export const dropWhile: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => readonly A[];
653
600
  /**
654
601
  * Like `reduce`, but returns every intermediate accumulator as an array.
655
602
  * The initial value is not included — the output has the same length as the input.
@@ -659,7 +606,7 @@ declare namespace Arr {
659
606
  * pipe([1, 2, 3], Arr.scan(0, (acc, n) => acc + n)); // [1, 3, 6]
660
607
  * ```
661
608
  */
662
- const scan: <A, B>(initial: B, f: (acc: B, a: A) => B) => (data: readonly A[]) => readonly B[];
609
+ export const scan: <A, B>(initial: B, f: (acc: B, a: A) => B) => (data: readonly A[]) => readonly B[];
663
610
  /**
664
611
  * Splits an array at an index into a `[before, after]` tuple.
665
612
  * Negative indices clamp to 0; indices beyond the array length clamp to the end.
@@ -671,8 +618,9 @@ declare namespace Arr {
671
618
  * pipe([1, 2, 3], Arr.splitAt(10)); // [[1, 2, 3], []]
672
619
  * ```
673
620
  */
674
- const splitAt: (index: number) => <A>(data: readonly A[]) => readonly [readonly A[], readonly A[]];
675
- const NonEmpty: typeof ArrNonEmpty;
621
+ export const splitAt: (index: number) => <A>(data: readonly A[]) => readonly [readonly A[], readonly A[]];
622
+ export const NonEmpty: typeof ArrNonEmpty;
623
+ export { };
676
624
  }
677
625
 
678
626
  /**
@@ -1324,58 +1272,6 @@ declare namespace Num {
1324
1272
  * A branded type representing a record with at least one key-value pair.
1325
1273
  */
1326
1274
  type NonEmptyRecord<A, K extends string = string> = Brand<NonEmpty<"Rec">, Readonly<Record<K, A>>>;
1327
- declare namespace RecMaybe {
1328
- /**
1329
- * Map a function that returns a `Maybe` over each value of a record,
1330
- * and combine the results into a single `Maybe` containing the updated record.
1331
- * If any value results in `None`, the entire operation returns `None` (short-circuits).
1332
- *
1333
- * @example
1334
- * ```ts
1335
- * const parseNum = (s: string) => s === "NaN" ? Maybe.make.none() : Maybe.make.some(Number(s));
1336
- * pipe({ a: "1", b: "2" }, Rec.Maybe.traverse(parseNum)); // Some({ a: 1, b: 2 })
1337
- * pipe({ a: "1", b: "NaN" }, Rec.Maybe.traverse(parseNum)); // None
1338
- * ```
1339
- */
1340
- const traverse: <A, B>(f: (a: A) => Maybe<B>) => (data: Readonly<Record<string, A>>) => Maybe<Readonly<Record<string, B>>>;
1341
- /**
1342
- * Sequence a record of `Maybe` values into a `Maybe` of a record.
1343
- * If any key contains `None`, the entire operation returns `None`.
1344
- *
1345
- * @example
1346
- * ```ts
1347
- * Rec.Maybe.sequence({ a: Maybe.make.some(1), b: Maybe.make.some(2) }); // Some({ a: 1, b: 2 })
1348
- * Rec.Maybe.sequence({ a: Maybe.make.some(1), b: Maybe.make.none() }); // None
1349
- * ```
1350
- */
1351
- const sequence: <A>(data: Readonly<Record<string, Maybe<A>>>) => Maybe<Readonly<Record<string, A>>>;
1352
- }
1353
- declare namespace RecResult {
1354
- /**
1355
- * Map a function that returns a `Result` over each value of a record,
1356
- * and combine the results into a single `Result` containing the updated record.
1357
- * If any value results in an `Err`, the entire operation returns that `Err` (short-circuits).
1358
- *
1359
- * @example
1360
- * ```ts
1361
- * const checkPositive = (n: number) => n < 0 ? Result.make.err("negative") : Result.make.ok(n);
1362
- * pipe({ a: 1, b: 2 }, Rec.Result.traverse(checkPositive)); // Ok({ a: 1, b: 2 })
1363
- * pipe({ a: 1, b: -2 }, Rec.Result.traverse(checkPositive)); // Err("negative")
1364
- * ```
1365
- */
1366
- const traverse: <E, A, B>(f: (a: A) => Result<E, B>) => (data: Readonly<Record<string, A>>) => Result<E, Readonly<Record<string, B>>>;
1367
- /**
1368
- * Sequence a record of `Result` values into a `Result` of a record.
1369
- * If any key contains an `Err`, the entire operation returns that `Err`.
1370
- *
1371
- * @example
1372
- * ```ts
1373
- * Rec.Result.sequence({ a: Result.make.ok(1), b: Result.make.ok(2) }); // Ok({ a: 1, b: 2 })
1374
- * Rec.Result.sequence({ a: Result.make.ok(1), b: Result.make.err("oops") }); // Err("oops")
1375
- * ```
1376
- */
1377
- const sequence: <E, A>(data: Readonly<Record<string, Result<E, A>>>) => Result<E, Readonly<Record<string, A>>>;
1378
- }
1379
1275
  declare namespace RecNonEmpty {
1380
1276
  /**
1381
1277
  * Creates a NonEmpty record from a single key-value pair.
@@ -1622,8 +1518,14 @@ declare namespace Rec {
1622
1518
  * ```
1623
1519
  */
1624
1520
  const compact: <A>(data: Readonly<Record<string, Maybe<A>>>) => Readonly<Record<string, A>>;
1625
- const Maybe: typeof RecMaybe;
1626
- const Result: typeof RecResult;
1521
+ namespace traverse {
1522
+ const Maybe: <A, B>(f: (a: A) => Maybe<B>) => (data: Readonly<Record<string, A>>) => Maybe<Readonly<Record<string, B>>>;
1523
+ const Result: <E, A, B>(f: (a: A) => Result<E, B>) => (data: Readonly<Record<string, A>>) => Result<E, Readonly<Record<string, B>>>;
1524
+ }
1525
+ namespace sequence {
1526
+ const Maybe: <A>(data: Readonly<Record<string, Maybe<A>>>) => Maybe<Readonly<Record<string, A>>>;
1527
+ const Result: <E, A>(data: Readonly<Record<string, Result<E, A>>>) => Result<E, Readonly<Record<string, A>>>;
1528
+ }
1627
1529
  const NonEmpty: typeof RecNonEmpty;
1628
1530
  }
1629
1531
 
package/dist/utils.js CHANGED
@@ -982,9 +982,24 @@ var Arr;
982
982
  return result;
983
983
  };
984
984
  Arr2.reduce = (initial, f) => (data) => data.reduce(f, initial);
985
- Arr2.Maybe = ArrMaybe;
986
- Arr2.Result = ArrResult;
987
- Arr2.Task = ArrTask;
985
+ const _traverseTask = Object.assign((f) => ArrTask.traverse(f), {
986
+ Result: ArrTaskResult.traverse
987
+ });
988
+ const _sequenceTask = Object.assign((data) => ArrTask.sequence(data), {
989
+ Result: ArrTaskResult.sequence
990
+ });
991
+ let traverse;
992
+ ((traverse2) => {
993
+ traverse2.Maybe = ArrMaybe.traverse;
994
+ traverse2.Result = ArrResult.traverse;
995
+ traverse2.Task = _traverseTask;
996
+ })(traverse = Arr2.traverse || (Arr2.traverse = {}));
997
+ let sequence;
998
+ ((sequence2) => {
999
+ sequence2.Maybe = ArrMaybe.sequence;
1000
+ sequence2.Result = ArrResult.sequence;
1001
+ sequence2.Task = _sequenceTask;
1002
+ })(sequence = Arr2.sequence || (Arr2.sequence = {}));
988
1003
  let is;
989
1004
  ((is2) => {
990
1005
  is2.empty = (data) => data.length === 0;
@@ -1503,8 +1518,16 @@ var Rec;
1503
1518
  }
1504
1519
  return result;
1505
1520
  };
1506
- Rec2.Maybe = RecMaybe;
1507
- Rec2.Result = RecResult;
1521
+ let traverse;
1522
+ ((traverse2) => {
1523
+ traverse2.Maybe = RecMaybe.traverse;
1524
+ traverse2.Result = RecResult.traverse;
1525
+ })(traverse = Rec2.traverse || (Rec2.traverse = {}));
1526
+ let sequence;
1527
+ ((sequence2) => {
1528
+ sequence2.Maybe = RecMaybe.sequence;
1529
+ sequence2.Result = RecResult.sequence;
1530
+ })(sequence = Rec2.sequence || (Rec2.sequence = {}));
1508
1531
  Rec2.NonEmpty = RecNonEmpty;
1509
1532
  })(Rec || (Rec = {}));
1510
1533
 
package/dist/utils.mjs CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  Rec,
6
6
  Str,
7
7
  Uniq
8
- } from "./chunk-2LKJF45J.mjs";
8
+ } from "./chunk-W2L244AS.mjs";
9
9
  import "./chunk-VSU36S2K.mjs";
10
10
  import "./chunk-XTVF5R6R.mjs";
11
11
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlozgachev/pipelined",
3
- "version": "0.45.0",
3
+ "version": "0.46.0",
4
4
  "description": "Opinionated functional abstractions for TypeScript",
5
5
  "license": "BSD-3-Clause",
6
6
  "homepage": "https://pipelined.lozgachev.dev",
@@ -53,29 +53,39 @@
53
53
  }
54
54
  },
55
55
  "scripts": {
56
+ "build": "tsup",
56
57
  "test": "vitest run",
57
58
  "bench": "vitest bench",
58
- "build": "tsup",
59
- "format": "dprint fmt && dprint fmt --config dprint.md.json \"docs/**/*.md\" \"docs/**/*.mdx\" \"README.md\"",
60
- "format:check": "dprint check && dprint check --config dprint.md.json \"docs/**/*.md\" \"docs/**/*.mdx\" \"README.md\"",
59
+ "size": "size-limit",
61
60
  "typecheck": "tsc --noEmit",
62
- "lint": "oxlint src/",
63
61
  "publish:npm": "pnpm build && npm publish --access public",
62
+ "lint": "oxlint src/",
63
+ "format": "dprint fmt && dprint fmt --config dprint.md.json \"docs/**/*.md\" \"docs/**/*.mdx\" \"README.md\"",
64
+ "format:check": "dprint check && dprint check --config dprint.md.json \"docs/**/*.md\" \"docs/**/*.mdx\" \"README.md\"",
64
65
  "release:patch": "bumpp --patch -c -t -p",
65
66
  "release:minor": "bumpp --minor -c -t -p",
66
67
  "docs:dev": "pnpm --filter pipelined-docs dev",
67
68
  "docs:build": "pnpm --filter pipelined-docs build"
68
69
  },
69
70
  "devDependencies": {
71
+ "@size-limit/file": "12.1.0",
70
72
  "@types/node": "25.9.3",
71
73
  "@vitest/coverage-v8": "4.1.8",
72
74
  "bumpp": "11.1.0",
73
75
  "dprint": "0.54.0",
74
76
  "fast-check": "4.8.0",
75
77
  "oxlint": "1.69.0",
78
+ "size-limit": "12.1.0",
76
79
  "tsup": "8.5.1",
77
80
  "typescript": "6.0.3",
78
81
  "vitest": "4.1.8"
79
82
  },
83
+ "size-limit": [
84
+ { "path": "dist/index.js", "limit": "25 KB", "gzip": true },
85
+ { "path": "dist/core.js", "limit": "15 KB", "gzip": true },
86
+ { "path": "dist/composition.js", "limit": "4 KB", "gzip": true },
87
+ { "path": "dist/utils.js", "limit": "12 KB", "gzip": true },
88
+ { "path": "dist/types.js", "limit": "1 KB", "gzip": true }
89
+ ],
80
90
  "packageManager": "pnpm@11.6.0+sha512.9a36518224080c6fe5165afdcfe79bfa118c29be703f3f462b1e32efe1e98e47e8750b148e08286250aad4113cc7993ca413c4e2cd447752708c2ee5751bc95f"
81
91
  }