@nlozgachev/pipelined 0.44.0 → 0.45.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/README.md +7 -6
- package/dist/{InternalTypes-BL23H8Qr.d.mts → InternalTypes-CLE7qlOc.d.mts} +33 -28
- package/dist/{InternalTypes-7o9-yrHq.d.ts → InternalTypes-Mssktd7z.d.ts} +33 -28
- package/dist/{Validation-DM2eh6wj.d.ts → Validation-BMsvixWH.d.ts} +475 -443
- package/dist/{Validation-Dz70wtcG.d.mts → Validation-v38R0qH-.d.mts} +475 -443
- package/dist/{chunk-LKTOK5IT.mjs → chunk-2LKJF45J.mjs} +160 -68
- package/dist/{chunk-X6XQX3OZ.mjs → chunk-KOYYDQH4.mjs} +2 -2
- package/dist/{chunk-ND476266.mjs → chunk-VSU36S2K.mjs} +432 -309
- package/dist/{chunk-74JKKJ4R.mjs → chunk-XTVF5R6R.mjs} +8 -5
- package/dist/composition.d.mts +10 -10
- package/dist/composition.d.ts +10 -10
- package/dist/composition.js +9 -6
- package/dist/composition.mjs +2 -2
- package/dist/core.d.mts +453 -402
- package/dist/core.d.ts +453 -402
- package/dist/core.js +439 -313
- package/dist/core.mjs +2 -2
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +599 -381
- package/dist/index.mjs +4 -4
- package/dist/types.d.mts +23 -21
- package/dist/types.d.ts +23 -21
- package/dist/types.js +8 -5
- package/dist/types.mjs +1 -1
- package/dist/utils.d.mts +466 -216
- package/dist/utils.d.ts +466 -216
- package/dist/utils.js +406 -238
- package/dist/utils.mjs +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -103,7 +103,7 @@ const controller = new AbortController();
|
|
|
103
103
|
const fetchUserWithPosts = userWithPosts("42"); // build the lazy task
|
|
104
104
|
const result = await fetchUserWithPosts(controller.signal); // run it — signal controls cancellation
|
|
105
105
|
|
|
106
|
-
if (Result.
|
|
106
|
+
if (Result.is.ok(result)) {
|
|
107
107
|
render(result.value); // { ...User, posts: Post[] }
|
|
108
108
|
} else {
|
|
109
109
|
showError(result.error); // ApiError — typed, not unknown
|
|
@@ -140,7 +140,7 @@ const cheapestByCategory = (items: RawItem[]) =>
|
|
|
140
140
|
items,
|
|
141
141
|
Arr.filterMap(normalise), // parse + drop unparseable prices in one pass
|
|
142
142
|
Arr.sortBy((a, b) => a.price - b.price), // ascending price
|
|
143
|
-
Arr.groupBy((item) => item.category), // Record<string,
|
|
143
|
+
Arr.groupBy((item) => item.category), // Record<string, Arr.NonEmpty<Item>>
|
|
144
144
|
Rec.map((group) => Arr.head(group)), // cheapest per category — Maybe<Item>
|
|
145
145
|
);
|
|
146
146
|
```
|
|
@@ -342,11 +342,12 @@ Functions are composed using `pipe` and `flow`, which are enriched with high-lev
|
|
|
342
342
|
helpers like `when`, `unless`, `either`, `safe`, and `async` to support robust, expressive
|
|
343
343
|
pipelines.
|
|
344
344
|
|
|
345
|
-
### Nominal branding, durations, and non-empty
|
|
345
|
+
### Nominal branding, durations, and non-empty collections
|
|
346
346
|
|
|
347
|
-
Compile-time nominal typing with zero runtime overhead is provided by `Brand
|
|
348
|
-
models and converts time durations (seconds, milliseconds, etc.)
|
|
349
|
-
|
|
347
|
+
Compile-time nominal typing with zero runtime overhead is provided by `Brand`. `Duration` safely
|
|
348
|
+
models and converts time durations (seconds, milliseconds, etc.). `Arr.NonEmpty` and `Rec.NonEmpty`
|
|
349
|
+
guarantee that an array or record is never empty, eliminating defensive length/emptiness checks at
|
|
350
|
+
runtime.
|
|
350
351
|
|
|
351
352
|
Every utility in the library is benchmarked against its native equivalent. The data-last currying
|
|
352
353
|
adds a small function call overhead, which is the expected cost of composability. For operations
|
|
@@ -7,7 +7,7 @@ declare const _deferred: unique symbol;
|
|
|
7
7
|
* Two design choices work together to make the guarantee structural rather than documentary:
|
|
8
8
|
*
|
|
9
9
|
* - The phantom `[_deferred]` symbol makes the type **nominal**: only values produced by
|
|
10
|
-
* `Deferred.
|
|
10
|
+
* `Deferred.from.Promise` satisfy it. A plain object `{ then: ... }` does not.
|
|
11
11
|
* - The single-parameter `.then()` **excludes rejection handlers** by construction. There is
|
|
12
12
|
* no second argument to pass, so chaining and `.catch()` are impossible.
|
|
13
13
|
*
|
|
@@ -16,7 +16,7 @@ declare const _deferred: unique symbol;
|
|
|
16
16
|
*
|
|
17
17
|
* @example
|
|
18
18
|
* ```ts
|
|
19
|
-
* const value = await Deferred.
|
|
19
|
+
* const value = await Deferred.from.Promise(Promise.resolve(42));
|
|
20
20
|
* // value === 42
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
@@ -25,31 +25,35 @@ type Deferred<A> = {
|
|
|
25
25
|
readonly then: (onfulfilled: (value: A) => unknown) => void;
|
|
26
26
|
};
|
|
27
27
|
declare namespace Deferred {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
28
|
+
namespace from {
|
|
29
|
+
/**
|
|
30
|
+
* Wraps a `Promise` or `Deferred` into a `Deferred`, structurally excluding rejection handlers,
|
|
31
|
+
* `.catch()`, `.finally()`, and chainable `.then()`.
|
|
32
|
+
*
|
|
33
|
+
* **Precondition**: `p` must never reject. If `p` rejects, the returned `Deferred` will
|
|
34
|
+
* never resolve — `await`-ing it will hang indefinitely. Use `Task.Result.tryCatch` to
|
|
35
|
+
* handle operations that may fail before converting to a `Deferred`.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* const d = Deferred.from.Promise(Promise.resolve("hello"));
|
|
40
|
+
* const value = await d; // "hello"
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
const Promise: <A>(p: Thenable<A>) => Deferred<A>;
|
|
44
|
+
}
|
|
45
|
+
namespace to {
|
|
46
|
+
/**
|
|
47
|
+
* Converts a `Deferred` back into a `Promise`.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* const p = Deferred.to.Promise(Deferred.from.Promise(Promise.resolve(42)));
|
|
52
|
+
* // p is Promise<42>
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
const Promise: <A>(d: Deferred<A>) => globalThis.Promise<A>;
|
|
56
|
+
}
|
|
53
57
|
}
|
|
54
58
|
|
|
55
59
|
/**
|
|
@@ -114,5 +118,6 @@ type WithCooldown = {
|
|
|
114
118
|
type WithMinInterval = {
|
|
115
119
|
readonly minInterval?: Duration;
|
|
116
120
|
};
|
|
121
|
+
type NonEmpty<T extends string> = `NonEmpty${T}`;
|
|
117
122
|
|
|
118
|
-
export { type Awaitable as A, Deferred as D, type
|
|
123
|
+
export { type Awaitable as A, Deferred as D, type NonEmpty as N, type RetryOptions as R, type Thenable as T, type WithConcurrency as W, type NonEmptyArr as a, type TimeoutOptions as b, type WithCooldown as c, type WithDuration as d, type WithError as e, type WithErrors as f, type WithFirst as g, type WithKind as h, type WithLog as i, type WithMinInterval as j, type WithN as k, type WithSecond as l, type WithSize as m, type WithTimeout as n, type WithValue as o };
|
|
@@ -7,7 +7,7 @@ declare const _deferred: unique symbol;
|
|
|
7
7
|
* Two design choices work together to make the guarantee structural rather than documentary:
|
|
8
8
|
*
|
|
9
9
|
* - The phantom `[_deferred]` symbol makes the type **nominal**: only values produced by
|
|
10
|
-
* `Deferred.
|
|
10
|
+
* `Deferred.from.Promise` satisfy it. A plain object `{ then: ... }` does not.
|
|
11
11
|
* - The single-parameter `.then()` **excludes rejection handlers** by construction. There is
|
|
12
12
|
* no second argument to pass, so chaining and `.catch()` are impossible.
|
|
13
13
|
*
|
|
@@ -16,7 +16,7 @@ declare const _deferred: unique symbol;
|
|
|
16
16
|
*
|
|
17
17
|
* @example
|
|
18
18
|
* ```ts
|
|
19
|
-
* const value = await Deferred.
|
|
19
|
+
* const value = await Deferred.from.Promise(Promise.resolve(42));
|
|
20
20
|
* // value === 42
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
@@ -25,31 +25,35 @@ type Deferred<A> = {
|
|
|
25
25
|
readonly then: (onfulfilled: (value: A) => unknown) => void;
|
|
26
26
|
};
|
|
27
27
|
declare namespace Deferred {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
28
|
+
namespace from {
|
|
29
|
+
/**
|
|
30
|
+
* Wraps a `Promise` or `Deferred` into a `Deferred`, structurally excluding rejection handlers,
|
|
31
|
+
* `.catch()`, `.finally()`, and chainable `.then()`.
|
|
32
|
+
*
|
|
33
|
+
* **Precondition**: `p` must never reject. If `p` rejects, the returned `Deferred` will
|
|
34
|
+
* never resolve — `await`-ing it will hang indefinitely. Use `Task.Result.tryCatch` to
|
|
35
|
+
* handle operations that may fail before converting to a `Deferred`.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* const d = Deferred.from.Promise(Promise.resolve("hello"));
|
|
40
|
+
* const value = await d; // "hello"
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
const Promise: <A>(p: Thenable<A>) => Deferred<A>;
|
|
44
|
+
}
|
|
45
|
+
namespace to {
|
|
46
|
+
/**
|
|
47
|
+
* Converts a `Deferred` back into a `Promise`.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* const p = Deferred.to.Promise(Deferred.from.Promise(Promise.resolve(42)));
|
|
52
|
+
* // p is Promise<42>
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
const Promise: <A>(d: Deferred<A>) => globalThis.Promise<A>;
|
|
56
|
+
}
|
|
53
57
|
}
|
|
54
58
|
|
|
55
59
|
/**
|
|
@@ -114,5 +118,6 @@ type WithCooldown = {
|
|
|
114
118
|
type WithMinInterval = {
|
|
115
119
|
readonly minInterval?: Duration;
|
|
116
120
|
};
|
|
121
|
+
type NonEmpty<T extends string> = `NonEmpty${T}`;
|
|
117
122
|
|
|
118
|
-
export { type Awaitable as A, Deferred as D, type
|
|
123
|
+
export { type Awaitable as A, Deferred as D, type NonEmpty as N, type RetryOptions as R, type Thenable as T, type WithConcurrency as W, type NonEmptyArr as a, type TimeoutOptions as b, type WithCooldown as c, type WithDuration as d, type WithError as e, type WithErrors as f, type WithFirst as g, type WithKind as h, type WithLog as i, type WithMinInterval as j, type WithN as k, type WithSecond as l, type WithSize as m, type WithTimeout as n, type WithValue as o };
|