@hefang/react-store 0.0.1 → 0.0.3

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/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export interface CreateStoreOptions {
2
2
  deepCompareFunc: (a: unknown, b: unknown) => boolean;
3
3
  }
4
- export declare function createStore<V extends Record<string, unknown>>(defaultValue?: V, options?: Partial<CreateStoreOptions>): readonly [() => V, (newValues: Partial<V> | ((prev: V) => Partial<V>), { immediately, deepCompare, }?: {
4
+ export declare function createStore<V extends object>(defaultValue: V | (() => V), options?: Partial<CreateStoreOptions>): readonly [() => V, (newValues: Partial<V> | ((prev: V) => Partial<V>), { immediately, deepCompare, }?: {
5
5
  immediately?: boolean;
6
6
  deepCompare?: boolean;
7
7
  }) => void, () => V];
package/dist/index.js CHANGED
@@ -7,7 +7,9 @@ export function createStore(defaultValue, options) {
7
7
  const store = {
8
8
  queues: 0,
9
9
  queueTimer: 0,
10
- value: { ...defaultValue },
10
+ value: {
11
+ ...(typeof defaultValue === "function" ? defaultValue() : defaultValue),
12
+ },
11
13
  listeners: new Set(),
12
14
  };
13
15
  function subscribe(onStoreChange) {
@@ -34,7 +36,10 @@ export function createStore(defaultValue, options) {
34
36
  if (deepCompare) {
35
37
  Object.keys(values).forEach((key) => {
36
38
  if (!opt.deepCompareFunc(values[key], store.value[key])) {
37
- store.value = { ...store.value, [key]: values[key] };
39
+ store.value = {
40
+ ...store.value,
41
+ [key]: values[key],
42
+ };
38
43
  }
39
44
  });
40
45
  }
package/package.json CHANGED
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "name": "@hefang/react-store",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "type": "module",
5
5
  "exports": {
6
+ "import": "./dist/index.js",
6
7
  "types": "./dist/index.d.ts",
7
8
  "require": "./dist/index.js",
8
- "import": "./dist/index.js",
9
- "default": "./src/index.ts"
9
+ "default": "./dist/index.js"
10
10
  },
11
11
  "scripts": {
12
12
  "build": "bun tsc --noEmit false",
13
13
  "prepack": "bun run build"
14
14
  },
15
15
  "devDependencies": {
16
- "@types/react": "^18"
16
+ "@types/react": "^19.2.14"
17
17
  },
18
18
  "peerDependencies": {
19
19
  "typescript": "^5",
20
- "react": "^18"
20
+ "react": ">=18.0.0"
21
21
  }
22
22
  }
package/src/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { useSyncExternalStore } from "react";
2
2
 
3
- interface Store<V extends Record<string, unknown>> {
3
+ interface Store<V extends object> {
4
4
  value: V;
5
5
  queueTimer: number;
6
6
  listeners: Set<() => void>;
@@ -11,8 +11,8 @@ export interface CreateStoreOptions {
11
11
  deepCompareFunc: (a: unknown, b: unknown) => boolean;
12
12
  }
13
13
 
14
- export function createStore<V extends Record<string, unknown>>(
15
- defaultValue?: V,
14
+ export function createStore<V extends object>(
15
+ defaultValue: V | (() => V),
16
16
  options?: Partial<CreateStoreOptions>,
17
17
  ) {
18
18
  const opt: CreateStoreOptions = {
@@ -22,7 +22,9 @@ export function createStore<V extends Record<string, unknown>>(
22
22
  const store: Store<V> = {
23
23
  queues: 0,
24
24
  queueTimer: 0,
25
- value: { ...defaultValue } as V,
25
+ value: {
26
+ ...(typeof defaultValue === "function" ? defaultValue() : defaultValue),
27
+ } as V,
26
28
  listeners: new Set<() => void>(),
27
29
  };
28
30
 
@@ -61,8 +63,16 @@ export function createStore<V extends Record<string, unknown>>(
61
63
 
62
64
  if (deepCompare) {
63
65
  Object.keys(values).forEach((key) => {
64
- if (!opt.deepCompareFunc(values[key], store.value[key])) {
65
- store.value = { ...store.value, [key]: values[key] };
66
+ if (
67
+ !opt.deepCompareFunc(
68
+ (values as Record<string, unknown>)[key],
69
+ (store.value as Record<string, unknown>)[key] as unknown,
70
+ )
71
+ ) {
72
+ store.value = {
73
+ ...store.value,
74
+ [key]: (values as Record<string, unknown>)[key],
75
+ };
66
76
  }
67
77
  });
68
78
  } else {