recursive-set 2.0.0 → 2.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.
- package/README.md +35 -52
- package/dist/cjs/index.js +36 -10
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +36 -10
- package/dist/esm/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,13 +11,14 @@ Supports arbitrary nesting, detects cycles (Foundation axiom), and includes all
|
|
|
11
11
|
|
|
12
12
|
## Features
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
**Mutable, recursive sets** with arbitrary depth
|
|
15
|
+
**Extensional equality** (two sets are equal iff their elements are equal)
|
|
16
|
+
**Cycle detection** (Foundation Axiom): prevents self-containing sets
|
|
17
|
+
**Copy-on-Write**: O(1) cloning via structural sharing
|
|
18
|
+
**Classic set operations**: union, intersection, difference, symmetric difference
|
|
19
|
+
**Power set and Cartesian product**
|
|
20
|
+
**TypeScript generics**: works with strings, numbers, objects, states, even sets of sets
|
|
21
|
+
**Ready for FSM**, mathematical, symbolic and practical use cases
|
|
21
22
|
|
|
22
23
|
---
|
|
23
24
|
|
|
@@ -29,26 +30,22 @@ This library enforces strict **ZFC Set Theory** semantics, differing from native
|
|
|
29
30
|
- Example: `new RecursiveSet(1).equals(new RecursiveSet(1))` is `true`.
|
|
30
31
|
- Native `Set` would treat them as distinct objects.
|
|
31
32
|
- **Foundation Axiom:** The library performs cycle detection to prevent sets from containing themselves (recursively).
|
|
33
|
+
- **NaN Handling:** In strict ZFC semantics, `NaN` is not a valid element. Adding `NaN` will explicitly throw an error.
|
|
32
34
|
- **Performance:** Internally powered by **Functional Red-Black Trees** (via `functional-red-black-tree`).
|
|
33
35
|
- Operations like insertion, deletion, and lookup are **O(log n)**.
|
|
34
|
-
-
|
|
36
|
+
- **Cloning is O(1)** (Copy-on-Write), making it ideal for backtracking algorithms.
|
|
35
37
|
|
|
36
38
|
---
|
|
37
39
|
|
|
38
40
|
## Installation
|
|
39
41
|
|
|
40
42
|
```
|
|
41
|
-
|
|
42
43
|
npm install recursive-set
|
|
43
|
-
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
---
|
|
47
|
-
|
|
48
47
|
## Quickstart
|
|
49
|
-
|
|
50
48
|
```
|
|
51
|
-
|
|
52
49
|
import { RecursiveSet } from "recursive-set";
|
|
53
50
|
|
|
54
51
|
const q0 = "q0", q1 = "q1";
|
|
@@ -58,7 +55,6 @@ const classes = new RecursiveSet(eqClass);
|
|
|
58
55
|
classes.add(new RecursiveSet("q2", "q3")); // {{q0, q1}, {q2, q3}}
|
|
59
56
|
|
|
60
57
|
console.log(classes.toString()); // {{q0, q1}, {q2, q3}}
|
|
61
|
-
|
|
62
58
|
```
|
|
63
59
|
|
|
64
60
|
---
|
|
@@ -68,18 +64,19 @@ console.log(classes.toString()); // {{q0, q1}, {q2, q3}}
|
|
|
68
64
|
### Constructor
|
|
69
65
|
|
|
70
66
|
```
|
|
71
|
-
|
|
72
67
|
new RecursiveSet<T>(...elements: Array<T | RecursiveSet<T>>)
|
|
73
|
-
|
|
74
68
|
```
|
|
75
69
|
|
|
76
70
|
### Methods
|
|
77
71
|
|
|
78
72
|
**Mutation:**
|
|
79
|
-
- `add(element: T | RecursiveSet<T>): this` – Add element (chainable)
|
|
73
|
+
- `add(element: T | RecursiveSet<T>): this` – Add element (chainable). **Throws if element is NaN.**
|
|
80
74
|
- `remove(element: T | RecursiveSet<T>): this` – Remove element (chainable)
|
|
81
75
|
- `clear(): this` – Remove all elements (chainable)
|
|
82
76
|
|
|
77
|
+
**Snapshot:**
|
|
78
|
+
- `clone(): RecursiveSet<T>` – Creates a shallow copy in **O(1)** time (Copy-on-Write).
|
|
79
|
+
|
|
83
80
|
**Set Operations:**
|
|
84
81
|
- `union(other: RecursiveSet<T>): RecursiveSet<T>` – A ∪ B
|
|
85
82
|
- `intersection(other: RecursiveSet<T>): RecursiveSet<T>` – A ∩ B
|
|
@@ -108,63 +105,55 @@ new RecursiveSet<T>(...elements: Array<T | RecursiveSet<T>>)
|
|
|
108
105
|
### Basic Usage
|
|
109
106
|
|
|
110
107
|
```
|
|
111
|
-
|
|
112
108
|
const s1 = new RecursiveSet(1, 2, 3);
|
|
113
109
|
const s2 = new RecursiveSet(2, 3, 4);
|
|
114
110
|
|
|
115
111
|
console.log(s1.union(s2)); // {1, 2, 3, 4}
|
|
116
112
|
console.log(s1.intersection(s2)); // {2, 3}
|
|
117
113
|
console.log(s1.difference(s2)); // {1}
|
|
118
|
-
|
|
119
114
|
```
|
|
120
115
|
|
|
121
|
-
###
|
|
116
|
+
### Backtracking with O(1) Clone
|
|
122
117
|
|
|
123
118
|
```
|
|
119
|
+
const state = new RecursiveSet("init");
|
|
120
|
+
// ... perform some operations ...
|
|
124
121
|
|
|
125
|
-
|
|
126
|
-
const
|
|
127
|
-
const eqClasses = new RecursiveSet(eq1, eq2);
|
|
128
|
-
|
|
129
|
-
console.log(eqClasses.toString()); // {{q0, q1}, {q2, q3}}
|
|
122
|
+
// Create a checkpoint (O(1))
|
|
123
|
+
const checkpoint = state.clone();
|
|
130
124
|
|
|
125
|
+
state.add("newState");
|
|
126
|
+
// If this path fails, simply revert:
|
|
127
|
+
// state = checkpoint; (conceptually)
|
|
131
128
|
```
|
|
132
129
|
|
|
133
130
|
### Power Set
|
|
134
131
|
|
|
135
132
|
```
|
|
136
|
-
|
|
137
133
|
const set = new RecursiveSet(1, 2);
|
|
138
134
|
const power = set.powerset();
|
|
139
135
|
|
|
140
136
|
console.log(power.toString()); // {∅, {1}, {2}, {1, 2}}
|
|
141
|
-
|
|
142
137
|
```
|
|
143
138
|
|
|
144
|
-
###
|
|
139
|
+
### Strictness: NaN and Cycles
|
|
145
140
|
|
|
146
141
|
```
|
|
147
|
-
|
|
148
142
|
const s = new RecursiveSet(1, 2);
|
|
143
|
+
|
|
144
|
+
// Cycle Detection
|
|
149
145
|
try {
|
|
150
|
-
s.add(s);
|
|
146
|
+
s.add(s);
|
|
151
147
|
} catch (e) {
|
|
152
148
|
console.error(e.message); // "Foundation axiom violated..."
|
|
153
149
|
}
|
|
154
150
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
const set = new RecursiveSet(1, 2)
|
|
162
|
-
.add(3)
|
|
163
|
-
.add(4)
|
|
164
|
-
.remove(1);
|
|
165
|
-
|
|
166
|
-
console.log(set); // {2, 3, 4}
|
|
167
|
-
|
|
151
|
+
// NaN Rejection
|
|
152
|
+
try {
|
|
153
|
+
s.add(NaN);
|
|
154
|
+
} catch (e) {
|
|
155
|
+
console.error(e.message); // "NaN is not supported..."
|
|
156
|
+
}
|
|
168
157
|
```
|
|
169
158
|
|
|
170
159
|
---
|
|
@@ -182,25 +171,18 @@ console.log(set); // {2, 3, 4}
|
|
|
182
171
|
## Development
|
|
183
172
|
|
|
184
173
|
```
|
|
185
|
-
|
|
186
|
-
|
|
187
174
|
# Clone repository
|
|
188
|
-
|
|
189
|
-
git clone https://github.com/<USERNAME>/recursive-set.git
|
|
175
|
+
git clone https://github.com/cstrerath/recursive-set.git
|
|
190
176
|
cd recursive-set
|
|
191
177
|
|
|
192
178
|
# Install dependencies
|
|
193
|
-
|
|
194
179
|
npm install
|
|
195
180
|
|
|
196
181
|
# Build
|
|
197
|
-
|
|
198
182
|
npm run build
|
|
199
183
|
|
|
200
184
|
# Run tests
|
|
201
|
-
|
|
202
185
|
npx tsx test.ts
|
|
203
|
-
|
|
204
186
|
```
|
|
205
187
|
|
|
206
188
|
---
|
|
@@ -225,4 +207,5 @@ See [LICENSE](LICENSE) for details.
|
|
|
225
207
|
Inspired by:
|
|
226
208
|
- Cantor's set theory
|
|
227
209
|
- Zermelo-Fraenkel set theory with the Axiom of Choice (ZFC)
|
|
228
|
-
- Practical needs in FSM algorithms and formal language theory
|
|
210
|
+
- Practical needs in FSM algorithms and formal language theory
|
|
211
|
+
- Powered by [functional-red-black-tree](https://github.com/mikolalysenko/functional-red-black-tree) for O(log n) persistence
|
package/dist/cjs/index.js
CHANGED
|
@@ -31,7 +31,11 @@ function compare(a, b) {
|
|
|
31
31
|
if (typeof a !== typeof b) {
|
|
32
32
|
return typeof a > typeof b ? 1 : -1;
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
if (a < b)
|
|
35
|
+
return -1;
|
|
36
|
+
if (a > b)
|
|
37
|
+
return 1;
|
|
38
|
+
return 0;
|
|
35
39
|
}
|
|
36
40
|
// 4. Recursive Sets
|
|
37
41
|
const sizeA = a.size;
|
|
@@ -61,17 +65,38 @@ class RecursiveSet {
|
|
|
61
65
|
this.add(el);
|
|
62
66
|
}
|
|
63
67
|
}
|
|
68
|
+
// === Copy-on-Write Support ===
|
|
69
|
+
/**
|
|
70
|
+
* Creates a shallow copy of the set in O(1) time.
|
|
71
|
+
* Due to the immutable nature of the underlying tree,
|
|
72
|
+
* this is extremely efficient (structural sharing).
|
|
73
|
+
*/
|
|
74
|
+
clone() {
|
|
75
|
+
const clone = new RecursiveSet();
|
|
76
|
+
// We replace the empty tree directly with the reference to the current tree.
|
|
77
|
+
// Since the tree is persistent/immutable, this is safe and instant.
|
|
78
|
+
clone._tree = this._tree;
|
|
79
|
+
return clone;
|
|
80
|
+
}
|
|
64
81
|
// === Mutable Operations ===
|
|
65
82
|
add(element) {
|
|
83
|
+
// 0. Guard: Explicitly ban NaN
|
|
84
|
+
if (typeof element === "number" && Number.isNaN(element)) {
|
|
85
|
+
throw new Error("NaN is not supported as an element of RecursiveSet");
|
|
86
|
+
}
|
|
87
|
+
// 1. Defensive: Idempotency Check
|
|
88
|
+
// Avoid duplicate inserts if the element is already present.
|
|
89
|
+
// This also mitigates race-condition-like issues with persistent tree structures during rapid mutations.
|
|
90
|
+
if (this.has(element)) {
|
|
91
|
+
return this;
|
|
92
|
+
}
|
|
93
|
+
// 2. Cycle Check (Foundation Axiom)
|
|
66
94
|
if (element instanceof RecursiveSet) {
|
|
67
|
-
if (
|
|
68
|
-
|
|
69
|
-
throw new Error("Foundation axiom violated: membership cycle detected");
|
|
70
|
-
}
|
|
95
|
+
if (this._wouldCreateCycle(element)) {
|
|
96
|
+
throw new Error("Foundation axiom violated: membership cycle detected");
|
|
71
97
|
}
|
|
72
98
|
}
|
|
73
|
-
//
|
|
74
|
-
// We replace our internal tree (mutable API, immutable data structure)
|
|
99
|
+
// 3. Insert
|
|
75
100
|
this._tree = this._tree.insert(element, true);
|
|
76
101
|
return this;
|
|
77
102
|
}
|
|
@@ -115,7 +140,7 @@ class RecursiveSet {
|
|
|
115
140
|
}
|
|
116
141
|
powerset() {
|
|
117
142
|
const elements = [];
|
|
118
|
-
this._tree.forEach((key) => elements.push(key));
|
|
143
|
+
this._tree.forEach((key) => { elements.push(key); return undefined; });
|
|
119
144
|
const subsets = [];
|
|
120
145
|
const n = elements.length;
|
|
121
146
|
for (let i = 0; i < (1 << n); i++) {
|
|
@@ -189,12 +214,12 @@ class RecursiveSet {
|
|
|
189
214
|
}
|
|
190
215
|
toSet() {
|
|
191
216
|
const result = new Set();
|
|
192
|
-
this._tree.forEach((key) => result.add(key));
|
|
217
|
+
this._tree.forEach((key) => { result.add(key); return undefined; });
|
|
193
218
|
return result;
|
|
194
219
|
}
|
|
195
220
|
*[Symbol.iterator]() {
|
|
196
221
|
const keys = [];
|
|
197
|
-
this._tree.forEach((key) => keys.push(key));
|
|
222
|
+
this._tree.forEach((key) => { keys.push(key); return undefined; });
|
|
198
223
|
yield* keys;
|
|
199
224
|
}
|
|
200
225
|
toString() {
|
|
@@ -208,6 +233,7 @@ class RecursiveSet {
|
|
|
208
233
|
else {
|
|
209
234
|
elements.push(String(key));
|
|
210
235
|
}
|
|
236
|
+
return undefined;
|
|
211
237
|
});
|
|
212
238
|
return `{${elements.join(", ")}}`;
|
|
213
239
|
}
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
export declare class RecursiveSet<T = any> {
|
|
2
2
|
private _tree;
|
|
3
3
|
constructor(...elements: Array<T | RecursiveSet<T>>);
|
|
4
|
+
/**
|
|
5
|
+
* Creates a shallow copy of the set in O(1) time.
|
|
6
|
+
* Due to the immutable nature of the underlying tree,
|
|
7
|
+
* this is extremely efficient (structural sharing).
|
|
8
|
+
*/
|
|
9
|
+
clone(): RecursiveSet<T>;
|
|
4
10
|
add(element: T | RecursiveSet<T>): this;
|
|
5
11
|
remove(element: T | RecursiveSet<T>): this;
|
|
6
12
|
clear(): this;
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAqDA,qBAAa,YAAY,CAAC,CAAC,GAAG,GAAG;IAE7B,OAAO,CAAC,KAAK,CAAM;gBAEP,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAUnD;;;;OAIG;IACH,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC;IAWxB,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAyBvC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAK1C,KAAK,IAAI,IAAI;IAOb,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAO9C,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAUrD,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAUnD,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAI5D,QAAQ,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAmBzC,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAsB9E,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO;IAI1C,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO;IAOzC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO;IAI3C,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO;IAI/C,OAAO,IAAI,OAAO;IAIlB,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO;IAMvC,OAAO,CAAC,iBAAiB;IAsBzB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAMhC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAMnD,QAAQ,IAAI,MAAM;CAiBrB;AAGD,wBAAgB,QAAQ,CAAC,CAAC,GAAG,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,CAEnD;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAExD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAEtE"}
|
package/dist/esm/index.js
CHANGED
|
@@ -22,7 +22,11 @@ function compare(a, b) {
|
|
|
22
22
|
if (typeof a !== typeof b) {
|
|
23
23
|
return typeof a > typeof b ? 1 : -1;
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
if (a < b)
|
|
26
|
+
return -1;
|
|
27
|
+
if (a > b)
|
|
28
|
+
return 1;
|
|
29
|
+
return 0;
|
|
26
30
|
}
|
|
27
31
|
// 4. Recursive Sets
|
|
28
32
|
const sizeA = a.size;
|
|
@@ -52,17 +56,38 @@ export class RecursiveSet {
|
|
|
52
56
|
this.add(el);
|
|
53
57
|
}
|
|
54
58
|
}
|
|
59
|
+
// === Copy-on-Write Support ===
|
|
60
|
+
/**
|
|
61
|
+
* Creates a shallow copy of the set in O(1) time.
|
|
62
|
+
* Due to the immutable nature of the underlying tree,
|
|
63
|
+
* this is extremely efficient (structural sharing).
|
|
64
|
+
*/
|
|
65
|
+
clone() {
|
|
66
|
+
const clone = new RecursiveSet();
|
|
67
|
+
// We replace the empty tree directly with the reference to the current tree.
|
|
68
|
+
// Since the tree is persistent/immutable, this is safe and instant.
|
|
69
|
+
clone._tree = this._tree;
|
|
70
|
+
return clone;
|
|
71
|
+
}
|
|
55
72
|
// === Mutable Operations ===
|
|
56
73
|
add(element) {
|
|
74
|
+
// 0. Guard: Explicitly ban NaN
|
|
75
|
+
if (typeof element === "number" && Number.isNaN(element)) {
|
|
76
|
+
throw new Error("NaN is not supported as an element of RecursiveSet");
|
|
77
|
+
}
|
|
78
|
+
// 1. Defensive: Idempotency Check
|
|
79
|
+
// Avoid duplicate inserts if the element is already present.
|
|
80
|
+
// This also mitigates race-condition-like issues with persistent tree structures during rapid mutations.
|
|
81
|
+
if (this.has(element)) {
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
// 2. Cycle Check (Foundation Axiom)
|
|
57
85
|
if (element instanceof RecursiveSet) {
|
|
58
|
-
if (
|
|
59
|
-
|
|
60
|
-
throw new Error("Foundation axiom violated: membership cycle detected");
|
|
61
|
-
}
|
|
86
|
+
if (this._wouldCreateCycle(element)) {
|
|
87
|
+
throw new Error("Foundation axiom violated: membership cycle detected");
|
|
62
88
|
}
|
|
63
89
|
}
|
|
64
|
-
//
|
|
65
|
-
// We replace our internal tree (mutable API, immutable data structure)
|
|
90
|
+
// 3. Insert
|
|
66
91
|
this._tree = this._tree.insert(element, true);
|
|
67
92
|
return this;
|
|
68
93
|
}
|
|
@@ -106,7 +131,7 @@ export class RecursiveSet {
|
|
|
106
131
|
}
|
|
107
132
|
powerset() {
|
|
108
133
|
const elements = [];
|
|
109
|
-
this._tree.forEach((key) => elements.push(key));
|
|
134
|
+
this._tree.forEach((key) => { elements.push(key); return undefined; });
|
|
110
135
|
const subsets = [];
|
|
111
136
|
const n = elements.length;
|
|
112
137
|
for (let i = 0; i < (1 << n); i++) {
|
|
@@ -180,12 +205,12 @@ export class RecursiveSet {
|
|
|
180
205
|
}
|
|
181
206
|
toSet() {
|
|
182
207
|
const result = new Set();
|
|
183
|
-
this._tree.forEach((key) => result.add(key));
|
|
208
|
+
this._tree.forEach((key) => { result.add(key); return undefined; });
|
|
184
209
|
return result;
|
|
185
210
|
}
|
|
186
211
|
*[Symbol.iterator]() {
|
|
187
212
|
const keys = [];
|
|
188
|
-
this._tree.forEach((key) => keys.push(key));
|
|
213
|
+
this._tree.forEach((key) => { keys.push(key); return undefined; });
|
|
189
214
|
yield* keys;
|
|
190
215
|
}
|
|
191
216
|
toString() {
|
|
@@ -199,6 +224,7 @@ export class RecursiveSet {
|
|
|
199
224
|
else {
|
|
200
225
|
elements.push(String(key));
|
|
201
226
|
}
|
|
227
|
+
return undefined;
|
|
202
228
|
});
|
|
203
229
|
return `{${elements.join(", ")}}`;
|
|
204
230
|
}
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,2BAA2B,CAAC;AAEnD;;;;GAIG;AAEH;;;GAGG;AACH,SAAS,OAAO,CAAC,CAAM,EAAE,CAAM;IAC3B,2BAA2B;IAC3B,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEtB,yDAAyD;IACzD,MAAM,MAAM,GAAG,CAAC,YAAY,YAAY,CAAC;IACzC,MAAM,MAAM,GAAG,CAAC,YAAY,YAAY,CAAC;IACzC,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,gBAAgB;IAChB,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|