@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
@@ -1,15 +1,19 @@
1
1
  //#region src/Map/clone.d.ts
2
2
  /**
3
+ * # clone
4
+ *
3
5
  * ```ts
4
- * function Map.clone(target)
6
+ * function Map.clone<K, V>(target: ReadonlyMap<K, V>): Map<K, V>
5
7
  * ```
6
8
  *
9
+ * Creates a shallow copy of the map, unless marked as mutable with `markAsMutable` inside a mutation context (see [@monstermann/remmi](https://michaelostermann.github.io/remmi/#clonearray-array)).
10
+ *
7
11
  * ## Example
8
12
  *
9
- * ```ts
13
+ * ```ts [data-first]
10
14
  * import { Map } from "@monstermann/map";
11
15
  *
12
- * const original = Map.create([
16
+ * const original = new Map([
13
17
  * ["a", 1],
14
18
  * ["b", 2],
15
19
  * ]);
@@ -17,16 +21,17 @@
17
21
  * const copy = Map.clone(original); // Map { 'a' => 1, 'b' => 2 }
18
22
  * ```
19
23
  *
20
- * ```ts
24
+ * ```ts [data-last]
21
25
  * import { Map } from "@monstermann/map";
22
26
  *
23
- * const original = Map.create([
27
+ * const original = new Map([
24
28
  * ["a", 1],
25
29
  * ["b", 2],
26
30
  * ]);
27
31
  *
28
32
  * const copy = pipe(original, Map.clone()); // Map { 'a' => 1, 'b' => 2 }
29
33
  * ```
34
+ *
30
35
  */
