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 +111 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +284 -0
- package/dist/index.js.map +1 -0
- package/package.json +52 -0
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
|
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
}
|