@monstermann/set 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 (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/dist/Set/add.d.ts +28 -0
  4. package/dist/Set/add.js +32 -0
  5. package/dist/Set/addAll.d.ts +28 -0
  6. package/dist/Set/addAll.js +35 -0
  7. package/dist/Set/addOr.d.ts +26 -0
  8. package/dist/Set/addOr.js +32 -0
  9. package/dist/Set/addOrElse.d.ts +33 -0
  10. package/dist/Set/addOrElse.js +39 -0
  11. package/dist/Set/addOrThrow.d.ts +26 -0
  12. package/dist/Set/addOrThrow.js +32 -0
  13. package/dist/Set/clone.d.ts +26 -0
  14. package/dist/Set/clone.js +27 -0
  15. package/dist/Set/compact.d.ts +31 -0
  16. package/dist/Set/compact.js +33 -0
  17. package/dist/Set/difference.d.ts +26 -0
  18. package/dist/Set/difference.js +37 -0
  19. package/dist/Set/forEach.d.ts +29 -0
  20. package/dist/Set/forEach.js +30 -0
  21. package/dist/Set/has.d.ts +26 -0
  22. package/dist/Set/has.js +28 -0
  23. package/dist/Set/hasAll.d.ts +26 -0
  24. package/dist/Set/hasAll.js +29 -0
  25. package/dist/Set/hasAny.d.ts +26 -0
  26. package/dist/Set/hasAny.js +29 -0
  27. package/dist/Set/hasNone.d.ts +26 -0
  28. package/dist/Set/hasNone.js +29 -0
  29. package/dist/Set/index.d.ts +38 -0
  30. package/dist/Set/index.js +67 -0
  31. package/dist/Set/internals/types.d.ts +4 -0
  32. package/dist/Set/intersection.d.ts +26 -0
  33. package/dist/Set/intersection.js +38 -0
  34. package/dist/Set/isDisjointFrom.d.ts +26 -0
  35. package/dist/Set/isDisjointFrom.js +29 -0
  36. package/dist/Set/isEmpty.d.ts +26 -0
  37. package/dist/Set/isEmpty.js +28 -0
  38. package/dist/Set/isSet.d.ts +28 -0
  39. package/dist/Set/isSet.js +30 -0
  40. package/dist/Set/isShallowEqual.d.ts +26 -0
  41. package/dist/Set/isShallowEqual.js +31 -0
  42. package/dist/Set/isSubsetOf.d.ts +26 -0
  43. package/dist/Set/isSubsetOf.js +30 -0
  44. package/dist/Set/isSupersetOf.d.ts +26 -0
  45. package/dist/Set/isSupersetOf.js +30 -0
  46. package/dist/Set/mapEach.d.ts +35 -0
  47. package/dist/Set/mapEach.js +42 -0
  48. package/dist/Set/remove.d.ts +28 -0
  49. package/dist/Set/remove.js +32 -0
  50. package/dist/Set/removeAll.d.ts +28 -0
  51. package/dist/Set/removeAll.js +35 -0
  52. package/dist/Set/removeOr.d.ts +26 -0
  53. package/dist/Set/removeOr.js +32 -0
  54. package/dist/Set/removeOrElse.d.ts +33 -0
  55. package/dist/Set/removeOrElse.js +39 -0
  56. package/dist/Set/removeOrThrow.d.ts +26 -0
  57. package/dist/Set/removeOrThrow.js +32 -0
  58. package/dist/Set/size.d.ts +26 -0
  59. package/dist/Set/size.js +28 -0
  60. package/dist/Set/symmetricDifference.d.ts +26 -0
  61. package/dist/Set/symmetricDifference.js +45 -0
  62. package/dist/Set/toArray.d.ts +26 -0
  63. package/dist/Set/toArray.js +28 -0
  64. package/dist/Set/union.d.ts +26 -0
  65. package/dist/Set/union.js +36 -0
  66. package/dist/index.d.ts +2 -0
  67. package/dist/index.js +3 -0
  68. package/package.json +38 -0
@@ -0,0 +1,35 @@
1
+ //#region src/Set/mapEach.d.ts
2
+ /**
3
+ * ```ts
4
+ * function Set.mapEach(target, fn)
5
+ * ```
6
+ *
7
+ * ```ts
8
+ * import { Set } from "@monstermann/set";
9
+ *
10
+ * Set.mapEach(Set.create([1, 2, 3]), (x) => x * 2); // Set([2, 4, 6])
11
+ * Set.mapEach(Set.create(["a", "b"]), (x) => x.toUpperCase()); // Set(['A', 'B'])
12
+ * ```
13
+ *
14
+ * ```ts
15
+ * import { Set } from "@monstermann/set";
16
+ *
17
+ * pipe(
18
+ * Set.create([1, 2, 3]),
19
+ * Set.mapEach((x) => x * 2),
20
+ * ); // Set([2, 4, 6])
21
+ *
22
+ * pipe(
23
+ * Set.create(["a", "b"]),
24
+ * Set.mapEach((x) => x.toUpperCase()),
25
+ * ); // Set(['A', 'B'])
26
+ * ```
27
+ */
28
+ declare const mapEach: {
29
+ <T, U>(fn: (value: NoInfer<T>, target: ReadonlySet<NoInfer<T>>) => U): (target: Set<T>) => Set<U>;
30
+ <T, U>(fn: (value: NoInfer<T>, target: ReadonlySet<NoInfer<T>>) => U): (target: ReadonlySet<T>) => ReadonlySet<U>;
31
+ <T, U>(target: Set<T>, fn: (value: NoInfer<T>, target: ReadonlySet<NoInfer<T>>) => U): Set<U>;
32
+ <T, U>(target: ReadonlySet<T>, fn: (value: NoInfer<T>, target: ReadonlySet<NoInfer<T>>) => U): ReadonlySet<U>;
33
+ };
34
+ //#endregion
35
+ export { mapEach };
@@ -0,0 +1,42 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+
3
+ //#region src/Set/mapEach.ts
4
+ /**
5
+ * ```ts
6
+ * function Set.mapEach(target, fn)
7
+ * ```
8
+ *
9
+ * ```ts
10
+ * import { Set } from "@monstermann/set";
11
+ *
12
+ * Set.mapEach(Set.create([1, 2, 3]), (x) => x * 2); // Set([2, 4, 6])
13
+ * Set.mapEach(Set.create(["a", "b"]), (x) => x.toUpperCase()); // Set(['A', 'B'])
14
+ * ```
15
+ *
16
+ * ```ts
17
+ * import { Set } from "@monstermann/set";
18
+ *
19
+ * pipe(
20
+ * Set.create([1, 2, 3]),
21
+ * Set.mapEach((x) => x * 2),
22
+ * ); // Set([2, 4, 6])
23
+ *
24
+ * pipe(
25
+ * Set.create(["a", "b"]),
26
+ * Set.mapEach((x) => x.toUpperCase()),
27
+ * ); // Set(['A', 'B'])
28
+ * ```
29
+ */
30
+ const mapEach = dfdlT((target, fn) => {
31
+ let hasChanges = false;
32
+ const result = /* @__PURE__ */ new Set();
33
+ for (const prev of target) {
34
+ const next = fn(prev, target);
35
+ hasChanges ||= prev !== next;
36
+ result.add(next);
37
+ }
38
+ return hasChanges ? result : target;
39
+ }, 2);
40
+
41
+ //#endregion
42
+ export { mapEach };
@@ -0,0 +1,28 @@
1
+ //#region src/Set/remove.d.ts
2
+ /**
3
+ * ```ts
4
+ * function Set.remove(target, value)
5
+ * ```
6
+ *
7
+ * ```ts
8
+ * import { Set } from "@monstermann/set";
9
+ *
10
+ * Set.remove(Set.create([1, 2, 3]), 2); // Set([1, 3])
11
+ * Set.remove(Set.create([1, 2, 3]), 4); // Set([1, 2, 3])
12
+ * ```
13
+ *
14
+ * ```ts
15
+ * import { Set } from "@monstermann/set";
16
+ *
17
+ * pipe(Set.create([1, 2, 3]), Set.remove(2)); // Set([1, 3])
18
+ * pipe(Set.create([1, 2, 3]), Set.remove(4)); // Set([1, 2, 3])
19
+ * ```
20
+ */
21
+ declare const remove: {
22
+ <T>(value: NoInfer<T>): (target: Set<T>) => Set<T>;
23
+ <T>(value: NoInfer<T>): (target: ReadonlySet<T>) => ReadonlySet<T>;
24
+ <T>(target: Set<T>, value: NoInfer<T>): Set<T>;
25
+ <T>(target: ReadonlySet<T>, value: NoInfer<T>): ReadonlySet<T>;
26
+ };
27
+ //#endregion
28
+ export { remove };
@@ -0,0 +1,32 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+ import { cloneSet } from "@monstermann/remmi";
3
+
4
+ //#region src/Set/remove.ts
5
+ /**
6
+ * ```ts
7
+ * function Set.remove(target, value)
8
+ * ```
9
+ *
10
+ * ```ts
11
+ * import { Set } from "@monstermann/set";
12
+ *
13
+ * Set.remove(Set.create([1, 2, 3]), 2); // Set([1, 3])
14
+ * Set.remove(Set.create([1, 2, 3]), 4); // Set([1, 2, 3])
15
+ * ```
16
+ *
17
+ * ```ts
18
+ * import { Set } from "@monstermann/set";
19
+ *
20
+ * pipe(Set.create([1, 2, 3]), Set.remove(2)); // Set([1, 3])
21
+ * pipe(Set.create([1, 2, 3]), Set.remove(4)); // Set([1, 2, 3])
22
+ * ```
23
+ */
24
+ const remove = dfdlT((target, value) => {
25
+ if (!target.has(value)) return target;
26
+ target = cloneSet(target);
27
+ target.delete(value);
28
+ return target;
29
+ }, 2);
30
+
31
+ //#endregion
32
+ export { remove };
@@ -0,0 +1,28 @@
1
+ //#region src/Set/removeAll.d.ts
2
+ /**
3
+ * ```ts
4
+ * function Set.removeAll(target, values)
5
+ * ```
6
+ *
7
+ * ```ts
8
+ * import { Set } from "@monstermann/set";
9
+ *
10
+ * Set.removeAll(Set.create([1, 2, 3, 4]), [2, 3]); // Set([1, 4])
11
+ * Set.removeAll(Set.create([1, 2, 3]), [4, 5]); // Set([1, 2, 3])
12
+ * ```
13
+ *
14
+ * ```ts
15
+ * import { Set } from "@monstermann/set";
16
+ *
17
+ * pipe(Set.create([1, 2, 3, 4]), Set.removeAll([2, 3])); // Set([1, 4])
18
+ * pipe(Set.create([1, 2, 3]), Set.removeAll([4, 5])); // Set([1, 2, 3])
19
+ * ```
20
+ */
21
+ declare const removeAll: {
22
+ <T>(values: Iterable<NoInfer<T>>): (target: Set<T>) => Set<T>;
23
+ <T>(values: Iterable<NoInfer<T>>): (target: ReadonlySet<T>) => ReadonlySet<T>;
24
+ <T>(target: Set<T>, values: Iterable<NoInfer<T>>): Set<T>;
25
+ <T>(target: ReadonlySet<T>, values: Iterable<NoInfer<T>>): ReadonlySet<T>;
26
+ };
27
+ //#endregion
28
+ export { removeAll };
@@ -0,0 +1,35 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+ import { cloneSet } from "@monstermann/remmi";
3
+
4
+ //#region src/Set/removeAll.ts
5
+ /**
6
+ * ```ts
7
+ * function Set.removeAll(target, values)
8
+ * ```
9
+ *
10
+ * ```ts
11
+ * import { Set } from "@monstermann/set";
12
+ *
13
+ * Set.removeAll(Set.create([1, 2, 3, 4]), [2, 3]); // Set([1, 4])
14
+ * Set.removeAll(Set.create([1, 2, 3]), [4, 5]); // Set([1, 2, 3])
15
+ * ```
16
+ *
17
+ * ```ts
18
+ * import { Set } from "@monstermann/set";
19
+ *
20
+ * pipe(Set.create([1, 2, 3, 4]), Set.removeAll([2, 3])); // Set([1, 4])
21
+ * pipe(Set.create([1, 2, 3]), Set.removeAll([4, 5])); // Set([1, 2, 3])
22
+ * ```
23
+ */
24
+ const removeAll = dfdlT((target, values) => {
25
+ let result;
26
+ for (const value of values) {
27
+ if (!target.has(value)) continue;
28
+ result ??= cloneSet(target);
29
+ result.delete(value);
30
+ }
31
+ return result ?? target;
32
+ }, 2);
33
+
34
+ //#endregion
35
+ export { removeAll };
@@ -0,0 +1,26 @@
1
+ //#region src/Set/removeOr.d.ts
2
+ /**
3
+ * ```ts
4
+ * function Set.removeOr(target, value, or)
5
+ * ```
6
+ *
7
+ * ```ts
8
+ * import { Set } from "@monstermann/set";
9
+ *
10
+ * Set.removeOr(Set.create([1, 2, 3]), 2, null); // Set([1, 3])
11
+ * Set.removeOr(Set.create([1, 2, 3]), 4, null); // null
12
+ * ```
13
+ *
14
+ * ```ts
15
+ * import { Set } from "@monstermann/set";
16
+ *
17
+ * pipe(Set.create([1, 2, 3]), Set.removeOr(2, null)); // Set([1, 3])
18
+ * pipe(Set.create([1, 2, 3]), Set.removeOr(4, null)); // null
19
+ * ```
20
+ */
21
+ declare const removeOr: {
22
+ <T, U>(value: NoInfer<T>, or: U): (target: ReadonlySet<T>) => Set<T> | U;
23
+ <T, U>(target: ReadonlySet<T>, value: NoInfer<T>, or: U): Set<T> | U;
24
+ };
25
+ //#endregion
26
+ export { removeOr };
@@ -0,0 +1,32 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+ import { cloneSet } from "@monstermann/remmi";
3
+
4
+ //#region src/Set/removeOr.ts
5
+ /**
6
+ * ```ts
7
+ * function Set.removeOr(target, value, or)
8
+ * ```
9
+ *
10
+ * ```ts
11
+ * import { Set } from "@monstermann/set";
12
+ *
13
+ * Set.removeOr(Set.create([1, 2, 3]), 2, null); // Set([1, 3])
14
+ * Set.removeOr(Set.create([1, 2, 3]), 4, null); // null
15
+ * ```
16
+ *
17
+ * ```ts
18
+ * import { Set } from "@monstermann/set";
19
+ *
20
+ * pipe(Set.create([1, 2, 3]), Set.removeOr(2, null)); // Set([1, 3])
21
+ * pipe(Set.create([1, 2, 3]), Set.removeOr(4, null)); // null
22
+ * ```
23
+ */
24
+ const removeOr = dfdlT((target, value, or) => {
25
+ if (!target.has(value)) return or;
26
+ const result = cloneSet(target);
27
+ result.delete(value);
28
+ return result;
29
+ }, 3);
30
+
31
+ //#endregion
32
+ export { removeOr };
@@ -0,0 +1,33 @@
1
+ //#region src/Set/removeOrElse.d.ts
2
+ /**
3
+ * ```ts
4
+ * function Set.removeOrElse(target, value, orElse)
5
+ * ```
6
+ *
7
+ * ```ts
8
+ * import { Set } from "@monstermann/set";
9
+ *
10
+ * Set.removeOrElse(Set.create([1, 2, 3]), 2, (set) => set.size); // Set([1, 3])
11
+ * Set.removeOrElse(Set.create([1, 2, 3]), 4, (set) => set.size); // 3
12
+ * ```
13
+ *
14
+ * ```ts
15
+ * import { Set } from "@monstermann/set";
16
+ *
17
+ * pipe(
18
+ * Set.create([1, 2, 3]),
19
+ * Set.removeOrElse(2, (set) => set.size),
20
+ * ); // Set([1, 3])
21
+ *
22
+ * pipe(
23
+ * Set.create([1, 2, 3]),
24
+ * Set.removeOrElse(4, (set) => set.size),
25
+ * ); // 3
26
+ * ```
27
+ */
28
+ declare const removeOrElse: {
29
+ <T, U>(value: NoInfer<T>, orElse: (target: ReadonlySet<NoInfer<T>>) => U): (target: ReadonlySet<T>) => Set<T> | U;
30
+ <T, U>(target: ReadonlySet<T>, value: NoInfer<T>, orElse: (target: ReadonlySet<NoInfer<T>>) => U): Set<T> | U;
31
+ };
32
+ //#endregion
33
+ export { removeOrElse };
@@ -0,0 +1,39 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+ import { cloneSet } from "@monstermann/remmi";
3
+
4
+ //#region src/Set/removeOrElse.ts
5
+ /**
6
+ * ```ts
7
+ * function Set.removeOrElse(target, value, orElse)
8
+ * ```
9
+ *
10
+ * ```ts
11
+ * import { Set } from "@monstermann/set";
12
+ *
13
+ * Set.removeOrElse(Set.create([1, 2, 3]), 2, (set) => set.size); // Set([1, 3])
14
+ * Set.removeOrElse(Set.create([1, 2, 3]), 4, (set) => set.size); // 3
15
+ * ```
16
+ *
17
+ * ```ts
18
+ * import { Set } from "@monstermann/set";
19
+ *
20
+ * pipe(
21
+ * Set.create([1, 2, 3]),
22
+ * Set.removeOrElse(2, (set) => set.size),
23
+ * ); // Set([1, 3])
24
+ *
25
+ * pipe(
26
+ * Set.create([1, 2, 3]),
27
+ * Set.removeOrElse(4, (set) => set.size),
28
+ * ); // 3
29
+ * ```
30
+ */
31
+ const removeOrElse = dfdlT((target, value, orElse) => {
32
+ if (!target.has(value)) return orElse(target);
33
+ const result = cloneSet(target);
34
+ result.delete(value);
35
+ return result;
36
+ }, 3);
37
+
38
+ //#endregion
39
+ export { removeOrElse };
@@ -0,0 +1,26 @@
1
+ //#region src/Set/removeOrThrow.d.ts
2
+ /**
3
+ * ```ts
4
+ * function Set.removeOrThrow(target, value)
5
+ * ```
6
+ *
7
+ * ```ts
8
+ * import { Set } from "@monstermann/set";
9
+ *
10
+ * Set.removeOrThrow(Set.create([1, 2, 3]), 2); // Set([1, 3])
11
+ * Set.removeOrThrow(Set.create([1, 2, 3]), 4); // throws FnError
12
+ * ```
13
+ *
14
+ * ```ts
15
+ * import { Set } from "@monstermann/set";
16
+ *
17
+ * pipe(Set.create([1, 2, 3]), Set.removeOrThrow(2)); // Set([1, 3])
18
+ * pipe(Set.create([1, 2, 3]), Set.removeOrThrow(4)); // throws FnError
19
+ * ```
20
+ */
21
+ declare const removeOrThrow: {
22
+ <T>(value: NoInfer<T>): (target: ReadonlySet<T>) => Set<T>;
23
+ <T>(target: ReadonlySet<T>, value: NoInfer<T>): Set<T>;
24
+ };
25
+ //#endregion
26
+ export { removeOrThrow };
@@ -0,0 +1,32 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+ import { cloneSet } from "@monstermann/remmi";
3
+
4
+ //#region src/Set/removeOrThrow.ts
5
+ /**
6
+ * ```ts
7
+ * function Set.removeOrThrow(target, value)
8
+ * ```
9
+ *
10
+ * ```ts
11
+ * import { Set } from "@monstermann/set";
12
+ *
13
+ * Set.removeOrThrow(Set.create([1, 2, 3]), 2); // Set([1, 3])
14
+ * Set.removeOrThrow(Set.create([1, 2, 3]), 4); // throws FnError
15
+ * ```
16
+ *
17
+ * ```ts
18
+ * import { Set } from "@monstermann/set";
19
+ *
20
+ * pipe(Set.create([1, 2, 3]), Set.removeOrThrow(2)); // Set([1, 3])
21
+ * pipe(Set.create([1, 2, 3]), Set.removeOrThrow(4)); // throws FnError
22
+ * ```
23
+ */
24
+ const removeOrThrow = dfdlT((target, value) => {
25
+ if (!target.has(value)) throw new Error("Set.removeOrThrow: Value does not exist.");
26
+ const result = cloneSet(target);
27
+ result.delete(value);
28
+ return result;
29
+ }, 2);
30
+
31
+ //#endregion
32
+ export { removeOrThrow };
@@ -0,0 +1,26 @@
1
+ //#region src/Set/size.d.ts
2
+ /**
3
+ * ```ts
4
+ * function Set.size(target)
5
+ * ```
6
+ *
7
+ * ```ts
8
+ * import { Set } from "@monstermann/set";
9
+ *
10
+ * Set.size(Set.create([1, 2, 3])); // 3
11
+ * Set.size(Set.create()); // 0
12
+ * ```
13
+ *
14
+ * ```ts
15
+ * import { Set } from "@monstermann/set";
16
+ *
17
+ * pipe(Set.create([1, 2, 3]), Set.size()); // 3
18
+ * pipe(Set.create(), Set.size()); // 0
19
+ * ```
20
+ */
21
+ declare const size: {
22
+ (): <T extends ReadonlySet<unknown>>(target: T) => number;
23
+ <T extends ReadonlySet<unknown>>(target: T): number;
24
+ };
25
+ //#endregion
26
+ export { size };
@@ -0,0 +1,28 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+
3
+ //#region src/Set/size.ts
4
+ /**
5
+ * ```ts
6
+ * function Set.size(target)
7
+ * ```
8
+ *
9
+ * ```ts
10
+ * import { Set } from "@monstermann/set";
11
+ *
12
+ * Set.size(Set.create([1, 2, 3])); // 3
13
+ * Set.size(Set.create()); // 0
14
+ * ```
15
+ *
16
+ * ```ts
17
+ * import { Set } from "@monstermann/set";
18
+ *
19
+ * pipe(Set.create([1, 2, 3]), Set.size()); // 3
20
+ * pipe(Set.create(), Set.size()); // 0
21
+ * ```
22
+ */
23
+ const size = dfdlT((target) => {
24
+ return target.size;
25
+ }, 1);
26
+
27
+ //#endregion
28
+ export { size };
@@ -0,0 +1,26 @@
1
+ //#region src/Set/symmetricDifference.d.ts
2
+ /**
3
+ * ```ts
4
+ * function Set.symmetricDifference(target, source)
5
+ * ```
6
+ *
7
+ * ```ts
8
+ * import { Set } from "@monstermann/set";
9
+ *
10
+ * Set.symmetricDifference(Set.create([1, 2, 3]), Set.create([3, 4, 5])); // Set([1, 2, 4, 5])
11
+ * Set.symmetricDifference(Set.create([1, 2]), Set.create([3, 4])); // Set([1, 2, 3, 4])
12
+ * ```
13
+ *
14
+ * ```ts
15
+ * import { Set } from "@monstermann/set";
16
+ *
17
+ * pipe(Set.create([1, 2, 3]), Set.symmetricDifference(Set.create([3, 4, 5]))); // Set([1, 2, 4, 5])
18
+ * pipe(Set.create([1, 2]), Set.symmetricDifference(Set.create([3, 4]))); // Set([1, 2, 3, 4])
19
+ * ```
20
+ */
21
+ declare const symmetricDifference: {
22
+ <T, U>(source: Set<U>): (target: Set<T>) => Set<T | U>;
23
+ <T, U>(target: Set<T>, source: Set<U>): Set<T | U>;
24
+ };
25
+ //#endregion
26
+ export { symmetricDifference };
@@ -0,0 +1,45 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+
3
+ //#region src/Set/symmetricDifference.ts
4
+ /**
5
+ * ```ts
6
+ * function Set.symmetricDifference(target, source)
7
+ * ```
8
+ *
9
+ * ```ts
10
+ * import { Set } from "@monstermann/set";
11
+ *
12
+ * Set.symmetricDifference(Set.create([1, 2, 3]), Set.create([3, 4, 5])); // Set([1, 2, 4, 5])
13
+ * Set.symmetricDifference(Set.create([1, 2]), Set.create([3, 4])); // Set([1, 2, 3, 4])
14
+ * ```
15
+ *
16
+ * ```ts
17
+ * import { Set } from "@monstermann/set";
18
+ *
19
+ * pipe(Set.create([1, 2, 3]), Set.symmetricDifference(Set.create([3, 4, 5]))); // Set([1, 2, 4, 5])
20
+ * pipe(Set.create([1, 2]), Set.symmetricDifference(Set.create([3, 4]))); // Set([1, 2, 3, 4])
21
+ * ```
22
+ */
23
+ const symmetricDifference = dfdlT((target, source) => {
24
+ if (source.size === 0) return target;
25
+ if (target.size === 0) return source;
26
+ let hasChanges = false;
27
+ for (const a of target) if (!source.has(a)) {
28
+ hasChanges = true;
29
+ break;
30
+ }
31
+ if (!hasChanges) {
32
+ for (const b of source) if (!target.has(b)) {
33
+ hasChanges = true;
34
+ break;
35
+ }
36
+ }
37
+ if (!hasChanges) return /* @__PURE__ */ new Set();
38
+ const result = /* @__PURE__ */ new Set();
39
+ for (const a of target) if (!source.has(a)) result.add(a);
40
+ for (const b of source) if (!target.has(b)) result.add(b);
41
+ return result;
42
+ }, 2);
43
+
44
+ //#endregion
45
+ export { symmetricDifference };
@@ -0,0 +1,26 @@
1
+ //#region src/Set/toArray.d.ts
2
+ /**
3
+ * ```ts
4
+ * function Set.toArray(target)
5
+ * ```
6
+ *
7
+ * ```ts
8
+ * import { Set } from "@monstermann/set";
9
+ *
10
+ * Set.toArray(Set.create([1, 2, 3])); // [1, 2, 3]
11
+ * Set.toArray(Set.create(["a", "b"])); // ['a', 'b']
12
+ * ```
13
+ *
14
+ * ```ts
15
+ * import { Set } from "@monstermann/set";
16
+ *
17
+ * pipe(Set.create([1, 2, 3]), Set.toArray()); // [1, 2, 3]
18
+ * pipe(Set.create(["a", "b"]), Set.toArray()); // ['a', 'b']
19
+ * ```
20
+ */
21
+ declare const toArray: {
22
+ (): <T>(target: ReadonlySet<T>) => T[];
23
+ <T>(target: ReadonlySet<T>): T[];
24
+ };
25
+ //#endregion
26
+ export { toArray };
@@ -0,0 +1,28 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+
3
+ //#region src/Set/toArray.ts
4
+ /**
5
+ * ```ts
6
+ * function Set.toArray(target)
7
+ * ```
8
+ *
9
+ * ```ts
10
+ * import { Set } from "@monstermann/set";
11
+ *
12
+ * Set.toArray(Set.create([1, 2, 3])); // [1, 2, 3]
13
+ * Set.toArray(Set.create(["a", "b"])); // ['a', 'b']
14
+ * ```
15
+ *
16
+ * ```ts
17
+ * import { Set } from "@monstermann/set";
18
+ *
19
+ * pipe(Set.create([1, 2, 3]), Set.toArray()); // [1, 2, 3]
20
+ * pipe(Set.create(["a", "b"]), Set.toArray()); // ['a', 'b']
21
+ * ```
22
+ */
23
+ const toArray = dfdlT((target) => {
24
+ return Array.from(target);
25
+ }, 1);
26
+
27
+ //#endregion
28
+ export { toArray };
@@ -0,0 +1,26 @@
1
+ //#region src/Set/union.d.ts
2
+ /**
3
+ * ```ts
4
+ * function Set.union(target, source)
5
+ * ```
6
+ *
7
+ * ```ts
8
+ * import { Set } from "@monstermann/set";
9
+ *
10
+ * Set.union(Set.create([1, 2]), Set.create([2, 3, 4])); // Set([1, 2, 3, 4])
11
+ * Set.union(Set.create([1, 2]), Set.create([3, 4])); // Set([1, 2, 3, 4])
12
+ * ```
13
+ *
14
+ * ```ts
15
+ * import { Set } from "@monstermann/set";
16
+ *
17
+ * pipe(Set.create([1, 2]), Set.union(Set.create([2, 3, 4]))); // Set([1, 2, 3, 4])
18
+ * pipe(Set.create([1, 2]), Set.union(Set.create([3, 4]))); // Set([1, 2, 3, 4])
19
+ * ```
20
+ */
21
+ declare const union: {
22
+ <T, U>(source: Set<U>): (target: Set<T>) => Set<T | U>;
23
+ <T, U>(target: Set<T>, source: Set<U>): Set<T | U>;
24
+ };
25
+ //#endregion
26
+ export { union };
@@ -0,0 +1,36 @@
1
+ import { dfdlT } from "@monstermann/dfdl";
2
+
3
+ //#region src/Set/union.ts
4
+ /**
5
+ * ```ts
6
+ * function Set.union(target, source)
7
+ * ```
8
+ *
9
+ * ```ts
10
+ * import { Set } from "@monstermann/set";
11
+ *
12
+ * Set.union(Set.create([1, 2]), Set.create([2, 3, 4])); // Set([1, 2, 3, 4])
13
+ * Set.union(Set.create([1, 2]), Set.create([3, 4])); // Set([1, 2, 3, 4])
14
+ * ```
15
+ *
16
+ * ```ts
17
+ * import { Set } from "@monstermann/set";
18
+ *
19
+ * pipe(Set.create([1, 2]), Set.union(Set.create([2, 3, 4]))); // Set([1, 2, 3, 4])
20
+ * pipe(Set.create([1, 2]), Set.union(Set.create([3, 4]))); // Set([1, 2, 3, 4])
21
+ * ```
22
+ */
23
+ const union = dfdlT((target, source) => {
24
+ if (source.size === 0) return target;
25
+ if (target.size === 0) return source;
26
+ for (const element of source) if (!target.has(element)) {
27
+ const result = /* @__PURE__ */ new Set();
28
+ for (const a of target) result.add(a);
29
+ for (const b of source) result.add(b);
30
+ return result;
31
+ }
32
+ return target;
33
+ }, 2);
34
+
35
+ //#endregion
36
+ export { union };
@@ -0,0 +1,2 @@
1
+ import { Set } from "./Set/index.js";
2
+ export { Set };
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ import { Set } from "./Set/index.js";
2
+
3
+ export { Set };