31
36
  declare const clone: {
32
37
  (): <K, V>(target: ReadonlyMap<K, V>) => Map<K, V>;
@@ -3,16 +3,20 @@ import { cloneMap } from "@monstermann/remmi";
3
3
 
4
4
  //#region src/Map/clone.ts
5
5
  /**
6
+ * # clone
7
+ *
6
8
  * ```ts
7
- * function Map.clone(target)
9
+ * function Map.clone<K, V>(target: ReadonlyMap<K, V>): Map<K, V>
8
10
  * ```
9
11
  *
12
+ * Creates a shallow copy of the map, unless marked as mutable with `markAsMutable` inside a mutation context (see [@monstermann/remmi](https://michaelostermann.github.io/remmi/#clonearray-array)).
13
+ *
10
14
  * ## Example
11
15
  *
12
- * ```ts
16
+ * ```ts [data-first]
13
17
  * import { Map } from "@monstermann/map";
14
18
  *
15
- * const original = Map.create([
19
+ * const original = new Map([
16
20
  * ["a", 1],
17
21
  * ["b", 2],
18
22
  * ]);
@@ -20,16 +24,17 @@ import { cloneMap } from "@monstermann/remmi";
20
24
  * const copy = Map.clone(original); // Map { 'a' => 1, 'b' => 2 }
21
25
  * ```
22
26
  *
23
- * ```ts
27
+ * ```ts [data-last]
24
28
  * import { Map } from "@monstermann/map";
25
29
  *
26
- * const original = Map.create([
30
+ * const original = new Map([
27
31
  * ["a", 1],
28
32
  * ["b", 2],
29
33
  * ]);
30
34
  *
31
35
  * const copy = pipe(original, Map.clone()); // Map { 'a' => 1, 'b' => 2 }
32
36
  * ```
37
+ *
33
38
  */
34
39
  const clone = dfdlT(cloneMap, 1);
35
40
 
@@ -1,19 +1,22 @@
1
- import { NonNil } from "./internals/types.mjs";
2
-
3
1
  //#region src/Map/compact.d.ts
4
-
5
2
  /**
3
+ * # compact
4
+ *
6
5
  * ```ts
7
- * function Map.compact(map)
6
+ * function Map.compact<K, V>(
7
+ * target: ReadonlyMap<K, V>,
8
+ * ): ReadonlyMap<K, Exclude<V, null | undefined>>
8
9
  * ```
9
10
  *
11
+ * Removes all entries with `null` or `undefined` values.
12
+ *
10
13
  * ## Example
11
14
  *
12
- * ```ts
15
+ * ```ts [data-first]
13
16
  * import { Map } from "@monstermann/map";
14
17
  *
15
18
  * Map.compact(
16
- * Map.create([
19
+ * new Map([
17
20
  * ["a", 1],
18
21
  * ["b", null],
19
22
  * ["c", undefined],
@@ -21,11 +24,11 @@ import { NonNil } from "./internals/types.mjs";
21
24
  * ); // Map(1) { "a" => 1 }
22
25
  * ```
23
26
  *
24
- * ```ts
27
+ * ```ts [data-last]
25
28
  * import { Map } from "@monstermann/map";
26
29
  *
27
30
  * pipe(
28
- * Map.create([
31
+ * new Map([
29
32
  * ["a", 1],
30
33
  * ["b", null],
31
34
  * ["c", undefined],
@@ -33,12 +36,13 @@ import { NonNil } from "./internals/types.mjs";
33
36
  * Map.compact(),
34
37
  * ); // Map(1) { "a" => 1 }
35
38
  * ```
39
+ *
36
40
  */
37
41
  declare const compact: {
38
- (): <K, V>(target: Map<K, V>) => Map<K, NonNil<V>>;
39
- (): <K, V>(target: ReadonlyMap<K, V>) => ReadonlyMap<K, NonNil<V>>;
40
- <K, V>(target: Map<K, V>): Map<K, NonNil<V>>;
41
- <K, V>(target: ReadonlyMap<K, V>): ReadonlyMap<K, NonNil<V>>;
42
+ (): <K, V>(target: Map<K, V>) => Map<K, Exclude<V, null | undefined>>;
43
+ (): <K, V>(target: ReadonlyMap<K, V>) => ReadonlyMap<K, Exclude<V, null | undefined>>;
44
+ <K, V>(target: Map<K, V>): Map<K, Exclude<V, null | undefined>>;
45
+ <K, V>(target: ReadonlyMap<K, V>): ReadonlyMap<K, Exclude<V, null | undefined>>;
42
46
  };
43
47
  //#endregion
44
48
  export { compact };
@@ -3,17 +3,23 @@ import { dfdlT } from "@monstermann/dfdl";
3
3
 
4
4
  //#region src/Map/compact.ts
5
5
  /**
6
+ * # compact
7
+ *
6
8
  * ```ts
7
- * function Map.compact(map)
9
+ * function Map.compact<K, V>(
10
+ * target: ReadonlyMap<K, V>,
11
+ * ): ReadonlyMap<K, Exclude<V, null | undefined>>
8
12
  * ```
9
13
  *
14
+ * Removes all entries with `null` or `undefined` values.
15
+ *
10
16
  * ## Example
11
17
  *
12
- * ```ts
18
+ * ```ts [data-first]
13
19
  * import { Map } from "@monstermann/map";
14
20
  *
15
21
  * Map.compact(
16
- * Map.create([
22
+ * new Map([
17
23
  * ["a", 1],
18
24
  * ["b", null],
19
25
  * ["c", undefined],
@@ -21,11 +27,11 @@ import { dfdlT } from "@monstermann/dfdl";
21
27
  * ); // Map(1) { "a" => 1 }
22
28
  * ```
23
29
  *
24
- * ```ts
30
+ * ```ts [data-last]
25
31
  * import { Map } from "@monstermann/map";
26
32
  *
27
33
  * pipe(
28
- * Map.create([
34
+ * new Map([
29
35
  * ["a", 1],
30
36
  * ["b", null],
31
37
  * ["c", undefined],
@@ -33,6 +39,7 @@ import { dfdlT } from "@monstermann/dfdl";
33
39
  * Map.compact(),
34
40
  * ); // Map(1) { "a" => 1 }
35
41
  * ```
42
+ *
36
43
  */
37
44
  const compact = dfdlT((target) => {
38
45
  return filter(target, (v) => v != null);
@@ -1,9 +1,15 @@
1
1
  //#region src/Map/create.d.ts
2
2
  /**
3
+ * # create
4
+ *
3
5
  * ```ts
4
- * function Map.create(iterable?)
6
+ * function Map.create<K, V>(
7
+ * iterable?: Iterable<readonly [K, V]> | null | undefined,
8
+ * ): Map<K, V>
5
9
  * ```
6
10
  *
11
+ * Creates a new Map from an iterable of key-value pairs.
12
+ *
7
13
  * ## Example
8
14
  *
9
15
  * ```ts
@@ -13,8 +19,9 @@
13
19
  * ["a", 1],
14
20
  * ["b", 2],
15
21
  * ["c", 3],
16
- * ]) // Map(2) { "a" => 1, "b" => 2, "c" => 3 }
22
+ * ]); // Map(2) { "a" => 1, "b" => 2, "c" => 3 }
17
23
  * ```
24
+ *
18
25
  */
19
26
  declare function create<K, V>(iterable?: Iterable<readonly [K, V]> | null | undefined): Map<K, V>;
20
27
  //#endregion
@@ -1,9 +1,15 @@
1
1
  //#region src/Map/create.ts
2
2
  /**
3
+ * # create
4
+ *
3
5
  * ```ts
4
- * function Map.create(iterable?)
6
+ * function Map.create<K, V>(
7
+ * iterable?: Iterable<readonly [K, V]> | null | undefined,
8
+ * ): Map<K, V>
5
9
  * ```
6
10
  *
11
+ * Creates a new Map from an iterable of key-value pairs.
12
+ *
7
13
  * ## Example
8
14
  *
9
15
  * ```ts
@@ -13,8 +19,9 @@
13
19
  * ["a", 1],
14
20
  * ["b", 2],
15
21
  * ["c", 3],
16
- * ]) // Map(2) { "a" => 1, "b" => 2, "c" => 3 }
22
+ * ]); // Map(2) { "a" => 1, "b" => 2, "c" => 3 }
17
23
  * ```
24
+ *
18
25
  */
19
26
  function create(iterable) {
20
27
  return new globalThis.Map(iterable);
@@ -0,0 +1,58 @@
1
+ //#region src/Map/every.d.ts
2
+ /**
3
+ * # every
4
+ *
5
+ * ```ts
6
+ * function Map.every<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
+ * ): boolean
14
+ * ```
15
+ *
16
+ * Tests whether all entries in the map pass the test implemented by the `predicate` function. It returns `true` if all entries pass, otherwise `false`.
17
+ *
18
+ * ## Example
19
+ *
20
+ * ```ts [data-first]
21
+ * import { Map } from "@monstermann/map";
22
+ *
23
+ * Map.every(
24
+ * new Map([
25
+ * ["a", 2],
26
+ * ["b", 4],
27
+ * ["c", 6],
28
+ * ]),
29
+ * (value) => value % 2 === 0,
30
+ * ); // true
31
+ * ```
32
+ *
33
+ * ```ts [data-last]
34
+ * import { Map } from "@monstermann/map";
35
+ *
36
+ * pipe(
37
+ * new Map([
38
+ * ["a", 2],
39
+ * ["b", 4],
40
+ * ["c", 6],
41
+ * ]),
42
+ * Map.every((value) => value % 2 === 0),
43
+ * ); // true
44
+ * ```
45
+ *
46
+ */
47
+ declare const every: {
48
+ <K, V, U extends V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U): (target: Map<K, V>) => target is Map<K, U>;
49
+ <K, V, U extends V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U): (target: ReadonlyMap<K, V>) => target is ReadonlyMap<K, U>;
50
+ <K, V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): (target: Map<K, V>) => boolean;
51
+ <K, V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): (target: ReadonlyMap<K, V>) => boolean;
52
+ <K, V, U extends V>(target: Map<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U): target is Map<K, U>;
53
+ <K, V, U extends V>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U): target is ReadonlyMap<K, U>;
54
+ <K, V>(target: Map<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): boolean;
55
+ <K, V>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): boolean;
56
+ };
57
+ //#endregion
58
+ export { every };
@@ -0,0 +1,55 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+
3
+ //#region src/Map/every.ts
4
+ /**
5
+ * # every
6
+ *
7
+ * ```ts
8
+ * function Map.every<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
+ * ): boolean
16
+ * ```
17
+ *
18
+ * Tests whether all entries in the map pass the test implemented by the `predicate` function. It returns `true` if all entries pass, otherwise `false`.
19
+ *
20
+ * ## Example
21
+ *
22
+ * ```ts [data-first]
23
+ * import { Map } from "@monstermann/map";
24
+ *
25
+ * Map.every(
26
+ * new Map([
27
+ * ["a", 2],
28
+ * ["b", 4],
29
+ * ["c", 6],
30
+ * ]),
31
+ * (value) => value % 2 === 0,
32
+ * ); // true
33
+ * ```
34
+ *
35
+ * ```ts [data-last]
36
+ * import { Map } from "@monstermann/map";
37
+ *
38
+ * pipe(
39
+ * new Map([
40
+ * ["a", 2],
41
+ * ["b", 4],
42
+ * ["c", 6],
43
+ * ]),
44
+ * Map.every((value) => value % 2 === 0),
45
+ * ); // true
46
+ * ```
47
+ *
48
+ */
49
+ const every = dfdlT(((target, predicate) => {
50
+ for (const [key, value] of target) if (!predicate(value, key, target)) return false;
51
+ return true;
52
+ }), 2);
53
+
54
+ //#endregion
55
+ export { every };
@@ -1,19 +1,27 @@
1
- import { MapGuard, MapPredicate } from "./internals/types.mjs";
2
-
3
1
  //#region src/Map/filter.d.ts
