@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.
@@ -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: <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
- };
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[]) => API<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 };
@@ -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
- let item = data[i];
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((isComputed(a) ? a.value : a), (isComputed(b) ? b.value : b)));
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
- let value = data[key];
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) => at(data, i),
160
+ at: (i) => data[i],
177
161
  clear: () => {
178
162
  clear(data, listeners);
179
163
  return proxy;
package/package.json CHANGED
@@ -12,7 +12,7 @@
12
12
  "private": false,
13
13
  "type": "module",
14
14
  "types": "build/index.d.ts",
15
- "version": "0.13.2",
15
+ "version": "0.14.1",
16
16
  "scripts": {
17
17
  "build": "tsc && tsc-alias",
18
18
  "-": "-"
@@ -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> = Infer<T[]> & {
9
- clear: () => void;
10
- dispose: () => void;
11
- dispatch: <T, K extends keyof Events<T>, V>(event: K, value?: V) => void;
12
- map: <T, R>(this: API<T>, fn: (this: API<T>, value: T, i: number) => R, i?: number, n?: number) => R[];
13
- on: <T, K extends keyof Events<T>>(event: K, listener: Listener<Events<T>[K]>) => void;
14
- once: <T, K extends keyof Events<T>>(event: K, listener: Listener<Events<T>[K]>) => void;
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
- let item = data[i];
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[], listeners: Listeners, fn: (a: T, b: T) => number) {
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[], listeners: Listeners, start: number, deleteCount: number = data.length, items: 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
- let value = data[key];
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) => at(data, i),
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
  },