@satoshibits/functional 1.0.3 → 1.1.2
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/README.md +28 -145
- package/dist/array-utils.d.mts +13 -0
- package/dist/array-utils.d.mts.map +1 -1
- package/dist/array-utils.mjs +19 -3
- package/dist/array-utils.mjs.map +1 -1
- package/dist/array-utils.test.d.ts +2 -0
- package/dist/array-utils.test.d.ts.map +1 -0
- package/dist/array-utils.test.js +256 -0
- package/dist/array-utils.test.js.map +1 -0
- package/dist/composition.d.mts +53 -6
- package/dist/composition.d.mts.map +1 -1
- package/dist/composition.mjs +111 -22
- package/dist/composition.mjs.map +1 -1
- package/dist/composition.test.d.ts +2 -0
- package/dist/composition.test.d.ts.map +1 -0
- package/dist/composition.test.js +409 -0
- package/dist/composition.test.js.map +1 -0
- package/dist/index.d.mts +10 -5
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +10 -5
- package/dist/index.mjs.map +1 -1
- package/dist/integration.test.d.mts +2 -0
- package/dist/integration.test.d.mts.map +1 -0
- package/dist/integration.test.mjs +486 -0
- package/dist/integration.test.mjs.map +1 -0
- package/dist/io.d.mts +338 -0
- package/dist/io.d.mts.map +1 -0
- package/dist/io.mjs +389 -0
- package/dist/io.mjs.map +1 -0
- package/dist/io.test.d.mts +2 -0
- package/dist/io.test.d.mts.map +1 -0
- package/dist/io.test.mjs +373 -0
- package/dist/io.test.mjs.map +1 -0
- package/dist/laws.test.d.mts +2 -0
- package/dist/laws.test.d.mts.map +1 -0
- package/dist/laws.test.mjs +614 -0
- package/dist/laws.test.mjs.map +1 -0
- package/dist/object-utils.d.mts +11 -0
- package/dist/object-utils.d.mts.map +1 -1
- package/dist/object-utils.mjs +11 -0
- package/dist/object-utils.mjs.map +1 -1
- package/dist/object-utils.test.d.ts +2 -0
- package/dist/object-utils.test.d.ts.map +1 -0
- package/dist/object-utils.test.js +286 -0
- package/dist/object-utils.test.js.map +1 -0
- package/dist/option-additions.test.d.mts +2 -0
- package/dist/option-additions.test.d.mts.map +1 -0
- package/dist/option-additions.test.mjs +325 -0
- package/dist/option-additions.test.mjs.map +1 -0
- package/dist/option.d.mts +202 -58
- package/dist/option.d.mts.map +1 -1
- package/dist/option.mjs +271 -63
- package/dist/option.mjs.map +1 -1
- package/dist/option.test.d.ts +6 -0
- package/dist/option.test.d.ts.map +1 -0
- package/dist/option.test.js +606 -0
- package/dist/option.test.js.map +1 -0
- package/dist/performance.d.mts +27 -10
- package/dist/performance.d.mts.map +1 -1
- package/dist/performance.mjs +42 -20
- package/dist/performance.mjs.map +1 -1
- package/dist/performance.test.d.ts +2 -0
- package/dist/performance.test.d.ts.map +1 -0
- package/dist/performance.test.js +424 -0
- package/dist/performance.test.js.map +1 -0
- package/dist/pipeline.d.mts +12 -0
- package/dist/pipeline.d.mts.map +1 -1
- package/dist/pipeline.mjs +12 -0
- package/dist/pipeline.mjs.map +1 -1
- package/dist/pipeline.test.d.ts +2 -0
- package/dist/pipeline.test.d.ts.map +1 -0
- package/dist/pipeline.test.js +445 -0
- package/dist/pipeline.test.js.map +1 -0
- package/dist/predicates.d.mts +12 -0
- package/dist/predicates.d.mts.map +1 -1
- package/dist/predicates.mjs +12 -0
- package/dist/predicates.mjs.map +1 -1
- package/dist/predicates.test.d.ts +2 -0
- package/dist/predicates.test.d.ts.map +1 -0
- package/dist/predicates.test.js +375 -0
- package/dist/predicates.test.js.map +1 -0
- package/dist/reader-result.d.mts +37 -16
- package/dist/reader-result.d.mts.map +1 -1
- package/dist/reader-result.mjs +37 -16
- package/dist/reader-result.mjs.map +1 -1
- package/dist/reader-result.test.d.ts +2 -0
- package/dist/reader-result.test.d.ts.map +1 -0
- package/dist/reader-result.test.js +1259 -0
- package/dist/reader-result.test.js.map +1 -0
- package/dist/reader.d.mts +443 -0
- package/dist/reader.d.mts.map +1 -0
- package/dist/reader.mjs +456 -0
- package/dist/reader.mjs.map +1 -0
- package/dist/reader.test.d.mts +2 -0
- package/dist/reader.test.d.mts.map +1 -0
- package/dist/reader.test.mjs +288 -0
- package/dist/reader.test.mjs.map +1 -0
- package/dist/result-additions.test.d.mts +2 -0
- package/dist/result-additions.test.d.mts.map +1 -0
- package/dist/result-additions.test.mjs +325 -0
- package/dist/result-additions.test.mjs.map +1 -0
- package/dist/result.d.mts +208 -0
- package/dist/result.d.mts.map +1 -1
- package/dist/result.mjs +287 -0
- package/dist/result.mjs.map +1 -1
- package/dist/result.test.d.ts +2 -0
- package/dist/result.test.d.ts.map +1 -0
- package/dist/result.test.js +453 -0
- package/dist/result.test.js.map +1 -0
- package/dist/task.d.mts +374 -0
- package/dist/task.d.mts.map +1 -0
- package/dist/task.mjs +386 -0
- package/dist/task.mjs.map +1 -0
- package/dist/task.test.d.mts +2 -0
- package/dist/task.test.d.mts.map +1 -0
- package/dist/task.test.mjs +1006 -0
- package/dist/task.test.mjs.map +1 -0
- package/dist/types.d.mts +12 -0
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs +12 -0
- package/dist/types.mjs.map +1 -1
- package/dist/types.test.d.ts +6 -0
- package/dist/types.test.d.ts.map +1 -0
- package/dist/types.test.js +447 -0
- package/dist/types.test.js.map +1 -0
- package/dist/validation.d.mts +12 -0
- package/dist/validation.d.mts.map +1 -1
- package/dist/validation.mjs +22 -4
- package/dist/validation.mjs.map +1 -1
- package/dist/validation.test.d.ts +2 -0
- package/dist/validation.test.d.ts.map +1 -0
- package/dist/validation.test.js +518 -0
- package/dist/validation.test.js.map +1 -0
- package/package.json +77 -13
package/dist/composition.d.mts
CHANGED
|
@@ -5,6 +5,19 @@
|
|
|
5
5
|
* for pipelines of any length. All functions follow functional programming principles,
|
|
6
6
|
* supporting both synchronous and asynchronous composition patterns.
|
|
7
7
|
*
|
|
8
|
+
* ### For Dummies
|
|
9
|
+
* - Treat these helpers as Lego roads for wiring tiny functions together without writing loops.
|
|
10
|
+
* - `pipe` runs a list of functions on a starting value, `flow` builds the list first and reuses it later.
|
|
11
|
+
* - `compose` is just `flow` read from right to left; `tap` lets you peek without changing the value.
|
|
12
|
+
* - Async variants like `pipeAsync` do the same thing but wait for promises at every hop.
|
|
13
|
+
*
|
|
14
|
+
* ### Decision Tree
|
|
15
|
+
* - Already holding the starting value? Use `pipe(value, step1, step2, ...)`.
|
|
16
|
+
* - Need a reusable function to call many times? Use `flow(step1, step2, ...)`.
|
|
17
|
+
* - Prefer mathematical right-to-left order? Reach for `compose(last, ..., first)`.
|
|
18
|
+
* - Want to debug without altering data? Insert `tap(logFn)` inside the pipeline.
|
|
19
|
+
* - Need to await each step? Use `pipeAsync(step1, step2, ...)` and call the returned async function.
|
|
20
|
+
*
|
|
8
21
|
* @example
|
|
9
22
|
* ```typescript
|
|
10
23
|
* import { pipe, flow, compose, tap, pipeAsync } from './composition.mts';
|
|
@@ -406,6 +419,28 @@ export declare const flip: <A, B, C>(fn: (a: A, b: B) => C) => (b: B, a: A) => C
|
|
|
406
419
|
* Memoization - caches function results based on arguments.
|
|
407
420
|
* Improves performance for expensive pure functions by storing previously computed results.
|
|
408
421
|
*
|
|
422
|
+
* @description
|
|
423
|
+
* Creates a memoized version of a function that caches results based on arguments.
|
|
424
|
+
* - Uses WeakMap for object/function arguments, enabling proper garbage collection
|
|
425
|
+
* - Handles circular references safely by using object identity, not structure
|
|
426
|
+
* - Creates a trie-like cache structure for multiple arguments
|
|
427
|
+
*
|
|
428
|
+
* @template Args - The argument types of the function
|
|
429
|
+
* @template Return - The return type of the function
|
|
430
|
+
* @param {Function} fn - The function to memoize
|
|
431
|
+
* @param {Function} [getKey] - Optional function to generate a cache key from arguments
|
|
432
|
+
*
|
|
433
|
+
* @warning **Cache Growth Considerations:**
|
|
434
|
+
* - Without `getKey`: Primitive arguments create unbounded cache growth.
|
|
435
|
+
* Each unique combination of primitives creates a permanent cache entry.
|
|
436
|
+
* - With `getKey`: If the key function returns objects, they're held with
|
|
437
|
+
* strong references and won't be garbage collected while cached.
|
|
438
|
+
*
|
|
439
|
+
* For applications requiring cache bounds or eviction policies, consider:
|
|
440
|
+
* - Using `getKey` to control cache keys
|
|
441
|
+
* - Implementing a wrapper with cache management
|
|
442
|
+
* - Using specialized memoization libraries with LRU or TTL support
|
|
443
|
+
*
|
|
409
444
|
* @category Performance
|
|
410
445
|
* @example
|
|
411
446
|
* // Memoize expensive calculations
|
|
@@ -426,10 +461,21 @@ export declare const flip: <A, B, C>(fn: (a: A, b: B) => C) => (b: B, a: A) => C
|
|
|
426
461
|
* ? { ...user, details: await fetchUserDetails(userId) }
|
|
427
462
|
* : user;
|
|
428
463
|
* },
|
|
429
|
-
* (userId, options) => `${userId}-${options.includeDetails}`
|
|
464
|
+
* (userId, options) => `${userId}-${options.includeDetails}` // Returns primitive key
|
|
430
465
|
* );
|
|
431
466
|
*
|
|
432
467
|
* @example
|
|
468
|
+
* // Safe with circular references
|
|
469
|
+
* const obj: any = { value: 1 };
|
|
470
|
+
* obj.self = obj; // Circular reference
|
|
471
|
+
*
|
|
472
|
+
* const process = memoize((item: any) => {
|
|
473
|
+
* return item.value * 2;
|
|
474
|
+
* });
|
|
475
|
+
*
|
|
476
|
+
* process(obj); // Works correctly, uses object identity for caching
|
|
477
|
+
*
|
|
478
|
+
* @example
|
|
433
479
|
* // Memoizing API calls
|
|
434
480
|
* const fetchProductData = memoize(async (productId: string) => {
|
|
435
481
|
* const response = await fetch(`/api/products/${productId}`);
|
|
@@ -441,8 +487,9 @@ export declare const flip: <A, B, C>(fn: (a: A, b: B) => C) => (b: B, a: A) => C
|
|
|
441
487
|
* await fetchProductData('123'); // Returns cached result
|
|
442
488
|
*
|
|
443
489
|
* @see identity - For functions that don't need memoization
|
|
490
|
+
* @since 2025-07-03
|
|
444
491
|
*/
|
|
445
|
-
export declare const memoize: <Args extends unknown[], Return>(fn: (...args: Args) => Return, getKey?: (...args: Args) =>
|
|
492
|
+
export declare const memoize: <Args extends unknown[], Return>(fn: (...args: Args) => Return, getKey?: (...args: Args) => unknown) => ((...args: Args) => Return);
|
|
446
493
|
/**
|
|
447
494
|
* Compose async functions from right to left.
|
|
448
495
|
* Allows composition of Promise-returning functions in mathematical order.
|
|
@@ -573,7 +620,7 @@ export declare function pipeAsync<A, B, C, D, E, F>(f1: (a: A) => Promise<B>, f2
|
|
|
573
620
|
* async () => startServer()
|
|
574
621
|
* ];
|
|
575
622
|
*
|
|
576
|
-
* const results = await
|
|
623
|
+
* const results = await sequenceAsync(initSteps);
|
|
577
624
|
* // All steps completed in order
|
|
578
625
|
*
|
|
579
626
|
* @example
|
|
@@ -582,12 +629,12 @@ export declare function pipeAsync<A, B, C, D, E, F>(f1: (a: A) => Promise<B>, f2
|
|
|
582
629
|
* async () => fetchUserData(id)
|
|
583
630
|
* );
|
|
584
631
|
*
|
|
585
|
-
* const allUserData = await
|
|
632
|
+
* const allUserData = await sequenceAsync(fetchOperations);
|
|
586
633
|
* // Fetches users one by one, not in parallel
|
|
587
634
|
*
|
|
588
635
|
* @example
|
|
589
636
|
* // Cleanup operations
|
|
590
|
-
* const cleanup =
|
|
637
|
+
* const cleanup = sequenceAsync([
|
|
591
638
|
* async () => closeConnections(),
|
|
592
639
|
* async () => flushCache(),
|
|
593
640
|
* async () => logShutdown()
|
|
@@ -599,5 +646,5 @@ export declare function pipeAsync<A, B, C, D, E, F>(f1: (a: A) => Promise<B>, f2
|
|
|
599
646
|
* @see pipeAsync - For composing async functions
|
|
600
647
|
* @since 2025-07-03
|
|
601
648
|
*/
|
|
602
|
-
export declare const
|
|
649
|
+
export declare const sequenceAsync: <T>(fns: (() => Promise<T>)[]) => Promise<T[]>;
|
|
603
650
|
//# sourceMappingURL=composition.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composition.d.mts","sourceRoot":"","sources":["../src/composition.mts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"composition.d.mts","sourceRoot":"","sources":["../src/composition.mts"],"names":[],"mappings":"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"}
|
package/dist/composition.mjs
CHANGED
|
@@ -6,6 +6,19 @@
|
|
|
6
6
|
* for pipelines of any length. All functions follow functional programming principles,
|
|
7
7
|
* supporting both synchronous and asynchronous composition patterns.
|
|
8
8
|
*
|
|
9
|
+
* ### For Dummies
|
|
10
|
+
* - Treat these helpers as Lego roads for wiring tiny functions together without writing loops.
|
|
11
|
+
* - `pipe` runs a list of functions on a starting value, `flow` builds the list first and reuses it later.
|
|
12
|
+
* - `compose` is just `flow` read from right to left; `tap` lets you peek without changing the value.
|
|
13
|
+
* - Async variants like `pipeAsync` do the same thing but wait for promises at every hop.
|
|
14
|
+
*
|
|
15
|
+
* ### Decision Tree
|
|
16
|
+
* - Already holding the starting value? Use `pipe(value, step1, step2, ...)`.
|
|
17
|
+
* - Need a reusable function to call many times? Use `flow(step1, step2, ...)`.
|
|
18
|
+
* - Prefer mathematical right-to-left order? Reach for `compose(last, ..., first)`.
|
|
19
|
+
* - Want to debug without altering data? Insert `tap(logFn)` inside the pipeline.
|
|
20
|
+
* - Need to await each step? Use `pipeAsync(step1, step2, ...)` and call the returned async function.
|
|
21
|
+
*
|
|
9
22
|
* @example
|
|
10
23
|
* ```typescript
|
|
11
24
|
* import { pipe, flow, compose, tap, pipeAsync } from './composition.mts';
|
|
@@ -180,7 +193,11 @@ export var identity = function (x) { return x; };
|
|
|
180
193
|
* @see identity - Return the input unchanged
|
|
181
194
|
* @since 2025-07-03
|
|
182
195
|
*/
|
|
183
|
-
export var constant = function (x) {
|
|
196
|
+
export var constant = function (x) {
|
|
197
|
+
return function () {
|
|
198
|
+
return x;
|
|
199
|
+
};
|
|
200
|
+
};
|
|
184
201
|
export function compose() {
|
|
185
202
|
var fns = [];
|
|
186
203
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
@@ -233,10 +250,12 @@ export function compose() {
|
|
|
233
250
|
* @see identity - Pass through without side effects
|
|
234
251
|
* @since 2025-07-03
|
|
235
252
|
*/
|
|
236
|
-
export var tap = function (fn) {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
253
|
+
export var tap = function (fn) {
|
|
254
|
+
return function (x) {
|
|
255
|
+
fn(x);
|
|
256
|
+
return x;
|
|
257
|
+
};
|
|
258
|
+
};
|
|
240
259
|
/**
|
|
241
260
|
* Currying utility - converts a function of multiple arguments into a sequence of functions.
|
|
242
261
|
* Each function takes a single argument and returns another function until all arguments are provided.
|
|
@@ -361,6 +380,28 @@ export var flip = function (fn) {
|
|
|
361
380
|
* Memoization - caches function results based on arguments.
|
|
362
381
|
* Improves performance for expensive pure functions by storing previously computed results.
|
|
363
382
|
*
|
|
383
|
+
* @description
|
|
384
|
+
* Creates a memoized version of a function that caches results based on arguments.
|
|
385
|
+
* - Uses WeakMap for object/function arguments, enabling proper garbage collection
|
|
386
|
+
* - Handles circular references safely by using object identity, not structure
|
|
387
|
+
* - Creates a trie-like cache structure for multiple arguments
|
|
388
|
+
*
|
|
389
|
+
* @template Args - The argument types of the function
|
|
390
|
+
* @template Return - The return type of the function
|
|
391
|
+
* @param {Function} fn - The function to memoize
|
|
392
|
+
* @param {Function} [getKey] - Optional function to generate a cache key from arguments
|
|
393
|
+
*
|
|
394
|
+
* @warning **Cache Growth Considerations:**
|
|
395
|
+
* - Without `getKey`: Primitive arguments create unbounded cache growth.
|
|
396
|
+
* Each unique combination of primitives creates a permanent cache entry.
|
|
397
|
+
* - With `getKey`: If the key function returns objects, they're held with
|
|
398
|
+
* strong references and won't be garbage collected while cached.
|
|
399
|
+
*
|
|
400
|
+
* For applications requiring cache bounds or eviction policies, consider:
|
|
401
|
+
* - Using `getKey` to control cache keys
|
|
402
|
+
* - Implementing a wrapper with cache management
|
|
403
|
+
* - Using specialized memoization libraries with LRU or TTL support
|
|
404
|
+
*
|
|
364
405
|
* @category Performance
|
|
365
406
|
* @example
|
|
366
407
|
* // Memoize expensive calculations
|
|
@@ -381,10 +422,21 @@ export var flip = function (fn) {
|
|
|
381
422
|
* ? { ...user, details: await fetchUserDetails(userId) }
|
|
382
423
|
* : user;
|
|
383
424
|
* },
|
|
384
|
-
* (userId, options) => `${userId}-${options.includeDetails}`
|
|
425
|
+
* (userId, options) => `${userId}-${options.includeDetails}` // Returns primitive key
|
|
385
426
|
* );
|
|
386
427
|
*
|
|
387
428
|
* @example
|
|
429
|
+
* // Safe with circular references
|
|
430
|
+
* const obj: any = { value: 1 };
|
|
431
|
+
* obj.self = obj; // Circular reference
|
|
432
|
+
*
|
|
433
|
+
* const process = memoize((item: any) => {
|
|
434
|
+
* return item.value * 2;
|
|
435
|
+
* });
|
|
436
|
+
*
|
|
437
|
+
* process(obj); // Works correctly, uses object identity for caching
|
|
438
|
+
*
|
|
439
|
+
* @example
|
|
388
440
|
* // Memoizing API calls
|
|
389
441
|
* const fetchProductData = memoize(async (productId: string) => {
|
|
390
442
|
* const response = await fetch(`/api/products/${productId}`);
|
|
@@ -396,27 +448,64 @@ export var flip = function (fn) {
|
|
|
396
448
|
* await fetchProductData('123'); // Returns cached result
|
|
397
449
|
*
|
|
398
450
|
* @see identity - For functions that don't need memoization
|
|
451
|
+
* @since 2025-07-03
|
|
399
452
|
*/
|
|
400
453
|
export var memoize = function (fn, getKey) {
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
454
|
+
if (getKey) {
|
|
455
|
+
var keyedCache_1 = new Map();
|
|
456
|
+
return function () {
|
|
457
|
+
var args = [];
|
|
458
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
459
|
+
args[_i] = arguments[_i];
|
|
460
|
+
}
|
|
461
|
+
var key = getKey.apply(void 0, args);
|
|
462
|
+
if (keyedCache_1.has(key)) {
|
|
463
|
+
return keyedCache_1.get(key);
|
|
464
|
+
}
|
|
465
|
+
var result = fn.apply(void 0, args);
|
|
466
|
+
keyedCache_1.set(key, result);
|
|
467
|
+
return result;
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
var createNode = function () { return ({
|
|
471
|
+
primitiveChildren: new Map(),
|
|
472
|
+
objectChildren: new WeakMap(),
|
|
473
|
+
hasValue: false,
|
|
474
|
+
}); };
|
|
475
|
+
var root = createNode();
|
|
409
476
|
return function () {
|
|
410
477
|
var args = [];
|
|
411
478
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
412
479
|
args[_i] = arguments[_i];
|
|
413
480
|
}
|
|
414
|
-
var
|
|
415
|
-
|
|
416
|
-
|
|
481
|
+
var node = root;
|
|
482
|
+
for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {
|
|
483
|
+
var arg = args_1[_a];
|
|
484
|
+
// Use WeakMap for objects and functions (garbage-collectible)
|
|
485
|
+
if ((typeof arg === "object" && arg !== null) || typeof arg === "function") {
|
|
486
|
+
var nextNode = node.objectChildren.get(arg);
|
|
487
|
+
if (!nextNode) {
|
|
488
|
+
nextNode = createNode();
|
|
489
|
+
node.objectChildren.set(arg, nextNode);
|
|
490
|
+
}
|
|
491
|
+
node = nextNode;
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
// Use Map for primitives (permanent cache)
|
|
495
|
+
var nextNode = node.primitiveChildren.get(arg);
|
|
496
|
+
if (!nextNode) {
|
|
497
|
+
nextNode = createNode();
|
|
498
|
+
node.primitiveChildren.set(arg, nextNode);
|
|
499
|
+
}
|
|
500
|
+
node = nextNode;
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
if (node.hasValue) {
|
|
504
|
+
return node.value;
|
|
417
505
|
}
|
|
418
506
|
var result = fn.apply(void 0, args);
|
|
419
|
-
|
|
507
|
+
node.hasValue = true;
|
|
508
|
+
node.value = result;
|
|
420
509
|
return result;
|
|
421
510
|
};
|
|
422
511
|
};
|
|
@@ -471,7 +560,7 @@ export function pipeAsync() {
|
|
|
471
560
|
* async () => startServer()
|
|
472
561
|
* ];
|
|
473
562
|
*
|
|
474
|
-
* const results = await
|
|
563
|
+
* const results = await sequenceAsync(initSteps);
|
|
475
564
|
* // All steps completed in order
|
|
476
565
|
*
|
|
477
566
|
* @example
|
|
@@ -480,12 +569,12 @@ export function pipeAsync() {
|
|
|
480
569
|
* async () => fetchUserData(id)
|
|
481
570
|
* );
|
|
482
571
|
*
|
|
483
|
-
* const allUserData = await
|
|
572
|
+
* const allUserData = await sequenceAsync(fetchOperations);
|
|
484
573
|
* // Fetches users one by one, not in parallel
|
|
485
574
|
*
|
|
486
575
|
* @example
|
|
487
576
|
* // Cleanup operations
|
|
488
|
-
* const cleanup =
|
|
577
|
+
* const cleanup = sequenceAsync([
|
|
489
578
|
* async () => closeConnections(),
|
|
490
579
|
* async () => flushCache(),
|
|
491
580
|
* async () => logShutdown()
|
|
@@ -497,7 +586,7 @@ export function pipeAsync() {
|
|
|
497
586
|
* @see pipeAsync - For composing async functions
|
|
498
587
|
* @since 2025-07-03
|
|
499
588
|
*/
|
|
500
|
-
export var
|
|
589
|
+
export var sequenceAsync = function (fns) {
|
|
501
590
|
return fns.reduce(function (promiseChain, currentFn) { return __awaiter(void 0, void 0, void 0, function () {
|
|
502
591
|
var chainResults, currentResult;
|
|
503
592
|
return __generator(this, function (_a) {
|
package/dist/composition.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composition.mjs","sourceRoot":"","sources":["../src/composition.mts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"composition.mjs","sourceRoot":"","sources":["../src/composition.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composition.test.d.ts","sourceRoot":"","sources":["../src/composition.test.ts"],"names":[],"mappings":""}
|