4
-
5
2
  /**
3
+ * # filter
4
+ *
6
5
  * ```ts
7
- * function Map.filter(map, predicate)
6
+ * function Map.filter<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>
8
14
  * ```
9
15
  *
16
+ * Returns a new map containing only entries that satisfy the predicate function.
17
+ *
10
18
  * ## Example
11
19
  *
12
- * ```ts
20
+ * ```ts [data-first]
13
21
  * import { Map } from "@monstermann/map";
14
22
  *
15
23
  * Map.filter(
16
- * Map.create([
24
+ * new Map([
17
25
  * ["a", 1],
18
26
  * ["b", 2],
19
27
  * ["c", 3],
@@ -22,11 +30,11 @@ import { MapGuard, MapPredicate } from "./internals/types.mjs";
22
30
  * ); // Map(2) { "b" => 2, "c" => 3 }
23
31
  * ```
24
32
  *
25
- * ```ts
33
+ * ```ts [data-last]
26
34
  * import { Map } from "@monstermann/map";
27
35
  *
28
36
  * pipe(
29
- * Map.create([
37
+ * new Map([
30
38
  * ["a", 1],
31
39
  * ["b", 2],
32
40
  * ["c", 3],
@@ -34,16 +42,17 @@ import { MapGuard, MapPredicate } from "./internals/types.mjs";
34
42
  * Map.filter((value) => value > 1),
35
43
  * ); // Map(2) { "b" => 2, "c" => 3 }
36
44
  * ```
45
+ *
37
46
  */
