snap-store 0.1.2 → 0.1.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.
@@ -1,2 +1,3 @@
1
1
  export declare function capitalizeFirstLetter(text: string): string;
2
+ export declare function removeArrayItem<T>(array: T[], item: T): void;
2
3
  //# sourceMappingURL=helper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../src/helper.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,UAEjD"}
1
+ {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../src/helper.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,UAEjD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,QAKrD"}
@@ -1,4 +1,10 @@
1
1
  export function capitalizeFirstLetter(text) {
2
2
  return text.charAt(0).toUpperCase() + text.slice(1);
3
3
  }
4
+ export function removeArrayItem(array, item) {
5
+ const index = array.indexOf(item);
6
+ if (index !== -1) {
7
+ array.splice(index, 1);
8
+ }
9
+ }
4
10
  //# sourceMappingURL=helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../src/helper.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../src/helper.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,eAAe,CAAI,KAAU,EAAE,IAAO;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,EAAE,MAAM,SAAS,CAAC;AAE3C,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAwFvE"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAA8B,KAAK,EAAE,MAAM,SAAS,CAAC;AAE5D,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CA2JvE"}
package/dist/esm/store.js CHANGED
@@ -1,11 +1,29 @@
1
1
  import { produce } from "immer";
2
- import { useEffect, useId, useMemo, useState } from "react";
3
- import { capitalizeFirstLetter } from "./helper";
2
+ import { useEffect, useRef, useState } from "react";
3
+ import { capitalizeFirstLetter, removeArrayItem } from "./helper";
4
4
  export function createStore(initialState) {
5
5
  const hub = {};
6
6
  const state = initialState;
7
7
  const mutations = {};
8
8
  const _mutations = mutations;
9
+ const listeners = [];
10
+ let changeset;
11
+ let flushScheduled = false;
12
+ function flushChanges() {
13
+ if (changeset) {
14
+ for (const listener of listeners) {
15
+ listener(changeset);
16
+ }
17
+ changeset = undefined;
18
+ }
19
+ flushScheduled = false;
20
+ }
21
+ function scheduleFlush() {
22
+ if (!flushScheduled) {
23
+ queueMicrotask(flushChanges);
24
+ flushScheduled = true;
25
+ }
26
+ }
9
27
  for (const _key in initialState) {
10
28
  const key = _key;
11
29
  const setValue = (arg) => {
@@ -16,11 +34,17 @@ export function createStore(initialState) {
16
34
  else {
17
35
  value = arg;
18
36
  }
37
+ if (value === state[key]) {
38
+ return;
39
+ }
19
40
  state[key] = value;
41
+ changeset ??= {};
42
+ changeset[key] = value;
43
+ scheduleFlush();
20
44
  for (const hubKey in hub) {
21
45
  const entry = hub[hubKey];
22
46
  if (entry.dependentFieldKeys.has(key)) {
23
- entry.refreshView();
47
+ entry.refreshView?.();
24
48
  }
25
49
  }
26
50
  };
@@ -29,8 +53,13 @@ export function createStore(initialState) {
29
53
  _mutations[`produce${suffix}`] = (fn) => {
30
54
  setValue((draft) => produce(draft, fn));
31
55
  };
32
- _mutations[`patch${suffix}`] = (attrs) => {
33
- setValue((prev) => ({ ...prev, ...attrs }));
56
+ _mutations[`patch${suffix}`] = (input) => {
57
+ setValue((prev) => {
58
+ const attrs = typeof input === "function"
59
+ ? input(prev)
60
+ : input;
61
+ return { ...prev, ...attrs };
62
+ });
34
63
  };
35
64
  }
36
65
  mutations.assigns = (attrs) => {
@@ -41,30 +70,57 @@ export function createStore(initialState) {
41
70
  setValue?.(value);
42
71
  }
43
72
  };
44
- const createHookEntry = (hookId, refreshView) => {
45
- hub[hookId] = { dependentFieldKeys: new Set(), refreshView };
73
+ const createHookEntry = (hookId) => {
46
74
  const getterObject = {};
75
+ const dependentFieldKeys = new Set();
47
76
  for (const key in initialState) {
48
77
  Object.defineProperty(getterObject, key, {
49
78
  get() {
50
- hub[hookId].dependentFieldKeys.add(key);
79
+ if (!dependentFieldKeys.has(key)) {
80
+ dependentFieldKeys.add(key);
81
+ }
51
82
  return state[key];
52
83
  },
53
84
  });
54
85
  }
55
- const cleanup = () => {
56
- delete hub[hookId];
86
+ const hookEntry = {
87
+ dependentFieldKeys,
88
+ refreshView: undefined,
89
+ getterObject,
90
+ activate() {
91
+ hub[hookId] = hookEntry;
92
+ },
93
+ deactivate() {
94
+ if (hub[hookId] === hookEntry) {
95
+ delete hub[hookId];
96
+ }
97
+ },
57
98
  };
58
- return { getterObject, cleanup };
99
+ return hookEntry;
59
100
  };
60
101
  const useSnapshot = () => {
61
- const hookId = useId();
62
- const [, setRenderObject] = useState({});
63
- const hookEntry = useMemo(() => createHookEntry(hookId, () => setRenderObject({})), [hookId]);
102
+ const [, forceRender] = useState(0);
103
+ const entryRef = useRef(null);
104
+ if (!entryRef.current) {
105
+ const id = Math.random().toString(36).substring(2, 15);
106
+ entryRef.current = createHookEntry(id);
107
+ }
64
108
  useEffect(() => {
65
- return hookEntry.cleanup;
66
- }, [hookEntry]);
67
- return hookEntry.getterObject;
109
+ if (entryRef.current) {
110
+ entryRef.current.refreshView = () => forceRender((x) => x + 1);
111
+ entryRef.current.activate();
112
+ }
113
+ return () => {
114
+ entryRef.current?.deactivate();
115
+ };
116
+ }, []);
117
+ return entryRef.current.getterObject;
118
+ };
119
+ const subscribe = (fn) => {
120
+ listeners.push(fn);
121
+ return () => {
122
+ removeArrayItem(listeners, fn);
123
+ };
68
124
  };
69
125
  return {
70
126
  state,
@@ -72,6 +128,8 @@ export function createStore(initialState) {
72
128
  get snapshot() {
73
129
  return useSnapshot();
74
130
  },
131
+ subscribe,
132
+ mutations,
75
133
  ...mutations,
76
134
  };
77
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
@@ -3,13 +3,16 @@ export type Mutations<T> = {
3
3
  } & {
4
4
  [K in keyof T as `produce${Capitalize<K & string>}`]: (fn: (draft: T[K]) => void) => void;
5
5
  } & {
6
- [K in keyof T as `patch${Capitalize<K & string>}`]: (attrs: Partial<Extract<T[K], object>>) => void;
6
+ [K in keyof T as `patch${Capitalize<K & string>}`]: (input: Partial<Extract<T[K], object>> | ((prev: T[K]) => Partial<Extract<T[K], object>>)) => void;
7
7
  } & {
8
8
  assigns: (attrs: Partial<T>) => void;
9
9
  };
10
+ export type ChangesListener<T extends object> = (attrs: Partial<T>) => void;
10
11
  export type Store<T extends object> = {
11
12
  state: T;
12
13
  useSnapshot(): T;
13
14
  snapshot: T;
15
+ subscribe: (listener: ChangesListener<T>) => () => void;
16
+ mutations: Mutations<T>;
14
17
  } & Mutations<T>;
15
18
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;KACxB,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CAChD,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KACjC,IAAI;CACV,GAAG;KACD,CAAC,IAAI,MAAM,CAAC,IAAI,UAAU,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CACpD,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,KACtB,IAAI;CACV,GAAG;KACD,CAAC,IAAI,MAAM,CAAC,IAAI,QAAQ,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CAClD,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAClC,IAAI;CACV,GAAG;IACF,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,MAAM,IAAI;IACpC,KAAK,EAAE,CAAC,CAAC;IACT,WAAW,IAAI,CAAC,CAAC;IACjB,QAAQ,EAAE,CAAC,CAAC;CACb,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;KACxB,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CAChD,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KACjC,IAAI;CACV,GAAG;KACD,CAAC,IAAI,MAAM,CAAC,IAAI,UAAU,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CACpD,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,KACtB,IAAI;CACV,GAAG;KACD,CAAC,IAAI,MAAM,CAAC,IAAI,QAAQ,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CAClD,KAAK,EACD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAC9B,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,KACjD,IAAI;CACV,GAAG;IACF,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AAE5E,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,MAAM,IAAI;IACpC,KAAK,EAAE,CAAC,CAAC;IACT,WAAW,IAAI,CAAC,CAAC;IACjB,QAAQ,EAAE,CAAC,CAAC;IACZ,SAAS,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC;IACxD,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;CACzB,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "snap-store",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "An easy-to-use global state management library for React.",
5
5
  "author": "yahiro",
6
6
  "license": "MIT",
@@ -53,4 +53,4 @@
53
53
  "engines": {
54
54
  "node": ">=16.0.0"
55
55
  }
56
- }
56
+ }