@monstermann/map 0.0.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 (62) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/dist/Map/clone.d.ts +32 -0
  4. package/dist/Map/clone.js +33 -0
  5. package/dist/Map/compact.d.ts +40 -0
  6. package/dist/Map/compact.js +38 -0
  7. package/dist/Map/filter.d.ts +45 -0
  8. package/dist/Map/filter.js +44 -0
  9. package/dist/Map/forEach.d.ts +39 -0
  10. package/dist/Map/forEach.js +37 -0
  11. package/dist/Map/get.d.ts +50 -0
  12. package/dist/Map/get.js +52 -0
  13. package/dist/Map/getOr.d.ts +72 -0
  14. package/dist/Map/getOr.js +71 -0
  15. package/dist/Map/getOrElse.d.ts +72 -0
  16. package/dist/Map/getOrElse.js +71 -0
  17. package/dist/Map/getOrThrow.d.ts +69 -0
  18. package/dist/Map/getOrThrow.js +70 -0
  19. package/dist/Map/has.d.ts +50 -0
  20. package/dist/Map/has.js +52 -0
  21. package/dist/Map/hasAll.d.ts +54 -0
  22. package/dist/Map/hasAll.js +57 -0
  23. package/dist/Map/hasAny.d.ts +50 -0
  24. package/dist/Map/hasAny.js +53 -0
  25. package/dist/Map/hasNone.d.ts +50 -0
  26. package/dist/Map/hasNone.js +53 -0
  27. package/dist/Map/index.d.ts +35 -0
  28. package/dist/Map/index.js +61 -0
  29. package/dist/Map/internals/types.d.ts +14 -0
  30. package/dist/Map/isEmpty.d.ts +24 -0
  31. package/dist/Map/isEmpty.js +26 -0
  32. package/dist/Map/isMap.d.ts +26 -0
  33. package/dist/Map/isMap.js +28 -0
  34. package/dist/Map/isShallowEqual.d.ts +66 -0
  35. package/dist/Map/isShallowEqual.js +80 -0
  36. package/dist/Map/map.d.ts +55 -0
  37. package/dist/Map/map.js +59 -0
  38. package/dist/Map/mapEach.d.ts +39 -0
  39. package/dist/Map/mapEach.js +44 -0
  40. package/dist/Map/mapOr.d.ts +59 -0
  41. package/dist/Map/mapOr.js +63 -0
  42. package/dist/Map/mapOrElse.d.ts +67 -0
  43. package/dist/Map/mapOrElse.js +71 -0
  44. package/dist/Map/mapOrThrow.d.ts +57 -0
  45. package/dist/Map/mapOrThrow.js +61 -0
  46. package/dist/Map/reject.d.ts +45 -0
  47. package/dist/Map/reject.js +44 -0
  48. package/dist/Map/remove.d.ts +52 -0
  49. package/dist/Map/remove.js +56 -0
  50. package/dist/Map/removeAll.d.ts +56 -0
  51. package/dist/Map/removeAll.js +63 -0
  52. package/dist/Map/removeOr.d.ts +52 -0
  53. package/dist/Map/removeOr.js +58 -0
  54. package/dist/Map/removeOrElse.d.ts +55 -0
  55. package/dist/Map/removeOrElse.js +58 -0
  56. package/dist/Map/removeOrThrow.d.ts +50 -0
  57. package/dist/Map/removeOrThrow.js +56 -0
  58. package/dist/Map/set.d.ts +54 -0
  59. package/dist/Map/set.js +58 -0
  60. package/dist/index.d.ts +2 -0
  61. package/dist/index.js +3 -0
  62. package/package.json +39 -0