38
47
  declare const filter: {
39
- <K, V, U extends V>(predicate: MapGuard<K, V, U>): (target: Map<K, V>) => Map<K, U>;
40
- <K, V, U extends V>(predicate: MapGuard<K, V, U>): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, U>;
41
- <K, V>(predicate: MapPredicate<K, V>): (target: Map<K, V>) => Map<K, V>;
42
- <K, V>(predicate: MapPredicate<K, V>): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
43
- <K, V, U extends V>(target: Map<K, V>, predicate: MapGuard<K, V, U>): Map<K, U>;
44
- <K, V, U extends V>(target: ReadonlyMap<K, V>, predicate: MapGuard<K, V, U>): ReadonlyMap<K, U>;
45
- <K, V>(target: Map<K, V>, predicate: MapPredicate<K, V>): Map<K, V>;
46
- <K, V>(target: ReadonlyMap<K, V>, predicate: MapPredicate<K, V>): ReadonlyMap<K, V>;
48
+ <K, V, U extends V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U): (target: Map<K, V>) => Map<K, U>;
49
+ <K, V, U extends V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, U>;
50
+ <K, V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): (target: Map<K, V>) => Map<K, V>;
51
+ <K, V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
52
+ <K, V, U extends V>(target: Map<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U): Map<K, U>;
53
+ <K, V, U extends V>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U): ReadonlyMap<K, U>;
54
+ <K, V>(target: Map<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): Map<K, V>;
55
+ <K, V>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): ReadonlyMap<K, V>;
47
56
  };
