@esportsplus/reactivity 0.1.18 → 0.1.20
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/.editorconfig +9 -9
- package/.gitattributes +2 -2
- package/.github/dependabot.yml +23 -0
- package/.github/workflows/bump.yml +7 -0
- package/.github/workflows/publish.yml +14 -0
- package/build/macro.d.ts +1 -1
- package/build/signal.d.ts +3 -3
- package/build/signal.js +3 -0
- package/package.json +20 -20
- package/readme.md +1 -1
- package/src/constants.ts +18 -18
- package/src/index.ts +5 -5
- package/src/macro.ts +28 -28
- package/src/reactive/array.ts +212 -214
- package/src/reactive/index.ts +37 -37
- package/src/reactive/object.ts +76 -76
- package/src/resource.ts +70 -70
- package/src/signal.ts +375 -371
- package/src/types.ts +54 -54
- package/src/utilities.ts +5 -5
- package/tsconfig.json +10 -9
package/src/reactive/array.ts
CHANGED
|
@@ -1,215 +1,213 @@
|
|
|
1
|
-
import { dispose, signal } from '~/signal';
|
|
2
|
-
import { Listener, Object, Options, Signal } from '~/types';
|
|
3
|
-
import { ReactiveObject } from './object';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
type Events<T> = {
|
|
7
|
-
fill: { value: T };
|
|
8
|
-
pop: { item: T };
|
|
9
|
-
push: { items: T[] };
|
|
10
|
-
reverse: undefined;
|
|
11
|
-
shift: { item: T };
|
|
12
|
-
sort: undefined;
|
|
13
|
-
splice: { deleteCount: number, items: T[], start: number };
|
|
14
|
-
unshift: { items: T[] };
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
type Node<T extends Object> = ReactiveObject<T>;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
function factory<T extends Object>(data: T[], options: Options = {}) {
|
|
21
|
-
let signals = [];
|
|
22
|
-
|
|
23
|
-
for (let i = 0, n = data.length; i < n; i++) {
|
|
24
|
-
signals.push( new ReactiveObject(data[i], options) );
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return signals;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function unsupported(method: string): never {
|
|
31
|
-
throw new Error(`Reactivity: '${method}' is not supported on reactive object array`);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
this
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
this
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
this
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
//
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
1
|
+
import { dispose, signal } from '~/signal';
|
|
2
|
+
import { Listener, Object, Options, Signal } from '~/types';
|
|
3
|
+
import { ReactiveObject } from './object';
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
type Events<T> = {
|
|
7
|
+
fill: { value: T };
|
|
8
|
+
pop: { item: T };
|
|
9
|
+
push: { items: T[] };
|
|
10
|
+
reverse: undefined;
|
|
11
|
+
shift: { item: T };
|
|
12
|
+
sort: undefined;
|
|
13
|
+
splice: { deleteCount: number, items: T[], start: number };
|
|
14
|
+
unshift: { items: T[] };
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
type Node<T extends Object> = ReactiveObject<T>;
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
function factory<T extends Object>(data: T[], options: Options = {}) {
|
|
21
|
+
let signals = [];
|
|
22
|
+
|
|
23
|
+
for (let i = 0, n = data.length; i < n; i++) {
|
|
24
|
+
signals.push( new ReactiveObject(data[i], options) );
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return signals;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function unsupported(method: string): never {
|
|
31
|
+
throw new Error(`Reactivity: '${method}' is not supported on reactive object array`);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class ReactiveArray<T> extends Array<T> {
|
|
36
|
+
#signal: Signal<boolean>;
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
constructor(data: T[]) {
|
|
40
|
+
super(...data);
|
|
41
|
+
this.#signal = signal(false);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
set length(n: number) {
|
|
46
|
+
if (n > this.length) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
this.splice(n);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
private trigger() {
|
|
55
|
+
this.#signal.set(!this.#signal.value);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
dispatch<E extends keyof Events<T>>(event: E, data?: Events<T>[E]) {
|
|
60
|
+
this.#signal.dispatch(event, data);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
dispose() {
|
|
64
|
+
this.#signal.dispose();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
fill(value: T, start?: number, end?: number) {
|
|
68
|
+
super.fill(value, start, end);
|
|
69
|
+
|
|
70
|
+
this.dispatch('fill', { value });
|
|
71
|
+
this.trigger();
|
|
72
|
+
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
on<E extends keyof Events<T>>(event: E, listener: Listener<Events<T>[E]>) {
|
|
77
|
+
this.#signal.on(event, listener);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
once<E extends keyof Events<T>>(event: E, listener: Listener<Events<T>[E]>) {
|
|
81
|
+
this.#signal.once(event, listener);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
pop() {
|
|
85
|
+
let item = super.pop();
|
|
86
|
+
|
|
87
|
+
if (item !== undefined) {
|
|
88
|
+
this.dispatch('pop', { item });
|
|
89
|
+
this.trigger();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return item;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
push(...items: T[]) {
|
|
96
|
+
let n = super.push(...items);
|
|
97
|
+
|
|
98
|
+
this.dispatch('push', { items });
|
|
99
|
+
this.trigger();
|
|
100
|
+
|
|
101
|
+
return n;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
reverse() {
|
|
105
|
+
super.reverse();
|
|
106
|
+
|
|
107
|
+
this.dispatch('reverse');
|
|
108
|
+
this.trigger();
|
|
109
|
+
|
|
110
|
+
return this;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
shift() {
|
|
114
|
+
let item = super.shift();
|
|
115
|
+
|
|
116
|
+
if (item !== undefined) {
|
|
117
|
+
this.dispatch('shift', { item });
|
|
118
|
+
this.trigger();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return item;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
sort() {
|
|
125
|
+
super.sort();
|
|
126
|
+
|
|
127
|
+
this.dispatch('sort');
|
|
128
|
+
this.trigger();
|
|
129
|
+
|
|
130
|
+
return this;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
splice(start: number, deleteCount: number = super.length, ...items: T[]) {
|
|
134
|
+
let removed = super.splice(start, deleteCount, ...items);
|
|
135
|
+
|
|
136
|
+
if (items.length > 0 || removed.length > 0) {
|
|
137
|
+
this.dispatch('splice', {
|
|
138
|
+
deleteCount,
|
|
139
|
+
items,
|
|
140
|
+
start
|
|
141
|
+
});
|
|
142
|
+
this.trigger();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return removed;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
track() {
|
|
149
|
+
this.#signal.get();
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
unshift(...items: T[]) {
|
|
153
|
+
let length = super.unshift(...items);
|
|
154
|
+
|
|
155
|
+
this.dispatch('unshift', { items });
|
|
156
|
+
this.trigger();
|
|
157
|
+
|
|
158
|
+
return length;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
// REMINDER:
|
|
164
|
+
// - @ts-ignore flags are supressing a type mismatch error
|
|
165
|
+
// - Input values are being transformed by this class into nodes
|
|
166
|
+
class ReactiveObjectArray<T extends Object> extends ReactiveArray<Node<T>> {
|
|
167
|
+
#options: Options;
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
constructor(data: T[], options: Options = {}) {
|
|
171
|
+
super( factory(data, options) );
|
|
172
|
+
this.#options = options;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
fill() {
|
|
177
|
+
return unsupported('fill');
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
reverse() {
|
|
181
|
+
return unsupported('reverse');
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
pop() {
|
|
185
|
+
return dispose(super.pop()) as Node<T> | undefined;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// @ts-ignore
|
|
189
|
+
push(...values: T[]) {
|
|
190
|
+
return super.push(...factory(values, this.#options));
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
shift() {
|
|
194
|
+
return dispose(super.shift()) as Node<T> | undefined;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
sort() {
|
|
198
|
+
return unsupported('sort');
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// @ts-ignore
|
|
202
|
+
splice(start: number, deleteCount: number = super.length, ...values: T[]) {
|
|
203
|
+
return dispose( super.splice(start, deleteCount, ...factory(values, this.#options)) );
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// @ts-ignore
|
|
207
|
+
unshift(...values: T[]) {
|
|
208
|
+
return super.unshift(...factory(values, this.#options));
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
|
|
215
213
|
export { ReactiveArray, ReactiveObjectArray };
|
package/src/reactive/index.ts
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import { Computed, Object, Options, Prettify, Signal } from '~/types';
|
|
2
|
-
import { ReactiveArray, ReactiveObjectArray } from './array';
|
|
3
|
-
import { ReactiveObject } from './object';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
type Guard<T> =
|
|
7
|
-
T extends Object
|
|
8
|
-
? { [K in keyof T]: Never<K, Guard<T[K]>> }
|
|
9
|
-
: T extends unknown[]
|
|
10
|
-
? Guard<T[number]>[]
|
|
11
|
-
: T;
|
|
12
|
-
|
|
13
|
-
type Infer<T> =
|
|
14
|
-
T extends (...args: unknown[]) => unknown
|
|
15
|
-
? ReturnType<T>
|
|
16
|
-
: T extends unknown[]
|
|
17
|
-
? Infer<T[number]>[]
|
|
18
|
-
: T extends Object
|
|
19
|
-
? { [K in keyof T]: T[K] }
|
|
20
|
-
: T;
|
|
21
|
-
|
|
22
|
-
type Never<K,V> = K extends keyof ReactiveObject<Object> ? never : V;
|
|
23
|
-
|
|
24
|
-
type Node<T> =
|
|
25
|
-
T extends (...args: unknown[]) => unknown
|
|
26
|
-
? Computed<T>
|
|
27
|
-
: T extends unknown[]
|
|
28
|
-
? T extends Object[] ? ReactiveObjectArray<T[0]> : ReactiveArray<T>
|
|
29
|
-
: Signal<T>;
|
|
30
|
-
|
|
31
|
-
type Nodes<T extends Object> = { [K in keyof T]: Node<T[K]> };
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
export default <T extends Object>(data: Guard<T>, options?: Options) => {
|
|
35
|
-
return new ReactiveObject(data, options) as any as Prettify<
|
|
36
|
-
{ [K in keyof T]: Infer<T[K]> } & Omit<ReactiveObject<T>, 'nodes'> & { nodes: Nodes<T> }
|
|
37
|
-
>;
|
|
1
|
+
import { Computed, Object, Options, Prettify, Signal } from '~/types';
|
|
2
|
+
import { ReactiveArray, ReactiveObjectArray } from './array';
|
|
3
|
+
import { ReactiveObject } from './object';
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
type Guard<T> =
|
|
7
|
+
T extends Object
|
|
8
|
+
? { [K in keyof T]: Never<K, Guard<T[K]>> }
|
|
9
|
+
: T extends unknown[]
|
|
10
|
+
? Guard<T[number]>[]
|
|
11
|
+
: T;
|
|
12
|
+
|
|
13
|
+
type Infer<T> =
|
|
14
|
+
T extends (...args: unknown[]) => unknown
|
|
15
|
+
? ReturnType<T>
|
|
16
|
+
: T extends unknown[]
|
|
17
|
+
? Infer<T[number]>[]
|
|
18
|
+
: T extends Object
|
|
19
|
+
? { [K in keyof T]: T[K] }
|
|
20
|
+
: T;
|
|
21
|
+
|
|
22
|
+
type Never<K,V> = K extends keyof ReactiveObject<Object> ? never : V;
|
|
23
|
+
|
|
24
|
+
type Node<T> =
|
|
25
|
+
T extends (...args: unknown[]) => unknown
|
|
26
|
+
? Computed<T>
|
|
27
|
+
: T extends unknown[]
|
|
28
|
+
? T extends Object[] ? ReactiveObjectArray<T[0]> : ReactiveArray<T>
|
|
29
|
+
: Signal<T>;
|
|
30
|
+
|
|
31
|
+
type Nodes<T extends Object> = { [K in keyof T]: Node<T[K]> };
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
export default <T extends Object>(data: Guard<T>, options?: Options) => {
|
|
35
|
+
return new ReactiveObject(data, options) as any as Prettify<
|
|
36
|
+
{ [K in keyof T]: Infer<T[K]> } & Omit<ReactiveObject<T>, 'nodes'> & { nodes: Nodes<T> }
|
|
37
|
+
>;
|
|
38
38
|
};
|
package/src/reactive/object.ts
CHANGED
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
import { computed, signal } from '~/signal';
|
|
2
|
-
import { Computed, Object, Options, Signal } from '~/types';
|
|
3
|
-
import { defineProperty, isArray } from '~/utilities';
|
|
4
|
-
import { ReactiveArray, ReactiveObjectArray } from './array';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
type Node = Computed<any> | ReactiveArray<any> | ReactiveObjectArray<Object> | Signal<any>;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class ReactiveObject<T extends Object> {
|
|
11
|
-
nodes: Record<PropertyKey, Node> = {};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
constructor(data: T, options: Options = {}) {
|
|
15
|
-
let nodes = this.nodes;
|
|
16
|
-
|
|
17
|
-
for (let key in data) {
|
|
18
|
-
let input = data[key];
|
|
19
|
-
|
|
20
|
-
if (typeof input === 'function') {
|
|
21
|
-
let node = nodes[key] = computed(input as Computed<T>['fn'], options);
|
|
22
|
-
|
|
23
|
-
defineProperty(this, key, {
|
|
24
|
-
enumerable: true,
|
|
25
|
-
get() {
|
|
26
|
-
return node.get();
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
else if (isArray(input)) {
|
|
31
|
-
let node: ReactiveArray<unknown> | ReactiveObjectArray<Object>,
|
|
32
|
-
test = input[0];
|
|
33
|
-
|
|
34
|
-
if (typeof test === 'object' && test !== null && test?.constructor?.name === 'Object') {
|
|
35
|
-
node = nodes[key] = new ReactiveObjectArray(input, options);
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
node = nodes[key] = new ReactiveArray(input);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
defineProperty(this, key, {
|
|
42
|
-
enumerable: true,
|
|
43
|
-
get() {
|
|
44
|
-
node.track();
|
|
45
|
-
|
|
46
|
-
return node;
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
let node = nodes[key] = signal(input, options);
|
|
52
|
-
|
|
53
|
-
defineProperty(this, key, {
|
|
54
|
-
enumerable: true,
|
|
55
|
-
get() {
|
|
56
|
-
return node.get();
|
|
57
|
-
},
|
|
58
|
-
set(value) {
|
|
59
|
-
node.set(value);
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
dispose() {
|
|
68
|
-
let nodes = this.nodes;
|
|
69
|
-
|
|
70
|
-
for (let key in nodes) {
|
|
71
|
-
nodes[key].dispose();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
1
|
+
import { computed, signal } from '~/signal';
|
|
2
|
+
import { Computed, Object, Options, Signal } from '~/types';
|
|
3
|
+
import { defineProperty, isArray } from '~/utilities';
|
|
4
|
+
import { ReactiveArray, ReactiveObjectArray } from './array';
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
type Node = Computed<any> | ReactiveArray<any> | ReactiveObjectArray<Object> | Signal<any>;
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ReactiveObject<T extends Object> {
|
|
11
|
+
nodes: Record<PropertyKey, Node> = {};
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
constructor(data: T, options: Options = {}) {
|
|
15
|
+
let nodes = this.nodes;
|
|
16
|
+
|
|
17
|
+
for (let key in data) {
|
|
18
|
+
let input = data[key];
|
|
19
|
+
|
|
20
|
+
if (typeof input === 'function') {
|
|
21
|
+
let node = nodes[key] = computed(input as Computed<T>['fn'], options);
|
|
22
|
+
|
|
23
|
+
defineProperty(this, key, {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
get() {
|
|
26
|
+
return node.get();
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
else if (isArray(input)) {
|
|
31
|
+
let node: ReactiveArray<unknown> | ReactiveObjectArray<Object>,
|
|
32
|
+
test = input[0];
|
|
33
|
+
|
|
34
|
+
if (typeof test === 'object' && test !== null && test?.constructor?.name === 'Object') {
|
|
35
|
+
node = nodes[key] = new ReactiveObjectArray(input, options);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
node = nodes[key] = new ReactiveArray(input);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
defineProperty(this, key, {
|
|
42
|
+
enumerable: true,
|
|
43
|
+
get() {
|
|
44
|
+
node.track();
|
|
45
|
+
|
|
46
|
+
return node;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
let node = nodes[key] = signal(input, options);
|
|
52
|
+
|
|
53
|
+
defineProperty(this, key, {
|
|
54
|
+
enumerable: true,
|
|
55
|
+
get() {
|
|
56
|
+
return node.get();
|
|
57
|
+
},
|
|
58
|
+
set(value) {
|
|
59
|
+
node.set(value);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
dispose() {
|
|
68
|
+
let nodes = this.nodes;
|
|
69
|
+
|
|
70
|
+
for (let key in nodes) {
|
|
71
|
+
nodes[key].dispose();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
|
|
77
77
|
export { ReactiveObject };
|