@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.
- package/LICENSE +21 -0
- package/README.md +9 -0
- package/dist/Set/add.d.ts +28 -0
- package/dist/Set/add.js +32 -0
- package/dist/Set/addAll.d.ts +28 -0
- package/dist/Set/addAll.js +35 -0
- package/dist/Set/addOr.d.ts +26 -0
- package/dist/Set/addOr.js +32 -0
- package/dist/Set/addOrElse.d.ts +33 -0
- package/dist/Set/addOrElse.js +39 -0
- package/dist/Set/addOrThrow.d.ts +26 -0
- package/dist/Set/addOrThrow.js +32 -0
- package/dist/Set/clone.d.ts +26 -0
- package/dist/Set/clone.js +27 -0
- package/dist/Set/compact.d.ts +31 -0
- package/dist/Set/compact.js +33 -0
- package/dist/Set/difference.d.ts +26 -0
- package/dist/Set/difference.js +37 -0
- package/dist/Set/forEach.d.ts +29 -0
- package/dist/Set/forEach.js +30 -0
- package/dist/Set/has.d.ts +26 -0
- package/dist/Set/has.js +28 -0
- package/dist/Set/hasAll.d.ts +26 -0
- package/dist/Set/hasAll.js +29 -0
- package/dist/Set/hasAny.d.ts +26 -0
- package/dist/Set/hasAny.js +29 -0
- package/dist/Set/hasNone.d.ts +26 -0
- package/dist/Set/hasNone.js +29 -0
- package/dist/Set/index.d.ts +38 -0
- package/dist/Set/index.js +67 -0
- package/dist/Set/internals/types.d.ts +4 -0
- package/dist/Set/intersection.d.ts +26 -0
- package/dist/Set/intersection.js +38 -0
- package/dist/Set/isDisjointFrom.d.ts +26 -0
- package/dist/Set/isDisjointFrom.js +29 -0
- package/dist/Set/isEmpty.d.ts +26 -0
- package/dist/Set/isEmpty.js +28 -0
- package/dist/Set/isSet.d.ts +28 -0
- package/dist/Set/isSet.js +30 -0
- package/dist/Set/isShallowEqual.d.ts +26 -0
- package/dist/Set/isShallowEqual.js +31 -0
- package/dist/Set/isSubsetOf.d.ts +26 -0
- package/dist/Set/isSubsetOf.js +30 -0
- package/dist/Set/isSupersetOf.d.ts +26 -0
- package/dist/Set/isSupersetOf.js +30 -0
- package/dist/Set/mapEach.d.ts +35 -0
- package/dist/Set/mapEach.js +42 -0
- package/dist/Set/remove.d.ts +28 -0
- package/dist/Set/remove.js +32 -0
- package/dist/Set/removeAll.d.ts +28 -0
- package/dist/Set/removeAll.js +35 -0
- package/dist/Set/removeOr.d.ts +26 -0
- package/dist/Set/removeOr.js +32 -0
- package/dist/Set/removeOrElse.d.ts +33 -0
- package/dist/Set/removeOrElse.js +39 -0
- package/dist/Set/removeOrThrow.d.ts +26 -0
- package/dist/Set/removeOrThrow.js +32 -0
- package/dist/Set/size.d.ts +26 -0
- package/dist/Set/size.js +28 -0
- package/dist/Set/symmetricDifference.d.ts +26 -0
- package/dist/Set/symmetricDifference.js +45 -0
- package/dist/Set/toArray.d.ts +26 -0
- package/dist/Set/toArray.js +28 -0
- package/dist/Set/union.d.ts +26 -0
- package/dist/Set/union.js +36 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- 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 };
|
package/dist/Set/size.js
ADDED
|
@@ -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 };
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED