@esportsplus/reactivity 0.1.27 → 0.1.29
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 +5 -5
- package/build/reactive/array.js +8 -1
- package/build/reactive/index.d.ts +5 -5
- package/build/reactive/object.d.ts +1 -1
- package/build/reactive/object.js +15 -15
- package/package.json +2 -2
- package/src/reactive/array.ts +16 -7
- package/src/reactive/index.ts +5 -3
- package/src/reactive/object.ts +15 -15
|
@@ -24,7 +24,6 @@ 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[]);
|
|
@@ -33,6 +32,7 @@ declare class ReactiveArray<T> extends Array<T> {
|
|
|
33
32
|
dispatch<E extends keyof Events<T>>(event: E, data?: Events<T>[E]): void;
|
|
34
33
|
dispose(): void;
|
|
35
34
|
fill(value: T, start?: number, end?: number): this;
|
|
35
|
+
map<U>(fn: (value: T, i: number, values: this) => U): U[];
|
|
36
36
|
on<E extends keyof Events<T>>(event: E, listener: Listener<Events<T>[E]>): void;
|
|
37
37
|
once<E extends keyof Events<T>>(event: E, listener: Listener<Events<T>[E]>): void;
|
|
38
38
|
pop(): T | undefined;
|
|
@@ -44,16 +44,16 @@ declare class ReactiveArray<T> extends Array<T> {
|
|
|
44
44
|
track(): 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
|
@@ -13,7 +13,7 @@ function unsupported(method) {
|
|
|
13
13
|
class ReactiveArray extends Array {
|
|
14
14
|
signal;
|
|
15
15
|
constructor(data) {
|
|
16
|
-
super(
|
|
16
|
+
super(data);
|
|
17
17
|
this.signal = signal(false);
|
|
18
18
|
}
|
|
19
19
|
set length(n) {
|
|
@@ -37,6 +37,13 @@ class ReactiveArray extends Array {
|
|
|
37
37
|
this.trigger();
|
|
38
38
|
return this;
|
|
39
39
|
}
|
|
40
|
+
map(fn) {
|
|
41
|
+
let values = [];
|
|
42
|
+
for (let i = 0, n = this.length; i < n; i++) {
|
|
43
|
+
values.push(fn(this[i], i, this));
|
|
44
|
+
}
|
|
45
|
+
return values;
|
|
46
|
+
}
|
|
40
47
|
on(event, listener) {
|
|
41
48
|
this.signal.on(event, listener);
|
|
42
49
|
}
|
|
@@ -8,11 +8,11 @@ type Infer<T> = T extends (...args: unknown[]) => unknown ? ReturnType<T> : T ex
|
|
|
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> : 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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"author": "ICJR",
|
|
3
3
|
"dependencies": {
|
|
4
|
-
"@esportsplus/custom-function": "^0.0.
|
|
4
|
+
"@esportsplus/custom-function": "^0.0.7"
|
|
5
5
|
},
|
|
6
6
|
"devDependencies": {
|
|
7
7
|
"@esportsplus/typescript": "^0.4.9"
|
|
@@ -16,5 +16,5 @@
|
|
|
16
16
|
"prepublishOnly": "npm run build"
|
|
17
17
|
},
|
|
18
18
|
"types": "build/index.d.ts",
|
|
19
|
-
"version": "0.1.
|
|
19
|
+
"version": "0.1.29"
|
|
20
20
|
}
|
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 = [];
|
|
@@ -37,7 +35,8 @@ class ReactiveArray<T> extends Array<T> {
|
|
|
37
35
|
|
|
38
36
|
|
|
39
37
|
constructor(data: T[]) {
|
|
40
|
-
|
|
38
|
+
// @ts-ignore
|
|
39
|
+
super(data);
|
|
41
40
|
this.signal = signal(false);
|
|
42
41
|
}
|
|
43
42
|
|
|
@@ -73,6 +72,16 @@ class ReactiveArray<T> extends Array<T> {
|
|
|
73
72
|
return this;
|
|
74
73
|
}
|
|
75
74
|
|
|
75
|
+
map<U>(fn: (value: T, i: number, values: this) => U) {
|
|
76
|
+
let values: U[] = [];
|
|
77
|
+
|
|
78
|
+
for (let i = 0, n = this.length; i < n; i++) {
|
|
79
|
+
values.push( fn(this[i], i, this) );
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return values;
|
|
83
|
+
}
|
|
84
|
+
|
|
76
85
|
on<E extends keyof Events<T>>(event: E, listener: Listener<Events<T>[E]>) {
|
|
77
86
|
this.signal.on(event, listener);
|
|
78
87
|
}
|
|
@@ -162,8 +171,8 @@ class ReactiveArray<T> extends Array<T> {
|
|
|
162
171
|
|
|
163
172
|
// REMINDER:
|
|
164
173
|
// - @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<
|
|
174
|
+
// - Input values are being transformed by this class into signals
|
|
175
|
+
class ReactiveObjectArray<T extends Object> extends ReactiveArray<ReactiveObject<T>> {
|
|
167
176
|
private options: Options;
|
|
168
177
|
|
|
169
178
|
|
|
@@ -182,7 +191,7 @@ class ReactiveObjectArray<T extends Object> extends ReactiveArray<Node<T>> {
|
|
|
182
191
|
}
|
|
183
192
|
|
|
184
193
|
pop() {
|
|
185
|
-
return dispose(super.pop()) as
|
|
194
|
+
return dispose(super.pop()) as ReactiveObject<T>| undefined;
|
|
186
195
|
}
|
|
187
196
|
|
|
188
197
|
// @ts-ignore
|
|
@@ -191,7 +200,7 @@ class ReactiveObjectArray<T extends Object> extends ReactiveArray<Node<T>> {
|
|
|
191
200
|
}
|
|
192
201
|
|
|
193
202
|
shift() {
|
|
194
|
-
return dispose(super.shift()) as
|
|
203
|
+
return dispose(super.shift()) as ReactiveObject<T> | undefined;
|
|
195
204
|
}
|
|
196
205
|
|
|
197
206
|
sort() {
|
package/src/reactive/index.ts
CHANGED
|
@@ -21,18 +21,20 @@ type Infer<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
28
|
? T extends Object[] ? ReactiveObjectArray<T[0]> : ReactiveArray<T>
|
|
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
|
}
|