@esportsplus/reactivity 0.13.1 → 0.14.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/build/reactive/array.d.ts +34 -0
- package/build/reactive/array.js +4 -20
- package/package.json +1 -1
- package/src/reactive/array.ts +8 -33
|
@@ -2,6 +2,40 @@ import { Infer } from '../types.js';
|
|
|
2
2
|
type API<T> = Infer<T[]> & {
|
|
3
3
|
clear: () => void;
|
|
4
4
|
dispose: () => void;
|
|
5
|
+
dispatch: <T, K extends keyof Events<T>, V>(event: K, value?: V) => void;
|
|
6
|
+
map: <T, R>(this: API<T>, fn: (this: API<T>, value: T, i: number) => R, i?: number, n?: number) => R[];
|
|
7
|
+
on: <T, K extends keyof Events<T>>(event: K, listener: Listener<Events<T>[K]>) => void;
|
|
8
|
+
once: <T, K extends keyof Events<T>>(event: K, listener: Listener<Events<T>[K]>) => void;
|
|
9
|
+
};
|
|
10
|
+
type Events<T> = {
|
|
11
|
+
clear: undefined;
|
|
12
|
+
pop: {
|
|
13
|
+
item: T;
|
|
14
|
+
};
|
|
15
|
+
push: {
|
|
16
|
+
items: T[];
|
|
17
|
+
};
|
|
18
|
+
reverse: undefined;
|
|
19
|
+
set: {
|
|
20
|
+
index: number;
|
|
21
|
+
item: T;
|
|
22
|
+
};
|
|
23
|
+
shift: {
|
|
24
|
+
item: T;
|
|
25
|
+
};
|
|
26
|
+
sort: undefined;
|
|
27
|
+
splice: {
|
|
28
|
+
deleteCount: number;
|
|
29
|
+
items: T[];
|
|
30
|
+
start: number;
|
|
31
|
+
};
|
|
32
|
+
unshift: {
|
|
33
|
+
items: T[];
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
type Listener<V> = {
|
|
37
|
+
once?: boolean;
|
|
38
|
+
(value: V): void;
|
|
5
39
|
};
|
|
6
40
|
declare const _default: <T>(data: T[]) => API<T>;
|
|
7
41
|
export default _default;
|
package/build/reactive/array.js
CHANGED
|
@@ -1,21 +1,10 @@
|
|
|
1
1
|
import { isNumber } from '@esportsplus/utilities';
|
|
2
2
|
import { REACTIVE_ARRAY } from '../constants.js';
|
|
3
|
-
import { dispose as d, isComputed, read } from '../system.js';
|
|
4
3
|
import { isReactiveObject } from './object.js';
|
|
5
|
-
function at(data, i) {
|
|
6
|
-
let value = data[i];
|
|
7
|
-
if (isComputed(value)) {
|
|
8
|
-
return read(value);
|
|
9
|
-
}
|
|
10
|
-
return value;
|
|
11
|
-
}
|
|
12
4
|
function cleanup(item) {
|
|
13
5
|
if (isReactiveObject(item)) {
|
|
14
6
|
item.dispose();
|
|
15
7
|
}
|
|
16
|
-
else if (isComputed(item)) {
|
|
17
|
-
d(item);
|
|
18
|
-
}
|
|
19
8
|
}
|
|
20
9
|
function clear(data, listeners) {
|
|
21
10
|
dispose(data);
|
|
@@ -58,8 +47,7 @@ function map(data, proxy, fn, i, n) {
|
|
|
58
47
|
n = Math.min(n, data.length);
|
|
59
48
|
let values = new Array(n - i);
|
|
60
49
|
for (; i < n; i++) {
|
|
61
|
-
|
|
62
|
-
values[i] = fn.call(proxy, (isComputed(item) ? item.value : item), i);
|
|
50
|
+
values[i] = fn.call(proxy, data[i], i);
|
|
63
51
|
}
|
|
64
52
|
return values;
|
|
65
53
|
}
|
|
@@ -112,7 +100,7 @@ function shift(data, listeners) {
|
|
|
112
100
|
return item;
|
|
113
101
|
}
|
|
114
102
|
function sort(data, listeners, fn) {
|
|
115
|
-
data.sort((a, b) => fn(
|
|
103
|
+
data.sort((a, b) => fn(a, b));
|
|
116
104
|
dispatch(listeners, 'sort');
|
|
117
105
|
}
|
|
118
106
|
function splice(data, listeners, start, deleteCount = data.length, items = []) {
|
|
@@ -138,11 +126,7 @@ export default (data) => {
|
|
|
138
126
|
let listeners = {}, proxy = new Proxy({}, {
|
|
139
127
|
get(_, key) {
|
|
140
128
|
if (isNumber(key)) {
|
|
141
|
-
|
|
142
|
-
if (isComputed(value)) {
|
|
143
|
-
return read(value);
|
|
144
|
-
}
|
|
145
|
-
return value;
|
|
129
|
+
return data[key];
|
|
146
130
|
}
|
|
147
131
|
else if (key in wrapper) {
|
|
148
132
|
return wrapper[key];
|
|
@@ -173,7 +157,7 @@ export default (data) => {
|
|
|
173
157
|
}
|
|
174
158
|
}), wrapper = {
|
|
175
159
|
[REACTIVE_ARRAY]: true,
|
|
176
|
-
at: (i) =>
|
|
160
|
+
at: (i) => data[i],
|
|
177
161
|
clear: () => {
|
|
178
162
|
clear(data, listeners);
|
|
179
163
|
return proxy;
|
package/package.json
CHANGED
package/src/reactive/array.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { isNumber } from '@esportsplus/utilities';
|
|
2
2
|
import { REACTIVE_ARRAY } from '~/constants';
|
|
3
|
-
import { dispose as d, isComputed, read } from '~/system';
|
|
4
3
|
import { Infer } from '~/types';
|
|
5
4
|
import { isReactiveObject } from './object';
|
|
6
5
|
|
|
@@ -8,6 +7,10 @@ import { isReactiveObject } from './object';
|
|
|
8
7
|
type API<T> = Infer<T[]> & {
|
|
9
8
|
clear: () => void;
|
|
10
9
|
dispose: () => void;
|
|
10
|
+
dispatch: <T, K extends keyof Events<T>, V>(event: K, value?: V) => void;
|
|
11
|
+
map: <T, R>(this: API<T>, fn: (this: API<T>, value: T, i: number) => R, i?: number, n?: number) => R[];
|
|
12
|
+
on: <T, K extends keyof Events<T>>(event: K, listener: Listener<Events<T>[K]>) => void;
|
|
13
|
+
once: <T, K extends keyof Events<T>>(event: K, listener: Listener<Events<T>[K]>) => void;
|
|
11
14
|
};
|
|
12
15
|
|
|
13
16
|
type Events<T> = {
|
|
@@ -45,23 +48,10 @@ type Listener<V> = {
|
|
|
45
48
|
type Listeners = Record<string, (Listener<any> | null)[]>;
|
|
46
49
|
|
|
47
50
|
|
|
48
|
-
function at<T>(data: T[], i: number) {
|
|
49
|
-
let value = data[i];
|
|
50
|
-
|
|
51
|
-
if (isComputed(value)) {
|
|
52
|
-
return read(value);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return value;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
51
|
function cleanup<T>(item: T) {
|
|
59
52
|
if (isReactiveObject(item)) {
|
|
60
53
|
item.dispose();
|
|
61
54
|
}
|
|
62
|
-
else if (isComputed(item)) {
|
|
63
|
-
d(item);
|
|
64
|
-
}
|
|
65
55
|
}
|
|
66
56
|
|
|
67
57
|
function clear<T>(data: T[], listeners: Listeners) {
|
|
@@ -124,13 +114,7 @@ function map<T, R>(
|
|
|
124
114
|
let values: R[] = new Array(n - i);
|
|
125
115
|
|
|
126
116
|
for (; i < n; i++) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
values[i] = fn.call(
|
|
130
|
-
proxy,
|
|
131
|
-
(isComputed(item) ? item.value : item) as T,
|
|
132
|
-
i
|
|
133
|
-
);
|
|
117
|
+
values[i] = fn.call(proxy, data[i], i);
|
|
134
118
|
}
|
|
135
119
|
|
|
136
120
|
return values;
|
|
@@ -201,10 +185,7 @@ function shift<T>(data: T[], listeners: Listeners) {
|
|
|
201
185
|
}
|
|
202
186
|
|
|
203
187
|
function sort<T>(data: T[], listeners: Listeners, fn: (a: T, b: T) => number) {
|
|
204
|
-
data.sort((a, b) => fn(
|
|
205
|
-
(isComputed(a) ? a.value : a) as T,
|
|
206
|
-
(isComputed(b) ? b.value : b) as T
|
|
207
|
-
));
|
|
188
|
+
data.sort((a, b) => fn(a, b));
|
|
208
189
|
dispatch(listeners, 'sort');
|
|
209
190
|
}
|
|
210
191
|
|
|
@@ -240,13 +221,7 @@ export default <T>(data: T[]) => {
|
|
|
240
221
|
proxy = new Proxy({}, {
|
|
241
222
|
get(_, key: any) {
|
|
242
223
|
if (isNumber(key)) {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
if (isComputed(value)) {
|
|
246
|
-
return read(value);
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
return value;
|
|
224
|
+
return data[key];
|
|
250
225
|
}
|
|
251
226
|
else if (key in wrapper) {
|
|
252
227
|
return wrapper[key as keyof typeof wrapper];
|
|
@@ -280,7 +255,7 @@ export default <T>(data: T[]) => {
|
|
|
280
255
|
}) as API<T>,
|
|
281
256
|
wrapper = {
|
|
282
257
|
[REACTIVE_ARRAY]: true,
|
|
283
|
-
at: (i: number) =>
|
|
258
|
+
at: (i: number) => data[i],
|
|
284
259
|
clear: () => {
|
|
285
260
|
clear(data, listeners);
|
|
286
261
|
return proxy;
|