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