48
57
  //#endregion
49
58
  export { filter };
@@ -3,17 +3,28 @@ import { cloneMap } from "@monstermann/remmi";
3
3
 
4
4
  //#region src/Map/filter.ts
5
5
  /**
6
+ * # filter
7
+ *
6
8
  * ```ts
7
- * function Map.filter(map, predicate)
9
+ * function Map.filter<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>
8
17
  * ```
9
18
  *
19
+ * Returns a new map containing only entries that satisfy the predicate function.
20
+ *
10
21
  * ## Example
11
22
  *
12
- * ```ts
23
+ * ```ts [data-first]
13
24
  * import { Map } from "@monstermann/map";
14
25
  *
15
26
  * Map.filter(
16
- * Map.create([
27
+ * new Map([
17
28
  * ["a", 1],
18
29
  * ["b", 2],
19
30
  * ["c", 3],
@@ -22,11 +33,11 @@ import { cloneMap } from "@monstermann/remmi";
22
33
  * ); // Map(2) { "b" => 2, "c" => 3 }
23
34
  * ```
24
35
  *
25
- * ```ts
36
+ * ```ts [data-last]
26
37
  * import { Map } from "@monstermann/map";
27
38
  *
28
39
  * pipe(
29
- * Map.create([
40
+ * new Map([
30
41
  * ["a", 1],
31
42
  * ["b", 2],
32
43
  * ["c", 3],
@@ -34,6 +45,7 @@ import { cloneMap } from "@monstermann/remmi";
34
45
  * Map.filter((value) => value > 1),
35
46
  * ); // Map(2) { "b" => 2, "c" => 3 }
36
47
  * ```
48
+ *
37
49
  */