@@ -0,0 +1,67 @@
1
+ import { MapMap, OrElse } from "./internals/types.js";
2
+
3
+ //#region src/Map/mapOrElse.d.ts
4
+
5
+ /**
6
+ * `Map.mapOrElse(map, key, transform, orElse)`
7
+ *
8
+ * Transforms the value at `key` in `map` using `transform`, calling `orElse` with the map if the key doesn't exist.
9
+ *
10
+ * ## Example
11
+ *
12
+ * ```ts
13
+ * Map.mapOrElse(
14
+ * Map.create([
15
+ * ["a", 1],
16
+ * ["b", 2],
17
+ * ]),
18
+ * "a",
19
+ * (value) => value * 2,
20
+ * () => null,
21
+ * ); // Map(2) { "a" => 2, "b" => 2 }
22
+ *
23
+ * Map.mapOrElse(
24
+ * Map.create([
25
+ * ["a", 1],
26
+ * ["b", 2],
27
+ * ]),
28
+ * "c",
29
+ * (value) => value * 2,
30
+ * (map) => map.size,
31
+ * ); // 2
32
+ * ```
33
+ *
34
+ * ```ts
35
+ * pipe(
36
+ * Map.create([
37
+ * ["a", 1],
38
+ * ["b", 2],
39
+ * ]),
40
+ * Map.mapOrElse(
41
+ * "a",
42
+ * (value) => value * 2,
43
+ * () => null,
44
+ * ),
45
+ * ); // Map(2) { "a" => 2, "b" => 2 }
46
+ *
47
+ * pipe(
48
+ * Map.create([
49
+ * ["a", 1],
50
+ * ["b", 2],
51
+ * ]),
52
+ * Map.mapOrElse(
53
+ * "c",
54
+ * (value) => value * 2,
55
+ * (map) => map.size,
56
+ * ),
57
+ * ); // 2
58
+ * ```
59
+ */
60
+ declare const mapOrElse: {
61
+ <K, V, U>(key: NoInfer<K>, transform: MapMap<K, V>, orElse: OrElse<K, V, U>): (target: Map<K, V>) => Map<K, V> | U;
62
+ <K, V, U>(key: NoInfer<K>, transform: MapMap<K, V>, orElse: OrElse<K, V, U>): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, V> | U;
63
+ <K, V, U>(target: Map<K, V>, key: NoInfer<K>, transform: MapMap<K, V>, orElse: OrElse<K, V, U>): Map<K, V> | U;
64
+ <K, V, U>(target: ReadonlyMap<K, V>, key: NoInfer<K>, transform: MapMap<K, V>, orElse: OrElse<K, V, U>): ReadonlyMap<K, V> | U;
65
+ };
66
+ //#endregion
67
+ export { mapOrElse };
@@ -0,0 +1,71 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+ import { cloneMap } from "@monstermann/remmi";
3
+
4
+ //#region src/Map/mapOrElse.ts
5
+ /**
6
+ * `Map.mapOrElse(map, key, transform, orElse)`
7
+ *
8
+ * Transforms the value at `key` in `map` using `transform`, calling `orElse` with the map if the key doesn't exist.
9
+ *
10
+ * ## Example
11
+ *
12
+ * ```ts
13
+ * Map.mapOrElse(
14
+ * Map.create([
15
+ * ["a", 1],
16
+ * ["b", 2],
17
+ * ]),
18
+ * "a",
19
+ * (value) => value * 2,
20
+ * () => null,
21
+ * ); // Map(2) { "a" => 2, "b" => 2 }
22
+ *
23
+ * Map.mapOrElse(
24
+ * Map.create([
25
+ * ["a", 1],
26
+ * ["b", 2],
27
+ * ]),
28
+ * "c",
29
+ * (value) => value * 2,
30
+ * (map) => map.size,
31
+ * ); // 2
32
+ * ```
33
+ *
34
+ * ```ts
35
+ * pipe(
36
+ * Map.create([
37
+ * ["a", 1],
38
+ * ["b", 2],
39
+ * ]),
40
+ * Map.mapOrElse(
41
+ * "a",
42
+ * (value) => value * 2,
43
+ * () => null,
44
+ * ),
45
+ * ); // Map(2) { "a" => 2, "b" => 2 }
46
+ *
47
+ * pipe(
48
+ * Map.create([
49
+ * ["a", 1],
50
+ * ["b", 2],
51
+ * ]),
52
+ * Map.mapOrElse(
53
+ * "c",
54
+ * (value) => value * 2,
55
+ * (map) => map.size,
56
+ * ),
57
+ * ); // 2
58
+ * ```
59
+ */
60
+ const mapOrElse = dfdlT((target, key, transform, orElse) => {
61
+ if (!target.has(key)) return orElse(target);
62
+ const prev = target.get(key);
63
+ const next = transform(prev, key, target);
64
+ if (prev === next) return target;
65
+ const result = cloneMap(target);
66
+ result.set(key, next);
67
+ return result;
68
+ }, 4);
69
+
70
+ //#endregion
71
+ export { mapOrElse };
@@ -0,0 +1,57 @@
1
+ import { MapMap } from "./internals/types.js";
2
+
3
+ //#region src/Map/mapOrThrow.d.ts
4
+
5
+ /**
6
+ * `Map.mapOrThrow(map, key, transform)`
7
+ *
8
+ * Transforms the value at `key` in `map` using `transform`, throwing an error if the key doesn't exist.
9
+ *
10
+ * ## Example
11
+ *
12
+ * ```ts
13
+ * Map.mapOrThrow(
14
+ * Map.create([
15
+ * ["a", 1],
16
+ * ["b", 2],
17
+ * ]),
18
+ * "a",
19
+ * (value) => value * 2,
20
+ * ); // Map(2) { "a" => 2, "b" => 2 }
21
+ *
22
+ * Map.mapOrThrow(
23
+ * Map.create([
24
+ * ["a", 1],
25
+ * ["b", 2],
26
+ * ]),
27
+ * "c",
28
+ * (value) => value * 2,
29
+ * ); // throws FnError
30
+ * ```
31
+ *
32
+ * ```ts
33
+ * pipe(
34
+ * Map.create([
35
+ * ["a", 1],
36
+ * ["b", 2],
37
+ * ]),
38
+ * Map.mapOrThrow("a", (value) => value * 2),
39
+ * ); // Map(2) { "a" => 2, "b" => 2 }
40
+ *
41
+ * pipe(
42
+ * Map.create([
43
+ * ["a", 1],
44
+ * ["b", 2],
45
+ * ]),
46
+ * Map.mapOrThrow("c", (value) => value * 2),
47
+ * ); // throws FnError
48
+ * ```
49
+ */
50
+ declare const mapOrThrow: {
51
+ <K, V>(key: NoInfer<K>, transform: MapMap<K, V>): (target: Map<K, V>) => Map<K, V>;
52
+ <K, V>(key: NoInfer<K>, transform: MapMap<K, V>): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
53
+ <K, V>(target: Map<K, V>, key: NoInfer<K>, transform: MapMap<K, V>): Map<K, V>;
54
+ <K, V>(target: ReadonlyMap<K, V>, key: NoInfer<K>, transform: MapMap<K, V>): ReadonlyMap<K, V>;
55
+ };
56
+ //#endregion
57
+ export { mapOrThrow };
@@ -0,0 +1,61 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+ import { cloneMap } from "@monstermann/remmi";
3
+
4
+ //#region src/Map/mapOrThrow.ts
5
+ /**
6
+ * `Map.mapOrThrow(map, key, transform)`
7
+ *
8
+ * Transforms the value at `key` in `map` using `transform`, throwing an error if the key doesn't exist.
9
+ *
10
+ * ## Example
11
+ *
12
+ * ```ts
13
+ * Map.mapOrThrow(
14
+ * Map.create([
15
+ * ["a", 1],
16
+ * ["b", 2],
17
+ * ]),
18
+ * "a",
19
+ * (value) => value * 2,
20
+ * ); // Map(2) { "a" => 2, "b" => 2 }
21
+ *
22
+ * Map.mapOrThrow(
23
+ * Map.create([
24
+ * ["a", 1],
25
+ * ["b", 2],
26
+ * ]),
27
+ * "c",
28
+ * (value) => value * 2,
29
+ * ); // throws FnError
30
+ * ```
31
+ *
32
+ * ```ts
33
+ * pipe(
34
+ * Map.create([
35
+ * ["a", 1],
36
+ * ["b", 2],
37
+ * ]),
38
+ * Map.mapOrThrow("a", (value) => value * 2),
39
+ * ); // Map(2) { "a" => 2, "b" => 2 }
40
+ *
41
+ * pipe(
42
+ * Map.create([
43
+ * ["a", 1],
44
+ * ["b", 2],
45
+ * ]),
46
+ * Map.mapOrThrow("c", (value) => value * 2),
47
+ * ); // throws FnError
48
+ * ```
49
+ */
50
+ const mapOrThrow = dfdlT((target, key, transform) => {
51
+ if (!target.has(key)) throw new Error("Map.mapOrThrow: Key does not exist.");
52
+ const prev = target.get(key);
53
+ const next = transform(prev, key, target);
54
+ if (prev === next) return target;
55
+ const result = cloneMap(target);
56
+ result.set(key, next);
57
+ return result;
58
+ }, 3);
59
+
60
+ //#endregion
61
+ export { mapOrThrow };
@@ -0,0 +1,45 @@
1
+ import { MapGuard, MapPredicate } from "./internals/types.js";
2
+
3
+ //#region src/Map/reject.d.ts
4
+
5
+ /**
6
+ * `Map.reject(map, by)`
7
+ *
8
+ * Rejects entries from `map` where `by` returns true for the value.
9
+ *
10
+ * ## Example
11
+ *
12
+ * ```ts
13
+ * Map.reject(
14
+ * Map.create([
15
+ * ["a", 1],
16
+ * ["b", 2],
17
+ * ["c", 3],
18
+ * ]),
19
+ * (value) => value > 1,
20
+ * ); // Map(1) { "a" => 1 }
21
+ * ```
22
+ *
23
+ * ```ts
24
+ * pipe(
25
+ * Map.create([
26
+ * ["a", 1],
27
+ * ["b", 2],
28
+ * ["c", 3],
29
+ * ]),
30
+ * Map.reject((value) => value > 1),
31
+ * ); // Map(1) { "a" => 1 }
32
+ * ```
33
+ */
34
+ declare const reject: {
35
+ <K, V, U extends V>(by: MapGuard<K, V, U>): (target: Map<K, V>) => Map<K, Exclude<V, U>>;
36
+ <K, V, U extends V>(by: MapGuard<K, V, U>): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, Exclude<V, U>>;
37
+ <K, V>(by: MapPredicate<K, V>): (target: Map<K, V>) => Map<K, V>;
38
+ <K, V>(by: MapPredicate<K, V>): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
39
+ <K, V, U extends V>(target: Map<K, V>, by: MapGuard<K, V, U>): Map<K, Exclude<V, U>>;
40
+ <K, V, U extends V>(target: ReadonlyMap<K, V>, by: MapGuard<K, V, U>): ReadonlyMap<K, Exclude<V, U>>;
41
+ <K, V>(target: Map<K, V>, by: MapPredicate<K, V>): Map<K, V>;
42
+ <K, V>(target: ReadonlyMap<K, V>, by: MapPredicate<K, V>): ReadonlyMap<K, V>;
43
+ };
44
+ //#endregion
45
+ export { reject };
@@ -0,0 +1,44 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+ import { cloneMap } from "@monstermann/remmi";
3
+
4
+ //#region src/Map/reject.ts
5
+ /**
6
+ * `Map.reject(map, by)`
7
+ *
8
+ * Rejects entries from `map` where `by` returns true for the value.
9
+ *
10
+ * ## Example
11
+ *
12
+ * ```ts
13
+ * Map.reject(
14
+ * Map.create([
15
+ * ["a", 1],
16
+ * ["b", 2],
17
+ * ["c", 3],
18
+ * ]),
19
+ * (value) => value > 1,
20
+ * ); // Map(1) { "a" => 1 }
21
+ * ```
22
+ *
23
+ * ```ts
24
+ * pipe(
25
+ * Map.create([
26
+ * ["a", 1],
27
+ * ["b", 2],
28
+ * ["c", 3],
29
+ * ]),
30
+ * Map.reject((value) => value > 1),
31
+ * ); // Map(1) { "a" => 1 }
32
+ * ```
33
+ */
34
+ const reject = dfdlT((target, by) => {
35
+ let result;
36
+ for (const [key, value] of target) if (by(value, key, target)) {
37
+ result ??= cloneMap(target);
38
+ result.delete(key);
39
+ }
40
+ return result ?? target;
41
+ }, 2);
42
+
43
+ //#endregion
44
+ export { reject };
@@ -0,0 +1,52 @@
1
+ //#region src/Map/remove.d.ts
2
+ /**
3
+ * `Map.remove(map, key)`
4
+ *
5
+ * Removes the entry with the specified `key` from `map`, returning a new map.
6
+ *
7
+ * ## Example
8
+ *
9
+ * ```ts
10
+ * Map.remove(
11
+ * Map.create([
12
+ * ["a", 1],
13
+ * ["b", 2],
14
+ * ]),
15
+ * "a",
16
+ * ); // Map(1) { "b" => 2 }
17
+ *
18
+ * Map.remove(
19
+ * Map.create([
20
+ * ["a", 1],
21
+ * ["b", 2],
22
+ * ]),
23
+ * "c",
24
+ * ); // Map(2) { "a" => 1, "b" => 2 }
25
+ * ```
26
+ *
27
+ * ```ts
28
+ * pipe(
29
+ * Map.create([
30
+ * ["a", 1],
31
+ * ["b", 2],
32
+ * ]),
33
+ * Map.remove("a"),
34
+ * ); // Map(1) { "b" => 2 }
35
+ *
36
+ * pipe(
37
+ * Map.create([
38
+ * ["a", 1],
39
+ * ["b", 2],
40
+ * ]),
41
+ * Map.remove("c"),
42
+ * ); // Map(2) { "a" => 1, "b" => 2 }
43
+ * ```
44
+ */
45
+ declare const remove: {
46
+ <K, V>(key: NoInfer<K>): (target: Map<K, V>) => Map<K, V>;
47
+ <K, V>(key: NoInfer<K>): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
48
+ <K, V>(target: Map<K, V>, key: NoInfer<K>): Map<K, V>;
49
+ <K, V>(target: ReadonlyMap<K, V>, key: NoInfer<K>): ReadonlyMap<K, V>;
50
+ };
51
+ //#endregion
52
+ export { remove };
@@ -0,0 +1,56 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+ import { cloneMap } from "@monstermann/remmi";
3
+
4
+ //#region src/Map/remove.ts
5
+ /**
6
+ * `Map.remove(map, key)`
7
+ *
8
+ * Removes the entry with the specified `key` from `map`, returning a new map.
9
+ *
10
+ * ## Example
11
+ *
12
+ * ```ts
13
+ * Map.remove(
14
+ * Map.create([
15
+ * ["a", 1],
16
+ * ["b", 2],
17
+ * ]),
18
+ * "a",
19
+ * ); // Map(1) { "b" => 2 }
20
+ *
21
+ * Map.remove(
22
+ * Map.create([
23
+ * ["a", 1],
24
+ * ["b", 2],
25
+ * ]),
26
+ * "c",
27
+ * ); // Map(2) { "a" => 1, "b" => 2 }
28
+ * ```
29
+ *
30
+ * ```ts
31
+ * pipe(
32
+ * Map.create([
33
+ * ["a", 1],
34
+ * ["b", 2],
35
+ * ]),
36
+ * Map.remove("a"),
37
+ * ); // Map(1) { "b" => 2 }
38
+ *
39
+ * pipe(
40
+ * Map.create([
41
+ * ["a", 1],
42
+ * ["b", 2],
43
+ * ]),
44
+ * Map.remove("c"),
45
+ * ); // Map(2) { "a" => 1, "b" => 2 }
46
+ * ```
47
+ */
48
+ const remove = dfdlT((target, key) => {
49
+ if (!target.has(key)) return target;
50
+ target = cloneMap(target);
51
+ target.delete(key);
52
+ return target;
53
+ }, 2);
54
+
55
+ //#endregion
56
+ export { remove };
@@ -0,0 +1,56 @@
1
+ //#region src/Map/removeAll.d.ts
2
+ /**
3
+ * `Map.removeAll(map, keys)`
4
+ *
5
+ * Removes all entries with the specified `keys` from `map`, returning a new map. This function supports iterables.
6
+ *
7
+ * ## Example
8
+ *
9
+ * ```ts
10
+ * Map.removeAll(
11
+ * Map.create([
12
+ * ["a", 1],
13
+ * ["b", 2],
14
+ * ["c", 3],
15
+ * ]),
16
+ * ["a", "c"],
17
+ * ); // Map(1) { "b" => 2 }
18
+ *
19
+ * Map.removeAll(
20
+ * Map.create([
21
+ * ["a", 1],
22
+ * ["b", 2],
23
+ * ["c", 3],
24
+ * ]),
25
+ * ["d", "e"],
26
+ * ); // Map(3) { "a" => 1, "b" => 2, "c" => 3 }
27
+ * ```
28
+ *
29
+ * ```ts
30
+ * pipe(
31
+ * Map.create([
32
+ * ["a", 1],
33
+ * ["b", 2],
34
+ * ["c", 3],
35
+ * ]),
36
+ * Map.removeAll(["a", "c"]),
37
+ * ); // Map(1) { "b" => 2 }
38
+ *
39
+ * pipe(
40
+ * Map.create([
41
+ * ["a", 1],
42
+ * ["b", 2],
43
+ * ["c", 3],
44
+ * ]),
45
+ * Map.removeAll(["d", "e"]),
46
+ * ); // Map(3) { "a" => 1, "b" => 2, "c" => 3 }
47
+ * ```
48
+ */
49
+ declare const removeAll: {
50
+ <K, V>(keys: Iterable<NoInfer<K>>): (target: Map<K, V>) => Map<K, V>;
51
+ <K, V>(keys: Iterable<NoInfer<K>>): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
52
+ <K, V>(target: Map<K, V>, keys: Iterable<NoInfer<K>>): Map<K, V>;
53
+ <K, V>(target: ReadonlyMap<K, V>, keys: Iterable<NoInfer<K>>): ReadonlyMap<K, V>;
54
+ };
55
+ //#endregion
56
+ export { removeAll };
@@ -0,0 +1,63 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+ import { cloneMap } from "@monstermann/remmi";
3
+
4
+ //#region src/Map/removeAll.ts
5
+ /**
6
+ * `Map.removeAll(map, keys)`
7
+ *
8
+ * Removes all entries with the specified `keys` from `map`, returning a new map. This function supports iterables.
9
+ *
10
+ * ## Example
11
+ *
12
+ * ```ts
13
+ * Map.removeAll(
14
+ * Map.create([
15
+ * ["a", 1],
16
+ * ["b", 2],
17
+ * ["c", 3],
18
+ * ]),
19
+ * ["a", "c"],
20
+ * ); // Map(1) { "b" => 2 }
21
+ *
22
+ * Map.removeAll(
23
+ * Map.create([
24
+ * ["a", 1],
25
+ * ["b", 2],
26
+ * ["c", 3],
27
+ * ]),
28
+ * ["d", "e"],
29
+ * ); // Map(3) { "a" => 1, "b" => 2, "c" => 3 }
30
+ * ```
31
+ *
32
+ * ```ts
33
+ * pipe(
34
+ * Map.create([
35
+ * ["a", 1],
36
+ * ["b", 2],
37
+ * ["c", 3],
38
+ * ]),
39
+ * Map.removeAll(["a", "c"]),
40
+ * ); // Map(1) { "b" => 2 }
41
+ *
42
+ * pipe(
43
+ * Map.create([
44
+ * ["a", 1],
45
+ * ["b", 2],
46
+ * ["c", 3],
47
+ * ]),
48
+ * Map.removeAll(["d", "e"]),
49
+ * ); // Map(3) { "a" => 1, "b" => 2, "c" => 3 }
50
+ * ```
51
+ */
52
+ const removeAll = dfdlT((target, keys) => {
53
+ let result;
54
+ for (const key of keys) {
55
+ if (!target.has(key)) continue;
56
+ result ??= cloneMap(target);
57
+ result.delete(key);
58
+ }
59
+ return result ?? target;
60
+ }, 2);
61
+
62
+ //#endregion
63
+ export { removeAll };
@@ -0,0 +1,52 @@
1
+ //#region src/Map/removeOr.d.ts
2
+ /**
3
+ * `Map.removeOr(map, key, or)`
4
+ *
5
+ * Removes the entry with the specified `key` from `map`, returning `or` if the key doesn't exist.
6
+ *
7
+ * ## Example
8
+ *
9
+ * ```ts
10
+ * Map.removeOr(
11
+ * Map.create([
12
+ * ["a", 1],
13
+ * ["b", 2],
14
+ * ]),
15
+ * "a",
16
+ * null,
17
+ * ); // Map(1) { "b" => 2 }
18
+ *
19
+ * Map.removeOr(
20
+ * Map.create([
21
+ * ["a", 1],
22
+ * ["b", 2],
23
+ * ]),
24
+ * "c",
25
+ * null,
26
+ * ); // null
27
+ * ```
28
+ *
29
+ * ```ts
30
+ * pipe(
31
+ * Map.create([
32
+ * ["a", 1],
33
+ * ["b", 2],
34
+ * ]),
35
+ * Map.removeOr("a", null),
36
+ * ); // Map(1) { "b" => 2 }
37
+ *
38
+ * pipe(
39
+ * Map.create([
40
+ * ["a", 1],
41
+ * ["b", 2],
42
+ * ]),
43
+ * Map.removeOr("c", null),
44
+ * ); // null
45
+ * ```
46
+ */
47
+ declare const removeOr: {
48
+ <K, V, U>(key: NoInfer<K>, or: U): (target: ReadonlyMap<K, V>) => Map<K, V> | U;
49
+ <K, V, U>(target: ReadonlyMap<K, V>, key: NoInfer<K>, or: U): Map<K, V> | U;
50
+ };
51
+ //#endregion
52
+ export { removeOr };
@@ -0,0 +1,58 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+ import { cloneMap } from "@monstermann/remmi";
3
+
4
+ //#region src/Map/removeOr.ts
5
+ /**
6
+ * `Map.removeOr(map, key, or)`
7
+ *
8
+ * Removes the entry with the specified `key` from `map`, returning `or` if the key doesn't exist.
9
+ *
10
+ * ## Example
11
+ *
12
+ * ```ts
13
+ * Map.removeOr(
14
+ * Map.create([
15
+ * ["a", 1],
16
+ * ["b", 2],
17
+ * ]),
18
+ * "a",
19
+ * null,
20
+ * ); // Map(1) { "b" => 2 }
21
+ *
22
+ * Map.removeOr(
23
+ * Map.create([
24
+ * ["a", 1],
25
+ * ["b", 2],
26
+ * ]),
27
+ * "c",
28
+ * null,
29
+ * ); // null
30
+ * ```
31
+ *
32
+ * ```ts
33
+ * pipe(
34
+ * Map.create([
35
+ * ["a", 1],
36
+ * ["b", 2],
37
+ * ]),
38
+ * Map.removeOr("a", null),
39
+ * ); // Map(1) { "b" => 2 }
40
+ *
41
+ * pipe(
42
+ * Map.create([
43
+ * ["a", 1],
44
+ * ["b", 2],
45
+ * ]),
46
+ * Map.removeOr("c", null),
47
+ * ); // null
48
+ * ```
49
+ */
50
+ const removeOr = dfdlT((target, key, or) => {
51
+ if (!target.has(key)) return or;
52
+ const result = cloneMap(target);
53
+ result.delete(key);
54
+ return result;
55
+ }, 3);
56
+
57
+ //#endregion
58
+ export { removeOr };