@esportsplus/reactivity 0.1.28 → 0.1.30

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.
@@ -24,15 +24,14 @@ 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[]);
31
30
  set length(n: number);
32
- private trigger;
33
31
  dispatch<E extends keyof Events<T>>(event: E, data?: Events<T>[E]): void;
34
32
  dispose(): void;
35
33
  fill(value: T, start?: number, end?: number): this;
34
+ map<U>(fn: (this: ReactiveArray<T>, value: T, i: number, values: this) => U): U[];
36
35
  on<E extends keyof Events<T>>(event: E, listener: Listener<Events<T>[E]>): void;
37
36
  once<E extends keyof Events<T>>(event: E, listener: Listener<Events<T>[E]>): void;
38
37
  pop(): T | undefined;
@@ -41,19 +40,20 @@ declare class ReactiveArray<T> extends Array<T> {
41
40
  shift(): T | undefined;
42
41
  sort(): this;
43
42
  splice(start: number, deleteCount?: number, ...items: T[]): T[];
44
- track(): void;
43
+ track(index?: number): T | undefined;
44
+ trigger(): void;
45
45
  unshift(...items: T[]): number;
46
46
  }
47
- declare class ReactiveObjectArray<T extends Object> extends ReactiveArray<Node<T>> {
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(): Node<T> | undefined;
52
+ pop(): ReactiveObject<T> | undefined;
53
53
  push(...values: T[]): number;
54
- shift(): Node<T> | undefined;
54
+ shift(): ReactiveObject<T> | undefined;
55
55
  sort(): never;
56
- splice(start: number, deleteCount?: number, ...values: T[]): Node<T> | Node<T>[] | null | undefined;
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 };
@@ -22,9 +22,6 @@ class ReactiveArray extends Array {
22
22
  }
23
23
  this.splice(n);
24
24
  }
25
- trigger() {
26
- this.signal.set(!this.signal.value);
27
- }
28
25
  dispatch(event, data) {
29
26
  this.signal.dispatch(event, data);
30
27
  }
@@ -37,6 +34,13 @@ class ReactiveArray extends Array {
37
34
  this.trigger();
38
35
  return this;
39
36
  }
37
+ map(fn) {
38
+ let values = [];
39
+ for (let i = 0, n = this.length; i < n; i++) {
40
+ values.push(fn.call(this, this[i], i, this));
41
+ }
42
+ return values;
43
+ }
40
44
  on(event, listener) {
41
45
  this.signal.on(event, listener);
42
46
  }
@@ -89,8 +93,12 @@ class ReactiveArray extends Array {
89
93
  }
90
94
  return removed;
91
95
  }
