@simplestack/store 0.7.4 → 0.7.5

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
@@ -12,7 +12,10 @@ type SelectPath<T> = T extends StateObject ? {
12
12
  [K in keyof Required<T>]: [K] | (SelectPath<NonNullableState<SelectValue<T, K>>> extends infer P ? P extends readonly any[] ? [K, ...P] : [K] : [K]);
13
13
  }[keyof Required<T>] : never;
14
14
  type SelectPathValue<T, P extends readonly PropertyKey[]> = T extends null | undefined ? undefined : P extends [infer K, ...infer Rest] ? K extends keyof T ? SelectPathValue<SelectValue<T, K>, Rest extends readonly PropertyKey[] ? Rest : []> : undefined : T;
15
- export type SelectFn<T extends StateObject | StatePrimitive> = NonNullableState<T> extends StateObject ? <P extends SelectPath<NonNullableState<T>>>(...path: P) => Store<SelectPathValue<T, P>> : undefined;
15
+ export type SelectFn<T extends StateObject | StatePrimitive> = NonNullableState<T> extends StateObject ? {
16
+ <P extends SelectPath<NonNullableState<T>>>(...path: P): Store<SelectPathValue<T, P>>;
17
+ <P extends SelectPath<NonNullableState<T>>>(...pathAndOptions: [...P, StoreOptions<SelectPathValue<T, P>>]): Store<SelectPathValue<T, P>>;
18
+ } : undefined;
16
19
  export type Store<T extends StateObject | StatePrimitive> = {
17
20
  /**
18
21
  * Get the current state of the store.
@@ -71,7 +74,26 @@ export type Store<T extends StateObject | StatePrimitive> = {
71
74
  * console.log(documentStore.get()); // { title: "New Title" }
72
75
  */
73
76
  select: SelectFn<T>;
77
+ /**
78
+ * Optional cleanup for middleware init hooks.
79
+ */
80
+ destroy: () => void;
81
+ };
82
+ export type StoreMiddleware<T extends StateObject | StatePrimitive> = (store: Store<T>) => {
83
+ set?: (next: Store<T>["set"]) => Store<T>["set"];
84
+ init?: (() => void) | (() => () => void);
85
+ };
86
+ export type StoreOptions<T extends StateObject | StatePrimitive> = {
87
+ middleware?: StoreMiddleware<T>[];
74
88
  };
89
+ /**
90
+ * Logs store updates to the console.
91
+ * Use this in the `middleware` array when creating a store.
92
+ *
93
+ * @example
94
+ * const countStore = store(0, { middleware: [loggerMiddleware] });
95
+ */
96
+ export declare const loggerMiddleware: <T extends StateObject | StatePrimitive>(store: Store<T>) => ReturnType<StoreMiddleware<T>>;
75
97
  /**
76
98
  * Creates a store with properties for getting, setting, subscribing to, and selecting from the state.
77
99
  *
@@ -97,10 +119,10 @@ export type Store<T extends StateObject | StatePrimitive> = {
97
119
  * authors: [],
98
120
  * });
99
121
  */
100
- export declare function store(initial: number): Store<number>;
101
- export declare function store(initial: string): Store<string>;
102
- export declare function store(initial: boolean): Store<boolean>;
103
- export declare function store<T extends StateObject | StatePrimitive>(initial: T): Store<T>;
122
+ export declare function store(initial: number, options?: StoreOptions<number>): Store<number>;
123
+ export declare function store(initial: string, options?: StoreOptions<string>): Store<string>;
124
+ export declare function store(initial: boolean, options?: StoreOptions<boolean>): Store<boolean>;
125
+ export declare function store<T extends StateObject | StatePrimitive>(initial: T, options?: StoreOptions<T>): Store<T>;
104
126
  export declare function effect(callback: (() => void) | (() => () => void)): () => void;
105
127
  export {};
106
128
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,13 +1,31 @@
1
1
  import { DEV } from "esm-env";
2
2
  import { Signal } from "signal-polyfill";
