@esportsplus/reactivity 0.6.0 → 0.6.2

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.
@@ -27,12 +27,12 @@ type Events<T> = {
27
27
  items: Item<T>[];
28
28
  };
29
29
  };
30
- type Item<T> = Computed<T> | ReactiveArray<T> | ReactiveObject<T extends Record<PropertyKey, unknown> ? T : never> | T;
30
+ type Item<T> = Computed<T> | API<T> | ReactiveObject<T extends Record<PropertyKey, unknown> ? T : never> | T;
31
31
  type Listener<V> = {
32
32
  once?: boolean;
33
33
  (value: V): void;
34
34
  };
35
- type Value<T> = T extends Record<PropertyKey, unknown> ? ReactiveObject<T> : T extends Array<infer U> ? ReactiveArray<U> : T;
35
+ type Value<T> = T extends Record<PropertyKey, unknown> ? ReactiveObject<T> : T extends Array<infer U> ? API<U> : T;
36
36
  declare class ReactiveArray<T> extends Disposable {
37
37
  private data;
38
38
  private listeners;
@@ -40,12 +40,12 @@ declare class ReactiveArray<T> extends Disposable {
40
40
  constructor(data: Item<T>[], proxy: API<T>);
41
41
  get length(): number;
42
42
  set length(n: number);
43
- at(i: number): ReactiveArray<T> | T | ReactiveObject<T extends Record<PropertyKey, unknown> ? T : never>;
44
- dispatch<D>(event: keyof Events<T>, value?: D): void;
43
+ at(i: number): T | API<T> | ReactiveObject<T extends Record<PropertyKey, unknown> ? T : never>;
44
+ dispatch<K extends keyof Events<T>, V>(event: K, value?: V): void;
45
45
  dispose(): void;
46
46
  map<R>(fn: (this: API<T>, value: Value<T>, i: number) => R, i?: number, n?: number): R[];
47
- on<T>(event: keyof Events<T>, listener: Listener<T>): void;
48
- once<T>(event: keyof Events<T>, listener: Listener<T>): void;
47
+ on<K extends keyof Events<T>>(event: K, listener: Listener<Events<T>[K]>): void;
48
+ once<K extends keyof Events<T>>(event: K, listener: Listener<Events<T>[K]>): void;
49
49
  pop(): Item<T> | undefined;
50
50
  push(...input: T[]): number;
51
51
  reverse(): this;
@@ -55,4 +55,4 @@ declare class ReactiveArray<T> extends Disposable {
55
55
  unshift(...input: T[]): number;
56
56
  }
57
57
  export default function array<T>(input: T[]): API<T>;
58
- export { ReactiveArray };
58
+ export type { API as ReactiveArray };
@@ -213,4 +213,3 @@ export default function array(input) {
213
213
  return proxy;
214
214
  }
215
215
  ;
216
- export { ReactiveArray };
@@ -1,4 +1,7 @@
1
- import { Reactive } from '../types.js';
1
+ import array from './array.js';
2
+ import object from './object.js';
3
+ import promise from './promise.js';
4
+ type API<T> = T extends (...args: infer A) => Promise<infer R> ? ReturnType<typeof promise<A, Promise<R>>> : T extends Record<PropertyKey, unknown> ? ReturnType<typeof object<T>> : T extends unknown[] ? ReturnType<typeof array<T>> : never;
2
5
  type Guard<T> = T extends (...args: unknown[]) => Promise<unknown> ? T : T extends {
3
6
  dispose: any;
4
7
  } | {
@@ -6,5 +9,5 @@ type Guard<T> = T extends (...args: unknown[]) => Promise<unknown> ? T : T exten
6
9
  } ? {
7
10
  never: '[ dispose, signals ] are reserved keys';
8
11
  } : T extends Record<PropertyKey, unknown> | unknown[] ? T : never;
9
- declare const _default: <T>(data: Guard<T>) => Reactive<T>;
12
+ declare const _default: <T>(data: Guard<T>) => API<T>;
10
13
  export default _default;
@@ -3,18 +3,14 @@ import array from './array.js';
3
3
  import object from './object.js';
4
4
  import promise from './promise.js';
5
5
  export default (data) => {
6
- let value;
7
6
  if (isArray(data)) {
8
- value = array(data);
7
+ return array(data);
9
8
  }
10
9
  else if (isObject(data)) {
11
- value = object(data);
10
+ return object(data);
12
11
  }
13
12
  else if (isPromise(data)) {
14
- value = promise(data);
13
+ return promise(data);
15
14
  }
16
- else {
17
- throw new Error(`@esportsplus/reactivity: 'reactive' received invalid input - ${JSON.stringify(data)}`);
18
- }
19
- return value;
15
+ throw new Error(`@esportsplus/reactivity: 'reactive' received invalid input - ${JSON.stringify(data)}`);
20
16
  };
@@ -10,4 +10,4 @@ declare class ReactiveObject<T extends Record<PropertyKey, unknown>> extends Dis
10
10
  dispose(): void;
11
11
  }
12
12
  export default function object<T extends Record<PropertyKey, unknown>>(input: T): API<T>;
13
- export { ReactiveObject };
13
+ export type { API as ReactiveObject };
@@ -91,4 +91,3 @@ export default function object(input) {
91
91
  return new ReactiveObject(input);
92
92
  }
93
93
  ;
94
- export { ReactiveObject };
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.6.0",
15
+ "version": "0.6.2",
16
16
  "scripts": {
17
17
  "build": "tsc && tsc-alias",
18
18
  "-": "-"
@@ -33,7 +33,7 @@ type Events<T> = {
33
33
  };
34
34
  };
35
35
 
36
- type Item<T> = Computed<T> | ReactiveArray<T> | ReactiveObject<T extends Record<PropertyKey, unknown> ? T : never> | T;
36
+ type Item<T> = Computed<T> | API<T> | ReactiveObject<T extends Record<PropertyKey, unknown> ? T : never> | T;
37
37
 
38
38
  type Listener<V> = {
39
39
  once?: boolean;
@@ -44,7 +44,7 @@ type Value<T> =
44
44
  T extends Record<PropertyKey, unknown>
45
45
  ? ReactiveObject<T>
46
46
  : T extends Array<infer U>
47
- ? ReactiveArray<U>
47
+ ? API<U>
48
48
  : T;
49
49
 
50
50
 
@@ -85,7 +85,7 @@ class ReactiveArray<T> extends Disposable {
85
85
  return value;
86
86
  }
87
87
 
88
- dispatch<D>(event: keyof Events<T>, value?: D) {
88
+ dispatch<K extends keyof Events<T>, V>(event: K, value?: V) {
89
89
  if (this.listeners === null || this.listeners[event] === undefined) {
90
90
  return;
91
91
  }
@@ -162,7 +162,7 @@ class ReactiveArray<T> extends Disposable {
162
162
  return values;
163
163
  }
164
164
 
165
- on<T>(event: keyof Events<T>, listener: Listener<T>) {
165
+ on<K extends keyof Events<T>>(event: K, listener: Listener<Events<T>[K]>) {
166
166
  if (this.listeners === null) {
167
167
  this.listeners = { [event]: [listener] };
168
168
  }
@@ -185,7 +185,7 @@ class ReactiveArray<T> extends Disposable {
185
185
  }
186
186
  }
187
187
 
188
- once<T>(event: keyof Events<T>, listener: Listener<T>) {
188
+ once<K extends keyof Events<T>>(event: K, listener: Listener<Events<T>[K]>) {
189
189
  listener.once = true;
190
190
  this.on(event, listener);
191
191
  }
@@ -291,7 +291,7 @@ function factory<T>(input: T[]) {
291
291
  items[i] = computed(value as Computed<T>['fn']);
292
292
  }
293
293
  else if (isObject(value)) {
294
- items[i] = object(value);
294
+ items[i] = object(value) as Item<T>;
295
295
  }
296
296
  else {
297
297
  items[i] = value;
@@ -346,4 +346,4 @@ export default function array<T>(input: T[]) {
346
346
 
347
347
  return proxy;
348
348
  };
349
- export { ReactiveArray };
349
+ export type { API as ReactiveArray };
@@ -1,10 +1,18 @@
1
1
  import { isArray, isObject, isPromise } from '@esportsplus/utilities';
2
- import { Reactive } from '~/types';
3
2
  import array from './array';
4
3
  import object from './object';
5
4
  import promise from './promise';
6
5
 
7
6
 
7
+ type API<T> =
8
+ T extends (...args: infer A) => Promise<infer R>
9
+ ? ReturnType<typeof promise<A, Promise<R>>>
10
+ : T extends Record<PropertyKey, unknown>
11
+ ? ReturnType<typeof object<T>>
12
+ : T extends unknown[]
13
+ ? ReturnType<typeof array<T>>
14
+ : never;
15
+
8
16
  type Guard<T> =
9
17
  T extends (...args: unknown[]) => Promise<unknown>
10
18
  ? T
@@ -15,21 +23,16 @@ type Guard<T> =
15
23
  : never;
16
24
 
17
25
 
18
- export default <T>(data: Guard<T>) => {
19
- let value;
20
-
26
+ export default <T>(data: Guard<T>): API<T> => {
21
27
  if (isArray(data)) {
22
- value = array(data);
28
+ return array(data) as API<T>;
23
29
  }
24
30
  else if (isObject(data)) {
25
- value = object(data);
31
+ return object(data) as API<T>;
26
32
  }
27
33
  else if (isPromise(data)) {
28
- value = promise(data);
29
- }
30
- else {
31
- throw new Error(`@esportsplus/reactivity: 'reactive' received invalid input - ${JSON.stringify(data)}`);
34
+ return promise(data) as API<T>;
32
35
  }
33
36
 
34
- return value as Reactive<T>;
37
+ throw new Error(`@esportsplus/reactivity: 'reactive' received invalid input - ${JSON.stringify(data)}`);
35
38
  };
@@ -121,4 +121,4 @@ class ReactiveObject<T extends Record<PropertyKey, unknown>> extends Disposable
121
121
  export default function object<T extends Record<PropertyKey, unknown>>(input: T) {
122
122
  return new ReactiveObject(input) as API<T>;
123
123
  };
124
- export { ReactiveObject };
124
+ export type { API as ReactiveObject };