92
- track() {
96
+ track(index) {
93
97
  this.signal.get();
98
+ return index === undefined ? undefined : this[index];
99
+ }
100
+ trigger() {
101
+ this.signal.set(!this.signal.value);
94
102
  }
95
103
  unshift(...items) {
96
104
  let length = super.unshift(...items);
@@ -4,15 +4,15 @@ import { ReactiveObject } from './object';
4
4
  type Guard<T> = T extends Object ? {
5
5
  [K in keyof T]: Never<K, Guard<T[K]>>;
6
6
  } : T extends unknown[] ? Guard<T[number]>[] : T;
7
- type Infer<T> = T extends (...args: unknown[]) => unknown ? ReturnType<T> : T extends unknown[] ? Infer<T[number]>[] : T extends Object ? {
7
+ type Infer<T> = T extends (...args: unknown[]) => unknown ? ReturnType<T> : T extends unknown[] ? T extends Object[] ? ReactiveObjectArray<T[0]> : ReactiveArray<T[0]> : T extends Object ? {
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 Node<T> = T extends (...args: unknown[]) => unknown ? Computed<T> : T extends unknown[] ? T extends Object[] ? ReactiveObjectArray<T[0]> : ReactiveArray<T> : Signal<T>;
12
- type Nodes<T extends Object> = {
13
- [K in keyof T]: Node<T[K]>;
11
+ type Nodes<T> = T extends (...args: unknown[]) => unknown ? Computed<T> : T extends unknown[] ? T extends Object[] ? ReactiveObjectArray<T[0]> : ReactiveArray<T[0]> : 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>, "nodes"> & {
16
- nodes: Nodes<T>;
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
- nodes: Record<PropertyKey, Node>;
5
+ signals: Record<PropertyKey, Node>;
6
6
  constructor(data: T, options?: Options);
7
7
  dispose(): void;
8
8
  }
@@ -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
- nodes = {};
5
+ signals = {};
6
6
  constructor(data, options = {}) {
7
- let nodes = this.nodes;
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 node = nodes[key] = computed(input, options);
11
+ let s = signals[key] = computed(input, options);
12
12
  defineProperty(this, key, {
13
13
  enumerable: true,
14
14
  get() {
15
- return node.get();
15
+ return s.get();
16
16
  }
17
17
  });
18
18
  }
19
19
  else if (isArray(input)) {
20
- let node, test = input[0];
20
+ let s, test = input[0];
21
21
  if (typeof test === 'object' && test !== null && test?.constructor?.name === 'Object') {
22
- node = nodes[key] = new ReactiveObjectArray(input, options);
22
+ s = signals[key] = new ReactiveObjectArray(input, options);
23
23
  }
24
24
  else {
25
- node = nodes[key] = new ReactiveArray(input);
25
+ s = signals[key] = new ReactiveArray(input);
26
26
  }
27
27
  defineProperty(this, key, {
28
28
  enumerable: true,
29
29
  get() {
30
- node.track();
31
- return node;
30
+ s.track();
31
+ return s;
32
32
  }
33
33
  });
34
34
  }
35
35
  else {
36
- let node = nodes[key] = signal(input, options);
36
+ let s = signals[key] = signal(input, options);
37
37
  defineProperty(this, key, {
38
38
  enumerable: true,
39
39
  get() {
40
- return node.get();
40
+ return s.get();
41
41
  },
42
42
  set(value) {
43
- node.set(value);
43
+ s.set(value);
44
44
  }
45
45
  });
46
46
  }
47
47
  }
48
48
  }
49
49
  dispose() {
50
- let nodes = this.nodes;
51
- for (let key in nodes) {
52
- nodes[key].dispose();
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
@@ -16,5 +16,5 @@
16
16
  "prepublishOnly": "npm run build"
17
17
  },
18
18
  "types": "build/index.d.ts",
19
- "version": "0.1.28"
19
+ "version": "0.1.30"
20
20
  }
@@ -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 = [];
@@ -51,11 +49,6 @@ class ReactiveArray<T> extends Array<T> {
51
49
  }
52
50
 
53
51
 
54
- private trigger() {
55
- this.signal.set(!this.signal.value);
56
- }
57
-
58
-
59
52
  dispatch<E extends keyof Events<T>>(event: E, data?: Events<T>[E]) {
60
53
  this.signal.dispatch(event, data);
61
54
  }
@@ -73,6 +66,16 @@ class ReactiveArray<T> extends Array<T> {
73
66
  return this;
74
67
  }
75
68
 
69
+ map<U>(fn: (this: ReactiveArray<T>, value: T, i: number, values: this) => U) {
70
+ let values: U[] = [];
71
+
72
+ for (let i = 0, n = this.length; i < n; i++) {
73
+ values.push( fn.call(this, this[i], i, this) );
74
+ }
75
+
76
+ return values;
77
+ }
78
+
76
79
  on<E extends keyof Events<T>>(event: E, listener: Listener<Events<T>[E]>) {
77
80
  this.signal.on(event, listener);
78
81
  }
@@ -145,8 +148,13 @@ class ReactiveArray<T> extends Array<T> {
145
148
  return removed;
146
149
  }
147
150
 
148
- track() {
151
+ track(index?: number) {
149
152
  this.signal.get();
153
+ return index === undefined ? undefined : this[index];
154
+ }
155
+
156
+ trigger() {
157
+ this.signal.set(!this.signal.value);
150
158
  }
151
159
 
152
160
  unshift(...items: T[]) {
@@ -162,8 +170,8 @@ class ReactiveArray<T> extends Array<T> {
162
170
 
163
171
  // REMINDER:
164
172
  // - @ts-ignore flags are supressing a type mismatch error
165
- // - Input values are being transformed by this class into nodes
166
- class ReactiveObjectArray<T extends Object> extends ReactiveArray<Node<T>> {
173
+ // - Input values are being transformed by this class into signals
174
+ class ReactiveObjectArray<T extends Object> extends ReactiveArray<ReactiveObject<T>> {
167
175
  private options: Options;
168
176
 
169
177
 
@@ -182,7 +190,7 @@ class ReactiveObjectArray<T extends Object> extends ReactiveArray<Node<T>> {
182
190
  }
183
191
 
184
192
  pop() {
185
- return dispose(super.pop()) as Node<T> | undefined;
193
+ return dispose(super.pop()) as ReactiveObject<T>| undefined;
186
194
  }
187
195
 
188
196
  // @ts-ignore
@@ -191,7 +199,7 @@ class ReactiveObjectArray<T extends Object> extends ReactiveArray<Node<T>> {
191
199
  }
192
200
 
193
201
  shift() {
194
- return dispose(super.shift()) as Node<T> | undefined;
202
+ return dispose(super.shift()) as ReactiveObject<T> | undefined;
195
203
  }
196
204
 
197
205
  sort() {
@@ -14,25 +14,27 @@ type Infer<T> =
14
14
  T extends (...args: unknown[]) => unknown
15
15
  ? ReturnType<T>
16
16
  : T extends unknown[]
17
- ? Infer<T[number]>[]
17
+ ? T extends Object[] ? ReactiveObjectArray<T[0]> : ReactiveArray<T[0]>
18
18
  : T extends Object
19
19
  ? { [K in keyof T]: T[K] }
20
20
  : T;
21
21
 
22
22
  type Never<K,V> = K extends keyof ReactiveObject<Object> ? never : V;
23
23
 
24
- type Node<T> =
24
+ type Nodes<T> =
25
25
  T extends (...args: unknown[]) => unknown
26
26
  ? Computed<T>
27
27
  : T extends unknown[]
28
- ? T extends Object[] ? ReactiveObjectArray<T[0]> : ReactiveArray<T>
28
+ ? T extends Object[] ? ReactiveObjectArray<T[0]> : ReactiveArray<T[0]>
29
29
  : Signal<T>;
30
30
 
31
- type Nodes<T extends Object> = { [K in keyof T]: Node<T[K]> };
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>, 'nodes'> & { nodes: Nodes<T> }
38
+ { [K in keyof T]: Infer<T[K]> } & Omit<ReactiveObject<T>, 'signals'> & { signals: Signals<T> }
37
39
  >;
38
40
  };
@@ -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
- nodes: Record<PropertyKey, Node> = {};
11
+ signals: Record<PropertyKey, Node> = {};
12
12
 
13
13
 
14
14
  constructor(data: T, options: Options = {}) {
15
- let nodes = this.nodes;
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 node = nodes[key] = computed(input as Computed<T>['fn'], options);
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 node.get();
26
+ return s.get();
27
27
  }
28
28
  });
29
29
  }
30
30
  else if (isArray(input)) {
31
- let node: ReactiveArray<unknown> | ReactiveObjectArray<Object>,
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
- node = nodes[key] = new ReactiveObjectArray(input, options);
35
+ s = signals[key] = new ReactiveObjectArray(input, options);
36
36
  }
37
37
  else {
38
- node = nodes[key] = new ReactiveArray(input);
38
+ s = signals[key] = new ReactiveArray(input);
39
39
  }
40
40
 
41
41
  defineProperty(this, key, {
42
42
  enumerable: true,
43
43
  get() {
44
- node.track();
44
+ s.track();
45
45
 
46
- return node;
46
+ return s;
47
47
  }
48
48
  });
49
49
  }
50
50
  else {
51
- let node = nodes[key] = signal(input, options);
51
+ let s = signals[key] = signal(input, options);
52
52
 
53
53
  defineProperty(this, key, {
54
54
  enumerable: true,
55
55
  get() {
56
- return node.get();
56
+ return s.get();
57
57
  },
58
58
  set(value) {
59
- node.set(value);
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 nodes = this.nodes;
68
+ let signals = this.signals;
69
69
 
70
- for (let key in nodes) {
71
- nodes[key].dispose();
70
+ for (let key in signals) {
71
+ signals[key].dispose();
72
72
  }
73
73
  }
74
74
  }