3
- export function store(initial) {
3
+ /**
4
+ * Logs store updates to the console.
5
+ * Use this in the `middleware` array when creating a store.
6
+ *
7
+ * @example
8
+ * const countStore = store(0, { middleware: [loggerMiddleware] });
9
+ */
10
+ export const loggerMiddleware = (store) => ({
11
+ set: (next) => (setter) => {
12
+ const prev = store.get();
13
+ next(setter);
14
+ const nextValue = store.get();
15
+ console.log("[@simplestack/store]", prev, nextValue);
16
+ },
17
+ });
18
+ export function store(initial, options) {
4
19
  const state = new Signal.State(initial);
5
20
  const getInitial = () => initial;
6
21
  const get = () => state.get();
7
22
  const set = (setter) => state.set(typeof setter === "function" ? setter(state.get()) : setter);
8
- return createStoreApi(getInitial, get, set);
23
+ return createStoreApi(getInitial, get, set, {
24
+ middleware: options?.middleware,
25
+ });
9
26
  }
10
- const createStoreApi = (getInitial, get, set, options) => {
27
+ const createStoreApi = (getInitial, get, baseSet, options) => {
28
+ let set = baseSet;
11
29
  const subscribe = (callback) => {
12
30
  // Track the previous value to avoid unnecessary updates when effects are triggered.
13
31
  // Each subscriber tracks its own previous value to avoid duplicate callbacks
@@ -38,17 +56,23 @@ const createStoreApi = (getInitial, get, set, options) => {
38
56
  }
39
57
  return current;
40
58
  };
41
- const canSelect = options?.selectable ?? !isStatePrimitive(get());
42
- if (!canSelect) {
43
- return {
44
- get,
45
- getInitial,
46
- set,
47
- subscribe,
48
- select: undefined,
49
- };
50
- }
51
- function select(...path) {
59
+ const storeApi = {
60
+ get,
61
+ getInitial,
62
+ set: (setter) => set(setter),
63
+ subscribe,
64
+ select: undefined,
65
+ destroy: () => { },
66
+ };
67
+ function select(...pathAndOptions) {
68
+ // Since select accepts variadic arguments, we need to check
69
+ // if the last argument matches the StoreOptions signature.
70
+ const maybeOptions = pathAndOptions[pathAndOptions.length - 1];
71
+ const hasOptions = isSelectOptions(maybeOptions);
72
+ const path = (hasOptions ? pathAndOptions.slice(0, -1) : pathAndOptions);
73
+ const selectOptions = hasOptions
74
+ ? maybeOptions
75
+ : undefined;
52
76
  const getInitialSelected = () => getAtPath(getInitial(), path);
53
77
  const getSelected = () => getAtPath(get(), path);
54
78
  const setSelected = (setter) => {
@@ -99,15 +123,37 @@ const createStoreApi = (getInitial, get, set, options) => {
99
123
  };
100
124
  return createStoreApi(getInitialSelected, getSelected, setSelected, {
101
125
  selectable: true,
126
+ middleware: selectOptions?.middleware,
102
127
  });
103
128
  }
104
- return {
105
- get,
106
- getInitial,
107
- set,
108
- subscribe,
109
- select: select,
110
- };
129
+ const canSelect = options?.selectable ?? !isStatePrimitive(get());
130
+ if (canSelect) {
131
+ storeApi.select = select;
132
+ }
133
+ if (options?.middleware?.length) {
134
+ const entries = options.middleware.map((middleware) => middleware(storeApi));
135
+ const setWrappers = entries
136
+ .map((entry) => entry.set)
137
+ .filter((entry) => typeof entry === "function");
138
+ if (setWrappers.length) {
139
+ set = setWrappers.reduceRight((next, wrapper) => wrapper(next), set);
140
+ }
141
+ const cleanups = entries
142
+ .map((entry) => entry.init?.())
143
+ .filter((cleanup) => typeof cleanup === "function");
144
+ if (cleanups.length) {
145
+ storeApi.destroy = () => {
146
+ for (const cleanup of cleanups)
147
+ cleanup();
148
+ cleanups.length = 0;
149
+ };
150
+ }
151
+ }
152
+ return storeApi;
153
+ };
154
+ const isSelectOptions = (value) => {
155
+ const type = typeof value;
156
+ return type !== "string" && type !== "number" && type !== "symbol";
111
157
  };
112
158
  function isStatePrimitive(state) {
113
159
  return (typeof state === "string" ||
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=middleware.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.test.d.ts","sourceRoot":"","sources":["../src/middleware.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,118 @@
1
+ import { store } from "./index.js";
2
+ describe("store middleware", () => {
3
+ it("runs init once and can hydrate", () => {
4
+ const initSpy = vi.fn();
5
+ const hydrate = (api) => ({
6
+ init: () => {
7
+ initSpy();
8
+ api.set(5);
9
+ },
10
+ });
11
+ const countStore = store(0, { middleware: [hydrate] });
12
+ expect(initSpy).toHaveBeenCalledTimes(1);
13
+ expect(countStore.get()).toBe(5);
14
+ });
15
+ it("wraps set to observe prev/next", () => {
16
+ const transitions = [];
17
+ const logger = (api) => ({
18
+ set: (next) => (setter) => {
19
+ const prev = api.get();
20
+ next(setter);
21
+ transitions.push([prev, api.get()]);
22
+ },
23
+ });
24
+ const countStore = store(0, { middleware: [logger] });
25
+ countStore.set(1);
26
+ countStore.set((n) => n + 2);
27
+ expect(transitions).toEqual([
28
+ [0, 1],
29
+ [1, 3],
30
+ ]);
31
+ });
32
+ it("connects to external service and handles inbound updates", () => {
33
+ const initSpy = vi.fn();
34
+ const sendSpy = vi.fn();
35
+ const connectSpy = vi.fn();
36
+ const unsubscribeSpy = vi.fn();
37
+ let subscriber;
38
+ connectSpy.mockImplementation(() => ({
39
+ init: initSpy,
40
+ send: sendSpy,
41
+ subscribe: (handler) => {
42
+ subscriber = handler;
43
+ return unsubscribeSpy;
44
+ },
45
+ }));
46
+ const devtools = (api) => {
47
+ const connection = connectSpy();
48
+ return {
49
+ init: () => {
50
+ connection.init(api.get());
51
+ return connection.subscribe((message) => {
52
+ if (message.state != null) {
53
+ api.set(Number(message.state));
54
+ }
55
+ });
56
+ },
57
+ set: (next) => (setter) => {
58
+ next(setter);
59
+ connection.send({ type: "set" }, api.get());
60
+ },
61
+ };
62
+ };
63
+ const countStore = store(0, { middleware: [devtools] });
64
+ expect(connectSpy).toHaveBeenCalledTimes(1);
65
+ expect(initSpy).toHaveBeenCalledWith(0);
66
+ countStore.set(2);
67
+ expect(sendSpy).toHaveBeenCalledWith({ type: "set" }, 2);
68
+ subscriber?.({ state: "7" });
69
+ expect(countStore.get()).toBe(7);
70
+ });
71
+ it("can override the setter", () => {
72
+ const incrementer = () => ({
73
+ set: (next) => (setter) => {
74
+ if (typeof setter === "function") {
75
+ next((state) => setter(state) + 1);
76
+ return;
77
+ }
78
+ next(() => setter + 1);
79
+ },
80
+ });
81
+ const countStore = store(0, { middleware: [incrementer] });
82
+ countStore.set(1);
83
+ expect(countStore.get()).toBe(2);
84
+ countStore.set((value) => value + 1);
85
+ expect(countStore.get()).toBe(4);
86
+ });
87
+ it("exposes destroy when init returns cleanup", () => {
88
+ const cleanupSpy = vi.fn();
89
+ const middleware = () => ({
90
+ init: () => cleanupSpy,
91
+ });
92
+ const countStore = store(0, { middleware: [middleware] });
93
+ countStore.destroy();
94
+ expect(cleanupSpy).toHaveBeenCalledTimes(1);
95
+ });
96
+ it("runs root middleware for root updates and both for slice updates", () => {
97
+ const calls = [];
98
+ const base = () => ({
99
+ set: (next) => (setter) => {
100
+ calls.push("base");
101
+ next(setter);
102
+ },
103
+ });
104
+ const slice = () => ({
105
+ set: (next) => (setter) => {
106
+ calls.push("slice");
107
+ next(setter);
108
+ },
109
+ });
110
+ const rootStore = store({ count: 0 }, { middleware: [base] });
111
+ const countStore = rootStore.select("count", { middleware: [slice] });
112
+ rootStore.set({ count: 1 });
113
+ expect(calls).toEqual(["base"]);
114
+ countStore.set(2);
115
+ expect(calls).toEqual(["base", "slice", "base"]);
116
+ });
117
+ });
118
+ //# sourceMappingURL=middleware.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.test.js","sourceRoot":"","sources":["../src/middleware.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplestack/store",
3
- "version": "0.7.4",
3
+ "version": "0.7.5",
4
4
  "description": "A simple storage solution for React",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",