@esportsplus/reactivity 0.17.0 → 0.17.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,4 +1,4 @@
1
- import { defineProperty, isArray, isObject, isPromise } from '@esportsplus/utilities';
1
+ import { defineProperty, isArray, isPromise } from '@esportsplus/utilities';
2
2
  import { computed, dispose, effect, read, root, set, signal } from '../system.js';
3
3
  import { REACTIVE_OBJECT } from '../constants.js';
4
4
  import { ReactiveArray } from './array.js';
@@ -6,10 +6,9 @@ class ReactiveObject {
6
6
  [REACTIVE_OBJECT] = true;
7
7
  disposers = null;
8
8
  constructor(data) {
9
- let keys = Object.keys(data);
10
- for (let i = 0, n = keys.length; i < n; i++) {
11
- let key = keys[i], value = data[key];
12
- let type = typeof value;
9
+ let keys = Object.keys(data), key;
10
+ while (key = keys.pop()) {
11
+ let value = data[key], type = typeof value;
13
12
  if (type === 'function') {
14
13
  let node;
15
14
  defineProperty(this, key, {
@@ -75,6 +74,6 @@ class ReactiveObject {
75
74
  }
76
75
  }
77
76
  const isReactiveObject = (value) => {
78
- return isObject(value) && REACTIVE_OBJECT in value;
77
+ return typeof value === 'object' && value !== null && REACTIVE_OBJECT in value;
79
78
  };
80
79
  export { isReactiveObject, 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.17.0",
15
+ "version": "0.17.1",
16
16
  "scripts": {
17
17
  "build": "tsc && tsc-alias",
18
18
  "-": "-"
@@ -1,4 +1,4 @@
1
- import { defineProperty, isArray, isObject, isPromise } from '@esportsplus/utilities';
1
+ import { defineProperty, isArray, isPromise } from '@esportsplus/utilities';
2
2
  import { computed, dispose, effect, read, root, set, signal } from '~/system';
3
3
  import { Computed, Signal } from '~/types';
4
4
  import { REACTIVE_OBJECT } from '~/constants';
@@ -13,13 +13,12 @@ class ReactiveObject<T extends Record<PropertyKey, unknown>> {
13
13
 
14
14
 
15
15
  constructor(data: T) {
16
- let keys = Object.keys(data);
16
+ let keys = Object.keys(data),
17
+ key: keyof T | undefined;
17
18
 
18
- for (let i = 0, n = keys.length; i < n; i++) {
19
- let key = keys[i],
20
- value = data[key];
21
-
22
- let type = typeof value;
19
+ while (key = keys.pop()) {
20
+ let value = data[key],
21
+ type = typeof value;
23
22
 
24
23
  if (type === 'function') {
25
24
  let node: Computed<T[typeof key]> | Signal<T[typeof key] | undefined> | undefined;
@@ -29,19 +28,19 @@ class ReactiveObject<T extends Record<PropertyKey, unknown>> {
29
28
  get: () => {
30
29
  if (node === undefined) {
31
30
  root(() => {
32
- node = computed(value as Computed<T[typeof key]>['fn']);
31
+ node = computed(value as Computed<T[keyof T]>['fn']);
33
32
 
34
33
  if (isPromise(node.value)) {
35
34
  let factory = node,
36
35
  version = 0;
37
36
 
38
- node = signal<T[typeof key] | undefined>(undefined);
37
+ node = signal<T[keyof T] | undefined>(undefined);
39
38
 
40
39
  (this.disposers ??= []).push(
41
40
  effect(() => {
42
41
  let id = ++version;
43
42
 
44
- (read(factory) as Promise<T[typeof key]>).then((v) => {
43
+ (read(factory) as Promise<T[keyof T]>).then((v) => {
45
44
  if (id !== version) {
46
45
  return;
47
46
  }
@@ -52,7 +51,7 @@ class ReactiveObject<T extends Record<PropertyKey, unknown>> {
52
51
  )
53
52
  }
54
53
  else {
55
- (this.disposers ??= []).push(() => dispose(node as Computed<T[typeof key]>));
54
+ (this.disposers ??= []).push(() => dispose(node as Computed<T[keyof T]>));
56
55
  }
57
56
  });
58
57
  }
@@ -65,7 +64,7 @@ class ReactiveObject<T extends Record<PropertyKey, unknown>> {
65
64
  }
66
65
 
67
66
  if (value == null || type !== 'object') {
68
- // Avoid isArray when possible
67
+ // Skip isArray when possible
69
68
  }
70
69
  else if (isArray(value)) {
71
70
  let node = new ReactiveArray(value);
@@ -111,7 +110,7 @@ class ReactiveObject<T extends Record<PropertyKey, unknown>> {
111
110
 
112
111
 
113
112
  const isReactiveObject = (value: any): value is ReactiveObject<any> => {
114
- return isObject(value) && REACTIVE_OBJECT in value;
113
+ return typeof value === 'object' && value !== null && REACTIVE_OBJECT in value;
115
114
  };
116
115
 
117
116