flint-store 4.0.0

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/README.md ADDED
@@ -0,0 +1,111 @@
1
+ # @flint/store
2
+
3
+ > Simple state management for Flint
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @flint/store
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```typescript
14
+ import { createStore } from '@flint/store'
15
+
16
+ const useTodoStore = createStore({
17
+ todos: [],
18
+ filter: 'all',
19
+
20
+ get filteredTodos() {
21
+ switch (this.filter) {
22
+ case 'active': return this.todos.filter(t => !t.done)
23
+ case 'done': return this.todos.filter(t => t.done)
24
+ default: return this.todos
25
+ }
26
+ },
27
+
28
+ addTodo(text) {
29
+ this.todos = [...this.todos, { id: Date.now(), text, done: false }]
30
+ },
31
+
32
+ toggleTodo(id) {
33
+ this.todos = this.todos.map(t =>
34
+ t.id === id ? { ...t, done: !t.done } : t
35
+ )
36
+ },
37
+
38
+ removeTodo(id) {
39
+ this.todos = this.todos.filter(t => t.id !== id)
40
+ },
41
+ })
42
+
43
+ // In component
44
+ function App() {
45
+ const { todos, addTodo } = useTodoStore()
46
+ return (
47
+ <div>
48
+ {todos().map(todo => <div key={todo.id}>{todo.text}</div>)}
49
+ <button onClick={() => addTodo('New item')}>Add</button>
50
+ </div>
51
+ )
52
+ }
53
+ ```
54
+
55
+ ## API
56
+
57
+ ### `createStore(config)`
58
+
59
+ Create a reactive store with state, computed, and actions.
60
+
61
+ ```typescript
62
+ const store = createStore({
63
+ // State
64
+ count: 0,
65
+ name: 'World',
66
+
67
+ // Computed (getters)
68
+ get greeting() {
69
+ return `Hello, ${this.name}!`
70
+ },
71
+
72
+ // Actions
73
+ increment() {
74
+ this.count++
75
+ },
76
+
77
+ setName(name) {
78
+ this.name = name
79
+ },
80
+ })
81
+ ```
82
+
83
+ ### `useStore()`
84
+
85
+ Access the store in components.
86
+
87
+ ```typescript
88
+ function App() {
89
+ const { count, increment } = useStore()
90
+ return <button onClick={increment}>{count()}</button>
91
+ }
92
+ ```
93
+
94
+ ## Middleware
95
+
96
+ ```typescript
97
+ const store = createStore({
98
+ // ...config
99
+ }, {
100
+ middleware: [
101
+ (state, next) => {
102
+ console.log('State changed:', state)
103
+ next()
104
+ }
105
+ ]
106
+ })
107
+ ```
108
+
109
+ ## License
110
+
111
+ MIT
@@ -0,0 +1,54 @@
1
+ import { type Signal } from 'flint-reactivity';
2
+ export type SetState<T> = Partial<T> | ((state: T) => Partial<T> | T);
3
+ export type GetState<T> = () => T;
4
+ export type StateListener<T> = (state: T, prevState: T) => void;
5
+ export type StateSelector<T, U> = (state: T) => U;
6
+ export type EqualityFn<U> = (a: U, b: U) => boolean;
7
+ export interface StoreApi<T> {
8
+ getState: GetState<T>;
9
+ setState: (partial: SetState<T>) => void;
10
+ subscribe: (listener: StateListener<T>) => () => void;
11
+ destroy: () => void;
12
+ signal: () => Signal<T>;
13
+ }
14
+ export type StateCreator<T> = (set: (partial: SetState<T>) => void, get: GetState<T>, store: StoreApi<T>) => T;
15
+ export type Middleware<T> = (stateCreator: StateCreator<T>) => StateCreator<T>;
16
+ export declare function create<T extends object>(stateCreator: StateCreator<T>, middlewares?: Middleware<T>[]): StoreApi<T>;
17
+ /**
18
+ * Create a store with simplified syntax.
19
+ * Supports both object and function syntax.
20
+ *
21
+ * @example
22
+ * // Object syntax (simplified):
23
+ * const useStore = createStore({
24
+ * count: 0,
25
+ * name: 'Flint',
26
+ * increment() { this.count++ },
27
+ * decrement() { this.count-- },
28
+ * })
29
+ *
30
+ * // Usage:
31
+ * useStore.count() // read
32
+ * useStore.increment() // call action
33
+ *
34
+ * // Function syntax (Zustand-compatible):
35
+ * const useStore = createStore((set, get) => ({
36
+ * count: 0,
37
+ * increment: () => set(s => ({ count: s.count + 1 })),
38
+ * }))
39
+ */
40
+ export declare function createStore<T extends Record<string, any>>(config: T | StateCreator<T>, middlewares?: Middleware<T>[]): T & StoreApi<T>;
41
+ export declare function logger<T extends object>(): Middleware<T>;
42
+ export declare function persist<T extends object>(name: string, options?: {
43
+ storage?: Storage;
44
+ partialize?: (state: T) => Partial<T>;
45
+ merge?: (persisted: any, current: T) => T;
46
+ }): Middleware<T>;
47
+ export declare function devtools<T extends object>(options?: {
48
+ name?: string;
49
+ enabled?: boolean;
50
+ }): Middleware<T>;
51
+ export declare function immer<T extends object>(): Middleware<T>;
52
+ export declare function createSelector<T, U>(selector: StateSelector<T, U>, equalityFn?: EqualityFn<U>): StateSelector<T, U>;
53
+ export declare function useStore<T, U>(store: StoreApi<T>, selector?: StateSelector<T, U>, equalityFn?: EqualityFn<U>): U;
54
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,284 @@
1
+ // Flint Store v4 — Zustand-compatible API with simplified createStore
2
+ import { state, computed } from 'flint-reactivity';
3
+ // ─── Store Implementation ───────────────────────────────────────
4
+ class Store {
5
+ _value;
6
+ _listeners = new Set();
7
+ _signal;
8
+ _destroyed = false;
9
+ constructor(initialState) {
10
+ this._value = initialState;
11
+ const self = this;
12
+ this._signal = (() => self._value);
13
+ this._signal[Symbol.for('flint.signal')] = true;
14
+ }
15
+ getState() {
16
+ if (this._destroyed) {
17
+ throw new Error('[Flint Store] Store has been destroyed');
18
+ }
19
+ return this._value;
20
+ }
21
+ setState(partial) {
22
+ if (this._destroyed) {
23
+ throw new Error('[Flint Store] Store has been destroyed');
24
+ }
25
+ const prevState = this._value;
26
+ const nextState = typeof partial === 'function'
27
+ ? { ...prevState, ...partial(prevState) }
28
+ : { ...prevState, ...partial };
29
+ this._value = nextState;
30
+ for (const listener of this._listeners) {
31
+ listener(nextState, prevState);
32
+ }
33
+ }
34
+ subscribe(listener) {
35
+ this._listeners.add(listener);
36
+ return () => { this._listeners.delete(listener); };
37
+ }
38
+ destroy() {
39
+ this._destroyed = true;
40
+ this._listeners.clear();
41
+ }
42
+ signal() {
43
+ return this._signal;
44
+ }
45
+ }
46
+ // ─── create() — Main API ────────────────────────────────────────
47
+ export function create(stateCreator, middlewares) {
48
+ let creator = stateCreator;
49
+ if (middlewares) {
50
+ for (const mw of middlewares) {
51
+ creator = mw(creator);
52
+ }
53
+ }
54
+ const store = new Store({});
55
+ const initialState = creator((partial) => store.setState(partial), () => store.getState(), store);
56
+ store.setState(() => initialState);
57
+ return store;
58
+ }
59
+ // ─── createStore() — Simplified API ─────────────────────────────
60
+ /**
61
+ * Create a store with simplified syntax.
62
+ * Supports both object and function syntax.
63
+ *
64
+ * @example
65
+ * // Object syntax (simplified):
66
+ * const useStore = createStore({
67
+ * count: 0,
68
+ * name: 'Flint',
69
+ * increment() { this.count++ },
70
+ * decrement() { this.count-- },
71
+ * })
72
+ *
73
+ * // Usage:
74
+ * useStore.count() // read
75
+ * useStore.increment() // call action
76
+ *
77
+ * // Function syntax (Zustand-compatible):
78
+ * const useStore = createStore((set, get) => ({
79
+ * count: 0,
80
+ * increment: () => set(s => ({ count: s.count + 1 })),
81
+ * }))
82
+ */
83
+ export function createStore(config, middlewares) {
84
+ if (typeof config === 'function') {
85
+ // Function syntax — Zustand-compatible
86
+ const store = create(config, middlewares);
87
+ return Object.assign({}, config, store);
88
+ }
89
+ // Object syntax — simplified
90
+ const stateKeys = [];
91
+ const actionKeys = [];
92
+ const computedKeys = [];
93
+ for (const [key, value] of Object.entries(config)) {
94
+ if (typeof value === 'function') {
95
+ // Check if it looks like a computed (has no parameters)
96
+ if (value.length === 0 && key.startsWith('get')) {
97
+ computedKeys.push(key);
98
+ }
99
+ else {
100
+ actionKeys.push(key);
101
+ }
102
+ }
103
+ else {
104
+ stateKeys.push(key);
105
+ }
106
+ }
107
+ // Build Zustand-compatible state creator
108
+ const stateCreator = (set, get) => {
109
+ const stateObj = {};
110
+ // Initialize state
111
+ for (const key of stateKeys) {
112
+ stateObj[key] = config[key];
113
+ }
114
+ // Add actions
115
+ for (const key of actionKeys) {
116
+ stateObj[key] = (...args) => {
117
+ const action = config[key];
118
+ const currentState = get();
119
+ action.call(stateObj, ...args);
120
+ // Check if state was mutated
121
+ const newState = get();
122
+ if (newState !== currentState) {
123
+ set(stateObj);
124
+ }
125
+ };
126
+ }
127
+ return stateObj;
128
+ };
129
+ const store = create(stateCreator, middlewares);
130
+ // Create reactive signals for each state key
131
+ const signals = {};
132
+ for (const key of stateKeys) {
133
+ signals[key] = state(config[key]);
134
+ }
135
+ // Create reactive computeds (use computed from reactivity)
136
+ const computeds = {};
137
+ for (const key of computedKeys) {
138
+ const sig = computed(() => {
139
+ const currentState = store.getState();
140
+ return config[key].call(currentState);
141
+ });
142
+ computeds[key] = sig;
143
+ }
144
+ // Build the result object
145
+ const result = {};
146
+ // Expose state as signals
147
+ for (const key of stateKeys) {
148
+ result[key] = signals[key];
149
+ }
150
+ // Expose computed as readable signals
151
+ for (const key of computedKeys) {
152
+ result[key] = computeds[key];
153
+ }
154
+ // Expose actions
155
+ for (const key of actionKeys) {
156
+ result[key] = (...args) => {
157
+ const currentState = store.getState();
158
+ const action = config[key];
159
+ action.call(result, ...args);
160
+ };
161
+ }
162
+ // Expose store methods
163
+ result.getState = store.getState.bind(store);
164
+ result.setState = store.setState.bind(store);
165
+ result.subscribe = store.subscribe.bind(store);
166
+ result.destroy = store.destroy.bind(store);
167
+ result.signal = store.signal.bind(store);
168
+ return result;
169
+ }
170
+ // ─── Middleware ──────────────────────────────────────────────────
171
+ export function logger() {
172
+ return (stateCreator) => (set, get, store) => {
173
+ const loggedSet = (partial) => {
174
+ const prev = get();
175
+ set(partial);
176
+ const next = get();
177
+ console.log('[Flint Store] prev:', prev);
178
+ console.log('[Flint Store] next:', next);
179
+ };
180
+ return stateCreator(loggedSet, get, store);
181
+ };
182
+ }
183
+ export function persist(name, options) {
184
+ const storage = options?.storage || (typeof localStorage !== 'undefined' ? localStorage : null);
185
+ return (stateCreator) => (set, get, store) => {
186
+ if (storage) {
187
+ try {
188
+ const persisted = storage.getItem(name);
189
+ if (persisted) {
190
+ const parsed = JSON.parse(persisted);
191
+ const merged = options?.merge ? options.merge(parsed, {}) : { ...parsed };
192
+ set(() => merged);
193
+ }
194
+ }
195
+ catch (e) {
196
+ console.warn(`[Flint Store] Failed to load persisted state for "${name}":`, e);
197
+ }
198
+ }
199
+ const wrappedSet = (partial) => {
200
+ set(partial);
201
+ if (storage) {
202
+ try {
203
+ const state = get();
204
+ const toPersist = options?.partialize ? options.partialize(state) : state;
205
+ storage.setItem(name, JSON.stringify(toPersist));
206
+ }
207
+ catch (e) {
208
+ console.warn(`[Flint Store] Failed to persist state for "${name}":`, e);
209
+ }
210
+ }
211
+ };
212
+ return stateCreator(wrappedSet, get, store);
213
+ };
214
+ }
215
+ export function devtools(options) {
216
+ return (stateCreator) => (set, get, store) => {
217
+ if (typeof window === 'undefined') {
218
+ return stateCreator(set, get, store);
219
+ }
220
+ const ext = window.__REDUX_DEVTOOLS_EXTENSION__;
221
+ const enabled = options?.enabled !== false && ext;
222
+ if (!enabled) {
223
+ return stateCreator(set, get, store);
224
+ }
225
+ const devtoolsStore = ext.connect({
226
+ name: options?.name || 'Flint Store',
227
+ trace: true,
228
+ });
229
+ const wrappedSet = (partial) => {
230
+ set(partial);
231
+ devtoolsStore.send({ type: 'setState' }, get());
232
+ };
233
+ const wrappedStore = {
234
+ getState: get,
235
+ setState: wrappedSet,
236
+ subscribe: store.subscribe.bind(store),
237
+ destroy: store.destroy.bind(store),
238
+ signal: store.signal.bind(store),
239
+ };
240
+ devtoolsStore.init(get());
241
+ return stateCreator(wrappedSet, get, wrappedStore);
242
+ };
243
+ }
244
+ export function immer() {
245
+ return (stateCreator) => (set, get, store) => {
246
+ const wrappedSet = (partial) => {
247
+ if (typeof partial === 'function') {
248
+ const current = get();
249
+ const draft = JSON.parse(JSON.stringify(current));
250
+ const result = partial(draft);
251
+ set(result !== undefined ? result : draft);
252
+ }
253
+ else {
254
+ set(partial);
255
+ }
256
+ };
257
+ return stateCreator(wrappedSet, get, store);
258
+ };
259
+ }
260
+ // ─── Selector ───────────────────────────────────────────────────
261
+ export function createSelector(selector, equalityFn) {
262
+ let lastResult;
263
+ let lastInput;
264
+ return (input) => {
265
+ const result = selector(input);
266
+ if (lastInput !== undefined && lastResult !== undefined && equalityFn) {
267
+ if (equalityFn(lastResult, result))
268
+ return lastResult;
269
+ }
270
+ lastInput = input;
271
+ lastResult = result;
272
+ return result;
273
+ };
274
+ }
275
+ // ─── useStore hook ──────────────────────────────────────────────
276
+ export function useStore(store, selector, equalityFn) {
277
+ const sig = store.signal();
278
+ if (selector) {
279
+ const result = selector(sig());
280
+ return result;
281
+ }
282
+ return sig();
283
+ }
284
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "flint-store",
3
+ "version": "4.0.0",
4
+ "description": "Flint Store — simplified createStore with reactive signals",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "dev": "tsc --watch",
21
+ "typecheck": "tsc --noEmit"
22
+ },
23
+ "keywords": [
24
+ "flint",
25
+ "store",
26
+ "state-management",
27
+ "zustand"
28
+ ],
29
+ "author": "",
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "https://github.com/salzcill-cmd/flint.git",
33
+ "directory": "packages/store"
34
+ },
35
+ "bugs": {
36
+ "url": "https://github.com/salzcill-cmd/flint/issues"
37
+ },
38
+ "homepage": "https://github.com/salzcill-cmd/flint#readme",
39
+ "engines": {
40
+ "node": ">=20.0.0"
41
+ },
42
+ "license": "MIT",
43
+ "publishConfig": {
44
+ "access": "public"
45
+ },
46
+ "dependencies": {
47
+ "flint-reactivity": "workspace:*"
48
+ },
49
+ "devDependencies": {
50
+ "typescript": "^5.8.3"
51
+ }
52
+ }