stroid 0.1.0 → 0.1.2
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/CHANGELOG.md +232 -108
- package/README.md +157 -577
- package/dist/async.d.ts +5 -3
- package/dist/async.js +28 -23
- package/dist/async.js.map +1 -0
- package/dist/cache.d.ts +12 -0
- package/dist/computed.d.ts +19 -8
- package/dist/computed.js +12 -10
- package/dist/computed.js.map +1 -0
- package/dist/core.d.ts +5 -5
- package/dist/core.js +16 -23
- package/dist/core.js.map +1 -0
- package/dist/devtools.d.ts +12 -1
- package/dist/devtools.js +2 -1
- package/dist/devtools.js.map +1 -0
- package/dist/feature.d.ts +92 -0
- package/dist/feature.js +2 -0
- package/dist/feature.js.map +1 -0
- package/dist/helpers.d.ts +13 -5
- package/dist/helpers.js +16 -13
- package/dist/helpers.js.map +1 -0
- package/dist/index-internal.d.ts +44 -0
- package/dist/index.d.cts +91 -52
- package/dist/index.d.ts +91 -52
- package/dist/index.js +27 -21
- package/dist/index.js.map +1 -0
- package/dist/install.d.ts +6 -0
- package/dist/install.js +2 -0
- package/dist/install.js.map +1 -0
- package/dist/{options-CB35e3Xo.d.cts → options.d.ts} +52 -2
- package/dist/persist.d.ts +1 -2
- package/dist/persist.js +2 -1
- package/dist/persist.js.map +1 -0
- package/dist/{react.d.cts → react/index.d.ts} +28 -10
- package/dist/react/index.js +38 -0
- package/dist/react/index.js.map +1 -0
- package/dist/registry.d.ts +117 -0
- package/dist/runtime-admin.js +2 -1
- package/dist/runtime-admin.js.map +1 -0
- package/dist/runtime-tools.d.ts +44 -17
- package/dist/runtime-tools.js +3 -2
- package/dist/runtime-tools.js.map +1 -0
- package/dist/selectors.js +2 -1
- package/dist/selectors.js.map +1 -0
- package/dist/server.d.ts +27 -11
- package/dist/server.js +12 -9
- package/dist/server.js.map +1 -0
- package/dist/store-registry.d.ts +80 -0
- package/dist/sync.d.ts +1 -2
- package/dist/sync.js +2 -1
- package/dist/sync.js.map +1 -0
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +16 -13
- package/dist/testing.js.map +1 -0
- package/dist/tsdoc-metadata.json +11 -0
- package/dist/types/adapters/options.d.ts +90 -2
- package/dist/types/async/cache.d.ts +39 -0
- package/dist/types/async/clone.d.ts +9 -1
- package/dist/types/{async-fetch.d.ts → async/fetch.d.ts} +2 -2
- package/dist/types/async/inflight.d.ts +1 -1
- package/dist/types/{async-registry.d.ts → async/registry.d.ts} +25 -5
- package/dist/types/async/request.d.ts +9 -1
- package/dist/types/async.d.ts +10 -2
- package/dist/types/{computed-graph.d.ts → computed/computed-graph.d.ts} +4 -6
- package/dist/types/{computed.d.ts → computed/index.d.ts} +3 -2
- package/dist/types/config.d.ts +9 -1
- package/dist/types/core/index.d.ts +11 -0
- package/dist/types/core/lifecycle-hooks.d.ts +16 -0
- package/dist/types/core/store-admin-impl.d.ts +9 -0
- package/dist/types/core/store-admin.d.ts +9 -0
- package/dist/types/core/store-core.d.ts +13 -0
- package/dist/types/core/store-create.d.ts +16 -0
- package/dist/types/core/store-hydrate-impl.d.ts +35 -0
- package/dist/types/core/store-hydrate.d.ts +9 -0
- package/dist/types/core/store-lifecycle/hooks.d.ts +19 -0
- package/dist/types/{store-lifecycle → core/store-lifecycle}/identity.d.ts +3 -3
- package/dist/types/{store-lifecycle → core/store-lifecycle}/registry.d.ts +22 -8
- package/dist/types/{store-lifecycle → core/store-lifecycle}/types.d.ts +29 -1
- package/dist/types/{store-lifecycle → core/store-lifecycle}/validation.d.ts +11 -3
- package/dist/types/core/store-name.d.ts +28 -0
- package/dist/types/{store-notify.d.ts → core/store-notify.d.ts} +1 -1
- package/dist/types/{store-read.d.ts → core/store-read.d.ts} +8 -2
- package/dist/types/{store-registry.d.ts → core/store-registry.d.ts} +44 -10
- package/dist/types/core/store-replace-impl.d.ts +11 -0
- package/dist/types/core/store-replace.d.ts +9 -0
- package/dist/types/core/store-set-impl.d.ts +13 -0
- package/dist/types/core/store-set.d.ts +9 -0
- package/dist/types/core/store-shared/core.d.ts +13 -0
- package/dist/types/core/store-shared/notify.d.ts +12 -0
- package/dist/types/{store-transaction.d.ts → core/store-transaction.d.ts} +15 -1
- package/dist/types/core/store-write-shared.d.ts +19 -0
- package/dist/types/core/store-write.d.ts +13 -0
- package/dist/types/features/feature-registry.d.ts +91 -0
- package/dist/types/features/lifecycle.d.ts +12 -0
- package/dist/types/index.d.ts +13 -2
- package/dist/types/integrations/query.d.ts +2 -2
- package/dist/types/internals/computed-order.d.ts +3 -0
- package/dist/types/internals/config.d.ts +56 -2
- package/dist/types/internals/reporting.d.ts +1 -0
- package/dist/types/internals/store-admin.d.ts +1 -1
- package/dist/types/internals/store-ops.d.ts +13 -3
- package/dist/types/internals/test-reset.d.ts +2 -0
- package/dist/types/internals/write-context.d.ts +15 -0
- package/dist/types/notification/delivery.d.ts +3 -0
- package/dist/types/notification/index.d.ts +10 -0
- package/dist/types/notification/metrics.d.ts +12 -0
- package/dist/types/notification/priority.d.ts +9 -0
- package/dist/types/notification/scheduler.d.ts +11 -0
- package/dist/types/notification/snapshot.d.ts +8 -0
- package/dist/types/runtime-tools/index.d.ts +58 -0
- package/dist/types/store.d.ts +16 -7
- package/dist/types/types/utility.d.ts +17 -0
- package/dist/types/utils/devfreeze.d.ts +2 -0
- package/dist/types/utils.d.ts +8 -0
- package/dist/{types-grvlY4BX.d.cts → types.d.ts} +30 -2
- package/dist/utility.d.ts +15 -0
- package/package.json +35 -11
- package/dist/async-cache-DFHwcBQL.d.cts +0 -52
- package/dist/async-cache-DFHwcBQL.d.ts +0 -52
- package/dist/async.cjs +0 -29
- package/dist/async.d.cts +0 -40
- package/dist/computed-BbAZm1Dq.d.cts +0 -17
- package/dist/computed-CccdgY5j.d.ts +0 -17
- package/dist/computed.cjs +0 -11
- package/dist/computed.d.cts +0 -29
- package/dist/core.cjs +0 -30
- package/dist/core.d.cts +0 -5
- package/dist/devtools.cjs +0 -1
- package/dist/devtools.d.cts +0 -19
- package/dist/helpers.cjs +0 -20
- package/dist/helpers.d.cts +0 -29
- package/dist/index.cjs +0 -30
- package/dist/options-CB35e3Xo.d.ts +0 -245
- package/dist/persist.cjs +0 -1
- package/dist/persist.d.cts +0 -2
- package/dist/react.cjs +0 -31
- package/dist/react.d.ts +0 -52
- package/dist/react.js +0 -31
- package/dist/runtime-admin.cjs +0 -1
- package/dist/runtime-admin.d.cts +0 -4
- package/dist/runtime-tools.cjs +0 -3
- package/dist/runtime-tools.d.cts +0 -39
- package/dist/selectors.cjs +0 -1
- package/dist/selectors.d.cts +0 -4
- package/dist/server.cjs +0 -10
- package/dist/server.d.cts +0 -14
- package/dist/sync.cjs +0 -1
- package/dist/sync.d.cts +0 -2
- package/dist/testing.cjs +0 -20
- package/dist/testing.d.cts +0 -16
- package/dist/types/async-cache.d.ts +0 -57
- package/dist/types/core.d.ts +0 -1
- package/dist/types/devfreeze.d.ts +0 -1
- package/dist/types/feature-registry.d.ts +0 -69
- package/dist/types/internals/hooks-warnings.d.ts +0 -6
- package/dist/types/store-lifecycle/bind.d.ts +0 -3
- package/dist/types/store-lifecycle/hooks.d.ts +0 -44
- package/dist/types/store-lifecycle.d.ts +0 -20
- package/dist/types/store-name.d.ts +0 -19
- package/dist/types/store-write.d.ts +0 -45
- package/dist/types-grvlY4BX.d.ts +0 -37
- /package/dist/types/{async-retry.d.ts → async/retry.d.ts} +0 -0
- /package/dist/types/{runtime-admin.d.ts → runtime-admin/index.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,608 +1,188 @@
|
|
|
1
1
|
# Stroid
|
|
2
2
|
|
|
3
|
-
[](https://
|
|
4
|
-
[](https://www.npmjs.com/package/stroid)
|
|
3
|
+
[](https://npmjs.com/package/stroid)
|
|
5
4
|
[](https://bundlephobia.com/package/stroid)
|
|
6
|
-
[](https://
|
|
7
|
-
[](
|
|
8
|
-
[](https://github.com/Himesh-Bhattarai/stroid/issues)
|
|
10
|
-
[](https://github.com/Himesh-Bhattarai/stroid)
|
|
11
|
-
[](https://github.com/Himesh-Bhattarai/stroid)
|
|
12
|
-
[](https://github.com/Himesh-Bhattarai/stroid/graphs/contributors)
|
|
13
|
-
[](https://github.com/Himesh-Bhattarai/stroid/commits/main)
|
|
14
|
-
[](https://github.com/Himesh-Bhattarai/stroid/commits/main)
|
|
15
|
-
[](https://github.com/Himesh-Bhattarai/stroid)
|
|
16
|
-
[](https://www.npmjs.com/package/stroid)
|
|
17
|
-
|
|
18
|
-
Stroid is a named-store state library for JavaScript and React. Core stays small; optional layers unlock persist, async caching, sync, and devtools.
|
|
19
|
-
|
|
20
|
-
## Table of Contents
|
|
21
|
-
|
|
22
|
-
- [Install](#install)
|
|
23
|
-
- [Minimal Usage](#minimal-usage)
|
|
24
|
-
- [Module Imports](#module-imports)
|
|
25
|
-
- [Stroid At a Glance](#stroid-at-a-glance)
|
|
26
|
-
- [Public API Index](#public-api-index)
|
|
27
|
-
- [Subpath API Index](#subpath-api-index)
|
|
28
|
-
- [Options Index](#options-index)
|
|
29
|
-
- [Types Index](#types-index)
|
|
30
|
-
- [Behavior Notes](#behavior-notes)
|
|
31
|
-
- [Short Recipes](#short-recipes)
|
|
32
|
-
- [Docs](#docs)
|
|
33
|
-
- [Docs Index (Full)](#docs-index-full)
|
|
34
|
-
- [Changelog and License](#changelog-and-license)
|
|
5
|
+
[](https://npmjs.com/package/stroid)
|
|
6
|
+
[](./LICENSE)
|
|
7
|
+
[](https://github.com/Himesh-Bhattarai/stroid/actions)
|
|
35
8
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
npm install stroid
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## Minimal Usage
|
|
43
|
-
|
|
44
|
-
```ts
|
|
45
|
-
import { createStore, getStore, setStore } from "stroid";
|
|
46
|
-
|
|
47
|
-
createStore("counter", { count: 0 });
|
|
48
|
-
setStore("counter", "count", 1);
|
|
49
|
-
|
|
50
|
-
console.log(getStore("counter"));
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## Module Imports
|
|
54
|
-
|
|
55
|
-
Core (root) entry:
|
|
56
|
-
|
|
57
|
-
```ts
|
|
58
|
-
import { createStore, setStore, getStore } from "stroid";
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
Subpath modules:
|
|
62
|
-
|
|
63
|
-
```ts
|
|
64
|
-
import { useStore } from "stroid/react";
|
|
65
|
-
import { fetchStore } from "stroid/async";
|
|
66
|
-
import { createSelector } from "stroid/selectors";
|
|
67
|
-
import { createComputed } from "stroid/computed";
|
|
68
|
-
import { createEntityStore } from "stroid/helpers";
|
|
69
|
-
import { createMockStore } from "stroid/testing";
|
|
70
|
-
import { listStores } from "stroid/runtime-tools";
|
|
71
|
-
import { clearAllStores } from "stroid/runtime-admin";
|
|
72
|
-
import { createStoreForRequest } from "stroid/server";
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
Feature registration (side-effect imports):
|
|
76
|
-
|
|
77
|
-
```ts
|
|
78
|
-
import "stroid/persist";
|
|
79
|
-
import "stroid/sync";
|
|
80
|
-
import "stroid/devtools";
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Stroid At a Glance
|
|
84
|
-
|
|
85
|
-
Core API:
|
|
86
|
-
- createStore, createStoreStrict, setStore, setStoreBatch, getStore, deleteStore, resetStore, hasStore, hydrateStores
|
|
87
|
-
- store(name) and namespace(ns) helpers for typed handles
|
|
88
|
-
- createComputed, invalidateComputed, deleteComputed, isComputedStore
|
|
89
|
-
- configureStroid and queryIntegrations helpers
|
|
90
|
-
|
|
91
|
-
Runtime layers:
|
|
92
|
-
- stroid/react: useStore, useStoreField, useSelector, useStoreStatic, useAsyncStore, useFormStore, useAsyncStoreSuspense
|
|
93
|
-
- stroid/async: fetchStore, refetchStore, enableRevalidateOnFocus, getAsyncMetrics
|
|
94
|
-
- stroid/selectors: createSelector, subscribeWithSelector
|
|
95
|
-
|
|
96
|
-
Store-attached features (side-effect imports):
|
|
97
|
-
- stroid/persist
|
|
98
|
-
- stroid/sync
|
|
99
|
-
- stroid/devtools
|
|
100
|
-
|
|
101
|
-
Operational tools:
|
|
102
|
-
- stroid/runtime-tools
|
|
103
|
-
- stroid/runtime-admin
|
|
104
|
-
- stroid/server
|
|
105
|
-
- stroid/helpers
|
|
106
|
-
- stroid/testing
|
|
107
|
-
- stroid/computed
|
|
108
|
-
|
|
109
|
-
## Public API Index
|
|
110
|
-
|
|
111
|
-
Root export names (stroid and stroid/core):
|
|
112
|
-
- `createStore(name, initialState, options?)`
|
|
113
|
-
- `createStoreStrict(name, initialState, options?)`
|
|
114
|
-
- `setStore(nameOrHandle, updateOrPath, value?)`
|
|
115
|
-
- `setStoreBatch(fn)`
|
|
116
|
-
- `getStore(nameOrHandle, path?)`
|
|
117
|
-
- `deleteStore(nameOrHandle)`
|
|
118
|
-
- `resetStore(nameOrHandle)`
|
|
119
|
-
- `hasStore(nameOrHandle)`
|
|
120
|
-
- `hydrateStores(snapshot, options?, trustOptions?)`
|
|
121
|
-
- `store(name)`
|
|
122
|
-
- `namespace(ns)`
|
|
123
|
-
- `createComputed(name, deps, compute, options?)`
|
|
124
|
-
- `invalidateComputed(name)`
|
|
125
|
-
- `deleteComputed(name)`
|
|
126
|
-
- `isComputedStore(name)`
|
|
127
|
-
- `configureStroid(config)`
|
|
128
|
-
- `queryIntegrations (reactQueryKey, createReactQueryFetcher, swrKey, createSwrFetcher)`
|
|
129
|
-
|
|
130
|
-
Root exported types:
|
|
131
|
-
- `Path`
|
|
132
|
-
- `PathValue`
|
|
133
|
-
- `PartialDeep`
|
|
134
|
-
- `StoreDefinition`
|
|
135
|
-
- `StoreValue`
|
|
136
|
-
- `StoreKey`
|
|
137
|
-
- `StoreName`
|
|
138
|
-
- `StateFor`
|
|
139
|
-
- `StoreStateMap`
|
|
140
|
-
- `StrictStoreMap`
|
|
141
|
-
- `WriteResult`
|
|
142
|
-
- `PersistOptions`
|
|
143
|
-
- `StoreOptions`
|
|
144
|
-
- `SyncOptions`
|
|
145
|
-
|
|
146
|
-
## Subpath API Index
|
|
147
|
-
|
|
148
|
-
### stroid/react
|
|
149
|
-
|
|
150
|
-
- `useStore`
|
|
151
|
-
- `useStoreField`
|
|
152
|
-
- `useSelector`
|
|
153
|
-
- `useStoreStatic`
|
|
154
|
-
- `useAsyncStore`
|
|
155
|
-
- `useFormStore`
|
|
156
|
-
- `useAsyncStoreSuspense`
|
|
157
|
-
|
|
158
|
-
### stroid/async
|
|
159
|
-
|
|
160
|
-
- `fetchStore`
|
|
161
|
-
- `refetchStore`
|
|
162
|
-
- `enableRevalidateOnFocus`
|
|
163
|
-
- `getAsyncMetrics`
|
|
164
|
-
- `_resetAsyncStateForTests`
|
|
165
|
-
- `FetchOptions (type)`
|
|
166
|
-
- `FetchInput (type)`
|
|
167
|
-
- `AsyncStateSnapshot (type)`
|
|
168
|
-
- `AsyncStateAdapter (type)`
|
|
169
|
-
|
|
170
|
-
### stroid/selectors
|
|
171
|
-
|
|
172
|
-
- `createSelector`
|
|
173
|
-
- `subscribeWithSelector`
|
|
174
|
-
|
|
175
|
-
### stroid/computed
|
|
176
|
-
|
|
177
|
-
- `createComputed`
|
|
178
|
-
- `invalidateComputed`
|
|
179
|
-
- `deleteComputed`
|
|
180
|
-
- `isComputedStore`
|
|
181
|
-
- `_resetComputedForTests`
|
|
182
|
-
- `getFullComputedGraph`
|
|
183
|
-
- `getComputedDepsFor`
|
|
184
|
-
|
|
185
|
-
### stroid/helpers
|
|
186
|
-
|
|
187
|
-
- `createCounterStore`
|
|
188
|
-
- `createListStore`
|
|
189
|
-
- `createEntityStore`
|
|
190
|
-
|
|
191
|
-
### stroid/testing
|
|
192
|
-
|
|
193
|
-
- `createMockStore`
|
|
194
|
-
- `withMockedTime`
|
|
195
|
-
- `resetAllStoresForTest`
|
|
196
|
-
- `benchmarkStoreSet`
|
|
197
|
-
|
|
198
|
-
### stroid/runtime-tools
|
|
199
|
-
|
|
200
|
-
- `listStores`
|
|
201
|
-
- `getStoreMeta`
|
|
202
|
-
- `getInitialState`
|
|
203
|
-
- `getMetrics`
|
|
204
|
-
- `getSubscriberCount`
|
|
205
|
-
- `getAsyncInflightCount`
|
|
206
|
-
- `getPersistQueueDepth`
|
|
207
|
-
- `getComputedGraph`
|
|
208
|
-
- `getComputedDeps`
|
|
209
|
-
|
|
210
|
-
### stroid/runtime-admin
|
|
211
|
-
|
|
212
|
-
- `clearAllStores`
|
|
213
|
-
- `clearStores`
|
|
214
|
-
|
|
215
|
-
### stroid/server
|
|
216
|
-
|
|
217
|
-
- `createStoreForRequest`
|
|
218
|
-
|
|
219
|
-
### stroid/persist
|
|
220
|
-
|
|
221
|
-
- `side-effect only (registers persistence feature)`
|
|
222
|
-
|
|
223
|
-
### stroid/sync
|
|
224
|
-
|
|
225
|
-
- `side-effect only (registers sync feature)`
|
|
226
|
-
|
|
227
|
-
### stroid/devtools
|
|
228
|
-
|
|
229
|
-
- `side-effect only (registers devtools feature)`
|
|
230
|
-
|
|
231
|
-
## Behavior Notes
|
|
232
|
-
|
|
233
|
-
- Feature layers are explicit: persist, sync, and devtools require side-effect imports.
|
|
234
|
-
- Default store scope is request; global stores must be opted in.
|
|
235
|
-
- Snapshot mode defaults to deep cloning for subscriptions and selector snapshots.
|
|
236
|
-
- hydrateStores requires trust options; use allowUntrusted or validate for SSR data.
|
|
237
|
-
- fetchStore writes the AsyncStateSnapshot shape by default unless stateAdapter is provided.
|
|
238
|
-
- Auto-create for fetchStore is controlled by FetchOptions.autoCreate or global config.
|
|
239
|
-
- Persist defaults to localStorage when enabled in the browser.
|
|
240
|
-
- Sync uses BroadcastChannel and warns if unavailable.
|
|
241
|
-
- Computed deps can be store names or handles; missing deps yield null until created.
|
|
242
|
-
- Store option validate replaces legacy schema and validator options.
|
|
243
|
-
|
|
244
|
-
## Short Recipes
|
|
245
|
-
|
|
246
|
-
### Create and update a store
|
|
247
|
-
|
|
248
|
-
```ts
|
|
249
|
-
import { createStore, setStore, getStore } from "stroid";
|
|
250
|
-
|
|
251
|
-
createStore("profile", { name: "Ava", age: 30 });
|
|
252
|
-
setStore("profile", "age", 31);
|
|
253
|
-
|
|
254
|
-
console.log(getStore("profile"));
|
|
255
|
-
```
|
|
9
|
+
**Named-store state engine for TypeScript and React.**
|
|
256
10
|
|
|
257
|
-
|
|
11
|
+
Every store has a name. Write to it from anywhere — hooks, utilities, server, tests. Optional layers add persistence, sync, async fetch, SSR isolation, and devtools without coupling to your core logic.
|
|
258
12
|
|
|
259
13
|
```ts
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
const
|
|
263
|
-
createStore("counter", { count: 0 });
|
|
264
|
-
setStore(counter, (draft) => { draft.count += 1; });
|
|
265
|
-
|
|
266
|
-
console.log(getStore(counter, "count"));
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
### Batch multiple writes
|
|
270
|
-
|
|
271
|
-
```ts
|
|
272
|
-
import { setStoreBatch, setStore } from "stroid";
|
|
273
|
-
|
|
274
|
-
setStoreBatch(() => {
|
|
275
|
-
setStore("a", { value: 1 });
|
|
276
|
-
setStore("b", { value: 2 });
|
|
277
|
-
});
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
### Path updates with strict keys
|
|
281
|
-
|
|
282
|
-
```ts
|
|
283
|
-
import { createStore, setStore } from "stroid";
|
|
284
|
-
|
|
285
|
-
createStore("user", { profile: { name: "Ava" } });
|
|
286
|
-
setStore("user", "profile.name", "Kai");
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
### Path updates with pathCreate
|
|
290
|
-
|
|
291
|
-
```ts
|
|
292
|
-
import { createStore, setStore } from "stroid";
|
|
293
|
-
|
|
294
|
-
createStore("user", { profile: { name: "Ava" } }, { pathCreate: true });
|
|
295
|
-
setStore("user", "profile.age", 32);
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
### React hooks
|
|
299
|
-
|
|
300
|
-
```ts
|
|
301
|
-
import { useStore } from "stroid/react";
|
|
302
|
-
|
|
303
|
-
function Counter() {
|
|
304
|
-
const state = useStore("counter");
|
|
305
|
-
return <div>{state?.count ?? 0}</div>;
|
|
306
|
-
}
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
### Selectors
|
|
310
|
-
|
|
311
|
-
```ts
|
|
312
|
-
import { createSelector } from "stroid/selectors";
|
|
313
|
-
|
|
314
|
-
const selectName = createSelector("profile", (state) => state.name);
|
|
315
|
-
console.log(selectName());
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
### Computed stores
|
|
319
|
-
|
|
320
|
-
```ts
|
|
321
|
-
import { createComputed } from "stroid/computed";
|
|
322
|
-
|
|
323
|
-
createComputed("total", ["cart"], (cart) => {
|
|
324
|
-
return cart ? cart.items.reduce((sum, item) => sum + item.price, 0) : 0;
|
|
325
|
-
});
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
### Persisted store
|
|
329
|
-
|
|
330
|
-
```ts
|
|
331
|
-
import { createStore } from "stroid";
|
|
332
|
-
import "stroid/persist";
|
|
333
|
-
|
|
334
|
-
createStore("prefs", { theme: "dark" }, {
|
|
335
|
-
persist: { key: "prefs", allowPlaintext: true },
|
|
336
|
-
});
|
|
14
|
+
createStore("user", { name: "Ava", role: "admin" }) // define once
|
|
15
|
+
setStore("user", "name", "Kai") // write from anywhere
|
|
16
|
+
const name = useStore("user", s => s.name) // React hook (stroid/react)
|
|
337
17
|
```
|
|
338
18
|
|
|
339
|
-
|
|
19
|
+
---
|
|
340
20
|
|
|
341
|
-
|
|
342
|
-
import { createStore } from "stroid";
|
|
343
|
-
import "stroid/sync";
|
|
21
|
+
## Install
|
|
344
22
|
|
|
345
|
-
|
|
23
|
+
```bash
|
|
24
|
+
npm install stroid
|
|
346
25
|
```
|
|
347
26
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
27
|
+
**Requirements:** Node `>=18`. React `>=18` (only if using `stroid/react`).
|
|
28
|
+
|
|
29
|
+
**ESM-only:** Stroid ships ESM only. If your toolchain requires CJS, use a bundler with ESM support (Vite, webpack 5, esbuild).
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Layer Map
|
|
353
34
|
|
|
354
|
-
createStore("user", { data: null, loading: false, error: null, status: "idle" });
|
|
355
|
-
fetchStore("user", "/api/user");
|
|
356
35
|
```
|
|
36
|
+
┌─────────────────────────────────────────────────────────┐
|
|
37
|
+
│ your app │
|
|
38
|
+
├─────────────────────────────────────────────────────────┤
|
|
39
|
+
│ useStore useSelector useAsyncStore useFormStore │ stroid/react
|
|
40
|
+
├─────────────────────────────────────────────────────────┤
|
|
41
|
+
│ createStore setStore getStore setStoreBatch │ stroid ← core
|
|
42
|
+
│ createComputed createSelector createEntityStore │
|
|
43
|
+
├──────────────┬──────────────┬───────────────────────────┤
|
|
44
|
+
│ stroid/persist│ stroid/sync │ stroid/async │ opt-in features
|
|
45
|
+
│ localStorage │ BroadcastCh │ fetch + cache + retry │
|
|
46
|
+
├──────────────┴──────────────┴───────────────────────────┤
|
|
47
|
+
│ stroid/server createStoreForRequest (AsyncLocalStorage)│ SSR
|
|
48
|
+
├─────────────────────────────────────────────────────────┤
|
|
49
|
+
│ stroid/devtools stroid/testing stroid/runtime-tools │ tooling
|
|
50
|
+
└─────────────────────────────────────────────────────────┘
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Each row is independent. Use only what you need.
|
|
54
|
+
|
|
55
|
+
`stroid/core` exports only `createStore`, `setStore`, `getStore`, `hasStore`, `resetStore`, and `deleteStore`. Import from `stroid` for the full runtime (batching, hydration, computed). React hooks live in `stroid/react`.
|
|
56
|
+
|
|
57
|
+
## What Each Import Contains
|
|
58
|
+
|
|
59
|
+
- `stroid`: Full runtime (batching, hydration, computed, async metrics, runtime tools). No React hooks.
|
|
60
|
+
- `stroid/core`: Minimal CRUD only (`createStore`, `setStore`, `getStore`, `hasStore`, `resetStore`, `deleteStore`).
|
|
61
|
+
- `stroid/react`: React hooks (`useStore`, `useSelector`, `useAsyncStore`, `useFormStore`, `useAsyncStoreSuspense`) + `RegistryScope`.
|
|
62
|
+
- `stroid/async`: `fetchStore`, cache, retry, revalidate helpers.
|
|
63
|
+
- `stroid/selectors`: `createSelector`, `subscribeWithSelector`.
|
|
64
|
+
- `stroid/computed`: `createComputed`, `invalidateComputed`, `deleteComputed`, `isComputedStore`.
|
|
65
|
+
- `stroid/persist`: Side-effect registration for persistence (localStorage/sessionStorage). Not tree-shakeable.
|
|
66
|
+
- `stroid/sync`: Side-effect registration for BroadcastChannel sync. Not tree-shakeable.
|
|
67
|
+
- `stroid/devtools`: Side-effect registration for Redux DevTools bridge. Not tree-shakeable.
|
|
68
|
+
- `stroid/server`: SSR registry helpers (`createStoreForRequest`).
|
|
69
|
+
- `stroid/helpers`: Entity/list/counter store helpers.
|
|
70
|
+
- `stroid/runtime-tools`: Observability and diagnostics.
|
|
71
|
+
- `stroid/runtime-admin`: Admin utilities (clear/flush).
|
|
72
|
+
- `stroid/testing`: Testing utilities (mocks, reset helpers, benchmarks).
|
|
357
73
|
|
|
358
|
-
|
|
74
|
+
---
|
|
359
75
|
|
|
360
|
-
|
|
361
|
-
import { fetchStore } from "stroid/async";
|
|
76
|
+
## Quick API Reference
|
|
362
77
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
78
|
+
| API | Purpose |
|
|
79
|
+
|-----|---------|
|
|
80
|
+
| `createStore(name, state, options?)` | Define a store. Returns `StoreDefinition \| undefined`. |
|
|
81
|
+
| `createStoreStrict(name, state, options?)` | Define a store; throw synchronously on failure. |
|
|
82
|
+
| `setStore(name, update)` | Shallow-merge an object update into the store. |
|
|
83
|
+
| `setStore(name, path, value)` | Write a value by dot-path or array path. |
|
|
84
|
+
| `setStore(name, draft => { })` | Mutate with a function (optional Immer support). |
|
|
85
|
+
| `replaceStore(name, value)` | Replace the entire store value. |
|
|
86
|
+
| `getStore(name, path?)` | Read a store (or a nested path). |
|
|
87
|
+
| `deleteStore(name)` | Remove a store from the registry. |
|
|
88
|
+
| `resetStore(name)` | Restore a store to its initial state. |
|
|
89
|
+
| `hasStore(name)` | Check if a store exists. |
|
|
90
|
+
| `setStoreBatch(fn)` | Atomic multi-store write — rolls back all writes on failure. |
|
|
91
|
+
| `hydrateStores(snapshot, options?, trust)` | Rehydrate on client from a server snapshot. |
|
|
92
|
+
| `useStore(name, selector?)` | React hook — subscribes to a store. |
|
|
93
|
+
| `useSelector(name, fn)` | React hook — fine-grained derived value. |
|
|
94
|
+
| `fetchStore(name, url, options?)` | Async fetch wired to store state. |
|
|
95
|
+
| `createComputed(name, deps, fn)` | Reactive derived store. |
|
|
96
|
+
| `createStoreForRequest(fn)` | Per-request SSR registry. |
|
|
367
97
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
```ts
|
|
371
|
-
import { createStoreForRequest } from "stroid/server";
|
|
98
|
+
---
|
|
372
99
|
|
|
373
|
-
|
|
374
|
-
create("session", { id: null });
|
|
375
|
-
set("session", (draft) => { draft.id = "abc"; });
|
|
376
|
-
});
|
|
377
|
-
|
|
378
|
-
requestStore.hydrate(() => renderApp());
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
### Helpers
|
|
100
|
+
## Module Import Map
|
|
382
101
|
|
|
383
102
|
```ts
|
|
384
|
-
|
|
103
|
+
// Core
|
|
104
|
+
import { createStore, setStore, getStore, hasStore,
|
|
105
|
+
deleteStore, resetStore, setStoreBatch, hydrateStores } from "stroid"
|
|
385
106
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
```
|
|
107
|
+
// Minimal core (bundle-size-sensitive)
|
|
108
|
+
import { createStore, setStore, getStore, hasStore,
|
|
109
|
+
resetStore, deleteStore } from "stroid/core"
|
|
390
110
|
|
|
391
|
-
|
|
111
|
+
// React
|
|
112
|
+
import { useStore, useSelector, useStoreField, useStoreStatic,
|
|
113
|
+
useAsyncStore, useFormStore, useAsyncStoreSuspense,
|
|
114
|
+
RegistryScope } from "stroid/react"
|
|
392
115
|
|
|
393
|
-
|
|
394
|
-
import {
|
|
116
|
+
// Async
|
|
117
|
+
import { fetchStore, refetchStore, enableRevalidateOnFocus } from "stroid/async"
|
|
395
118
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
### Runtime cleanup
|
|
119
|
+
// Selectors & Computed
|
|
120
|
+
import { createSelector, subscribeWithSelector } from "stroid/selectors"
|
|
121
|
+
import { createComputed, invalidateComputed,
|
|
122
|
+
deleteComputed, isComputedStore } from "stroid/computed"
|
|
402
123
|
|
|
403
|
-
|
|
404
|
-
import
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
import {
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
124
|
+
// Features (side-effect imports — register once at app entry)
|
|
125
|
+
import "stroid/persist"
|
|
126
|
+
import "stroid/sync"
|
|
127
|
+
import "stroid/devtools"
|
|
128
|
+
|
|
129
|
+
// Note: stroid/persist and stroid/sync are side-effect entrypoints only.
|
|
130
|
+
// All types live on the main "stroid" entry.
|
|
131
|
+
|
|
132
|
+
// Server / SSR
|
|
133
|
+
import { createStoreForRequest } from "stroid/server"
|
|
134
|
+
|
|
135
|
+
// Helpers & Testing
|
|
136
|
+
import { createEntityStore, createListStore, createCounterStore } from "stroid/helpers"
|
|
137
|
+
import { createMockStore, resetAllStoresForTest,
|
|
138
|
+
withMockedTime, benchmarkStoreSet } from "stroid/testing"
|
|
139
|
+
|
|
140
|
+
// Runtime Observability
|
|
141
|
+
import { listStores, getStoreMeta, getMetrics,
|
|
142
|
+
getSubscriberCount, getStoreHealth, findColdStores,
|
|
143
|
+
getComputedGraph, getComputedDeps,
|
|
144
|
+
getPersistQueueDepth } from "stroid/runtime-tools"
|
|
145
|
+
import { clearAllStores, clearStores } from "stroid/runtime-admin"
|
|
146
|
+
|
|
147
|
+
// Devtools API (after `import "stroid/devtools"`)
|
|
148
|
+
import { getHistory, clearHistory } from "stroid/devtools"
|
|
149
|
+
|
|
150
|
+
// Config
|
|
151
|
+
import { configureStroid, resetConfig,
|
|
152
|
+
registerMutatorProduce } from "stroid"
|
|
153
|
+
|
|
154
|
+
// Feature plugin API
|
|
155
|
+
import { registerStoreFeature,
|
|
156
|
+
hasRegisteredStoreFeature,
|
|
157
|
+
getRegisteredFeatureNames } from "stroid/feature"
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
419
161
|
|
|
420
162
|
## Docs
|
|
421
163
|
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
- [
|
|
425
|
-
- [
|
|
426
|
-
- [
|
|
427
|
-
- [
|
|
428
|
-
- [
|
|
429
|
-
- [
|
|
430
|
-
- [
|
|
431
|
-
- [
|
|
432
|
-
- [
|
|
433
|
-
- [
|
|
434
|
-
- [
|
|
435
|
-
- [
|
|
436
|
-
- [
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
- [Appendices](docs/BACK_MATTER/APPENDICES.md)
|
|
447
|
-
- [Back Cover](docs/BACK_MATTER/BACK_COVER.md)
|
|
448
|
-
- [Bibliography](docs/BACK_MATTER/Bibliography.md)
|
|
449
|
-
- [Colophon](docs/BACK_MATTER/Colophon.md)
|
|
450
|
-
- [Contact Information](docs/BACK_MATTER/Contact_Information.md)
|
|
451
|
-
|
|
452
|
-
### Body Matter
|
|
453
|
-
|
|
454
|
-
- [Back Cover](docs/BODY_MATTER/BACK_COVER.md)
|
|
455
|
-
|
|
456
|
-
### Body Matter - Async Of Stroid
|
|
457
|
-
|
|
458
|
-
- [Cache And Revalidation](docs/BODY_MATTER/ASYNC_OF_STROID/CACHE_AND_REVALIDATION.md)
|
|
459
|
-
- [Fetch Flow](docs/BODY_MATTER/ASYNC_OF_STROID/FETCH_FLOW.md)
|
|
460
|
-
- [Introduction](docs/BODY_MATTER/ASYNC_OF_STROID/INTRODUCTION.md)
|
|
461
|
-
- [Real Use](docs/BODY_MATTER/ASYNC_OF_STROID/REAL_USE.md)
|
|
462
|
-
|
|
463
|
-
### Body Matter - Beginner Guide
|
|
464
|
-
|
|
465
|
-
- [First Store](docs/BODY_MATTER/BEGINNER_GUIDE/FIRST_STORE.md)
|
|
466
|
-
- [From Basic To Real](docs/BODY_MATTER/BEGINNER_GUIDE/FROM_BASIC_TO_REAL.md)
|
|
467
|
-
- [Install And Imports](docs/BODY_MATTER/BEGINNER_GUIDE/INSTALL_AND_IMPORTS.md)
|
|
468
|
-
- [React Usage](docs/BODY_MATTER/BEGINNER_GUIDE/REACT_USAGE.md)
|
|
469
|
-
- [Start Here](docs/BODY_MATTER/BEGINNER_GUIDE/START_HERE.md)
|
|
470
|
-
|
|
471
|
-
### Body Matter - Binary To Being
|
|
472
|
-
|
|
473
|
-
- [Async Layer](docs/BODY_MATTER/BINARY_TO_BEING/ASYNC_LAYER.md)
|
|
474
|
-
- [Design Principles Of Stroid](docs/BODY_MATTER/BINARY_TO_BEING/DESIGN_PRINCIPLES_OF_STROID.md)
|
|
475
|
-
- [Persistence Layer](docs/BODY_MATTER/BINARY_TO_BEING/PERSISTENCE_LAYER.md)
|
|
476
|
-
- [Production Patterns](docs/BODY_MATTER/BINARY_TO_BEING/PRODUCTION_PATTERNS.md)
|
|
477
|
-
- [React Bindings](docs/BODY_MATTER/BINARY_TO_BEING/REACT_BINDINGS.md)
|
|
478
|
-
- [Runtime Architecture](docs/BODY_MATTER/BINARY_TO_BEING/RUNTIME_ARCHITECTURE.md)
|
|
479
|
-
- [Selectors](docs/BODY_MATTER/BINARY_TO_BEING/SELECTORS.md)
|
|
480
|
-
- [Store System](docs/BODY_MATTER/BINARY_TO_BEING/STORE_SYSTEM.md)
|
|
481
|
-
- [Tooling And Debugging](docs/BODY_MATTER/BINARY_TO_BEING/TOOLING_AND_DEBUGGING.md)
|
|
482
|
-
- [Why State Management Fails In Large Apps](docs/BODY_MATTER/BINARY_TO_BEING/WHY_STATE_MANAGEMENT_FAILS_IN_LARGE_APPS.md)
|
|
483
|
-
|
|
484
|
-
### Body Matter - Bug As Helper
|
|
485
|
-
|
|
486
|
-
- [Intentional Bugs](docs/BODY_MATTER/BUG_AS_HELPER/INTENTIONAL_BUGS.md)
|
|
487
|
-
- [Introduction](docs/BODY_MATTER/BUG_AS_HELPER/INTRODUCTION.md)
|
|
488
|
-
- [No Need To Fix](docs/BODY_MATTER/BUG_AS_HELPER/NO_NEED_TO_FIX.md)
|
|
489
|
-
- [Real Use](docs/BODY_MATTER/BUG_AS_HELPER/REAL_USE.md)
|
|
490
|
-
|
|
491
|
-
### Body Matter - Core Of Stroid
|
|
492
|
-
|
|
493
|
-
- [Core Options](docs/BODY_MATTER/CORE_OF_STROID/CORE_OPTIONS.md)
|
|
494
|
-
- [Example](docs/BODY_MATTER/CORE_OF_STROID/EXAMPLE.md)
|
|
495
|
-
- [Introduction](docs/BODY_MATTER/CORE_OF_STROID/INTRODUCTION.md)
|
|
496
|
-
- [Real Use](docs/BODY_MATTER/CORE_OF_STROID/REAL_USE.md)
|
|
497
|
-
|
|
498
|
-
### Body Matter - Devtools Of Stroid
|
|
499
|
-
|
|
500
|
-
- [History And Redaction](docs/BODY_MATTER/DEVTOOLS_OF_STROID/HISTORY_AND_REDACTION.md)
|
|
501
|
-
- [Introduction](docs/BODY_MATTER/DEVTOOLS_OF_STROID/INTRODUCTION.md)
|
|
502
|
-
- [Real Use](docs/BODY_MATTER/DEVTOOLS_OF_STROID/REAL_USE.md)
|
|
503
|
-
- [Redux Devtools And Boundaries](docs/BODY_MATTER/DEVTOOLS_OF_STROID/REDUX_DEVTOOLS_AND_BOUNDARIES.md)
|
|
504
|
-
|
|
505
|
-
### Body Matter - Helpers And Chain Of Stroid
|
|
506
|
-
|
|
507
|
-
- [Chain Api](docs/BODY_MATTER/HELPERS_AND_CHAIN_OF_STROID/CHAIN_API.md)
|
|
508
|
-
- [Helper Factories](docs/BODY_MATTER/HELPERS_AND_CHAIN_OF_STROID/HELPER_FACTORIES.md)
|
|
509
|
-
- [Introduction](docs/BODY_MATTER/HELPERS_AND_CHAIN_OF_STROID/INTRODUCTION.md)
|
|
510
|
-
- [Real Use](docs/BODY_MATTER/HELPERS_AND_CHAIN_OF_STROID/REAL_USE.md)
|
|
511
|
-
|
|
512
|
-
### Body Matter - Opt In Features Of Stroid
|
|
513
|
-
|
|
514
|
-
- [Introduction](docs/BODY_MATTER/OPT_IN_FEATURES_OF_STROID/INTRODUCTION.md)
|
|
515
|
-
- [Power Tools](docs/BODY_MATTER/OPT_IN_FEATURES_OF_STROID/POWER_TOOLS.md)
|
|
516
|
-
- [Runtime Layers](docs/BODY_MATTER/OPT_IN_FEATURES_OF_STROID/RUNTIME_LAYERS.md)
|
|
517
|
-
- [Store Features](docs/BODY_MATTER/OPT_IN_FEATURES_OF_STROID/STORE_FEATURES.md)
|
|
518
|
-
|
|
519
|
-
### Body Matter - Persist Of Stroid
|
|
520
|
-
|
|
521
|
-
- [Failure And Recovery](docs/BODY_MATTER/PERSIST_OF_STROID/FAILURE_AND_RECOVERY.md)
|
|
522
|
-
- [Introduction](docs/BODY_MATTER/PERSIST_OF_STROID/INTRODUCTION.md)
|
|
523
|
-
- [Real Use](docs/BODY_MATTER/PERSIST_OF_STROID/REAL_USE.md)
|
|
524
|
-
- [Storage And Migrations](docs/BODY_MATTER/PERSIST_OF_STROID/STORAGE_AND_MIGRATIONS.md)
|
|
525
|
-
|
|
526
|
-
### Body Matter - Philosophy Of Stroid
|
|
527
|
-
|
|
528
|
-
- [Minimal Abstraction](docs/BODY_MATTER/PHILOSOPHY_OF_STROID/MINIMAL_ABSTRACTION.md)
|
|
529
|
-
- [Optional Complexity And Comparison](docs/BODY_MATTER/PHILOSOPHY_OF_STROID/OPTIONAL_COMPLEXITY_AND_COMPARISON.md)
|
|
530
|
-
- [Predictable State Mutation](docs/BODY_MATTER/PHILOSOPHY_OF_STROID/PREDICTABLE_STATE_MUTATION.md)
|
|
531
|
-
- [Runtime Observability](docs/BODY_MATTER/PHILOSOPHY_OF_STROID/RUNTIME_OBSERVABILITY.md)
|
|
532
|
-
- [Why The Mind Needs Structure](docs/BODY_MATTER/PHILOSOPHY_OF_STROID/WHY_THE_MIND_NEEDS_STRUCTURE.md)
|
|
533
|
-
|
|
534
|
-
### Body Matter - React Of Stroid
|
|
535
|
-
|
|
536
|
-
- [Form And Async](docs/BODY_MATTER/REACT_OF_STROID/FORM_AND_ASYNC.md)
|
|
537
|
-
- [Hooks](docs/BODY_MATTER/REACT_OF_STROID/HOOKS.md)
|
|
538
|
-
- [Introduction](docs/BODY_MATTER/REACT_OF_STROID/INTRODUCTION.md)
|
|
539
|
-
- [Real Use](docs/BODY_MATTER/REACT_OF_STROID/REAL_USE.md)
|
|
540
|
-
|
|
541
|
-
### Body Matter - Roadmap Of Stroid
|
|
542
|
-
|
|
543
|
-
- [Roadmap](docs/BODY_MATTER/ROADMAP_OF_STROID/ROADMAP.md)
|
|
544
|
-
|
|
545
|
-
### Body Matter - Runtime Operations Of Stroid
|
|
546
|
-
|
|
547
|
-
- [Admin Operations](docs/BODY_MATTER/RUNTIME_OPERATIONS_OF_STROID/ADMIN_OPERATIONS.md)
|
|
548
|
-
- [Inspection Tools](docs/BODY_MATTER/RUNTIME_OPERATIONS_OF_STROID/INSPECTION_TOOLS.md)
|
|
549
|
-
- [Introduction](docs/BODY_MATTER/RUNTIME_OPERATIONS_OF_STROID/INTRODUCTION.md)
|
|
550
|
-
- [Real Use](docs/BODY_MATTER/RUNTIME_OPERATIONS_OF_STROID/REAL_USE.md)
|
|
551
|
-
|
|
552
|
-
### Body Matter - Selectors Of Stroid
|
|
553
|
-
|
|
554
|
-
- [Create Selector](docs/BODY_MATTER/SELECTORS_OF_STROID/CREATE_SELECTOR.md)
|
|
555
|
-
- [Introduction](docs/BODY_MATTER/SELECTORS_OF_STROID/INTRODUCTION.md)
|
|
556
|
-
- [Real Use](docs/BODY_MATTER/SELECTORS_OF_STROID/REAL_USE.md)
|
|
557
|
-
- [Subscribe With Selector](docs/BODY_MATTER/SELECTORS_OF_STROID/SUBSCRIBE_WITH_SELECTOR.md)
|
|
558
|
-
|
|
559
|
-
### Body Matter - Server Of Stroid
|
|
560
|
-
|
|
561
|
-
- [Hydrate Flow](docs/BODY_MATTER/SERVER_OF_STROID/HYDRATE_FLOW.md)
|
|
562
|
-
- [Introduction](docs/BODY_MATTER/SERVER_OF_STROID/INTRODUCTION.md)
|
|
563
|
-
- [Real Use](docs/BODY_MATTER/SERVER_OF_STROID/REAL_USE.md)
|
|
564
|
-
- [Request Scope](docs/BODY_MATTER/SERVER_OF_STROID/REQUEST_SCOPE.md)
|
|
565
|
-
|
|
566
|
-
### Body Matter - Sync Of Stroid
|
|
567
|
-
|
|
568
|
-
- [Conflicts And Recovery](docs/BODY_MATTER/SYNC_OF_STROID/CONFLICTS_AND_RECOVERY.md)
|
|
569
|
-
- [Introduction](docs/BODY_MATTER/SYNC_OF_STROID/INTRODUCTION.md)
|
|
570
|
-
- [Real Use](docs/BODY_MATTER/SYNC_OF_STROID/REAL_USE.md)
|
|
571
|
-
- [Sync Options](docs/BODY_MATTER/SYNC_OF_STROID/SYNC_OPTIONS.md)
|
|
572
|
-
|
|
573
|
-
### Body Matter - Testing Of Stroid
|
|
574
|
-
|
|
575
|
-
- [Introduction](docs/BODY_MATTER/TESTING_OF_STROID/INTRODUCTION.md)
|
|
576
|
-
- [Mocks And Time](docs/BODY_MATTER/TESTING_OF_STROID/MOCKS_AND_TIME.md)
|
|
577
|
-
- [Real Use](docs/BODY_MATTER/TESTING_OF_STROID/REAL_USE.md)
|
|
578
|
-
- [Resets And Benchmarks](docs/BODY_MATTER/TESTING_OF_STROID/RESETS_AND_BENCHMARKS.md)
|
|
579
|
-
|
|
580
|
-
### Body Matter - The Glitch In Matrix
|
|
581
|
-
|
|
582
|
-
- [Introduction](docs/BODY_MATTER/THE_GLITCH_IN_MATRIX/INTRODUCTION.md)
|
|
583
|
-
- [Performance And Reality](docs/BODY_MATTER/THE_GLITCH_IN_MATRIX/PERFORMANCE_AND_REALITY.md)
|
|
584
|
-
- [Real Use](docs/BODY_MATTER/THE_GLITCH_IN_MATRIX/REAL_USE.md)
|
|
585
|
-
- [Tradeoffs And Limits](docs/BODY_MATTER/THE_GLITCH_IN_MATRIX/TRADEOFFS_AND_LIMITS.md)
|
|
586
|
-
|
|
587
|
-
### Front Matter
|
|
588
|
-
|
|
589
|
-
- [About Author](docs/FRONT_MATTER/ABOUT_AUTHOR.md)
|
|
590
|
-
- [Acknowledge](docs/FRONT_MATTER/ACKNOWLEDGE.md)
|
|
591
|
-
- [Contents](docs/FRONT_MATTER/CONTENTS.md)
|
|
592
|
-
- [Copyright](docs/FRONT_MATTER/COPYRIGHT.md)
|
|
593
|
-
- [Dedication](docs/FRONT_MATTER/DEDICATION.md)
|
|
594
|
-
- [Epigraph](docs/FRONT_MATTER/EPIGRAPH.md)
|
|
595
|
-
- [Foreword](docs/FRONT_MATTER/FOREWORD.md)
|
|
596
|
-
- [Front Cover Page](docs/FRONT_MATTER/FRONT_COVER_PAGE.md)
|
|
597
|
-
- [How To Use](docs/FRONT_MATTER/HOW_TO_USE.md)
|
|
598
|
-
- [Introduction](docs/FRONT_MATTER/INTRODUCTION.md)
|
|
599
|
-
- [List Of Table](docs/FRONT_MATTER/LIST_OF_TABLE.md)
|
|
600
|
-
- [Praise](docs/FRONT_MATTER/PRAISE.md)
|
|
601
|
-
- [Preface](docs/FRONT_MATTER/PREFACE.md)
|
|
602
|
-
- [Title Page](docs/FRONT_MATTER/TITLE_PAGE.md)
|
|
603
|
-
|
|
604
|
-
## Changelog and License
|
|
605
|
-
|
|
606
|
-
- [CHANGELOG](CHANGELOG.md)
|
|
607
|
-
- [LICENSE](LICENSE)
|
|
164
|
+
Full documentation in [`/docs`](./docs/):
|
|
165
|
+
|
|
166
|
+
- [Architecture](./docs/architecture/ARCHITECTURE.md) — layers, data flow, registry model
|
|
167
|
+
- [Core Concepts](./docs/core-concepts/STORES.md) — store lifecycle, options, write modes
|
|
168
|
+
- [React Layer](./docs/guides/REACT.md) — hooks, selectors, SSR
|
|
169
|
+
- [Async Layer](./docs/guides/ASYNC.md) — `fetchStore`, caching, revalidation
|
|
170
|
+
- [Persistence](./docs/guides/PERSIST.md) — `localStorage`, encryption, migrations
|
|
171
|
+
- [Cross-tab Sync](./docs/guides/SYNC.md) — `BroadcastChannel`, conflict resolution
|
|
172
|
+
- [Computed Stores](./docs/guides/COMPUTED.md) — reactive derived values
|
|
173
|
+
- [Server & SSR](./docs/guides/SERVER.md) — request-scoped stores, hydration
|
|
174
|
+
- [Testing](./docs/guides/TESTING.md) — mock stores, resets, benchmarks
|
|
175
|
+
- [Devtools](./docs/guides/DEVTOOLS.md) — history, redaction
|
|
176
|
+
- [Runtime Tools](./docs/guides/RUNTIME_TOOLS.md) — observability, health checks
|
|
177
|
+
- [Full API Reference](./docs/api/API_REFERENCE.md)
|
|
178
|
+
- [Project Status](./STATUS.MD)
|
|
179
|
+
- [Contributing](./CONTRIBUTING.md)
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Changelog & License
|
|
184
|
+
|
|
185
|
+
- [CHANGELOG](./CHANGELOG.md)
|
|
186
|
+
- [MIT License](./LICENSE)
|
|
608
187
|
- [Issues](https://github.com/Himesh-Bhattarai/stroid/issues)
|
|
188
|
+
|