@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,55 @@
1
+ import { OrElse } from "./internals/types.js";
2
+
3
+ //#region src/Map/removeOrElse.d.ts
4
+
5
+ /**
6
+ * `Map.removeOrElse(map, key, orElse)`
7
+ *
8
+ * Removes the entry with the specified `key` from `map`, calling `orElse` with the map if the key doesn't exist.
9
+ *
10
+ * ## Example
11
+ *
12
+ * ```ts
13
+ * Map.removeOrElse(
14
+ * Map.create([
15
+ * ["a", 1],
16
+ * ["b", 2],
17
+ * ]),
18
+ * "a",
19
+ * () => null,
20
+ * ); // Map(1) { "b" => 2 }
21
+ *
22
+ * Map.removeOrElse(
23
+ * Map.create([
24
+ * ["a", 1],
25
+ * ["b", 2],
26
+ * ]),
27
+ * "c",
28
+ * (map) => map.size,
29
+ * ); // 2
30
+ * ```
31
+ *
32
+ * ```ts
33
+ * pipe(
34
+ * Map.create([
35
+ * ["a", 1],
36
+ * ["b", 2],
37
+ * ]),
38
+ * Map.removeOrElse("a", () => null),
39
+ * ); // Map(1) { "b" => 2 }
40
+ *
41
+ * pipe(
42
+ * Map.create([
43
+ * ["a", 1],
44
+ * ["b", 2],
45
+ * ]),
46
+ * Map.removeOrElse("c", (map) => map.size),
47
+ * ); // 2
48
+ * ```
49
+ */
50
+ declare const removeOrElse: {
51
+ <K, V, U>(key: NoInfer<K>, orElse: OrElse<K, V, U>): (target: ReadonlyMap<K, V>) => Map<K, V> | U;
52
+ <K, V, U>(target: ReadonlyMap<K, V>, key: NoInfer<K>, orElse: OrElse<K, V, U>): Map<K, V> | U;
53
+ };
54
+ //#endregion
55
+ export { removeOrElse };
@@ -0,0 +1,58 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+ import { cloneMap } from "@monstermann/remmi";
3
+
4
+ //#region src/Map/removeOrElse.ts
5
+ /**
6
+ * `Map.removeOrElse(map, key, orElse)`
7
+ *
8
+ * Removes the entry with the specified `key` from `map`, calling `orElse` with the map if the key doesn't exist.
9
+ *
10
+ * ## Example
11
+ *
12
+ * ```ts
13
+ * Map.removeOrElse(
14
+ * Map.create([
15
+ * ["a", 1],
16
+ * ["b", 2],
17
+ * ]),
18
+ * "a",
19
+ * () => null,
20
+ * ); // Map(1) { "b" => 2 }
21
+ *
22
+ * Map.removeOrElse(
23
+ * Map.create([
24
+ * ["a", 1],
25
+ * ["b", 2],
26
+ * ]),
27
+ * "c",
28
+ * (map) => map.size,
29
+ * ); // 2
30
+ * ```
31
+ *
32
+ * ```ts
33
+ * pipe(
34
+ * Map.create([
35
+ * ["a", 1],
36
+ * ["b", 2],
37
+ * ]),
38
+ * Map.removeOrElse("a", () => null),
39
+ * ); // Map(1) { "b" => 2 }
40
+ *
41
+ * pipe(
42
+ * Map.create([
43
+ * ["a", 1],
44
+ * ["b", 2],
45
+ * ]),
46
+ * Map.removeOrElse("c", (map) => map.size),
47
+ * ); // 2
48
+ * ```
49
+ */
50
+ const removeOrElse = dfdlT((target, key, orElse) => {
51
+ if (!target.has(key)) return orElse(target);
52
+ const result = cloneMap(target);
53
+ result.delete(key);
54
+ return result;
55
+ }, 3);
56
+
57
+ //#endregion
58
+ export { removeOrElse };
@@ -0,0 +1,50 @@
1
+ //#region src/Map/removeOrThrow.d.ts
2
+ /**
3
+ * `Map.removeOrThrow(map, key)`
4
+ *
5
+ * Removes the entry with the specified `key` from `map`, throwing an error if the key doesn't exist.
6
+ *
7
+ * ## Example
8
+ *
9
+ * ```ts
10
+ * Map.removeOrThrow(
11
+ * Map.create([
12
+ * ["a", 1],
13
+ * ["b", 2],
14
+ * ]),
15
+ * "a",
16
+ * ); // Map(1) { "b" => 2 }
17
+ *
18
+ * Map.removeOrThrow(
19
+ * Map.create([
20
+ * ["a", 1],
21
+ * ["b", 2],
22
+ * ]),
23
+ * "c",
24
+ * ); // throws FnError
25
+ * ```
26
+ *
27
+ * ```ts
28
+ * pipe(
29
+ * Map.create([
30
+ * ["a", 1],
31
+ * ["b", 2],
32
+ * ]),
33
+ * Map.removeOrThrow("a"),
34
+ * ); // Map(1) { "b" => 2 }
35
+ *
36
+ * pipe(
37
+ * Map.create([
38
+ * ["a", 1],
39
+ * ["b", 2],
40
+ * ]),
41
+ * Map.removeOrThrow("c"),
42
+ * ); // throws FnError
43
+ * ```
44
+ */
45
+ declare const removeOrThrow: {
46
+ <K, V>(key: NoInfer<K>): (target: ReadonlyMap<K, V>) => Map<K, V>;
47
+ <K, V>(target: ReadonlyMap<K, V>, key: NoInfer<K>): Map<K, V>;
48
+ };
49
+ //#endregion
50
+ export { removeOrThrow };
@@ -0,0 +1,56 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+ import { cloneMap } from "@monstermann/remmi";
3
+
4
+ //#region src/Map/removeOrThrow.ts
5
+ /**
6
+ * `Map.removeOrThrow(map, key)`
7
+ *
8
+ * Removes the entry with the specified `key` from `map`, throwing an error if the key doesn't exist.
9
+ *
10
+ * ## Example
11
+ *
12
+ * ```ts
13
+ * Map.removeOrThrow(
14
+ * Map.create([
15
+ * ["a", 1],
16
+ * ["b", 2],
17
+ * ]),
18
+ * "a",
19
+ * ); // Map(1) { "b" => 2 }
20
+ *
21
+ * Map.removeOrThrow(
22
+ * Map.create([
23
+ * ["a", 1],
24
+ * ["b", 2],
25
+ * ]),
26
+ * "c",
27
+ * ); // throws FnError
28
+ * ```
29
+ *
30
+ * ```ts
31
+ * pipe(
32
+ * Map.create([
33
+ * ["a", 1],
34
+ * ["b", 2],
35
+ * ]),
36
+ * Map.removeOrThrow("a"),
37
+ * ); // Map(1) { "b" => 2 }
38
+ *
39
+ * pipe(
40
+ * Map.create([
41
+ * ["a", 1],
42
+ * ["b", 2],
43
+ * ]),
44
+ * Map.removeOrThrow("c"),
45
+ * ); // throws FnError
46
+ * ```
47
+ */
48
+ const removeOrThrow = dfdlT((target, key) => {
49
+ if (!target.has(key)) throw new Error("Map.removeOrThrow: Key does not exist.");
50
+ const result = cloneMap(target);
51
+ result.delete(key);
52
+ return result;
53
+ }, 2);
54
+
55
+ //#endregion
56
+ export { removeOrThrow };
@@ -0,0 +1,54 @@
1
+ //#region src/Map/set.d.ts
2
+ /**
3
+ * `Map.set(map, key, value)`
4
+ *
5
+ * Sets the `value` for the specified `key` in `map`, returning a new map if the value changes.
6
+ *
7
+ * ## Example
8
+ *
9
+ * ```ts
10
+ * Map.set(
11
+ * Map.create([
12
+ * ["a", 1],
13
+ * ["b", 2],
14
+ * ]),
15
+ * "a",
16
+ * 10,
17
+ * ); // Map(2) { "a" => 10, "b" => 2 }
18
+ *
19
+ * Map.set(
20
+ * Map.create([
21
+ * ["a", 1],
22
+ * ["b", 2],
23
+ * ]),
24
+ * "c",
25
+ * 3,
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
+ * ]),
35
+ * Map.set("a", 10),
36
+ * ); // Map(2) { "a" => 10, "b" => 2 }
37
+ *
38
+ * pipe(
39
+ * Map.create([
40
+ * ["a", 1],
41
+ * ["b", 2],
42
+ * ]),
43
+ * Map.set("c", 3),
44
+ * ); // Map(3) { "a" => 1, "b" => 2, "c" => 3 }
45
+ * ```
46
+ */
47
+ declare const set: {
48
+ <K, V>(key: NoInfer<K>, value: NoInfer<V>): (target: Map<K, V>) => Map<K, V>;
49
+ <K, V>(key: NoInfer<K>, value: NoInfer<V>): (target: ReadonlyMap<K, V>) => ReadonlyMap<K, V>;
50
+ <K, V>(target: Map<K, V>, key: NoInfer<K>, value: NoInfer<V>): Map<K, V>;
51
+ <K, V>(target: ReadonlyMap<K, V>, key: NoInfer<K>, value: NoInfer<V>): ReadonlyMap<K, V>;
52
+ };
53
+ //#endregion
54
+ export { set };
@@ -0,0 +1,58 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+ import { cloneMap } from "@monstermann/remmi";
3
+
4
+ //#region src/Map/set.ts
5
+ /**
6
+ * `Map.set(map, key, value)`
7
+ *
8
+ * Sets the `value` for the specified `key` in `map`, returning a new map if the value changes.
9
+ *
10
+ * ## Example
11
+ *
12
+ * ```ts
13
+ * Map.set(
14
+ * Map.create([
15
+ * ["a", 1],
16
+ * ["b", 2],
17
+ * ]),
18
+ * "a",
19
+ * 10,
20
+ * ); // Map(2) { "a" => 10, "b" => 2 }
21
+ *
22
+ * Map.set(
23
+ * Map.create([
24
+ * ["a", 1],
25
+ * ["b", 2],
26
+ * ]),
27
+ * "c",
28
+ * 3,
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
+ * ]),
38
+ * Map.set("a", 10),
39
+ * ); // Map(2) { "a" => 10, "b" => 2 }
40
+ *
41
+ * pipe(
42
+ * Map.create([
43
+ * ["a", 1],
44
+ * ["b", 2],
45
+ * ]),
46
+ * Map.set("c", 3),
47
+ * ); // Map(3) { "a" => 1, "b" => 2, "c" => 3 }
48
+ * ```
49
+ */
50
+ const set = dfdlT((target, key, value) => {
51
+ if (target.get(key) === value) return target;
52
+ target = cloneMap(target);
53
+ target.set(key, value);
54
+ return target;
55
+ }, 3);
56
+
57
+ //#endregion
58
+ export { set };
@@ -0,0 +1,2 @@
1
+ import { Map } from "./Map/index.js";
2
+ export { Map };
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ import { Map } from "./Map/index.js";
2
+
3
+ export { Map };
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@monstermann/map",
3
+ "type": "module",
4
+ "version": "0.0.0",
5
+ "description": "Functional utilities for maps.",
6
+ "author": "Michael Ostermann <michaelostermann@me.com>",
7
+ "license": "MIT",
8
+ "homepage": "https://MichaelOstermann.github.io/map",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/MichaelOstermann/map.git"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/MichaelOstermann/map/issues"
15
+ },
16
+ "keywords": [],
17
+ "sideEffects": false,
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js"
22
+ },
23
+ "./*": "./dist/*"
24
+ },
25
+ "main": "./dist/index.js",
26
+ "module": "./dist/index.js",
27
+ "types": "./dist/index.d.ts",
28
+ "files": [
29
+ "dist"
30
+ ],
31
+ "scripts": {
32
+ "bundle": "tsdown",
33
+ "release": "bun publish --access public"
34
+ },
35
+ "dependencies": {
36
+ "@monstermann/dfdl": "^0.1.0",
37
+ "@monstermann/remmi": "^0.0.0"
38
+ }
39
+ }