@monstermann/map 0.1.2 → 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.
Files changed (101) hide show
  1. package/README.md +2496 -0
  2. package/dist/Map/clone.d.mts +10 -5
  3. package/dist/Map/clone.mjs +10 -5
  4. package/dist/Map/compact.d.mts +16 -12
  5. package/dist/Map/compact.mjs +12 -5
  6. package/dist/Map/create.d.mts +9 -2
  7. package/dist/Map/create.mjs +9 -2
  8. package/dist/Map/every.d.mts +58 -0
  9. package/dist/Map/every.mjs +55 -0
  10. package/dist/Map/filter.d.mts +25 -16
  11. package/dist/Map/filter.mjs +17 -5
  12. package/dist/Map/find.d.mts +54 -0
  13. package/dist/Map/find.mjs +54 -0
  14. package/dist/Map/findMap.d.mts +67 -0
  15. package/dist/Map/findMap.mjs +71 -0
  16. package/dist/Map/findMapAll.d.mts +67 -0
  17. package/dist/Map/findMapAll.mjs +72 -0
  18. package/dist/Map/findMapOr.d.mts +70 -0
  19. package/dist/Map/findMapOr.mjs +74 -0
  20. package/dist/Map/findMapOrElse.d.mts +70 -0
  21. package/dist/Map/findMapOrElse.mjs +74 -0
  22. package/dist/Map/findMapOrThrow.d.mts +67 -0
  23. package/dist/Map/findMapOrThrow.mjs +71 -0
  24. package/dist/Map/findOr.d.mts +56 -0
  25. package/dist/Map/findOr.mjs +57 -0
  26. package/dist/Map/findOrElse.d.mts +59 -0
  27. package/dist/Map/findOrElse.mjs +60 -0
  28. package/dist/Map/findOrThrow.d.mts +54 -0
  29. package/dist/Map/findOrThrow.mjs +55 -0
  30. package/dist/Map/findRemove.d.mts +54 -0
  31. package/dist/Map/findRemove.mjs +60 -0
  32. package/dist/Map/findRemoveOr.d.mts +56 -0
  33. package/dist/Map/findRemoveOr.mjs +62 -0
  34. package/dist/Map/findRemoveOrElse.d.mts +59 -0
  35. package/dist/Map/findRemoveOrElse.mjs +65 -0
  36. package/dist/Map/findRemoveOrThrow.d.mts +54 -0
  37. package/dist/Map/findRemoveOrThrow.mjs +60 -0
  38. package/dist/Map/findReplace.d.mts +56 -0
  39. package/dist/Map/findReplace.mjs +63 -0
  40. package/dist/Map/findReplaceOr.d.mts +58 -0
  41. package/dist/Map/findReplaceOr.mjs +65 -0
  42. package/dist/Map/findReplaceOrElse.d.mts +62 -0
  43. package/dist/Map/findReplaceOrElse.mjs +69 -0
  44. package/dist/Map/findReplaceOrThrow.d.mts +56 -0
  45. package/dist/Map/findReplaceOrThrow.mjs +63 -0
  46. package/dist/Map/forEach.d.mts +21 -12
  47. package/dist/Map/forEach.mjs +17 -5
  48. package/dist/Map/get.d.mts +15 -7
  49. package/dist/Map/get.mjs +15 -7
  50. package/dist/Map/getOr.d.mts +20 -14
  51. package/dist/Map/getOr.mjs +18 -9
  52. package/dist/Map/getOrElse.d.mts +20 -14
  53. package/dist/Map/getOrElse.mjs +18 -9
  54. package/dist/Map/getOrThrow.d.mts +19 -14
  55. package/dist/Map/getOrThrow.mjs +17 -9
  56. package/dist/Map/has.d.mts +15 -7
  57. package/dist/Map/has.mjs +15 -7
  58. package/dist/Map/hasAll.d.mts +15 -7
  59. package/dist/Map/hasAll.mjs +15 -7
  60. package/dist/Map/hasAny.d.mts +15 -7
  61. package/dist/Map/hasAny.mjs +15 -7
  62. package/dist/Map/hasNone.d.mts +15 -7
  63. package/dist/Map/hasNone.mjs +15 -7
  64. package/dist/Map/index.d.mts +21 -1
  65. package/dist/Map/index.mjs +41 -1
  66. package/dist/Map/is.d.mts +12 -5
  67. package/dist/Map/is.mjs +12 -5
  68. package/dist/Map/isEmpty.d.mts +12 -7
  69. package/dist/Map/isEmpty.mjs +12 -7
  70. package/dist/Map/isShallowEqual.d.mts +19 -11
  71. package/dist/Map/isShallowEqual.mjs +19 -11
  72. package/dist/Map/map.d.mts +25 -14
  73. package/dist/Map/map.mjs +21 -7
  74. package/dist/Map/mapEach.d.mts +21 -12
  75. package/dist/Map/mapEach.mjs +17 -5
  76. package/dist/Map/mapOr.d.mts +25 -14
  77. package/dist/Map/mapOr.mjs +21 -7
  78. package/dist/Map/mapOrElse.d.mts +25 -14
  79. package/dist/Map/mapOrElse.mjs +21 -7
  80. package/dist/Map/mapOrThrow.d.mts +24 -14
  81. package/dist/Map/mapOrThrow.mjs +20 -7
  82. package/dist/Map/none.d.mts +58 -0
  83. package/dist/Map/none.mjs +55 -0
  84. package/dist/Map/reject.d.mts +25 -16
  85. package/dist/Map/reject.mjs +17 -5
  86. package/dist/Map/remove.d.mts +15 -7
  87. package/dist/Map/remove.mjs +15 -7
  88. package/dist/Map/removeAll.d.mts +15 -7
  89. package/dist/Map/removeAll.mjs +15 -7
  90. package/dist/Map/removeOr.d.mts +16 -7
  91. package/dist/Map/removeOr.mjs +16 -7
  92. package/dist/Map/removeOrElse.d.mts +18 -12
  93. package/dist/Map/removeOrElse.mjs +16 -7
  94. package/dist/Map/removeOrThrow.d.mts +15 -7
  95. package/dist/Map/removeOrThrow.mjs +15 -7
  96. package/dist/Map/set.d.mts +16 -7
  97. package/dist/Map/set.mjs +16 -7
  98. package/dist/Map/some.d.mts +52 -0
  99. package/dist/Map/some.mjs +55 -0
  100. package/package.json +2 -2
  101. 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 };