38
50
  const filter = dfdlT((target, predicate) => {
39
51
  let result;
@@ -0,0 +1,54 @@
1
+ //#region src/Map/find.d.ts
2
+ /**
3
+ * # find
4
+ *
5
+ * ```ts
6
+ * function Map.find<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 | undefined
14
+ * ```
15
+ *
16
+ * Returns the first value in the map that satisfies the provided `predicate` function, or `undefined` if no value is found.
17
+ *
18
+ * ## Example
19
+ *
20
+ * ```ts [data-first]
21
+ * import { Map } from "@monstermann/map";
22
+ *
23
+ * Map.find(
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.find((value) => value > 2),
43
+ * ); // 3
44
+ * ```
45
+ *
46
+ */
47
+ declare const find: {
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 | undefined;
49
+ <K, V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): (target: ReadonlyMap<K, V>) => V | undefined;
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 | undefined;
51
+ <K, V>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean): V | undefined;
52
+ };
53
+ //#endregion
54
+ export { find };
@@ -0,0 +1,54 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+
3
+ //#region src/Map/find.ts
4
+ /**
5
+ * # find
6
+ *
7
+ * ```ts
8
+ * function Map.find<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 | undefined
16
+ * ```
17
+ *
18
+ * Returns the first value in the map that satisfies the provided `predicate` function, or `undefined` if no value is found.
19
+ *
20
+ * ## Example
21
+ *
22
+ * ```ts [data-first]
23
+ * import { Map } from "@monstermann/map";
24
+ *
25
+ * Map.find(
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.find((value) => value > 2),
45
+ * ); // 3
46
+ * ```
47
+ *
48
+ */
49
+ const find = dfdlT((target, predicate) => {
50
+ for (const [key, value] of target) if (predicate(value, key, target)) return value;
51
+ }, 2);
52
+
53
+ //#endregion
54
+ export { find };
@@ -0,0 +1,67 @@
1
+ //#region src/Map/findMap.d.ts
2
+ /**
3
+ * # findMap
4
+ *
5
+ * ```ts
6
+ * function Map.findMap<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
+ * mapper: (
14
+ * value: NoInfer<V>,
15
+ * key: NoInfer<K>,
16
+ * target: ReadonlyMap<K, V>,
17
+ * ) => V,
18
+ * ): ReadonlyMap<K, V>
19
+ * ```
20
+ *
21
+ * Finds the first entry in the map that satisfies the provided `predicate` function and applies the `mapper` function to it, returning a new map with the mapped value.
22
+ *
23
+ * ## Example
24
+ *
25
+ * ```ts [data-first]
26
+ * import { Map } from "@monstermann/map";
27
+ *
28
+ * Map.findMap(
29
+ * new Map([
30
+ * ["a", 1],
31
+ * ["b", 2],
32
+ * ["c", 3],
33
+ * ]),
34
+ * (value) => value > 1,
35
+ * (value) => value * 10,
36
+ * ); // Map(3) { "a" => 1, "b" => 20, "c" => 3 }
37
+ * ```
38
+ *
39
+ * ```ts [data-last]
40
+ * import { Map } from "@monstermann/map";
41
+ *
42
+ * pipe(
43
+ * new Map([
44
+ * ["a", 1],
45
+ * ["b", 2],
46
+ * ["c", 3],
47
+ * ]),
48
+ * Map.findMap(
49
+ * (value) => value > 1,
50
+ * (value) => value * 10,
51
+ * ),
52
+ * ); // Map(3) { "a" => 1, "b" => 20, "c" => 3 }
53
+ * ```
54
+ *
55
+ */
56
+ declare const findMap: {
57
+ <K, V, U extends V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U, mapper: (value: U, key: NoInfer<K>, target: ReadonlyMap<K, V>) => V): (target: Map<K, V>) => Map<K, V>;
58
+ <K, V, U extends V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U, mapper: (value: U, key: NoInfer<K>, target: ReadonlyMap<K, V>) => V): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
59
+ <K, V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, mapper: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => V): (target: Map<K, V>) => Map<K, V>;
60
+ <K, V>(predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, mapper: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => V): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
61
+ <K, V, U extends V>(target: Map<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U, mapper: (value: U, key: NoInfer<K>, target: ReadonlyMap<K, V>) => V): Map<K, V>;
62
+ <K, V, U extends V>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => value is U, mapper: (value: U, key: NoInfer<K>, target: ReadonlyMap<K, V>) => V): ReadonlyMap<K, V>;
63
+ <K, V>(target: Map<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, mapper: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => V): Map<K, V>;
64
+ <K, V>(target: ReadonlyMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => boolean, mapper: (value: NoInfer<V>, key: NoInfer<K>, target: ReadonlyMap<K, V>) => V): ReadonlyMap<K, V>;
65
+ };
66
+ //#endregion
67
+ export { findMap };