@monstermann/map 0.1.2 → 0.3.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 +2496 -0
- package/dist/Map/clone.d.mts +10 -5
- package/dist/Map/clone.mjs +10 -5
- package/dist/Map/compact.d.mts +16 -12
- package/dist/Map/compact.mjs +12 -5
- package/dist/Map/create.d.mts +9 -2
- package/dist/Map/create.mjs +9 -2
- package/dist/Map/every.d.mts +58 -0
- package/dist/Map/every.mjs +55 -0
- package/dist/Map/filter.d.mts +25 -16
- package/dist/Map/filter.mjs +17 -5
- package/dist/Map/find.d.mts +54 -0
- package/dist/Map/find.mjs +54 -0
- package/dist/Map/findMap.d.mts +67 -0
- package/dist/Map/findMap.mjs +71 -0
- package/dist/Map/findMapAll.d.mts +67 -0
- package/dist/Map/findMapAll.mjs +72 -0
- package/dist/Map/findMapOr.d.mts +70 -0
- package/dist/Map/findMapOr.mjs +74 -0
- package/dist/Map/findMapOrElse.d.mts +70 -0
- package/dist/Map/findMapOrElse.mjs +74 -0
- package/dist/Map/findMapOrThrow.d.mts +67 -0
- package/dist/Map/findMapOrThrow.mjs +71 -0
- package/dist/Map/findOr.d.mts +56 -0
- package/dist/Map/findOr.mjs +57 -0
- package/dist/Map/findOrElse.d.mts +59 -0
- package/dist/Map/findOrElse.mjs +60 -0
- package/dist/Map/findOrThrow.d.mts +54 -0
- package/dist/Map/findOrThrow.mjs +55 -0
- package/dist/Map/findRemove.d.mts +54 -0
- package/dist/Map/findRemove.mjs +60 -0
- package/dist/Map/findRemoveOr.d.mts +56 -0
- package/dist/Map/findRemoveOr.mjs +62 -0
- package/dist/Map/findRemoveOrElse.d.mts +59 -0
- package/dist/Map/findRemoveOrElse.mjs +65 -0
- package/dist/Map/findRemoveOrThrow.d.mts +54 -0
- package/dist/Map/findRemoveOrThrow.mjs +60 -0
- package/dist/Map/findReplace.d.mts +56 -0
- package/dist/Map/findReplace.mjs +63 -0
- package/dist/Map/findReplaceOr.d.mts +58 -0
- package/dist/Map/findReplaceOr.mjs +65 -0
- package/dist/Map/findReplaceOrElse.d.mts +62 -0
- package/dist/Map/findReplaceOrElse.mjs +69 -0
- package/dist/Map/findReplaceOrThrow.d.mts +56 -0
- package/dist/Map/findReplaceOrThrow.mjs +63 -0
- package/dist/Map/forEach.d.mts +21 -12
- package/dist/Map/forEach.mjs +17 -5
- package/dist/Map/get.d.mts +15 -7
- package/dist/Map/get.mjs +15 -7
- package/dist/Map/getOr.d.mts +20 -14
- package/dist/Map/getOr.mjs +18 -9
- package/dist/Map/getOrElse.d.mts +20 -14
- package/dist/Map/getOrElse.mjs +18 -9
- package/dist/Map/getOrThrow.d.mts +19 -14
- package/dist/Map/getOrThrow.mjs +17 -9
- package/dist/Map/has.d.mts +15 -7
- package/dist/Map/has.mjs +15 -7
- package/dist/Map/hasAll.d.mts +15 -7
- package/dist/Map/hasAll.mjs +15 -7
- package/dist/Map/hasAny.d.mts +15 -7
- package/dist/Map/hasAny.mjs +15 -7
- package/dist/Map/hasNone.d.mts +15 -7
- package/dist/Map/hasNone.mjs +15 -7
- package/dist/Map/index.d.mts +21 -1
- package/dist/Map/index.mjs +41 -1
- package/dist/Map/is.d.mts +12 -5
- package/dist/Map/is.mjs +12 -5
- package/dist/Map/isEmpty.d.mts +12 -7
- package/dist/Map/isEmpty.mjs +12 -7
- package/dist/Map/isShallowEqual.d.mts +19 -11
- package/dist/Map/isShallowEqual.mjs +19 -11
- package/dist/Map/map.d.mts +25 -14
- package/dist/Map/map.mjs +21 -7
- package/dist/Map/mapEach.d.mts +21 -12
- package/dist/Map/mapEach.mjs +17 -5
- package/dist/Map/mapOr.d.mts +25 -14
- package/dist/Map/mapOr.mjs +21 -7
- package/dist/Map/mapOrElse.d.mts +25 -14
- package/dist/Map/mapOrElse.mjs +21 -7
- package/dist/Map/mapOrThrow.d.mts +24 -14
- package/dist/Map/mapOrThrow.mjs +20 -7
- package/dist/Map/none.d.mts +58 -0
- package/dist/Map/none.mjs +55 -0
- package/dist/Map/reject.d.mts +25 -16
- package/dist/Map/reject.mjs +17 -5
- package/dist/Map/remove.d.mts +15 -7
- package/dist/Map/remove.mjs +15 -7
- package/dist/Map/removeAll.d.mts +15 -7
- package/dist/Map/removeAll.mjs +15 -7
- package/dist/Map/removeOr.d.mts +16 -7
- package/dist/Map/removeOr.mjs +16 -7
- package/dist/Map/removeOrElse.d.mts +18 -12
- package/dist/Map/removeOrElse.mjs +16 -7
- package/dist/Map/removeOrThrow.d.mts +15 -7
- package/dist/Map/removeOrThrow.mjs +15 -7
- package/dist/Map/set.d.mts +16 -7
- package/dist/Map/set.mjs +16 -7
- package/dist/Map/some.d.mts +52 -0
- package/dist/Map/some.mjs +55 -0
- package/package.json +2 -2
- package/dist/Map/internals/types.d.mts +0 -14
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
//#region src/Map/findOr.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* # findOr
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* function Map.findOr<K, V, O>(
|
|
7
|
+
* target: ReadonlyMap<K, V>,
|
|
8
|
+
* predicate: (
|
|
9
|
+
* value: NoInfer<V>,
|
|
10
|
+
* key: NoInfer<K>,
|
|
11
|
+
* target: ReadonlyMap<K, V>,
|
|
12
|
+
* ) => boolean,
|
|
13
|
+
* or: O,
|
|
14
|
+
* ): V | O
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Returns the first value in the map that satisfies the provided `predicate` function, or `or` if no value is found.
|
|
18
|
+
*
|
|
19
|
+
* ## Example
|
|
20
|
+
*
|
|
21
|
+
* ```ts [data-first]
|
|
22
|
+
* import { Map } from "@monstermann/map";
|
|
23
|
+
*
|
|
24
|
+
* Map.findOr(
|
|
25
|
+
* new Map([
|
|
26
|
+
* ["a", 1],
|
|
27
|
+
* ["b", 2],
|
|
28
|
+
* ["c", 3],
|
|
29
|
+
* ]),
|
|
30
|
+
* (value) => value > 10,
|
|
31
|
+
* 0,
|
|
32
|
+
* ); // 0
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* ```ts [data-last]
|
|
36
|
+
* import { Map } from "@monstermann/map";
|
|
37
|
+
*
|
|
38
|
+
* pipe(
|
|
39
|
+
* new Map([
|
|
40
|
+
* ["a", 1],
|
|
41
|
+
* ["b", 2],
|
|
42
|
+
* ["c", 3],
|
|
43
|
+
* ]),
|
|
44
|
+
* Map.findOr((value) => value > 10, 0),
|
|
45
|
+
* ); // 0
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
*/
|
|
49
|
+
declare const findOr: {
|
|
50
|
+
<K, V, U extends V, O>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U, or: O): (target: ReadonlyMap<K, V>) => U | O;
|
|
51
|
+
<K, V, O>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, or: O): (target: ReadonlyMap<K, V>) => V | O;
|
|
52
|
+
<K, V, U extends V, O>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U, or: O): U | O;
|
|
53
|
+
<K, V, O>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, or: O): V | O;
|
|
54
|
+
};
|
|
55
|
+
//#endregion
|
|
56
|
+
export { findOr };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { dfdlT } from "@monstermann/dfdl";
|
|
2
|
+
|
|
3
|
+
//#region src/Map/findOr.ts
|
|
4
|
+
/**
|
|
5
|
+
* # findOr
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* function Map.findOr<K, V, O>(
|
|
9
|
+
* target: ReadonlyMap<K, V>,
|
|
10
|
+
* predicate: (
|
|
11
|
+
* value: NoInfer<V>,
|
|
12
|
+
* key: NoInfer<K>,
|
|
13
|
+
* target: ReadonlyMap<K, V>,
|
|
14
|
+
* ) => boolean,
|
|
15
|
+
* or: O,
|
|
16
|
+
* ): V | O
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* Returns the first value in the map that satisfies the provided `predicate` function, or `or` if no value is found.
|
|
20
|
+
*
|
|
21
|
+
* ## Example
|
|
22
|
+
*
|
|
23
|
+
* ```ts [data-first]
|
|
24
|
+
* import { Map } from "@monstermann/map";
|
|
25
|
+
*
|
|
26
|
+
* Map.findOr(
|
|
27
|
+
* new Map([
|
|
28
|
+
* ["a", 1],
|
|
29
|
+
* ["b", 2],
|
|
30
|
+
* ["c", 3],
|
|
31
|
+
* ]),
|
|
32
|
+
* (value) => value > 10,
|
|
33
|
+
* 0,
|
|
34
|
+
* ); // 0
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* ```ts [data-last]
|
|
38
|
+
* import { Map } from "@monstermann/map";
|
|
39
|
+
*
|
|
40
|
+
* pipe(
|
|
41
|
+
* new Map([
|
|
42
|
+
* ["a", 1],
|
|
43
|
+
* ["b", 2],
|
|
44
|
+
* ["c", 3],
|
|
45
|
+
* ]),
|
|
46
|
+
* Map.findOr((value) => value > 10, 0),
|
|
47
|
+
* ); // 0
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
*/
|
|
51
|
+
const findOr = dfdlT((target, predicate, or) => {
|
|
52
|
+
for (const [key, value] of target) if (predicate(value, key, target)) return value;
|
|
53
|
+
return or;
|
|
54
|
+
}, 3);
|
|
55
|
+
|
|
56
|
+
//#endregion
|
|
57
|
+
export { findOr };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
//#region src/Map/findOrElse.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* # findOrElse
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* function Map.findOrElse<K, V, O>(
|
|
7
|
+
* target: ReadonlyMap<K, V>,
|
|
8
|
+
* predicate: (
|
|
9
|
+
* value: NoInfer<V>,
|
|
10
|
+
* key: NoInfer<K>,
|
|
11
|
+
* target: ReadonlyMap<K, V>,
|
|
12
|
+
* ) => boolean,
|
|
13
|
+
* orElse: (target: ReadonlyMap<K, V>) => O,
|
|
14
|
+
* ): V | O
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Returns the first value in the map that satisfies the provided `predicate` function, or the result of calling `orElse` with the map if no value is found.
|
|
18
|
+
*
|
|
19
|
+
* ## Example
|
|
20
|
+
*
|
|
21
|
+
* ```ts [data-first]
|
|
22
|
+
* import { Map } from "@monstermann/map";
|
|
23
|
+
*
|
|
24
|
+
* Map.findOrElse(
|
|
25
|
+
* new Map([
|
|
26
|
+
* ["a", 1],
|
|
27
|
+
* ["b", 2],
|
|
28
|
+
* ["c", 3],
|
|
29
|
+
* ]),
|
|
30
|
+
* (value) => value > 10,
|
|
31
|
+
* (map) => map.size,
|
|
32
|
+
* ); // 3
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* ```ts [data-last]
|
|
36
|
+
* import { Map } from "@monstermann/map";
|
|
37
|
+
*
|
|
38
|
+
* pipe(
|
|
39
|
+
* new Map([
|
|
40
|
+
* ["a", 1],
|
|
41
|
+
* ["b", 2],
|
|
42
|
+
* ["c", 3],
|
|
43
|
+
* ]),
|
|
44
|
+
* Map.findOrElse(
|
|
45
|
+
* (value) => value > 10,
|
|
46
|
+
* (map) => map.size,
|
|
47
|
+
* ),
|
|
48
|
+
* ); // 3
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
*/
|
|
52
|
+
declare const findOrElse: {
|
|
53
|
+
<K, V, U extends V, O>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U, orElse: (target: ReadonlyMap<K, Exclude<V, U>>) => O): (target: ReadonlyMap<K, V>) => U | O;
|
|
54
|
+
<K, V, O>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, orElse: (target: ReadonlyMap<K, V>) => O): (target: ReadonlyMap<K, V>) => V | O;
|
|
55
|
+
<K, V, U extends V, O>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U, orElse: (target: ReadonlyMap<K, Exclude<V, U>>) => O): U | O;
|
|
56
|
+
<K, V, O>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, orElse: (target: ReadonlyMap<K, V>) => O): V | O;
|
|
57
|
+
};
|
|
58
|
+
//#endregion
|
|
59
|
+
export { findOrElse };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { dfdlT } from "@monstermann/dfdl";
|
|
2
|
+
|
|
3
|
+
//#region src/Map/findOrElse.ts
|
|
4
|
+
/**
|
|
5
|
+
* # findOrElse
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* function Map.findOrElse<K, V, O>(
|
|
9
|
+
* target: ReadonlyMap<K, V>,
|
|
10
|
+
* predicate: (
|
|
11
|
+
* value: NoInfer<V>,
|
|
12
|
+
* key: NoInfer<K>,
|
|
13
|
+
* target: ReadonlyMap<K, V>,
|
|
14
|
+
* ) => boolean,
|
|
15
|
+
* orElse: (target: ReadonlyMap<K, V>) => O,
|
|
16
|
+
* ): V | O
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* Returns the first value in the map that satisfies the provided `predicate` function, or the result of calling `orElse` with the map if no value is found.
|
|
20
|
+
*
|
|
21
|
+
* ## Example
|
|
22
|
+
*
|
|
23
|
+
* ```ts [data-first]
|
|
24
|
+
* import { Map } from "@monstermann/map";
|
|
25
|
+
*
|
|
26
|
+
* Map.findOrElse(
|
|
27
|
+
* new Map([
|
|
28
|
+
* ["a", 1],
|
|
29
|
+
* ["b", 2],
|
|
30
|
+
* ["c", 3],
|
|
31
|
+
* ]),
|
|
32
|
+
* (value) => value > 10,
|
|
33
|
+
* (map) => map.size,
|
|
34
|
+
* ); // 3
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* ```ts [data-last]
|
|
38
|
+
* import { Map } from "@monstermann/map";
|
|
39
|
+
*
|
|
40
|
+
* pipe(
|
|
41
|
+
* new Map([
|
|
42
|
+
* ["a", 1],
|
|
43
|
+
* ["b", 2],
|
|
44
|
+
* ["c", 3],
|
|
45
|
+
* ]),
|
|
46
|
+
* Map.findOrElse(
|
|
47
|
+
* (value) => value > 10,
|
|
48
|
+
* (map) => map.size,
|
|
49
|
+
* ),
|
|
50
|
+
* ); // 3
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
*/
|
|
54
|
+
const findOrElse = dfdlT((target, predicate, orElse) => {
|
|
55
|
+
for (const [key, value] of target) if (predicate(value, key, target)) return value;
|
|
56
|
+
return orElse(target);
|
|
57
|
+
}, 3);
|
|
58
|
+
|
|
59
|
+
//#endregion
|
|
60
|
+
export { findOrElse };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
//#region src/Map/findOrThrow.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* # findOrThrow
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* function Map.findOrThrow<K, V>(
|
|
7
|
+
* target: ReadonlyMap<K, V>,
|
|
8
|
+
* predicate: (
|
|
9
|
+
* value: NoInfer<V>,
|
|
10
|
+
* key: NoInfer<K>,
|
|
11
|
+
* target: ReadonlyMap<K, V>,
|
|
12
|
+
* ) => boolean,
|
|
13
|
+
* ): V
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Returns the first value in the map that satisfies the provided `predicate` function, or throws an error if no value is found.
|
|
17
|
+
*
|
|
18
|
+
* ## Example
|
|
19
|
+
*
|
|
20
|
+
* ```ts [data-first]
|
|
21
|
+
* import { Map } from "@monstermann/map";
|
|
22
|
+
*
|
|
23
|
+
* Map.findOrThrow(
|
|
24
|
+
* new Map([
|
|
25
|
+
* ["a", 1],
|
|
26
|
+
* ["b", 2],
|
|
27
|
+
* ["c", 3],
|
|
28
|
+
* ]),
|
|
29
|
+
* (value) => value > 2,
|
|
30
|
+
* ); // 3
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* ```ts [data-last]
|
|
34
|
+
* import { Map } from "@monstermann/map";
|
|
35
|
+
*
|
|
36
|
+
* pipe(
|
|
37
|
+
* new Map([
|
|
38
|
+
* ["a", 1],
|
|
39
|
+
* ["b", 2],
|
|
40
|
+
* ["c", 3],
|
|
41
|
+
* ]),
|
|
42
|
+
* Map.findOrThrow((value) => value > 2),
|
|
43
|
+
* ); // 3
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
*/
|
|
47
|
+
declare const findOrThrow: {
|
|
48
|
+
<K, V, U extends V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U): (target: ReadonlyMap<K, V>) => U;
|
|
49
|
+
<K, V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): (target: ReadonlyMap<K, V>) => V;
|
|
50
|
+
<K, V, U extends V>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U): U;
|
|
51
|
+
<K, V>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): V;
|
|
52
|
+
};
|
|
53
|
+
//#endregion
|
|
54
|
+
export { findOrThrow };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { dfdlT } from "@monstermann/dfdl";
|
|
2
|
+
|
|
3
|
+
//#region src/Map/findOrThrow.ts
|
|
4
|
+
/**
|
|
5
|
+
* # findOrThrow
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* function Map.findOrThrow<K, V>(
|
|
9
|
+
* target: ReadonlyMap<K, V>,
|
|
10
|
+
* predicate: (
|
|
11
|
+
* value: NoInfer<V>,
|
|
12
|
+
* key: NoInfer<K>,
|
|
13
|
+
* target: ReadonlyMap<K, V>,
|
|
14
|
+
* ) => boolean,
|
|
15
|
+
* ): V
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Returns the first value in the map that satisfies the provided `predicate` function, or throws an error if no value is found.
|
|
19
|
+
*
|
|
20
|
+
* ## Example
|
|
21
|
+
*
|
|
22
|
+
* ```ts [data-first]
|
|
23
|
+
* import { Map } from "@monstermann/map";
|
|
24
|
+
*
|
|
25
|
+
* Map.findOrThrow(
|
|
26
|
+
* new Map([
|
|
27
|
+
* ["a", 1],
|
|
28
|
+
* ["b", 2],
|
|
29
|
+
* ["c", 3],
|
|
30
|
+
* ]),
|
|
31
|
+
* (value) => value > 2,
|
|
32
|
+
* ); // 3
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* ```ts [data-last]
|
|
36
|
+
* import { Map } from "@monstermann/map";
|
|
37
|
+
*
|
|
38
|
+
* pipe(
|
|
39
|
+
* new Map([
|
|
40
|
+
* ["a", 1],
|
|
41
|
+
* ["b", 2],
|
|
42
|
+
* ["c", 3],
|
|
43
|
+
* ]),
|
|
44
|
+
* Map.findOrThrow((value) => value > 2),
|
|
45
|
+
* ); // 3
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
*/
|
|
49
|
+
const findOrThrow = dfdlT((target, predicate) => {
|
|
50
|
+
for (const [key, value] of target) if (predicate(value, key, target)) return value;
|
|
51
|
+
throw new Error("Map.findOrThrow: Value not found.");
|
|
52
|
+
}, 2);
|
|
53
|
+
|
|
54
|
+
//#endregion
|
|
55
|
+
export { findOrThrow };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
//#region src/Map/findRemove.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* # findRemove
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* function Map.findRemove<K, V>(
|
|
7
|
+
* target: ReadonlyMap<K, V>,
|
|
8
|
+
* predicate: (
|
|
9
|
+
* value: NoInfer<V>,
|
|
10
|
+
* key: NoInfer<K>,
|
|
11
|
+
* target: ReadonlyMap<K, V>,
|
|
12
|
+
* ) => boolean,
|
|
13
|
+
* ): ReadonlyMap<K, V>
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Finds the first entry in the map that satisfies the provided `predicate` function and removes it, returning a new map without the removed entry.
|
|
17
|
+
*
|
|
18
|
+
* ## Example
|
|
19
|
+
*
|
|
20
|
+
* ```ts [data-first]
|
|
21
|
+
* import { Map } from "@monstermann/map";
|
|
22
|
+
*
|
|
23
|
+
* Map.findRemove(
|
|
24
|
+
* new Map([
|
|
25
|
+
* ["a", 1],
|
|
26
|
+
* ["b", 2],
|
|
27
|
+
* ["c", 3],
|
|
28
|
+
* ]),
|
|
29
|
+
* (value) => value > 1,
|
|
30
|
+
* ); // Map(2) { "a" => 1, "c" => 3 }
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* ```ts [data-last]
|
|
34
|
+
* import { Map } from "@monstermann/map";
|
|
35
|
+
*
|
|
36
|
+
* pipe(
|
|
37
|
+
* new Map([
|
|
38
|
+
* ["a", 1],
|
|
39
|
+
* ["b", 2],
|
|
40
|
+
* ["c", 3],
|
|
41
|
+
* ]),
|
|
42
|
+
* Map.findRemove((value) => value > 1),
|
|
43
|
+
* ); // Map(2) { "a" => 1, "c" => 3 }
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
*/
|
|
47
|
+
declare const findRemove: {
|
|
48
|
+
<K, V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): (target: Map<K, V>) => Map<K, V>;
|
|
49
|
+
<K, V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
|
|
50
|
+
<K, V>(target: Map<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): Map<K, V>;
|
|
51
|
+
<K, V>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): ReadonlyMap<K, V>;
|
|
52
|
+
};
|
|
53
|
+
//#endregion
|
|
54
|
+
export { findRemove };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { dfdlT } from "@monstermann/dfdl";
|
|
2
|
+
import { cloneMap } from "@monstermann/remmi";
|
|
3
|
+
|
|
4
|
+
//#region src/Map/findRemove.ts
|
|
5
|
+
/**
|
|
6
|
+
* # findRemove
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* function Map.findRemove<K, V>(
|
|
10
|
+
* target: ReadonlyMap<K, V>,
|
|
11
|
+
* predicate: (
|
|
12
|
+
* value: NoInfer<V>,
|
|
13
|
+
* key: NoInfer<K>,
|
|
14
|
+
* target: ReadonlyMap<K, V>,
|
|
15
|
+
* ) => boolean,
|
|
16
|
+
* ): ReadonlyMap<K, V>
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* Finds the first entry in the map that satisfies the provided `predicate` function and removes it, returning a new map without the removed entry.
|
|
20
|
+
*
|
|
21
|
+
* ## Example
|
|
22
|
+
*
|
|
23
|
+
* ```ts [data-first]
|
|
24
|
+
* import { Map } from "@monstermann/map";
|
|
25
|
+
*
|
|
26
|
+
* Map.findRemove(
|
|
27
|
+
* new Map([
|
|
28
|
+
* ["a", 1],
|
|
29
|
+
* ["b", 2],
|
|
30
|
+
* ["c", 3],
|
|
31
|
+
* ]),
|
|
32
|
+
* (value) => value > 1,
|
|
33
|
+
* ); // Map(2) { "a" => 1, "c" => 3 }
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* ```ts [data-last]
|
|
37
|
+
* import { Map } from "@monstermann/map";
|
|
38
|
+
*
|
|
39
|
+
* pipe(
|
|
40
|
+
* new Map([
|
|
41
|
+
* ["a", 1],
|
|
42
|
+
* ["b", 2],
|
|
43
|
+
* ["c", 3],
|
|
44
|
+
* ]),
|
|
45
|
+
* Map.findRemove((value) => value > 1),
|
|
46
|
+
* ); // Map(2) { "a" => 1, "c" => 3 }
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
*/
|
|
50
|
+
const findRemove = dfdlT((target, predicate) => {
|
|
51
|
+
for (const [key, value] of target) if (predicate(value, key, target)) {
|
|
52
|
+
const result = cloneMap(target);
|
|
53
|
+
result.delete(key);
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
return target;
|
|
57
|
+
}, 2);
|
|
58
|
+
|
|
59
|
+
//#endregion
|
|
60
|
+
export { findRemove };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
//#region src/Map/findRemoveOr.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* # findRemoveOr
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* function Map.findRemoveOr<K, V, O>(
|
|
7
|
+
* target: ReadonlyMap<K, V>,
|
|
8
|
+
* predicate: (
|
|
9
|
+
* value: NoInfer<V>,
|
|
10
|
+
* key: NoInfer<K>,
|
|
11
|
+
* target: ReadonlyMap<K, V>,
|
|
12
|
+
* ) => boolean,
|
|
13
|
+
* or: O,
|
|
14
|
+
* ): ReadonlyMap<K, V> | O
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Finds the first entry in the map that satisfies the provided `predicate` function and removes it, returning a new map without the removed entry, or `or` if no entry is found.
|
|
18
|
+
*
|
|
19
|
+
* ## Example
|
|
20
|
+
*
|
|
21
|
+
* ```ts [data-first]
|
|
22
|
+
* import { Map } from "@monstermann/map";
|
|
23
|
+
*
|
|
24
|
+
* Map.findRemoveOr(
|
|
25
|
+
* new Map([
|
|
26
|
+
* ["a", 1],
|
|
27
|
+
* ["b", 2],
|
|
28
|
+
* ["c", 3],
|
|
29
|
+
* ]),
|
|
30
|
+
* (value) => value > 10,
|
|
31
|
+
* new Map(),
|
|
32
|
+
* ); // Map(0) {}
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* ```ts [data-last]
|
|
36
|
+
* import { Map } from "@monstermann/map";
|
|
37
|
+
*
|
|
38
|
+
* pipe(
|
|
39
|
+
* new Map([
|
|
40
|
+
* ["a", 1],
|
|
41
|
+
* ["b", 2],
|
|
42
|
+
* ["c", 3],
|
|
43
|
+
* ]),
|
|
44
|
+
* Map.findRemoveOr((value) => value > 10, new Map()),
|
|
45
|
+
* ); // Map(0) {}
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
*/
|
|
49
|
+
declare const findRemoveOr: {
|
|
50
|
+
<K, V, O>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, or: O): (target: Map<K, V>) => Map<K, V> | O;
|
|
51
|
+
<K, V, O>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, or: O): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, V> | O;
|
|
52
|
+
<K, V, O>(target: Map<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, or: O): Map<K, V> | O;
|
|
53
|
+
<K, V, O>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, or: O): ReadonlyMap<K, V> | O;
|
|
54
|
+
};
|
|
55
|
+
//#endregion
|
|
56
|
+
export { findRemoveOr };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { dfdlT } from "@monstermann/dfdl";
|
|
2
|
+
import { cloneMap } from "@monstermann/remmi";
|
|
3
|
+
|
|
4
|
+
//#region src/Map/findRemoveOr.ts
|
|
5
|
+
/**
|
|
6
|
+
* # findRemoveOr
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* function Map.findRemoveOr<K, V, O>(
|
|
10
|
+
* target: ReadonlyMap<K, V>,
|
|
11
|
+
* predicate: (
|
|
12
|
+
* value: NoInfer<V>,
|
|
13
|
+
* key: NoInfer<K>,
|
|
14
|
+
* target: ReadonlyMap<K, V>,
|
|
15
|
+
* ) => boolean,
|
|
16
|
+
* or: O,
|
|
17
|
+
* ): ReadonlyMap<K, V> | O
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* Finds the first entry in the map that satisfies the provided `predicate` function and removes it, returning a new map without the removed entry, or `or` if no entry is found.
|
|
21
|
+
*
|
|
22
|
+
* ## Example
|
|
23
|
+
*
|
|
24
|
+
* ```ts [data-first]
|
|
25
|
+
* import { Map } from "@monstermann/map";
|
|
26
|
+
*
|
|
27
|
+
* Map.findRemoveOr(
|
|
28
|
+
* new Map([
|
|
29
|
+
* ["a", 1],
|
|
30
|
+
* ["b", 2],
|
|
31
|
+
* ["c", 3],
|
|
32
|
+
* ]),
|
|
33
|
+
* (value) => value > 10,
|
|
34
|
+
* new Map(),
|
|
35
|
+
* ); // Map(0) {}
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* ```ts [data-last]
|
|
39
|
+
* import { Map } from "@monstermann/map";
|
|
40
|
+
*
|
|
41
|
+
* pipe(
|
|
42
|
+
* new Map([
|
|
43
|
+
* ["a", 1],
|
|
44
|
+
* ["b", 2],
|
|
45
|
+
* ["c", 3],
|
|
46
|
+
* ]),
|
|
47
|
+
* Map.findRemoveOr((value) => value > 10, new Map()),
|
|
48
|
+
* ); // Map(0) {}
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
*/
|
|
52
|
+
const findRemoveOr = dfdlT((target, predicate, or) => {
|
|
53
|
+
for (const [key, value] of target) if (predicate(value, key, target)) {
|
|
54
|
+
const result = cloneMap(target);
|
|
55
|
+
result.delete(key);
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
return or;
|
|
59
|
+
}, 3);
|
|
60
|
+
|
|
61
|
+
//#endregion
|
|
62
|
+
export { findRemoveOr };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
//#region src/Map/findRemoveOrElse.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* # findRemoveOrElse
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* function Map.findRemoveOrElse<K, V, O>(
|
|
7
|
+
* target: ReadonlyMap<K, V>,
|
|
8
|
+
* predicate: (
|
|
9
|
+
* value: NoInfer<V>,
|
|
10
|
+
* key: NoInfer<K>,
|
|
11
|
+
* target: ReadonlyMap<K, V>,
|
|
12
|
+
* ) => boolean,
|
|
13
|
+
* orElse: (target: ReadonlyMap<K, V>) => O,
|
|
14
|
+
* ): ReadonlyMap<K, V> | O
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Finds the first entry in the map that satisfies the provided `predicate` function and removes it, returning a new map without the removed entry, or the result of calling `orElse` with the map if no entry is found.
|
|
18
|
+
*
|
|
19
|
+
* ## Example
|
|
20
|
+
*
|
|
21
|
+
* ```ts [data-first]
|
|
22
|
+
* import { Map } from "@monstermann/map";
|
|
23
|
+
*
|
|
24
|
+
* Map.findRemoveOrElse(
|
|
25
|
+
* new Map([
|
|
26
|
+
* ["a", 1],
|
|
27
|
+
* ["b", 2],
|
|
28
|
+
* ["c", 3],
|
|
29
|
+
* ]),
|
|
30
|
+
* (value) => value > 10,
|
|
31
|
+
* (map) => map.size,
|
|
32
|
+
* ); // 3
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* ```ts [data-last]
|
|
36
|
+
* import { Map } from "@monstermann/map";
|
|
37
|
+
*
|
|
38
|
+
* pipe(
|
|
39
|
+
* new Map([
|
|
40
|
+
* ["a", 1],
|
|
41
|
+
* ["b", 2],
|
|
42
|
+
* ["c", 3],
|
|
43
|
+
* ]),
|
|
44
|
+
* Map.findRemoveOrElse(
|
|
45
|
+
* (value) => value > 10,
|
|
46
|
+
* (map) => map.size,
|
|
47
|
+
* ),
|
|
48
|
+
* ); // 3
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
*/
|
|
52
|
+
declare const findRemoveOrElse: {
|
|
53
|
+
<K, V, O>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, orElse: (target: ReadonlyMap<K, V>) => O): (target: Map<K, V>) => Map<K, V> | O;
|
|
54
|
+
<K, V, O>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, orElse: (target: ReadonlyMap<K, V>) => O): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, V> | O;
|
|
55
|
+
<K, V, O>(target: Map<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, orElse: (target: ReadonlyMap<K, V>) => O): Map<K, V> | O;
|
|
56
|
+
<K, V, O>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, orElse: (target: ReadonlyMap<K, V>) => O): ReadonlyMap<K, V> | O;
|
|
57
|
+
};
|
|
58
|
+
//#endregion
|
|
59
|
+
export { findRemoveOrElse };
|