@esportsplus/reactivity 0.13.2 → 0.14.1
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 +22 -7
- package/build/reactive/array.js +4 -20
- package/package.json +1 -1
- package/src/reactive/array.ts +23 -50
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
import { Prettify } from '@esportsplus/utilities';
|
|
1
2
|
import { Infer } from '../types.js';
|
|
2
|
-
type API<T> = Infer<T
|
|
3
|
+
type API<T extends unknown[]> = Prettify<Infer<T> & {
|
|
3
4
|
clear: () => void;
|
|
4
5
|
dispose: () => void;
|
|
5
|
-
dispatch: <
|
|
6
|
-
map: <
|
|
7
|
-
on: <
|
|
8
|
-
once: <
|
|
9
|
-
}
|
|
6
|
+
dispatch: <K extends keyof Events<T>, V>(event: K, value?: V) => void;
|
|
7
|
+
map: <R>(this: API<T>, fn: (this: API<T>, value: T, i: number) => R, i?: number, n?: number) => R[];
|
|
8
|
+
on: <K extends keyof Events<T>>(event: K, listener: Listener<Events<T>[K]>) => void;
|
|
9
|
+
once: <K extends keyof Events<T>>(event: K, listener: Listener<Events<T>[K]>) => void;
|
|
10
|
+
}>;
|
|
10
11
|
type Events<T> = {
|
|
11
12
|
clear: undefined;
|
|
12
13
|
pop: {
|
|
@@ -37,6 +38,20 @@ type Listener<V> = {
|
|
|
37
38
|
once?: boolean;
|
|
38
39
|
(value: V): void;
|
|
39
40
|
};
|
|
40
|
-
declare const _default: <T>(data: T
|
|
41
|
+
declare const _default: <T extends unknown[]>(data: T) => Infer<T> & {
|
|
42
|
+
clear: () => void;
|
|
43
|
+
dispose: () => void;
|
|
44
|
+
dispatch: <K_1 extends keyof Events<T_2>, V>(event: K_1, value?: V | undefined) => void;
|
|
45
|
+
map: <R>(this: any, fn: (this: any, value: T, i: number) => R, i?: number, n?: number) => R[];
|
|
46
|
+
on: <K_1 extends keyof Events<T_2>>(event: K_1, listener: Listener<Events<T>[K_1]>) => void;
|
|
47
|
+
once: <K_1 extends keyof Events<T_2>>(event: K_1, listener: Listener<Events<T>[K_1]>) => void;
|
|
48
|
+
} extends infer T_1 ? { [K in keyof T_1]: (Infer<T> & {
|
|
49
|
+
clear: () => void;
|
|
50
|
+
dispose: () => void;
|
|
51
|
+
dispatch: <K_1 extends keyof Events<T_2>, V>(event: K_1, value?: V | undefined) => void;
|
|
52
|
+
map: <R>(this: any, fn: (this: any, value: T, i: number) => R, i?: number, n?: number) => R[];
|
|
53
|
+
on: <K_1 extends keyof Events<T_2>>(event: K_1, listener: Listener<Events<T>[K_1]>) => void;
|
|
54
|
+
once: <K_1 extends keyof Events<T_2>>(event: K_1, listener: Listener<Events<T>[K_1]>) => void;
|
|
55
|
+
})[K]; } : never;
|
|
41
56
|
export default _default;
|
|
42
57
|
export type { API as ReactiveArray };
|
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,18 +1,19 @@
|
|
|
1
|
-
import { isNumber } from '@esportsplus/utilities';
|
|
1
|
+
import { isNumber, Prettify } 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
|
|
|
7
6
|
|
|
8
|
-
type API<T
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
type API<T extends unknown[]> = Prettify<
|
|
8
|
+
Infer<T> & {
|
|
9
|
+
clear: () => void;
|
|
10
|
+
dispose: () => void;
|
|
11
|
+
dispatch: <K extends keyof Events<T>, V>(event: K, value?: V) => void;
|
|
12
|
+
map: <R>(this: API<T>, fn: (this: API<T>, value: T, i: number) => R, i?: number, n?: number) => R[];
|
|
13
|
+
on: <K extends keyof Events<T>>(event: K, listener: Listener<Events<T>[K]>) => void;
|
|
14
|
+
once: <K extends keyof Events<T>>(event: K, listener: Listener<Events<T>[K]>) => void;
|
|
15
|
+
}
|
|
16
|
+
>;
|
|
16
17
|
|
|
17
18
|
type Events<T> = {
|
|
18
19
|
clear: undefined,
|
|
@@ -49,23 +50,10 @@ type Listener<V> = {
|
|
|
49
50
|
type Listeners = Record<string, (Listener<any> | null)[]>;
|
|
50
51
|
|
|
51
52
|
|
|
52
|
-
function at<T>(data: T[], i: number) {
|
|
53
|
-
let value = data[i];
|
|
54
|
-
|
|
55
|
-
if (isComputed(value)) {
|
|
56
|
-
return read(value);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return value;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
53
|
function cleanup<T>(item: T) {
|
|
63
54
|
if (isReactiveObject(item)) {
|
|
64
55
|
item.dispose();
|
|
65
56
|
}
|
|
66
|
-
else if (isComputed(item)) {
|
|
67
|
-
d(item);
|
|
68
|
-
}
|
|
69
57
|
}
|
|
70
58
|
|
|
71
59
|
function clear<T>(data: T[], listeners: Listeners) {
|
|
@@ -108,10 +96,10 @@ function dispose<T>(data: T[]) {
|
|
|
108
96
|
}
|
|
109
97
|
}
|
|
110
98
|
|
|
111
|
-
function map<T, R>(
|
|
112
|
-
data: T
|
|
99
|
+
function map<T extends unknown[], R>(
|
|
100
|
+
data: T,
|
|
113
101
|
proxy: API<T>,
|
|
114
|
-
fn: (this: API<T>, value: T, i: number) => R,
|
|
102
|
+
fn: (this: API<T>, value: T[number], i: number) => R,
|
|
115
103
|
i?: number,
|
|
116
104
|
n?: number
|
|
117
105
|
) {
|
|
@@ -128,13 +116,7 @@ function map<T, R>(
|
|
|
128
116
|
let values: R[] = new Array(n - i);
|
|
129
117
|
|
|
130
118
|
for (; i < n; i++) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
values[i] = fn.call(
|
|
134
|
-
proxy,
|
|
135
|
-
(isComputed(item) ? item.value : item) as T,
|
|
136
|
-
i
|
|
137
|
-
);
|
|
119
|
+
values[i] = fn.call(proxy, data[i], i);
|
|
138
120
|
}
|
|
139
121
|
|
|
140
122
|
return values;
|
|
@@ -204,15 +186,12 @@ function shift<T>(data: T[], listeners: Listeners) {
|
|
|
204
186
|
return item;
|
|
205
187
|
}
|
|
206
188
|
|
|
207
|
-
function sort<T>(data: T
|
|
208
|
-
data.sort((a, b) => fn(
|
|
209
|
-
(isComputed(a) ? a.value : a) as T,
|
|
210
|
-
(isComputed(b) ? b.value : b) as T
|
|
211
|
-
));
|
|
189
|
+
function sort<T extends unknown[]>(data: T, listeners: Listeners, fn: (a: T[number], b: T[number]) => number) {
|
|
190
|
+
data.sort((a, b) => fn(a, b));
|
|
212
191
|
dispatch(listeners, 'sort');
|
|
213
192
|
}
|
|
214
193
|
|
|
215
|
-
function splice<T>(data: T
|
|
194
|
+
function splice<T extends unknown[]>(data: T, listeners: Listeners, start: number, deleteCount: number = data.length, items: T[] = []) {
|
|
216
195
|
let removed = data.splice(start, deleteCount, ...items);
|
|
217
196
|
|
|
218
197
|
if (items.length > 0 || removed.length > 0) {
|
|
@@ -239,18 +218,12 @@ function unshift<T>(data: T[], listeners: Listeners, items: T[]) {
|
|
|
239
218
|
}
|
|
240
219
|
|
|
241
220
|
|
|
242
|
-
export default <T>(data: T
|
|
221
|
+
export default <T extends unknown[]>(data: T) => {
|
|
243
222
|
let listeners: Listeners = {},
|
|
244
223
|
proxy = new Proxy({}, {
|
|
245
224
|
get(_, key: any) {
|
|
246
225
|
if (isNumber(key)) {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
if (isComputed(value)) {
|
|
250
|
-
return read(value);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
return value;
|
|
226
|
+
return data[key];
|
|
254
227
|
}
|
|
255
228
|
else if (key in wrapper) {
|
|
256
229
|
return wrapper[key as keyof typeof wrapper];
|
|
@@ -284,7 +257,7 @@ export default <T>(data: T[]) => {
|
|
|
284
257
|
}) as API<T>,
|
|
285
258
|
wrapper = {
|
|
286
259
|
[REACTIVE_ARRAY]: true,
|
|
287
|
-
at: (i: number) =>
|
|
260
|
+
at: (i: number) => data[i],
|
|
288
261
|
clear: () => {
|
|
289
262
|
clear(data, listeners);
|
|
290
263
|
return proxy;
|
|
@@ -298,7 +271,7 @@ export default <T>(data: T[]) => {
|
|
|
298
271
|
return proxy;
|
|
299
272
|
},
|
|
300
273
|
map: <R>(
|
|
301
|
-
fn: (this: API<T>, value: T, i: number) => R,
|
|
274
|
+
fn: (this: API<T>, value: T[number], i: number) => R,
|
|
302
275
|
i?: number,
|
|
303
276
|
n?: number
|
|
304
277
|
) => {
|
|
@@ -319,7 +292,7 @@ export default <T>(data: T[]) => {
|
|
|
319
292
|
return proxy;
|
|
320
293
|
},
|
|
321
294
|
shift: () => shift(data, listeners),
|
|
322
|
-
sort: (fn: (a: T, b: T) => number) => {
|
|
295
|
+
sort: (fn: (a: T[number], b: T[number]) => number) => {
|
|
323
296
|
sort(data, listeners, fn);
|
|
324
297
|
return proxy;
|
|
325
298
|
},
|