@esportsplus/reactivity 0.1.28 → 0.1.30
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/build/reactive/array.d.ts +7 -7
- package/build/reactive/array.js +12 -4
- package/build/reactive/index.d.ts +6 -6
- package/build/reactive/object.d.ts +1 -1
- package/build/reactive/object.js +15 -15
- package/package.json +1 -1
- package/src/reactive/array.ts +20 -12
- package/src/reactive/index.ts +7 -5
- package/src/reactive/object.ts +15 -15
|
@@ -24,15 +24,14 @@ type Events<T> = {
|
|
|
24
24
|
items: T[];
|
|
25
25
|
};
|
|
26
26
|
};
|
|
27
|
-
type Node<T extends Object> = ReactiveObject<T>;
|
|
28
27
|
declare class ReactiveArray<T> extends Array<T> {
|
|
29
28
|
private signal;
|
|
30
29
|
constructor(data: T[]);
|
|
31
30
|
set length(n: number);
|
|
32
|
-
private trigger;
|
|
33
31
|
dispatch<E extends keyof Events<T>>(event: E, data?: Events<T>[E]): void;
|
|
34
32
|
dispose(): void;
|
|
35
33
|
fill(value: T, start?: number, end?: number): this;
|
|
34
|
+
map<U>(fn: (this: ReactiveArray<T>, value: T, i: number, values: this) => U): U[];
|
|
36
35
|
on<E extends keyof Events<T>>(event: E, listener: Listener<Events<T>[E]>): void;
|
|
37
36
|
once<E extends keyof Events<T>>(event: E, listener: Listener<Events<T>[E]>): void;
|
|
38
37
|
pop(): T | undefined;
|
|
@@ -41,19 +40,20 @@ declare class ReactiveArray<T> extends Array<T> {
|
|
|
41
40
|
shift(): T | undefined;
|
|
42
41
|
sort(): this;
|
|
43
42
|
splice(start: number, deleteCount?: number, ...items: T[]): T[];
|
|
44
|
-
track():
|
|
43
|
+
track(index?: number): T | undefined;
|
|
44
|
+
trigger(): void;
|
|
45
45
|
unshift(...items: T[]): number;
|
|
46
46
|
}
|
|
47
|
-
declare class ReactiveObjectArray<T extends Object> extends ReactiveArray<
|
|
47
|
+
declare class ReactiveObjectArray<T extends Object> extends ReactiveArray<ReactiveObject<T>> {
|
|
48
48
|
private options;
|
|
49
49
|
constructor(data: T[], options?: Options);
|
|
50
50
|
fill(): never;
|
|
51
51
|
reverse(): never;
|
|
52
|
-
pop():
|
|
52
|
+
pop(): ReactiveObject<T> | undefined;
|
|
53
53
|
push(...values: T[]): number;
|
|
54
|
-
shift():
|
|
54
|
+
shift(): ReactiveObject<T> | undefined;
|
|
55
55
|
sort(): never;
|
|
56
|
-
splice(start: number, deleteCount?: number, ...values: T[]):
|
|
56
|
+
splice(start: number, deleteCount?: number, ...values: T[]): ReactiveObject<T> | ReactiveObject<T>[] | null | undefined;
|
|
57
57
|
unshift(...values: T[]): number;
|
|
58
58
|
}
|
|
59
59
|
export { ReactiveArray, ReactiveObjectArray };
|
package/build/reactive/array.js
CHANGED
|
@@ -22,9 +22,6 @@ class ReactiveArray extends Array {
|
|
|
22
22
|
}
|
|
23
23
|
this.splice(n);
|
|
24
24
|
}
|
|
25
|
-
trigger() {
|
|
26
|
-
this.signal.set(!this.signal.value);
|
|
27
|
-
}
|
|
28
25
|
dispatch(event, data) {
|
|
29
26
|
this.signal.dispatch(event, data);
|
|
30
27
|
}
|
|
@@ -37,6 +34,13 @@ class ReactiveArray extends Array {
|
|
|
37
34
|
this.trigger();
|
|
38
35
|
return this;
|
|
39
36
|
}
|
|
37
|
+
map(fn) {
|
|
38
|
+
let values = [];
|
|
39
|
+
for (let i = 0, n = this.length; i < n; i++) {
|
|
40
|
+
values.push(fn.call(this, this[i], i, this));
|
|
41
|
+
}
|
|
42
|
+
return values;
|
|
43
|
+
}
|
|
40
44
|
on(event, listener) {
|
|
41
45
|
this.signal.on(event, listener);
|
|
42
46
|
}
|
|
@@ -89,8 +93,12 @@ class ReactiveArray extends Array {
|
|
|
89
93
|
}
|
|
90
94
|
return removed;
|
|
91
95
|
}
|
|
92
|
-
track() {
|
|
96
|
+
track(index) {
|
|
93
97
|
this.signal.get();
|
|
98
|
+
return index === undefined ? undefined : this[index];
|
|
99
|
+
}
|
|
100
|
+
trigger() {
|
|
101
|
+
this.signal.set(!this.signal.value);
|
|
94
102
|
}
|
|
95
103
|
unshift(...items) {
|
|
96
104
|
let length = super.unshift(...items);
|
|
@@ -4,15 +4,15 @@ import { ReactiveObject } from './object';
|
|
|
4
4
|
type Guard<T> = T extends Object ? {
|
|
5
5
|
[K in keyof T]: Never<K, Guard<T[K]>>;
|
|
6
6
|
} : T extends unknown[] ? Guard<T[number]>[] : T;
|
|
7
|
-
type Infer<T> = T extends (...args: unknown[]) => unknown ? ReturnType<T> : T extends unknown[] ?
|
|
7
|
+
type Infer<T> = T extends (...args: unknown[]) => unknown ? ReturnType<T> : T extends unknown[] ? T extends Object[] ? ReactiveObjectArray<T[0]> : ReactiveArray<T[0]> : T extends Object ? {
|
|
8
8
|
[K in keyof T]: T[K];
|
|
9
9
|
} : T;
|
|
10
10
|
type Never<K, V> = K extends keyof ReactiveObject<Object> ? never : V;
|
|
11
|
-
type
|
|
12
|
-
type
|
|
13
|
-
[K in keyof T]:
|
|
11
|
+
type Nodes<T> = T extends (...args: unknown[]) => unknown ? Computed<T> : T extends unknown[] ? T extends Object[] ? ReactiveObjectArray<T[0]> : ReactiveArray<T[0]> : Signal<T>;
|
|
12
|
+
type Signals<T extends Object> = {
|
|
13
|
+
[K in keyof T]: Nodes<T[K]>;
|
|
14
14
|
};
|
|
15
|
-
declare const _default: <T extends Object>(data: Guard<T>, options?: Options) => Prettify<{ [K in keyof T]: Infer<T[K]>; } & Omit<ReactiveObject<T>, "
|
|
16
|
-
|
|
15
|
+
declare const _default: <T extends Object>(data: Guard<T>, options?: Options) => Prettify<{ [K in keyof T]: Infer<T[K]>; } & Omit<ReactiveObject<T>, "signals"> & {
|
|
16
|
+
signals: Signals<T>;
|
|
17
17
|
}>;
|
|
18
18
|
export default _default;
|
|
@@ -2,7 +2,7 @@ import { Computed, Object, Options, Signal } from '../types';
|
|
|
2
2
|
import { ReactiveArray, ReactiveObjectArray } from './array';
|
|
3
3
|
type Node = Computed<any> | ReactiveArray<any> | ReactiveObjectArray<Object> | Signal<any>;
|
|
4
4
|
declare class ReactiveObject<T extends Object> {
|
|
5
|
-
|
|
5
|
+
signals: Record<PropertyKey, Node>;
|
|
6
6
|
constructor(data: T, options?: Options);
|
|
7
7
|
dispose(): void;
|
|
8
8
|
}
|
package/build/reactive/object.js
CHANGED
|
@@ -2,54 +2,54 @@ import { computed, signal } from '../signal';
|
|
|
2
2
|
import { defineProperty, isArray } from '../utilities';
|
|
3
3
|
import { ReactiveArray, ReactiveObjectArray } from './array';
|
|
4
4
|
class ReactiveObject {
|
|
5
|
-
|
|
5
|
+
signals = {};
|
|
6
6
|
constructor(data, options = {}) {
|
|
7
|
-
let
|
|
7
|
+
let signals = this.signals;
|
|
8
8
|
for (let key in data) {
|
|
9
9
|
let input = data[key];
|
|
10
10
|
if (typeof input === 'function') {
|
|
11
|
-
let
|
|
11
|
+
let s = signals[key] = computed(input, options);
|
|
12
12
|
defineProperty(this, key, {
|
|
13
13
|
enumerable: true,
|
|
14
14
|
get() {
|
|
15
|
-
return
|
|
15
|
+
return s.get();
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
19
|
else if (isArray(input)) {
|
|
20
|
-
let
|
|
20
|
+
let s, test = input[0];
|
|
21
21
|
if (typeof test === 'object' && test !== null && test?.constructor?.name === 'Object') {
|
|
22
|
-
|
|
22
|
+
s = signals[key] = new ReactiveObjectArray(input, options);
|
|
23
23
|
}
|
|
24
24
|
else {
|
|
25
|
-
|
|
25
|
+
s = signals[key] = new ReactiveArray(input);
|
|
26
26
|
}
|
|
27
27
|
defineProperty(this, key, {
|
|
28
28
|
enumerable: true,
|
|
29
29
|
get() {
|
|
30
|
-
|
|
31
|
-
return
|
|
30
|
+
s.track();
|
|
31
|
+
return s;
|
|
32
32
|
}
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
else {
|
|
36
|
-
let
|
|
36
|
+
let s = signals[key] = signal(input, options);
|
|
37
37
|
defineProperty(this, key, {
|
|
38
38
|
enumerable: true,
|
|
39
39
|
get() {
|
|
40
|
-
return
|
|
40
|
+
return s.get();
|
|
41
41
|
},
|
|
42
42
|
set(value) {
|
|
43
|
-
|
|
43
|
+
s.set(value);
|
|
44
44
|
}
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
dispose() {
|
|
50
|
-
let
|
|
51
|
-
for (let key in
|
|
52
|
-
|
|
50
|
+
let signals = this.signals;
|
|
51
|
+
for (let key in signals) {
|
|
52
|
+
signals[key].dispose();
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
}
|
package/package.json
CHANGED
package/src/reactive/array.ts
CHANGED
|
@@ -14,8 +14,6 @@ type Events<T> = {
|
|
|
14
14
|
unshift: { items: T[] };
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
-
type Node<T extends Object> = ReactiveObject<T>;
|
|
18
|
-
|
|
19
17
|
|
|
20
18
|
function factory<T extends Object>(data: T[], options: Options = {}) {
|
|
21
19
|
let signals = [];
|
|
@@ -51,11 +49,6 @@ class ReactiveArray<T> extends Array<T> {
|
|
|
51
49
|
}
|
|
52
50
|
|
|
53
51
|
|
|
54
|
-
private trigger() {
|
|
55
|
-
this.signal.set(!this.signal.value);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
|
|
59
52
|
dispatch<E extends keyof Events<T>>(event: E, data?: Events<T>[E]) {
|
|
60
53
|
this.signal.dispatch(event, data);
|
|
61
54
|
}
|
|
@@ -73,6 +66,16 @@ class ReactiveArray<T> extends Array<T> {
|
|
|
73
66
|
return this;
|
|
74
67
|
}
|
|
75
68
|
|
|
69
|
+
map<U>(fn: (this: ReactiveArray<T>, value: T, i: number, values: this) => U) {
|
|
70
|
+
let values: U[] = [];
|
|
71
|
+
|
|
72
|
+
for (let i = 0, n = this.length; i < n; i++) {
|
|
73
|
+
values.push( fn.call(this, this[i], i, this) );
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return values;
|
|
77
|
+
}
|
|
78
|
+
|
|
76
79
|
on<E extends keyof Events<T>>(event: E, listener: Listener<Events<T>[E]>) {
|
|
77
80
|
this.signal.on(event, listener);
|
|
78
81
|
}
|
|
@@ -145,8 +148,13 @@ class ReactiveArray<T> extends Array<T> {
|
|
|
145
148
|
return removed;
|
|
146
149
|
}
|
|
147
150
|
|
|
148
|
-
track() {
|
|
151
|
+
track(index?: number) {
|
|
149
152
|
this.signal.get();
|
|
153
|
+
return index === undefined ? undefined : this[index];
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
trigger() {
|
|
157
|
+
this.signal.set(!this.signal.value);
|
|
150
158
|
}
|
|
151
159
|
|
|
152
160
|
unshift(...items: T[]) {
|
|
@@ -162,8 +170,8 @@ class ReactiveArray<T> extends Array<T> {
|
|
|
162
170
|
|
|
163
171
|
// REMINDER:
|
|
164
172
|
// - @ts-ignore flags are supressing a type mismatch error
|
|
165
|
-
// - Input values are being transformed by this class into
|
|
166
|
-
class ReactiveObjectArray<T extends Object> extends ReactiveArray<
|
|
173
|
+
// - Input values are being transformed by this class into signals
|
|
174
|
+
class ReactiveObjectArray<T extends Object> extends ReactiveArray<ReactiveObject<T>> {
|
|
167
175
|
private options: Options;
|
|
168
176
|
|
|
169
177
|
|
|
@@ -182,7 +190,7 @@ class ReactiveObjectArray<T extends Object> extends ReactiveArray<Node<T>> {
|
|
|
182
190
|
}
|
|
183
191
|
|
|
184
192
|
pop() {
|
|
185
|
-
return dispose(super.pop()) as
|
|
193
|
+
return dispose(super.pop()) as ReactiveObject<T>| undefined;
|
|
186
194
|
}
|
|
187
195
|
|
|
188
196
|
// @ts-ignore
|
|
@@ -191,7 +199,7 @@ class ReactiveObjectArray<T extends Object> extends ReactiveArray<Node<T>> {
|
|
|
191
199
|
}
|
|
192
200
|
|
|
193
201
|
shift() {
|
|
194
|
-
return dispose(super.shift()) as
|
|
202
|
+
return dispose(super.shift()) as ReactiveObject<T> | undefined;
|
|
195
203
|
}
|
|
196
204
|
|
|
197
205
|
sort() {
|
package/src/reactive/index.ts
CHANGED
|
@@ -14,25 +14,27 @@ type Infer<T> =
|
|
|
14
14
|
T extends (...args: unknown[]) => unknown
|
|
15
15
|
? ReturnType<T>
|
|
16
16
|
: T extends unknown[]
|
|
17
|
-
?
|
|
17
|
+
? T extends Object[] ? ReactiveObjectArray<T[0]> : ReactiveArray<T[0]>
|
|
18
18
|
: T extends Object
|
|
19
19
|
? { [K in keyof T]: T[K] }
|
|
20
20
|
: T;
|
|
21
21
|
|
|
22
22
|
type Never<K,V> = K extends keyof ReactiveObject<Object> ? never : V;
|
|
23
23
|
|
|
24
|
-
type
|
|
24
|
+
type Nodes<T> =
|
|
25
25
|
T extends (...args: unknown[]) => unknown
|
|
26
26
|
? Computed<T>
|
|
27
27
|
: T extends unknown[]
|
|
28
|
-
? T extends Object[] ? ReactiveObjectArray<T[0]> : ReactiveArray<T>
|
|
28
|
+
? T extends Object[] ? ReactiveObjectArray<T[0]> : ReactiveArray<T[0]>
|
|
29
29
|
: Signal<T>;
|
|
30
30
|
|
|
31
|
-
type
|
|
31
|
+
type Signals<T extends Object> = {
|
|
32
|
+
[K in keyof T]: Nodes<T[K]>
|
|
33
|
+
};
|
|
32
34
|
|
|
33
35
|
|
|
34
36
|
export default <T extends Object>(data: Guard<T>, options?: Options) => {
|
|
35
37
|
return new ReactiveObject(data, options) as any as Prettify<
|
|
36
|
-
{ [K in keyof T]: Infer<T[K]> } & Omit<ReactiveObject<T>, '
|
|
38
|
+
{ [K in keyof T]: Infer<T[K]> } & Omit<ReactiveObject<T>, 'signals'> & { signals: Signals<T> }
|
|
37
39
|
>;
|
|
38
40
|
};
|
package/src/reactive/object.ts
CHANGED
|
@@ -8,55 +8,55 @@ type Node = Computed<any> | ReactiveArray<any> | ReactiveObjectArray<Object> | S
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class ReactiveObject<T extends Object> {
|
|
11
|
-
|
|
11
|
+
signals: Record<PropertyKey, Node> = {};
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
constructor(data: T, options: Options = {}) {
|
|
15
|
-
let
|
|
15
|
+
let signals = this.signals;
|
|
16
16
|
|
|
17
17
|
for (let key in data) {
|
|
18
18
|
let input = data[key];
|
|
19
19
|
|
|
20
20
|
if (typeof input === 'function') {
|
|
21
|
-
let
|
|
21
|
+
let s = signals[key] = computed(input as Computed<T>['fn'], options);
|
|
22
22
|
|
|
23
23
|
defineProperty(this, key, {
|
|
24
24
|
enumerable: true,
|
|
25
25
|
get() {
|
|
26
|
-
return
|
|
26
|
+
return s.get();
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
else if (isArray(input)) {
|
|
31
|
-
let
|
|
31
|
+
let s: ReactiveArray<unknown> | ReactiveObjectArray<Object>,
|
|
32
32
|
test = input[0];
|
|
33
33
|
|
|
34
34
|
if (typeof test === 'object' && test !== null && test?.constructor?.name === 'Object') {
|
|
35
|
-
|
|
35
|
+
s = signals[key] = new ReactiveObjectArray(input, options);
|
|
36
36
|
}
|
|
37
37
|
else {
|
|
38
|
-
|
|
38
|
+
s = signals[key] = new ReactiveArray(input);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
defineProperty(this, key, {
|
|
42
42
|
enumerable: true,
|
|
43
43
|
get() {
|
|
44
|
-
|
|
44
|
+
s.track();
|
|
45
45
|
|
|
46
|
-
return
|
|
46
|
+
return s;
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
50
|
else {
|
|
51
|
-
let
|
|
51
|
+
let s = signals[key] = signal(input, options);
|
|
52
52
|
|
|
53
53
|
defineProperty(this, key, {
|
|
54
54
|
enumerable: true,
|
|
55
55
|
get() {
|
|
56
|
-
return
|
|
56
|
+
return s.get();
|
|
57
57
|
},
|
|
58
58
|
set(value) {
|
|
59
|
-
|
|
59
|
+
s.set(value);
|
|
60
60
|
}
|
|
61
61
|
});
|
|
62
62
|
}
|
|
@@ -65,10 +65,10 @@ class ReactiveObject<T extends Object> {
|
|
|
65
65
|
|
|
66
66
|
|
|
67
67
|
dispose() {
|
|
68
|
-
let
|
|
68
|
+
let signals = this.signals;
|
|
69
69
|
|
|
70
|
-
for (let key in
|
|
71
|
-
|
|
70
|
+
for (let key in signals) {
|
|
71
|
+
signals[key].dispose();
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
}
|