@nlozgachev/pipelined 0.10.0 → 0.12.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 +9 -3
- package/esm/src/Core/Option.js +2 -1
- package/esm/src/Core/RemoteData.js +5 -5
- package/esm/src/Core/TaskValidation.js +1 -3
- package/esm/src/Core/Tuple.js +112 -0
- package/esm/src/Core/index.js +4 -5
- package/esm/src/{Core → Utils}/Arr.js +95 -23
- package/esm/src/Utils/Dict.js +421 -0
- package/esm/src/Utils/Num.js +124 -0
- package/esm/src/{Core → Utils}/Rec.js +85 -11
- package/esm/src/Utils/Str.js +134 -0
- package/esm/src/Utils/Uniq.js +265 -0
- package/esm/src/Utils/index.js +6 -0
- package/package.json +11 -1
- package/script/src/Core/Option.js +2 -1
- package/script/src/Core/RemoteData.js +5 -5
- package/script/src/Core/TaskValidation.js +1 -3
- package/script/src/Core/Tuple.js +115 -0
- package/script/src/Core/index.js +4 -5
- package/script/src/{Core → Utils}/Arr.js +95 -23
- package/script/src/Utils/Dict.js +424 -0
- package/script/src/Utils/Num.js +127 -0
- package/script/src/{Core → Utils}/Rec.js +85 -11
- package/script/src/Utils/Str.js +137 -0
- package/script/src/Utils/Uniq.js +268 -0
- package/script/src/Utils/index.js +22 -0
- package/types/src/Composition/compose.d.ts.map +1 -1
- package/types/src/Composition/converge.d.ts.map +1 -1
- package/types/src/Composition/curry.d.ts.map +1 -1
- package/types/src/Composition/flow.d.ts.map +1 -1
- package/types/src/Composition/fn.d.ts.map +1 -1
- package/types/src/Composition/juxt.d.ts.map +1 -1
- package/types/src/Composition/memoize.d.ts.map +1 -1
- package/types/src/Composition/not.d.ts.map +1 -1
- package/types/src/Composition/on.d.ts.map +1 -1
- package/types/src/Composition/pipe.d.ts.map +1 -1
- package/types/src/Composition/uncurry.d.ts.map +1 -1
- package/types/src/Core/Deferred.d.ts.map +1 -1
- package/types/src/Core/Lens.d.ts.map +1 -1
- package/types/src/Core/Logged.d.ts.map +1 -1
- package/types/src/Core/Option.d.ts.map +1 -1
- package/types/src/Core/Optional.d.ts.map +1 -1
- package/types/src/Core/Predicate.d.ts.map +1 -1
- package/types/src/Core/Reader.d.ts.map +1 -1
- package/types/src/Core/Refinement.d.ts.map +1 -1
- package/types/src/Core/RemoteData.d.ts.map +1 -1
- package/types/src/Core/Result.d.ts.map +1 -1
- package/types/src/Core/State.d.ts.map +1 -1
- package/types/src/Core/Task.d.ts.map +1 -1
- package/types/src/Core/TaskOption.d.ts.map +1 -1
- package/types/src/Core/TaskResult.d.ts.map +1 -1
- package/types/src/Core/TaskValidation.d.ts.map +1 -1
- package/types/src/Core/These.d.ts.map +1 -1
- package/types/src/Core/Tuple.d.ts +129 -0
- package/types/src/Core/Tuple.d.ts.map +1 -0
- package/types/src/Core/Validation.d.ts.map +1 -1
- package/types/src/Core/index.d.ts +4 -5
- package/types/src/Core/index.d.ts.map +1 -1
- package/types/src/Types/Brand.d.ts.map +1 -1
- package/types/src/Types/NonEmptyList.d.ts.map +1 -1
- package/types/src/{Core → Utils}/Arr.d.ts +25 -3
- package/types/src/Utils/Arr.d.ts.map +1 -0
- package/types/src/Utils/Dict.d.ts +310 -0
- package/types/src/Utils/Dict.d.ts.map +1 -0
- package/types/src/Utils/Num.d.ts +110 -0
- package/types/src/Utils/Num.d.ts.map +1 -0
- package/types/src/{Core → Utils}/Rec.d.ts +39 -1
- package/types/src/Utils/Rec.d.ts.map +1 -0
- package/types/src/Utils/Str.d.ts +128 -0
- package/types/src/Utils/Str.d.ts.map +1 -0
- package/types/src/Utils/Uniq.d.ts +179 -0
- package/types/src/Utils/Uniq.d.ts.map +1 -0
- package/types/src/Utils/index.d.ts +7 -0
- package/types/src/Utils/index.d.ts.map +1 -0
- package/types/src/Core/Arr.d.ts.map +0 -1
- package/types/src/Core/Rec.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Validation.d.ts","sourceRoot":"","sources":["../../../src/src/Core/Validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAErD,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACxD,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAE7D,yBAAiB,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"Validation.d.ts","sourceRoot":"","sources":["../../../src/src/Core/Validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
export * from "./Arr.js";
|
|
2
|
-
export * from "./Logged.js";
|
|
3
1
|
export * from "./Deferred.js";
|
|
4
2
|
export * from "./Lens.js";
|
|
3
|
+
export * from "./Logged.js";
|
|
5
4
|
export * from "./Option.js";
|
|
6
|
-
export * from "./Reader.js";
|
|
7
5
|
export * from "./Optional.js";
|
|
8
|
-
export * from "./Rec.js";
|
|
9
6
|
export * from "./Predicate.js";
|
|
7
|
+
export * from "./Reader.js";
|
|
10
8
|
export * from "./Refinement.js";
|
|
11
9
|
export * from "./RemoteData.js";
|
|
12
|
-
export * from "./State.js";
|
|
13
10
|
export * from "./Result.js";
|
|
11
|
+
export * from "./State.js";
|
|
14
12
|
export * from "./Task.js";
|
|
15
13
|
export * from "./TaskOption.js";
|
|
16
14
|
export * from "./TaskResult.js";
|
|
17
15
|
export * from "./TaskValidation.js";
|
|
18
16
|
export * from "./These.js";
|
|
17
|
+
export * from "./Tuple.js";
|
|
19
18
|
export * from "./Validation.js";
|
|
20
19
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/Core/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/Core/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Brand.d.ts","sourceRoot":"","sources":["../../../src/src/Types/Brand.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,MAAM,EAAE,OAAO,MAAM,CAAC;AAEpC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC;AAEtE,yBAAiB,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"Brand.d.ts","sourceRoot":"","sources":["../../../src/src/Types/Brand.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,MAAM,EAAE,OAAO,MAAM,CAAC;AAEpC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC;AAEtE,yBAAiB,KAAK,CAAC;IACtB;;;;;;;;;;;;OAYG;IACI,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,QAAQ,OAAO,CAAC,KAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAyB,CAAC;IAE/F;;;;;;;;;OASG;IACI,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAiB,CAAC;CACrF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NonEmptyList.d.ts","sourceRoot":"","sources":["../../../src/src/Types/NonEmptyList.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAEnD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"NonEmptyList.d.ts","sourceRoot":"","sources":["../../../src/src/Types/NonEmptyList.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAEnD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,EAC/B,MAAM,SAAS,CAAC,EAAE,KAChB,IAAI,IAAI,YAAY,CAAC,CAAC,CAAoB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Option } from "
|
|
2
|
-
import { Result } from "
|
|
3
|
-
import { Task } from "
|
|
1
|
+
import { Option } from "../Core/Option.js";
|
|
2
|
+
import { Result } from "../Core/Result.js";
|
|
3
|
+
import { Task } from "../Core/Task.js";
|
|
4
4
|
import { NonEmptyList } from "../Types/NonEmptyList.js";
|
|
5
5
|
/**
|
|
6
6
|
* Functional array utilities that compose well with pipe.
|
|
@@ -377,5 +377,27 @@ export declare namespace Arr {
|
|
|
377
377
|
* ```
|
|
378
378
|
*/
|
|
379
379
|
const dropWhile: <A>(predicate: (a: A) => boolean) => (data: readonly A[]) => readonly A[];
|
|
380
|
+
/**
|
|
381
|
+
* Like `reduce`, but returns every intermediate accumulator as an array.
|
|
382
|
+
* The initial value is not included — the output has the same length as the input.
|
|
383
|
+
*
|
|
384
|
+
* @example
|
|
385
|
+
* ```ts
|
|
386
|
+
* pipe([1, 2, 3], Arr.scan(0, (acc, n) => acc + n)); // [1, 3, 6]
|
|
387
|
+
* ```
|
|
388
|
+
*/
|
|
389
|
+
const scan: <A, B>(initial: B, f: (acc: B, a: A) => B) => (data: readonly A[]) => readonly B[];
|
|
390
|
+
/**
|
|
391
|
+
* Splits an array at an index into a `[before, after]` tuple.
|
|
392
|
+
* Negative indices clamp to 0; indices beyond the array length clamp to the end.
|
|
393
|
+
*
|
|
394
|
+
* @example
|
|
395
|
+
* ```ts
|
|
396
|
+
* pipe([1, 2, 3, 4], Arr.splitAt(2)); // [[1, 2], [3, 4]]
|
|
397
|
+
* pipe([1, 2, 3], Arr.splitAt(0)); // [[], [1, 2, 3]]
|
|
398
|
+
* pipe([1, 2, 3], Arr.splitAt(10)); // [[1, 2, 3], []]
|
|
399
|
+
* ```
|
|
400
|
+
*/
|
|
401
|
+
const splitAt: (index: number) => <A>(data: readonly A[]) => readonly [readonly A[], readonly A[]];
|
|
380
402
|
}
|
|
381
403
|
//# sourceMappingURL=Arr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Arr.d.ts","sourceRoot":"","sources":["../../../src/src/Utils/Arr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { Option } from "../Core/Option.js";
|
|
2
|
+
/**
|
|
3
|
+
* Functional utilities for key-value dictionaries (`ReadonlyMap<K, V>`). All functions are pure
|
|
4
|
+
* and data-last — they compose naturally with `pipe`.
|
|
5
|
+
*
|
|
6
|
+
* Unlike plain objects (`Rec`), dictionaries support any key type, preserve insertion order, and
|
|
7
|
+
* make membership checks explicit via `lookup` returning `Option`.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { Dict } from "@nlozgachev/pipelined/utils";
|
|
12
|
+
* import { pipe } from "@nlozgachev/pipelined/composition";
|
|
13
|
+
*
|
|
14
|
+
* const scores = pipe(
|
|
15
|
+
* Dict.fromEntries([["alice", 10], ["bob", 8], ["carol", 10]] as const),
|
|
16
|
+
* Dict.filter(n => n >= 10),
|
|
17
|
+
* Dict.map(n => `${n} points`),
|
|
18
|
+
* );
|
|
19
|
+
* // ReadonlyMap { "alice" => "10 points", "carol" => "10 points" }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare namespace Dict {
|
|
23
|
+
/**
|
|
24
|
+
* Creates an empty dictionary.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* Dict.empty<string, number>(); // ReadonlyMap {}
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
const empty: <K, V>() => ReadonlyMap<K, V>;
|
|
32
|
+
/**
|
|
33
|
+
* Creates a dictionary with a single entry.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* Dict.singleton("name", "Alice"); // ReadonlyMap { "name" => "Alice" }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
const singleton: <K, V>(key: K, value: V) => ReadonlyMap<K, V>;
|
|
41
|
+
/**
|
|
42
|
+
* Creates a dictionary from an array of key-value pairs.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* Dict.fromEntries([["a", 1], ["b", 2]]); // ReadonlyMap { "a" => 1, "b" => 2 }
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
const fromEntries: <K, V>(entries: readonly (readonly [K, V])[]) => ReadonlyMap<K, V>;
|
|
50
|
+
/**
|
|
51
|
+
* Creates a dictionary from a plain object. Keys are always strings.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* Dict.fromRecord({ a: 1, b: 2 }); // ReadonlyMap { "a" => 1, "b" => 2 }
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
const fromRecord: <V>(rec: Readonly<Record<string, V>>) => ReadonlyMap<string, V>;
|
|
59
|
+
/**
|
|
60
|
+
* Groups elements of an array into a dictionary keyed by the result of `keyFn`. Each key maps
|
|
61
|
+
* to the array of elements that produced it, in insertion order. Uses the native `Map.groupBy`
|
|
62
|
+
* when available, falling back to a manual loop in older environments.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* pipe(
|
|
67
|
+
* [{ name: "alice", role: "admin" }, { name: "bob", role: "viewer" }, { name: "carol", role: "admin" }],
|
|
68
|
+
* Dict.groupBy(user => user.role),
|
|
69
|
+
* );
|
|
70
|
+
* // ReadonlyMap { "admin" => [alice, carol], "viewer" => [bob] }
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
const groupBy: <K, A>(keyFn: (a: A) => K) => (items: readonly A[]) => ReadonlyMap<K, readonly A[]>;
|
|
74
|
+
/**
|
|
75
|
+
* Returns `true` if the dictionary contains the given key.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```ts
|
|
79
|
+
* pipe(Dict.fromEntries([["a", 1]]), Dict.has("a")); // true
|
|
80
|
+
* pipe(Dict.fromEntries([["a", 1]]), Dict.has("b")); // false
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
const has: <K>(key: K) => <V>(m: ReadonlyMap<K, V>) => boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Looks up a value by key, returning `Some(value)` if found and `None` if not.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```ts
|
|
89
|
+
* pipe(Dict.fromEntries([["a", 1]]), Dict.lookup("a")); // Some(1)
|
|
90
|
+
* pipe(Dict.fromEntries([["a", 1]]), Dict.lookup("b")); // None
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
const lookup: <K>(key: K) => <V>(m: ReadonlyMap<K, V>) => Option<V>;
|
|
94
|
+
/**
|
|
95
|
+
* Returns the number of entries in the dictionary.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```ts
|
|
99
|
+
* Dict.size(Dict.fromEntries([["a", 1], ["b", 2]])); // 2
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
const size: <K, V>(m: ReadonlyMap<K, V>) => number;
|
|
103
|
+
/**
|
|
104
|
+
* Returns `true` if the dictionary has no entries.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```ts
|
|
108
|
+
* Dict.isEmpty(Dict.empty()); // true
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
const isEmpty: <K, V>(m: ReadonlyMap<K, V>) => boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Returns all keys as a readonly array, in insertion order.
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```ts
|
|
117
|
+
* Dict.keys(Dict.fromEntries([["a", 1], ["b", 2]])); // ["a", "b"]
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
const keys: <K, V>(m: ReadonlyMap<K, V>) => readonly K[];
|
|
121
|
+
/**
|
|
122
|
+
* Returns all values as a readonly array, in insertion order.
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```ts
|
|
126
|
+
* Dict.values(Dict.fromEntries([["a", 1], ["b", 2]])); // [1, 2]
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
const values: <K, V>(m: ReadonlyMap<K, V>) => readonly V[];
|
|
130
|
+
/**
|
|
131
|
+
* Returns all key-value pairs as a readonly array of tuples, in insertion order.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```ts
|
|
135
|
+
* Dict.entries(Dict.fromEntries([["a", 1], ["b", 2]])); // [["a", 1], ["b", 2]]
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
const entries: <K, V>(m: ReadonlyMap<K, V>) => readonly (readonly [K, V])[];
|
|
139
|
+
/**
|
|
140
|
+
* Returns a new dictionary with the given key set to the given value.
|
|
141
|
+
* If the key already exists, its value is replaced.
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```ts
|
|
145
|
+
* pipe(Dict.fromEntries([["a", 1]]), Dict.insert("b", 2));
|
|
146
|
+
* // ReadonlyMap { "a" => 1, "b" => 2 }
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
const insert: <K, V>(key: K, value: V) => (m: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
|
|
150
|
+
/**
|
|
151
|
+
* Returns a new dictionary with the given key removed.
|
|
152
|
+
* If the key does not exist, the dictionary is returned unchanged.
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```ts
|
|
156
|
+
* pipe(Dict.fromEntries([["a", 1], ["b", 2]]), Dict.remove("a"));
|
|
157
|
+
* // ReadonlyMap { "b" => 2 }
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
const remove: <K, V>(key: K) => (m: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
|
|
161
|
+
/**
|
|
162
|
+
* Returns a new dictionary with the value at `key` set by `f`. If the key does not exist,
|
|
163
|
+
* `f` receives `None`. If the key exists, `f` receives `Some(currentValue)`.
|
|
164
|
+
*
|
|
165
|
+
* Useful for incrementing counters, initialising defaults, or conditional updates.
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```ts
|
|
169
|
+
* import { Option } from "@nlozgachev/pipelined/core";
|
|
170
|
+
*
|
|
171
|
+
* const increment = (opt: Option<number>) => Option.getOrElse(() => 0)(opt) + 1;
|
|
172
|
+
* pipe(Dict.fromEntries([["views", 5]]), Dict.upsert("views", increment)); // { views: 6 }
|
|
173
|
+
* pipe(Dict.fromEntries([["views", 5]]), Dict.upsert("likes", increment)); // { views: 5, likes: 1 }
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
const upsert: <K, V>(key: K, f: (existing: Option<V>) => V) => (m: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
|
|
177
|
+
/**
|
|
178
|
+
* Transforms each value in the dictionary.
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```ts
|
|
182
|
+
* pipe(Dict.fromEntries([["a", 1], ["b", 2]]), Dict.map(n => n * 2));
|
|
183
|
+
* // ReadonlyMap { "a" => 2, "b" => 4 }
|
|
184
|
+
* ```
|
|
185
|
+
*/
|
|
186
|
+
const map: <A, B>(f: (a: A) => B) => <K>(m: ReadonlyMap<K, A>) => ReadonlyMap<K, B>;
|
|
187
|
+
/**
|
|
188
|
+
* Transforms each value in the dictionary, also receiving the key.
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```ts
|
|
192
|
+
* pipe(Dict.fromEntries([["a", 1], ["b", 2]]), Dict.mapWithKey((k, v) => `${k}:${v}`));
|
|
193
|
+
* // ReadonlyMap { "a" => "a:1", "b" => "b:2" }
|
|
194
|
+
* ```
|
|
195
|
+
*/
|
|
196
|
+
const mapWithKey: <K, A, B>(f: (key: K, a: A) => B) => (m: ReadonlyMap<K, A>) => ReadonlyMap<K, B>;
|
|
197
|
+
/**
|
|
198
|
+
* Returns a new dictionary containing only the entries for which the predicate returns `true`.
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```ts
|
|
202
|
+
* pipe(Dict.fromEntries([["a", 1], ["b", 3], ["c", 0]]), Dict.filter(n => n > 0));
|
|
203
|
+
* // ReadonlyMap { "a" => 1, "b" => 3 }
|
|
204
|
+
* ```
|
|
205
|
+
*/
|
|
206
|
+
const filter: <A>(predicate: (a: A) => boolean) => <K>(m: ReadonlyMap<K, A>) => ReadonlyMap<K, A>;
|
|
207
|
+
/**
|
|
208
|
+
* Returns a new dictionary containing only the entries for which the predicate returns `true`.
|
|
209
|
+
* The predicate also receives the key.
|
|
210
|
+
*
|
|
211
|
+
* @example
|
|
212
|
+
* ```ts
|
|
213
|
+
* pipe(Dict.fromEntries([["a", 1], ["b", 2]]), Dict.filterWithKey((k, v) => k !== "a" && v > 0));
|
|
214
|
+
* // ReadonlyMap { "b" => 2 }
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
217
|
+
const filterWithKey: <K, A>(predicate: (key: K, a: A) => boolean) => (m: ReadonlyMap<K, A>) => ReadonlyMap<K, A>;
|
|
218
|
+
/**
|
|
219
|
+
* Removes all `None` values from a `ReadonlyMap<K, Option<A>>`, returning a plain
|
|
220
|
+
* `ReadonlyMap<K, A>`. Useful when building dictionaries from fallible lookups.
|
|
221
|
+
*
|
|
222
|
+
* @example
|
|
223
|
+
* ```ts
|
|
224
|
+
* import { Option } from "@nlozgachev/pipelined/core";
|
|
225
|
+
*
|
|
226
|
+
* Dict.compact(Dict.fromEntries([
|
|
227
|
+
* ["a", Option.some(1)],
|
|
228
|
+
* ["b", Option.none()],
|
|
229
|
+
* ["c", Option.some(3)],
|
|
230
|
+
* ]));
|
|
231
|
+
* // ReadonlyMap { "a" => 1, "c" => 3 }
|
|
232
|
+
* ```
|
|
233
|
+
*/
|
|
234
|
+
const compact: <K, A>(m: ReadonlyMap<K, Option<A>>) => ReadonlyMap<K, A>;
|
|
235
|
+
/**
|
|
236
|
+
* Merges two dictionaries. When both contain the same key, the value from `other` takes
|
|
237
|
+
* precedence.
|
|
238
|
+
*
|
|
239
|
+
* @example
|
|
240
|
+
* ```ts
|
|
241
|
+
* pipe(
|
|
242
|
+
* Dict.fromEntries([["a", 1], ["b", 2]]),
|
|
243
|
+
* Dict.union(Dict.fromEntries([["b", 3], ["c", 4]])),
|
|
244
|
+
* );
|
|
245
|
+
* // ReadonlyMap { "a" => 1, "b" => 3, "c" => 4 }
|
|
246
|
+
* ```
|
|
247
|
+
*/
|
|
248
|
+
const union: <K, V>(other: ReadonlyMap<K, V>) => (m: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
|
|
249
|
+
/**
|
|
250
|
+
* Returns a new dictionary containing only the entries whose keys appear in both dictionaries.
|
|
251
|
+
* Values are taken from the left (base) dictionary.
|
|
252
|
+
*
|
|
253
|
+
* @example
|
|
254
|
+
* ```ts
|
|
255
|
+
* pipe(
|
|
256
|
+
* Dict.fromEntries([["a", 1], ["b", 2], ["c", 3]]),
|
|
257
|
+
* Dict.intersection(Dict.fromEntries([["b", 99], ["c", 0]])),
|
|
258
|
+
* );
|
|
259
|
+
* // ReadonlyMap { "b" => 2, "c" => 3 }
|
|
260
|
+
* ```
|
|
261
|
+
*/
|
|
262
|
+
const intersection: <K, V>(other: ReadonlyMap<K, unknown>) => (m: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
|
|
263
|
+
/**
|
|
264
|
+
* Returns a new dictionary containing only the entries whose keys do not appear in `other`.
|
|
265
|
+
*
|
|
266
|
+
* @example
|
|
267
|
+
* ```ts
|
|
268
|
+
* pipe(
|
|
269
|
+
* Dict.fromEntries([["a", 1], ["b", 2], ["c", 3]]),
|
|
270
|
+
* Dict.difference(Dict.fromEntries([["b", 0]])),
|
|
271
|
+
* );
|
|
272
|
+
* // ReadonlyMap { "a" => 1, "c" => 3 }
|
|
273
|
+
* ```
|
|
274
|
+
*/
|
|
275
|
+
const difference: <K, V>(other: ReadonlyMap<K, unknown>) => (m: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
|
|
276
|
+
/**
|
|
277
|
+
* Folds the dictionary into a single value by applying `f` to each value in insertion order.
|
|
278
|
+
* When you also need the key, use `reduceWithKey`.
|
|
279
|
+
*
|
|
280
|
+
* @example
|
|
281
|
+
* ```ts
|
|
282
|
+
* Dict.reduce(0, (acc, value) => acc + value)(
|
|
283
|
+
* Dict.fromEntries([["a", 1], ["b", 2], ["c", 3]])
|
|
284
|
+
* ); // 6
|
|
285
|
+
* ```
|
|
286
|
+
*/
|
|
287
|
+
const reduce: <A, B>(init: B, f: (acc: B, value: A) => B) => <K>(m: ReadonlyMap<K, A>) => B;
|
|
288
|
+
/**
|
|
289
|
+
* Folds the dictionary into a single value by applying `f` to each key-value pair in insertion
|
|
290
|
+
* order.
|
|
291
|
+
*
|
|
292
|
+
* @example
|
|
293
|
+
* ```ts
|
|
294
|
+
* Dict.reduceWithKey("", (acc, value, key) => acc + key + ":" + value + " ")(
|
|
295
|
+
* Dict.fromEntries([["a", 1], ["b", 2]])
|
|
296
|
+
* ); // "a:1 b:2 "
|
|
297
|
+
* ```
|
|
298
|
+
*/
|
|
299
|
+
const reduceWithKey: <K, A, B>(init: B, f: (acc: B, value: A, key: K) => B) => (m: ReadonlyMap<K, A>) => B;
|
|
300
|
+
/**
|
|
301
|
+
* Converts a `ReadonlyMap<string, V>` to a plain object. Only meaningful when keys are strings.
|
|
302
|
+
*
|
|
303
|
+
* @example
|
|
304
|
+
* ```ts
|
|
305
|
+
* Dict.toRecord(Dict.fromEntries([["a", 1], ["b", 2]])); // { a: 1, b: 2 }
|
|
306
|
+
* ```
|
|
307
|
+
*/
|
|
308
|
+
const toRecord: <V>(m: ReadonlyMap<string, V>) => Readonly<Record<string, V>>;
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=Dict.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dict.d.ts","sourceRoot":"","sources":["../../../src/src/Utils/Dict.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { Option } from "../Core/Option.js";
|
|
2
|
+
/**
|
|
3
|
+
* Number utilities for common operations. All transformation functions are data-last
|
|
4
|
+
* and curried so they compose naturally with `pipe` and `Arr.map`.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { Num } from "@nlozgachev/pipelined/utils";
|
|
9
|
+
* import { pipe } from "@nlozgachev/pipelined/composition";
|
|
10
|
+
*
|
|
11
|
+
* pipe(
|
|
12
|
+
* Num.range(1, 6),
|
|
13
|
+
* Arr.map(Num.multiply(2)),
|
|
14
|
+
* Arr.filter(Num.between(4, 8))
|
|
15
|
+
* ); // [4, 6, 8]
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare namespace Num {
|
|
19
|
+
/**
|
|
20
|
+
* Generates an array of numbers from `from` to `to` (both inclusive),
|
|
21
|
+
* stepping by `step` (default `1`). If `step` is negative or zero, or `from > to`,
|
|
22
|
+
* returns an empty array. When `step` does not land exactly on `to`, the last value
|
|
23
|
+
* is the largest reachable value that does not exceed `to`.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* Num.range(0, 5); // [0, 1, 2, 3, 4, 5]
|
|
28
|
+
* Num.range(0, 10, 2); // [0, 2, 4, 6, 8, 10]
|
|
29
|
+
* Num.range(0, 9, 2); // [0, 2, 4, 6, 8]
|
|
30
|
+
* Num.range(5, 0); // []
|
|
31
|
+
* Num.range(3, 3); // [3]
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
const range: (from: number, to: number, step?: number) => readonly number[];
|
|
35
|
+
/**
|
|
36
|
+
* Clamps a number between `min` and `max` (both inclusive).
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* pipe(150, Num.clamp(0, 100)); // 100
|
|
41
|
+
* pipe(-5, Num.clamp(0, 100)); // 0
|
|
42
|
+
* pipe(42, Num.clamp(0, 100)); // 42
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
const clamp: (min: number, max: number) => (n: number) => number;
|
|
46
|
+
/**
|
|
47
|
+
* Returns `true` when the number is between `min` and `max` (both inclusive).
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* pipe(5, Num.between(1, 10)); // true
|
|
52
|
+
* pipe(0, Num.between(1, 10)); // false
|
|
53
|
+
* pipe(10, Num.between(1, 10)); // true
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
const between: (min: number, max: number) => (n: number) => boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Parses a string as a number. Returns `None` when the result is `NaN`.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```ts
|
|
62
|
+
* Num.parse("42"); // Some(42)
|
|
63
|
+
* Num.parse("3.14"); // Some(3.14)
|
|
64
|
+
* Num.parse("abc"); // None
|
|
65
|
+
* Num.parse(""); // None
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
const parse: (s: string) => Option<number>;
|
|
69
|
+
/**
|
|
70
|
+
* Adds `b` to a number. Data-last: use in `pipe` or `Arr.map`.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts
|
|
74
|
+
* pipe(5, Num.add(3)); // 8
|
|
75
|
+
* pipe([1, 2, 3], Arr.map(Num.add(10))); // [11, 12, 13]
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
const add: (b: number) => (a: number) => number;
|
|
79
|
+
/**
|
|
80
|
+
* Subtracts `b` from a number. Data-last: `subtract(b)(a)` = `a - b`.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```ts
|
|
84
|
+
* pipe(10, Num.subtract(3)); // 7
|
|
85
|
+
* pipe([5, 10, 15], Arr.map(Num.subtract(2))); // [3, 8, 13]
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
const subtract: (b: number) => (a: number) => number;
|
|
89
|
+
/**
|
|
90
|
+
* Multiplies a number by `b`. Data-last: use in `pipe` or `Arr.map`.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```ts
|
|
94
|
+
* pipe(6, Num.multiply(7)); // 42
|
|
95
|
+
* pipe([1, 2, 3], Arr.map(Num.multiply(100))); // [100, 200, 300]
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
const multiply: (b: number) => (a: number) => number;
|
|
99
|
+
/**
|
|
100
|
+
* Divides a number by `b`. Data-last: `divide(b)(a)` = `a / b`.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```ts
|
|
104
|
+
* pipe(20, Num.divide(4)); // 5
|
|
105
|
+
* pipe([10, 20, 30], Arr.map(Num.divide(10))); // [1, 2, 3]
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
const divide: (b: number) => (a: number) => number;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=Num.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Num.d.ts","sourceRoot":"","sources":["../../../src/src/Utils/Num.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C;;;;;;;;;;;;;;;GAeG;AACH,yBAAiB,GAAG,CAAC;IACpB;;;;;;;;;;;;;;OAcG;IACI,MAAM,KAAK,GAAI,MAAM,MAAM,EAAE,IAAI,MAAM,EAAE,aAAQ,KAAG,SAAS,MAAM,EAQzE,CAAC;IAEF;;;;;;;;;OASG;IACI,MAAM,KAAK,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,MAAM,GAAG,MAAM,KAAG,MAAyC,CAAC;IAE1G;;;;;;;;;OASG;IACI,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,MAAM,GAAG,MAAM,KAAG,OAA+B,CAAC;IAElG;;;;;;;;;;OAUG;IACI,MAAM,KAAK,GAAI,GAAG,MAAM,KAAG,MAAM,CAAC,MAAM,CAI9C,CAAC;IAEF;;;;;;;;OAQG;IACI,MAAM,GAAG,GAAI,GAAG,MAAM,MAAM,GAAG,MAAM,KAAG,MAAe,CAAC;IAE/D;;;;;;;;OAQG;IACI,MAAM,QAAQ,GAAI,GAAG,MAAM,MAAM,GAAG,MAAM,KAAG,MAAe,CAAC;IAEpE;;;;;;;;OAQG;IACI,MAAM,QAAQ,GAAI,GAAG,MAAM,MAAM,GAAG,MAAM,KAAG,MAAe,CAAC;IAEpE;;;;;;;;OAQG;IACI,MAAM,MAAM,GAAI,GAAG,MAAM,MAAM,GAAG,MAAM,KAAG,MAAe,CAAC;CAClE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Option } from "
|
|
1
|
+
import { Option } from "../Core/Option.js";
|
|
2
2
|
/**
|
|
3
3
|
* Functional record/object utilities that compose well with pipe.
|
|
4
4
|
* All functions are data-last and curried where applicable.
|
|
@@ -82,6 +82,22 @@ export declare namespace Rec {
|
|
|
82
82
|
* ```
|
|
83
83
|
*/
|
|
84
84
|
const fromEntries: <A>(data: readonly (readonly [string, A])[]) => Readonly<Record<string, A>>;
|
|
85
|
+
/**
|
|
86
|
+
* Groups elements of an array into a record keyed by the result of `keyFn`. Each key maps to
|
|
87
|
+
* the array of elements that produced it, in insertion order.
|
|
88
|
+
*
|
|
89
|
+
* Unlike `Dict.groupBy`, keys are always strings. Use `Dict.groupBy` when you need non-string
|
|
90
|
+
* keys or want to avoid the plain-object prototype chain.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```ts
|
|
94
|
+
* pipe(
|
|
95
|
+
* ["apple", "avocado", "banana", "blueberry"],
|
|
96
|
+
* Rec.groupBy(s => s[0]),
|
|
97
|
+
* ); // { a: ["apple", "avocado"], b: ["banana", "blueberry"] }
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
const groupBy: <A>(keyFn: (a: A) => string) => (items: readonly A[]) => Readonly<Record<string, readonly A[]>>;
|
|
85
101
|
/**
|
|
86
102
|
* Picks specific keys from a record.
|
|
87
103
|
*
|
|
@@ -117,5 +133,27 @@ export declare namespace Rec {
|
|
|
117
133
|
* Returns the number of keys in a record.
|
|
118
134
|
*/
|
|
119
135
|
const size: <A>(data: Readonly<Record<string, A>>) => number;
|
|
136
|
+
/**
|
|
137
|
+
* Transforms each key while preserving values.
|
|
138
|
+
* If two keys map to the same new key, the last one wins.
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```ts
|
|
142
|
+
* pipe({ firstName: "Alice", lastName: "Smith" }, Rec.mapKeys(k => k.toUpperCase()));
|
|
143
|
+
* // { FIRSTNAME: "Alice", LASTNAME: "Smith" }
|
|
144
|
+
* ```
|
|
145
|
+
*/
|
|
146
|
+
const mapKeys: (f: (key: string) => string) => <A>(data: Readonly<Record<string, A>>) => Readonly<Record<string, A>>;
|
|
147
|
+
/**
|
|
148
|
+
* Removes all `None` values from a `Record<string, Option<A>>`, returning a plain `Record<string, A>`.
|
|
149
|
+
* Useful when building records from fallible lookups.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```ts
|
|
153
|
+
* Rec.compact({ a: Option.some(1), b: Option.none(), c: Option.some(3) });
|
|
154
|
+
* // { a: 1, c: 3 }
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
const compact: <A>(data: Readonly<Record<string, Option<A>>>) => Readonly<Record<string, A>>;
|
|
120
158
|
}
|
|
121
159
|
//# sourceMappingURL=Rec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rec.d.ts","sourceRoot":"","sources":["../../../src/src/Utils/Rec.ts"],"names":[],"mappings":"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"}
|