@lunarhue/store 0.3.0 → 0.4.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 +21 -0
- package/dist/chunk-JB6XVML6.js +146 -0
- package/dist/chunk-JB6XVML6.js.map +1 -0
- package/dist/{chunk-GHGDIRN2.js → chunk-SOWFT4FH.js} +160 -19
- package/dist/chunk-SOWFT4FH.js.map +1 -0
- package/dist/chunk-VMOEEBP4.js +268 -0
- package/dist/chunk-VMOEEBP4.js.map +1 -0
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +18 -4
- package/dist/core/index.js.map +1 -1
- package/dist/plugins/actions/index.d.ts +1 -1
- package/dist/plugins/persist/index.d.ts +2 -1
- package/dist/plugins/persist/index.js +83 -6
- package/dist/plugins/persist/index.js.map +1 -1
- package/dist/react/index.d.ts +9 -6
- package/dist/react/index.js +2 -2
- package/dist/{types-CugArdrs.d.ts → types-DjDVKPhw.d.ts} +64 -2
- package/package.json +19 -9
- package/dist/chunk-C5U3Q6O3.js +0 -133
- package/dist/chunk-C5U3Q6O3.js.map +0 -1
- package/dist/chunk-GHGDIRN2.js.map +0 -1
- package/dist/chunk-PCSRXZL4.js +0 -12
- package/dist/chunk-PCSRXZL4.js.map +0 -1
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { defineStoreLoggerMetadata, createStoreLoggerMetadata, emitStoreDebugEvent, transitionStoreLifecycle, createSubscriptionLoggerId } from './chunk-JB6XVML6.js';
|
|
2
|
+
import { createStore } from '@tanstack/store';
|
|
3
|
+
|
|
4
|
+
var UNINITIALIZED = /* @__PURE__ */ Symbol("lunarhue.store.uninitialized");
|
|
5
|
+
function createStoreInstance({
|
|
6
|
+
builderId = "b0",
|
|
7
|
+
debug,
|
|
8
|
+
hasDeclaredInitialState,
|
|
9
|
+
hasOverrideInitialState,
|
|
10
|
+
initialState,
|
|
11
|
+
readyOnCreate
|
|
12
|
+
}) {
|
|
13
|
+
const store = createStore(
|
|
14
|
+
readyOnCreate ? initialState : UNINITIALIZED
|
|
15
|
+
);
|
|
16
|
+
const lifecycleMeta = createStore({
|
|
17
|
+
status: readyOnCreate ? "ready" : "uninitialized",
|
|
18
|
+
error: null
|
|
19
|
+
});
|
|
20
|
+
const cleanups = [];
|
|
21
|
+
let disposePromise = null;
|
|
22
|
+
const nativeStateGetter = Object.getOwnPropertyDescriptor(
|
|
23
|
+
Object.getPrototypeOf(store),
|
|
24
|
+
"state"
|
|
25
|
+
)?.get;
|
|
26
|
+
if (!nativeStateGetter) {
|
|
27
|
+
throw new Error("Failed to resolve the TanStack Store state getter.");
|
|
28
|
+
}
|
|
29
|
+
const nativeGet = () => nativeStateGetter.call(store);
|
|
30
|
+
const nativeSetState = store.setState.bind(store);
|
|
31
|
+
const nativeSubscribe = store.subscribe.bind(store);
|
|
32
|
+
const instance = store;
|
|
33
|
+
const lifecycleMetaStore = lifecycleMeta;
|
|
34
|
+
defineStoreLoggerMetadata(
|
|
35
|
+
instance,
|
|
36
|
+
createStoreLoggerMetadata({
|
|
37
|
+
builderId,
|
|
38
|
+
debug
|
|
39
|
+
})
|
|
40
|
+
);
|
|
41
|
+
const assertReady = (value) => {
|
|
42
|
+
if (value === UNINITIALIZED) {
|
|
43
|
+
throw new Error("Store has not been initialized.");
|
|
44
|
+
}
|
|
45
|
+
return value;
|
|
46
|
+
};
|
|
47
|
+
const getState = () => assertReady(nativeGet());
|
|
48
|
+
const lifecycle = {
|
|
49
|
+
meta: lifecycleMeta
|
|
50
|
+
};
|
|
51
|
+
const subscribe = (observerOrFn, error, complete) => {
|
|
52
|
+
const subscriptionId = createSubscriptionLoggerId();
|
|
53
|
+
const observer = typeof observerOrFn === "function" ? {
|
|
54
|
+
next: observerOrFn,
|
|
55
|
+
error,
|
|
56
|
+
complete
|
|
57
|
+
} : observerOrFn;
|
|
58
|
+
const observerKind = typeof observerOrFn === "function" ? "function" : "observer";
|
|
59
|
+
emitStoreDebugEvent(instance, {
|
|
60
|
+
detail: { observerKind },
|
|
61
|
+
event: "subscription.connected",
|
|
62
|
+
source: "core",
|
|
63
|
+
subscriptionId
|
|
64
|
+
});
|
|
65
|
+
const subscription = nativeSubscribe({
|
|
66
|
+
next(value) {
|
|
67
|
+
if (value === UNINITIALIZED) {
|
|
68
|
+
emitStoreDebugEvent(instance, {
|
|
69
|
+
event: "subscription.notify.skipped_uninitialized",
|
|
70
|
+
minimumLevel: "trace",
|
|
71
|
+
source: "core",
|
|
72
|
+
subscriptionId
|
|
73
|
+
});
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
emitStoreDebugEvent(instance, {
|
|
77
|
+
event: "subscription.notify",
|
|
78
|
+
minimumLevel: "verbose",
|
|
79
|
+
nextState: value,
|
|
80
|
+
source: "core",
|
|
81
|
+
subscriptionId
|
|
82
|
+
});
|
|
83
|
+
try {
|
|
84
|
+
observer.next?.(value);
|
|
85
|
+
} catch (notifyError) {
|
|
86
|
+
emitStoreDebugEvent(instance, {
|
|
87
|
+
error: notifyError,
|
|
88
|
+
event: "subscription.notify.error",
|
|
89
|
+
minimumLevel: "trace",
|
|
90
|
+
nextState: value,
|
|
91
|
+
source: "core",
|
|
92
|
+
subscriptionId
|
|
93
|
+
});
|
|
94
|
+
throw notifyError;
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
error(err) {
|
|
98
|
+
observer.error?.(err);
|
|
99
|
+
},
|
|
100
|
+
complete() {
|
|
101
|
+
observer.complete?.();
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
let unsubscribed = false;
|
|
105
|
+
return {
|
|
106
|
+
unsubscribe() {
|
|
107
|
+
if (unsubscribed) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
unsubscribed = true;
|
|
111
|
+
subscription.unsubscribe();
|
|
112
|
+
emitStoreDebugEvent(instance, {
|
|
113
|
+
event: "subscription.disconnected",
|
|
114
|
+
source: "core",
|
|
115
|
+
subscriptionId
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
Object.defineProperty(instance, "dispose", {
|
|
121
|
+
configurable: true,
|
|
122
|
+
enumerable: true,
|
|
123
|
+
value: async () => {
|
|
124
|
+
if (disposePromise) {
|
|
125
|
+
return disposePromise;
|
|
126
|
+
}
|
|
127
|
+
emitStoreDebugEvent(instance, {
|
|
128
|
+
event: "store.dispose.started",
|
|
129
|
+
source: "core"
|
|
130
|
+
});
|
|
131
|
+
disposePromise = (async () => {
|
|
132
|
+
for (const cleanup of [...cleanups].reverse()) {
|
|
133
|
+
await cleanup();
|
|
134
|
+
}
|
|
135
|
+
emitStoreDebugEvent(instance, {
|
|
136
|
+
event: "store.dispose.completed",
|
|
137
|
+
source: "core"
|
|
138
|
+
});
|
|
139
|
+
})();
|
|
140
|
+
return disposePromise;
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
Object.defineProperties(instance, {
|
|
144
|
+
get: {
|
|
145
|
+
configurable: true,
|
|
146
|
+
enumerable: true,
|
|
147
|
+
value: () => getState()
|
|
148
|
+
},
|
|
149
|
+
state: {
|
|
150
|
+
configurable: true,
|
|
151
|
+
enumerable: true,
|
|
152
|
+
get() {
|
|
153
|
+
return getState();
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
setState: {
|
|
157
|
+
configurable: true,
|
|
158
|
+
enumerable: true,
|
|
159
|
+
value: (updater) => {
|
|
160
|
+
let previousState;
|
|
161
|
+
let nextState;
|
|
162
|
+
try {
|
|
163
|
+
nativeSetState((prev) => {
|
|
164
|
+
const readyPreviousState = assertReady(prev);
|
|
165
|
+
previousState = readyPreviousState;
|
|
166
|
+
nextState = updater(readyPreviousState);
|
|
167
|
+
return nextState;
|
|
168
|
+
});
|
|
169
|
+
} catch (stateError) {
|
|
170
|
+
emitStoreDebugEvent(instance, {
|
|
171
|
+
error: stateError,
|
|
172
|
+
event: "store.state.set.error",
|
|
173
|
+
minimumLevel: "trace",
|
|
174
|
+
nextState,
|
|
175
|
+
previousState,
|
|
176
|
+
source: "core"
|
|
177
|
+
});
|
|
178
|
+
throw stateError;
|
|
179
|
+
}
|
|
180
|
+
emitStoreDebugEvent(instance, {
|
|
181
|
+
event: "store.state.set",
|
|
182
|
+
minimumLevel: "verbose",
|
|
183
|
+
nextState,
|
|
184
|
+
previousState,
|
|
185
|
+
source: "core"
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
subscribe: {
|
|
190
|
+
configurable: true,
|
|
191
|
+
enumerable: true,
|
|
192
|
+
value: subscribe
|
|
193
|
+
},
|
|
194
|
+
setInitialState: {
|
|
195
|
+
configurable: true,
|
|
196
|
+
enumerable: true,
|
|
197
|
+
value: async (nextState) => {
|
|
198
|
+
try {
|
|
199
|
+
if (nativeGet() !== UNINITIALIZED) {
|
|
200
|
+
throw new Error("Store initial state has already been set.");
|
|
201
|
+
}
|
|
202
|
+
nativeSetState(() => nextState);
|
|
203
|
+
} catch (initialStateError) {
|
|
204
|
+
emitStoreDebugEvent(instance, {
|
|
205
|
+
error: initialStateError,
|
|
206
|
+
event: "store.initial_state.set.error",
|
|
207
|
+
minimumLevel: "trace",
|
|
208
|
+
nextState,
|
|
209
|
+
source: "core"
|
|
210
|
+
});
|
|
211
|
+
throw initialStateError;
|
|
212
|
+
}
|
|
213
|
+
emitStoreDebugEvent(instance, {
|
|
214
|
+
event: "store.initial_state.set",
|
|
215
|
+
minimumLevel: "verbose",
|
|
216
|
+
nextState,
|
|
217
|
+
source: "core"
|
|
218
|
+
});
|
|
219
|
+
transitionStoreLifecycle(
|
|
220
|
+
instance,
|
|
221
|
+
lifecycleMetaStore,
|
|
222
|
+
{
|
|
223
|
+
status: "ready",
|
|
224
|
+
error: null
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
source: "core"
|
|
228
|
+
}
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
lifecycle: {
|
|
233
|
+
configurable: true,
|
|
234
|
+
enumerable: true,
|
|
235
|
+
value: lifecycle
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
emitStoreDebugEvent(instance, {
|
|
239
|
+
detail: {
|
|
240
|
+
hasDeclaredInitialState: hasDeclaredInitialState ?? false,
|
|
241
|
+
hasOverrideInitialState: hasOverrideInitialState ?? false
|
|
242
|
+
},
|
|
243
|
+
event: "store.created",
|
|
244
|
+
source: "core",
|
|
245
|
+
status: readyOnCreate ? "ready" : "uninitialized"
|
|
246
|
+
});
|
|
247
|
+
return {
|
|
248
|
+
store: instance,
|
|
249
|
+
onDispose(cleanup) {
|
|
250
|
+
cleanups.push(cleanup);
|
|
251
|
+
},
|
|
252
|
+
attachSurface(surface) {
|
|
253
|
+
for (const key of Reflect.ownKeys(surface)) {
|
|
254
|
+
if (key in instance) {
|
|
255
|
+
throw new Error(`Store plugin surface collision on "${String(key)}".`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
Object.defineProperties(
|
|
259
|
+
instance,
|
|
260
|
+
Object.getOwnPropertyDescriptors(surface)
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
export { createStoreInstance };
|
|
267
|
+
//# sourceMappingURL=chunk-VMOEEBP4.js.map
|
|
268
|
+
//# sourceMappingURL=chunk-VMOEEBP4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/store-instance.ts"],"names":["createTanStackStore"],"mappings":"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","file":"chunk-VMOEEBP4.js","sourcesContent":["import {\n createStore as createTanStackStore,\n type Observer,\n type Store as BaseStore,\n type Subscription,\n} from '@tanstack/store'\n\nimport {\n createStoreLoggerMetadata,\n createSubscriptionLoggerId,\n defineStoreLoggerMetadata,\n emitStoreDebugEvent,\n transitionStoreLifecycle,\n} from './logger'\n\nimport type {\n StoreCleanup,\n StoreCreateOptions,\n Store,\n StoreLifecycleMeta,\n ReadableStore,\n} from './types'\n\ntype StoreController<TState> = {\n store: Store<TState>\n onDispose(cleanup: StoreCleanup): void\n attachSurface(surface: object): void\n}\n\ntype CreateStoreInstanceOptions<TState> = {\n builderId?: string\n debug?: StoreCreateOptions<TState>['debug']\n hasDeclaredInitialState?: boolean\n hasOverrideInitialState?: boolean\n initialState?: TState\n readyOnCreate: boolean\n}\n\nconst UNINITIALIZED = Symbol('lunarhue.store.uninitialized')\n\nexport function createStoreInstance<TState>({\n builderId = 'b0',\n debug,\n hasDeclaredInitialState,\n hasOverrideInitialState,\n initialState,\n readyOnCreate,\n}: CreateStoreInstanceOptions<TState>): StoreController<TState> {\n const store = createTanStackStore<TState | typeof UNINITIALIZED>(\n readyOnCreate ? (initialState as TState) : UNINITIALIZED,\n )\n const lifecycleMeta = createTanStackStore<StoreLifecycleMeta>({\n status: readyOnCreate ? 'ready' : 'uninitialized',\n error: null,\n })\n const cleanups: StoreCleanup[] = []\n let disposePromise: Promise<void> | null = null\n\n const nativeStateGetter = Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(store),\n 'state',\n )?.get\n\n if (!nativeStateGetter) {\n throw new Error('Failed to resolve the TanStack Store state getter.')\n }\n\n const nativeGet = () => nativeStateGetter.call(store)\n const nativeSetState = store.setState.bind(store)\n const nativeSubscribe = store.subscribe.bind(store)\n const instance = store as unknown as Store<TState>\n const lifecycleMetaStore = lifecycleMeta as WritableReadableStore<\n StoreLifecycleMeta\n >\n\n defineStoreLoggerMetadata(\n instance,\n createStoreLoggerMetadata({\n builderId,\n debug,\n }),\n )\n\n const assertReady = (value: TState | typeof UNINITIALIZED): TState => {\n if (value === UNINITIALIZED) {\n throw new Error('Store has not been initialized.')\n }\n\n return value\n }\n\n const getState = () => assertReady(nativeGet())\n const lifecycle = {\n meta: lifecycleMeta as ReadableStore<StoreLifecycleMeta>,\n }\n const subscribe = (\n observerOrFn: Observer<TState> | ((value: TState) => void),\n error?: (error: any) => void,\n complete?: () => void,\n ): Subscription => {\n const subscriptionId = createSubscriptionLoggerId()\n const observer =\n typeof observerOrFn === 'function'\n ? {\n next: observerOrFn,\n error,\n complete,\n }\n : observerOrFn\n const observerKind =\n typeof observerOrFn === 'function' ? 'function' : 'observer'\n\n emitStoreDebugEvent(instance, {\n detail: { observerKind },\n event: 'subscription.connected',\n source: 'core',\n subscriptionId,\n })\n\n const subscription = nativeSubscribe({\n next(value) {\n if (value === UNINITIALIZED) {\n emitStoreDebugEvent(instance, {\n event: 'subscription.notify.skipped_uninitialized',\n minimumLevel: 'trace',\n source: 'core',\n subscriptionId,\n })\n return\n }\n\n emitStoreDebugEvent(instance, {\n event: 'subscription.notify',\n minimumLevel: 'verbose',\n nextState: value,\n source: 'core',\n subscriptionId,\n })\n\n try {\n observer.next?.(value)\n } catch (notifyError) {\n emitStoreDebugEvent(instance, {\n error: notifyError,\n event: 'subscription.notify.error',\n minimumLevel: 'trace',\n nextState: value,\n source: 'core',\n subscriptionId,\n })\n throw notifyError\n }\n },\n error(err) {\n observer.error?.(err)\n },\n complete() {\n observer.complete?.()\n },\n })\n let unsubscribed = false\n\n return {\n unsubscribe() {\n if (unsubscribed) {\n return\n }\n\n unsubscribed = true\n subscription.unsubscribe()\n emitStoreDebugEvent(instance, {\n event: 'subscription.disconnected',\n source: 'core',\n subscriptionId,\n })\n },\n }\n }\n\n Object.defineProperty(instance, 'dispose', {\n configurable: true,\n enumerable: true,\n value: async () => {\n if (disposePromise) {\n return disposePromise\n }\n\n emitStoreDebugEvent(instance, {\n event: 'store.dispose.started',\n source: 'core',\n })\n\n disposePromise = (async () => {\n for (const cleanup of [...cleanups].reverse()) {\n await cleanup()\n }\n\n emitStoreDebugEvent(instance, {\n event: 'store.dispose.completed',\n source: 'core',\n })\n })()\n\n return disposePromise\n },\n })\n\n Object.defineProperties(instance, {\n get: {\n configurable: true,\n enumerable: true,\n value: () => getState(),\n },\n state: {\n configurable: true,\n enumerable: true,\n get() {\n return getState()\n },\n },\n setState: {\n configurable: true,\n enumerable: true,\n value: (updater: (prev: TState) => TState) => {\n let previousState: TState | undefined\n let nextState: TState | undefined\n\n try {\n nativeSetState((prev) => {\n const readyPreviousState = assertReady(prev)\n previousState = readyPreviousState\n nextState = updater(readyPreviousState)\n\n return nextState\n })\n } catch (stateError) {\n emitStoreDebugEvent(instance, {\n error: stateError,\n event: 'store.state.set.error',\n minimumLevel: 'trace',\n nextState,\n previousState,\n source: 'core',\n })\n throw stateError\n }\n\n emitStoreDebugEvent(instance, {\n event: 'store.state.set',\n minimumLevel: 'verbose',\n nextState,\n previousState,\n source: 'core',\n })\n },\n },\n subscribe: {\n configurable: true,\n enumerable: true,\n value: subscribe,\n },\n setInitialState: {\n configurable: true,\n enumerable: true,\n value: async (nextState: TState) => {\n try {\n if (nativeGet() !== UNINITIALIZED) {\n throw new Error('Store initial state has already been set.')\n }\n\n nativeSetState(() => nextState)\n } catch (initialStateError) {\n emitStoreDebugEvent(instance, {\n error: initialStateError,\n event: 'store.initial_state.set.error',\n minimumLevel: 'trace',\n nextState,\n source: 'core',\n })\n throw initialStateError\n }\n\n emitStoreDebugEvent(instance, {\n event: 'store.initial_state.set',\n minimumLevel: 'verbose',\n nextState,\n source: 'core',\n })\n\n transitionStoreLifecycle(\n instance,\n lifecycleMetaStore,\n {\n status: 'ready',\n error: null,\n },\n {\n source: 'core',\n },\n )\n },\n },\n lifecycle: {\n configurable: true,\n enumerable: true,\n value: lifecycle,\n },\n })\n\n emitStoreDebugEvent(instance, {\n detail: {\n hasDeclaredInitialState: hasDeclaredInitialState ?? false,\n hasOverrideInitialState: hasOverrideInitialState ?? false,\n },\n event: 'store.created',\n source: 'core',\n status: readyOnCreate ? 'ready' : 'uninitialized',\n })\n\n return {\n store: instance,\n onDispose(cleanup) {\n cleanups.push(cleanup)\n },\n attachSurface(surface) {\n for (const key of Reflect.ownKeys(surface)) {\n if (key in instance) {\n throw new Error(`Store plugin surface collision on \"${String(key)}\".`)\n }\n }\n\n Object.defineProperties(\n instance,\n Object.getOwnPropertyDescriptors(surface),\n )\n },\n }\n}\n\ntype WritableReadableStore<TState> = ReadableStore<TState> & {\n setState(updater: (prev: TState) => TState): void\n}\n"]}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as StoreBuilder } from '../types-
|
|
2
|
-
export { R as ReadableStore, a as Store, b as StoreCleanup, c as
|
|
1
|
+
import { S as StoreBuilder } from '../types-DjDVKPhw.js';
|
|
2
|
+
export { R as ReadableStore, a as Store, b as StoreCleanup, c as StoreCreateOptions, d as StoreDebugEvent, e as StoreDebugEventName, f as StoreDebugLevel, g as StoreDebugLogArgs, h as StoreDebugOptions, i as StoreDebugSink, j as StoreInitialStateLoader, k as StoreLifecycleMeta, l as StoreLifecycleStatus, m as StoreLogger, n as StorePlugin, o as StorePluginContext, p as StoreState } from '../types-DjDVKPhw.js';
|
|
3
3
|
import '@tanstack/store';
|
|
4
4
|
|
|
5
5
|
/**
|
package/dist/core/index.js
CHANGED
|
@@ -1,19 +1,32 @@
|
|
|
1
|
-
import { createStoreInstance } from '../chunk-
|
|
2
|
-
import { registerStoreBuilder } from '../chunk-
|
|
1
|
+
import { createStoreInstance } from '../chunk-VMOEEBP4.js';
|
|
2
|
+
import { createBuilderLoggerMetadata, defineBuilderLoggerMetadata, emitStoreDebugEvent, registerStoreBuilder } from '../chunk-JB6XVML6.js';
|
|
3
3
|
|
|
4
4
|
// src/core/create-store.ts
|
|
5
5
|
function createStore(initialState) {
|
|
6
6
|
const hasDeclaredInitialState = arguments.length > 0;
|
|
7
7
|
const createBuilder = (plugins) => {
|
|
8
|
+
const loggerMetadata = createBuilderLoggerMetadata();
|
|
8
9
|
const builder = {
|
|
9
|
-
create(overrideInitialState) {
|
|
10
|
-
const hasOverrideInitialState =
|
|
10
|
+
create(overrideInitialState, options) {
|
|
11
|
+
const hasOverrideInitialState = overrideInitialState !== void 0;
|
|
11
12
|
const controller = createStoreInstance({
|
|
13
|
+
builderId: loggerMetadata.builderId,
|
|
14
|
+
debug: options?.debug,
|
|
15
|
+
hasDeclaredInitialState,
|
|
16
|
+
hasOverrideInitialState,
|
|
12
17
|
initialState: hasOverrideInitialState ? overrideInitialState : initialState,
|
|
13
18
|
readyOnCreate: hasOverrideInitialState || hasDeclaredInitialState
|
|
14
19
|
});
|
|
15
20
|
for (const plugin of plugins) {
|
|
16
21
|
const surface = plugin({
|
|
22
|
+
logger: {
|
|
23
|
+
emit(args) {
|
|
24
|
+
return emitStoreDebugEvent(
|
|
25
|
+
controller.store,
|
|
26
|
+
args
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
},
|
|
17
30
|
store: controller.store,
|
|
18
31
|
onDispose: (cleanup) => controller.onDispose(cleanup)
|
|
19
32
|
});
|
|
@@ -27,6 +40,7 @@ function createStore(initialState) {
|
|
|
27
40
|
return createBuilder([...plugins, plugin]);
|
|
28
41
|
}
|
|
29
42
|
};
|
|
43
|
+
defineBuilderLoggerMetadata(builder, loggerMetadata);
|
|
30
44
|
return builder;
|
|
31
45
|
};
|
|
32
46
|
return createBuilder([]);
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/create-store.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"sources":["../../src/core/create-store.ts"],"names":[],"mappings":";;;;AA2BO,SAAS,YACd,YAAA,EACsB;AACtB,EAAA,MAAM,uBAAA,GAA0B,UAAU,MAAA,GAAS,CAAA;AAGnD,EAAA,MAAM,aAAA,GAAgB,CACpB,OAAA,KACmC;AACnC,IAAA,MAAM,iBAAiB,2BAAA,EAA4B;AACnD,IAAA,MAAM,OAAA,GAA0C;AAAA,MAC9C,MAAA,CACE,sBACA,OAAA,EACA;AACA,QAAA,MAAM,0BAA0B,oBAAA,KAAyB,MAAA;AACzD,QAAA,MAAM,aAAa,mBAAA,CAAoB;AAAA,UACrC,WAAW,cAAA,CAAe,SAAA;AAAA,UAC1B,OAAO,OAAA,EAAS,KAAA;AAAA,UAChB,uBAAA;AAAA,UACA,uBAAA;AAAA,UACA,YAAA,EAAc,0BACV,oBAAA,GACA,YAAA;AAAA,UACJ,eAAe,uBAAA,IAA2B;AAAA,SAC3C,CAAA;AAED,QAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,UAAA,MAAM,UAAU,MAAA,CAAO;AAAA,YACrB,MAAA,EAAQ;AAAA,cACN,KAAK,IAAA,EAAM;AACT,gBAAA,OAAO,mBAAA;AAAA,kBACL,UAAA,CAAW,KAAA;AAAA,kBACX;AAAA,iBACF;AAAA,cACF;AAAA,aACF;AAAA,YACA,OAAO,UAAA,CAAW,KAAA;AAAA,YAClB,SAAA,EAAW,CAAC,OAAA,KAAY,UAAA,CAAW,UAAU,OAAO;AAAA,WACrD,CAAA;AAED,UAAA,UAAA,CAAW,cAAc,OAAO,CAAA;AAAA,QAClC;AAEA,QAAA,MAAM,QAAQ,UAAA,CAAW,KAAA;AACzB,QAAA,oBAAA,CAAqB,OAAO,OAAO,CAAA;AAEnC,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AAAA,MACA,OACE,MAAA,EACA;AACA,QAAA,OAAO,aAAA,CAAuC,CAAC,GAAG,OAAA,EAAS,MAAM,CAAC,CAAA;AAAA,MACpE;AAAA,KACF;AAEA,IAAA,2BAAA,CAA4B,SAAS,cAAc,CAAA;AAEnD,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO,aAAA,CAAkB,EAAE,CAAA;AAC7B","file":"index.js","sourcesContent":["\nimport { createStoreInstance } from './store-instance'\nimport { registerStoreBuilder } from './builder-registry'\nimport {\n createBuilderLoggerMetadata,\n defineBuilderLoggerMetadata,\n emitStoreDebugEvent,\n} from './logger'\n\nimport type {\n Store,\n StoreBuilder,\n StoreCreateOptions,\n StorePlugin,\n} from './types'\n\n/**\n * Declares a reusable store builder.\n *\n * The returned builder is immutable: each call to {@link StoreBuilder.extend}\n * returns a new builder, and each call to {@link StoreBuilder.create} returns a\n * fresh runtime store instance. If neither a declaration-time default nor a\n * create-time override is provided, the runtime store starts uninitialized and\n * must receive {@link Store.setInitialState} before reads or writes are valid.\n */\nexport function createStore<TState>(): StoreBuilder<TState>\nexport function createStore<TState>(initialState: TState): StoreBuilder<TState>\nexport function createStore<TState>(\n initialState?: TState,\n): StoreBuilder<TState> {\n const hasDeclaredInitialState = arguments.length > 0\n type PluginList = ReadonlyArray<StorePlugin<TState, any, any>>\n\n const createBuilder = <TPlugins>(\n plugins: PluginList,\n ): StoreBuilder<TState, TPlugins> => {\n const loggerMetadata = createBuilderLoggerMetadata()\n const builder: StoreBuilder<TState, TPlugins> = {\n create(\n overrideInitialState?: TState,\n options?: StoreCreateOptions<TState>,\n ) {\n const hasOverrideInitialState = overrideInitialState !== undefined\n const controller = createStoreInstance({\n builderId: loggerMetadata.builderId,\n debug: options?.debug,\n hasDeclaredInitialState,\n hasOverrideInitialState,\n initialState: hasOverrideInitialState\n ? overrideInitialState\n : initialState,\n readyOnCreate: hasOverrideInitialState || hasDeclaredInitialState,\n })\n\n for (const plugin of plugins) {\n const surface = plugin({\n logger: {\n emit(args) {\n return emitStoreDebugEvent(\n controller.store as Store<TState, any>,\n args,\n )\n },\n },\n store: controller.store as Store<TState, any>,\n onDispose: (cleanup) => controller.onDispose(cleanup),\n })\n\n controller.attachSurface(surface)\n }\n\n const store = controller.store as Store<TState, TPlugins>\n registerStoreBuilder(store, builder)\n\n return store\n },\n extend<TNextPlugins>(\n plugin: StorePlugin<TState, TPlugins, TNextPlugins>,\n ) {\n return createBuilder<TPlugins & TNextPlugins>([...plugins, plugin])\n },\n }\n\n defineBuilderLoggerMetadata(builder, loggerMetadata)\n\n return builder\n }\n\n return createBuilder<{}>([])\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as Store,
|
|
1
|
+
import { a as Store, n as StorePlugin, S as StoreBuilder, h as StoreDebugOptions, j as StoreInitialStateLoader } from '../../types-DjDVKPhw.js';
|
|
2
2
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
3
|
import { ReactNode } from 'react';
|
|
4
4
|
import '@tanstack/store';
|
|
@@ -137,6 +137,7 @@ type PersistStoreProviderChildren<TState, TPlugins> = ReactNode | ((args: Persis
|
|
|
137
137
|
type BuilderPersistStoreProviderBaseProps<TState, TPlugins> = {
|
|
138
138
|
builder: StoreBuilder<TState, TPlugins & PersistStoreSurface>;
|
|
139
139
|
children?: PersistStoreProviderChildren<TState, TPlugins>;
|
|
140
|
+
debug?: StoreDebugOptions<TState>;
|
|
140
141
|
persist?: PersistRuntimeOptions<TState>;
|
|
141
142
|
store?: never;
|
|
142
143
|
} & PersistenceBoundaryOptions;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createStoreInstance } from '../../chunk-
|
|
2
|
-
import { StoreProvider } from '../../chunk-
|
|
3
|
-
import { getStoreBuilder } from '../../chunk-
|
|
1
|
+
import { createStoreInstance } from '../../chunk-VMOEEBP4.js';
|
|
2
|
+
import { StoreProvider } from '../../chunk-SOWFT4FH.js';
|
|
3
|
+
import { getStoreBuilder, emitStoreDebugEvent } from '../../chunk-JB6XVML6.js';
|
|
4
4
|
import { useContext, createContext, useEffectEvent, useEffect } from 'react';
|
|
5
5
|
import { jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
@@ -66,6 +66,13 @@ function createPersistController(store, pluginOptions) {
|
|
|
66
66
|
pending: true,
|
|
67
67
|
error: null
|
|
68
68
|
}));
|
|
69
|
+
emitStoreDebugEvent(store, {
|
|
70
|
+
event: "persist.transition.queued",
|
|
71
|
+
minimumLevel: "verbose",
|
|
72
|
+
nextState,
|
|
73
|
+
previousState,
|
|
74
|
+
source: "persist"
|
|
75
|
+
});
|
|
69
76
|
};
|
|
70
77
|
const canPersist = () => {
|
|
71
78
|
return state.connected && state.runtimeOptions?.enabled;
|
|
@@ -76,6 +83,14 @@ function createPersistController(store, pluginOptions) {
|
|
|
76
83
|
const scheduleFlush = () => {
|
|
77
84
|
clearTimer();
|
|
78
85
|
const delay = state.runtimeOptions?.delay ?? 0;
|
|
86
|
+
emitStoreDebugEvent(store, {
|
|
87
|
+
detail: {
|
|
88
|
+
delay
|
|
89
|
+
},
|
|
90
|
+
event: "persist.flush.scheduled",
|
|
91
|
+
minimumLevel: "verbose",
|
|
92
|
+
source: "persist"
|
|
93
|
+
});
|
|
79
94
|
state.timer = setTimeout(() => {
|
|
80
95
|
void flush();
|
|
81
96
|
}, delay);
|
|
@@ -85,6 +100,14 @@ function createPersistController(store, pluginOptions) {
|
|
|
85
100
|
if (!runtimeOptions?.enabled) {
|
|
86
101
|
return;
|
|
87
102
|
}
|
|
103
|
+
const nextState = pluginOptions?.serializeState ? pluginOptions.serializeState(transition.nextState) : transition.nextState;
|
|
104
|
+
emitStoreDebugEvent(store, {
|
|
105
|
+
event: "persist.flush.started",
|
|
106
|
+
minimumLevel: "verbose",
|
|
107
|
+
nextState,
|
|
108
|
+
previousState: transition.previousState,
|
|
109
|
+
source: "persist"
|
|
110
|
+
});
|
|
88
111
|
meta.setState((prev) => ({
|
|
89
112
|
...prev,
|
|
90
113
|
pending: false,
|
|
@@ -92,7 +115,6 @@ function createPersistController(store, pluginOptions) {
|
|
|
92
115
|
error: null
|
|
93
116
|
}));
|
|
94
117
|
try {
|
|
95
|
-
const nextState = pluginOptions?.serializeState ? pluginOptions.serializeState(transition.nextState) : transition.nextState;
|
|
96
118
|
await runtimeOptions.onPersist({
|
|
97
119
|
previousState: transition.previousState,
|
|
98
120
|
nextState
|
|
@@ -103,6 +125,13 @@ function createPersistController(store, pluginOptions) {
|
|
|
103
125
|
lastPersistedAt: Date.now(),
|
|
104
126
|
error: null
|
|
105
127
|
}));
|
|
128
|
+
emitStoreDebugEvent(store, {
|
|
129
|
+
event: "persist.flush.completed",
|
|
130
|
+
minimumLevel: "verbose",
|
|
131
|
+
nextState,
|
|
132
|
+
previousState: transition.previousState,
|
|
133
|
+
source: "persist"
|
|
134
|
+
});
|
|
106
135
|
} catch (error) {
|
|
107
136
|
state.pendingTransition = transition;
|
|
108
137
|
meta.setState((prev) => ({
|
|
@@ -111,6 +140,13 @@ function createPersistController(store, pluginOptions) {
|
|
|
111
140
|
persisting: false,
|
|
112
141
|
error
|
|
113
142
|
}));
|
|
143
|
+
emitStoreDebugEvent(store, {
|
|
144
|
+
error,
|
|
145
|
+
event: "persist.flush.failed",
|
|
146
|
+
nextState,
|
|
147
|
+
previousState: transition.previousState,
|
|
148
|
+
source: "persist"
|
|
149
|
+
});
|
|
114
150
|
throw error;
|
|
115
151
|
}
|
|
116
152
|
};
|
|
@@ -158,6 +194,14 @@ function createPersistController(store, pluginOptions) {
|
|
|
158
194
|
resetState();
|
|
159
195
|
state.connected = true;
|
|
160
196
|
ensureSubscription();
|
|
197
|
+
emitStoreDebugEvent(store, {
|
|
198
|
+
detail: {
|
|
199
|
+
delay: state.runtimeOptions.delay,
|
|
200
|
+
enabled: state.runtimeOptions.enabled
|
|
201
|
+
},
|
|
202
|
+
event: "persist.connected",
|
|
203
|
+
source: "persist"
|
|
204
|
+
});
|
|
161
205
|
return () => {
|
|
162
206
|
state.connected = false;
|
|
163
207
|
clearTimer();
|
|
@@ -165,6 +209,14 @@ function createPersistController(store, pluginOptions) {
|
|
|
165
209
|
...prev,
|
|
166
210
|
persisting: false
|
|
167
211
|
}));
|
|
212
|
+
emitStoreDebugEvent(store, {
|
|
213
|
+
detail: {
|
|
214
|
+
delay: state.runtimeOptions?.delay ?? 0,
|
|
215
|
+
enabled: state.runtimeOptions?.enabled ?? false
|
|
216
|
+
},
|
|
217
|
+
event: "persist.disconnected",
|
|
218
|
+
source: "persist"
|
|
219
|
+
});
|
|
168
220
|
};
|
|
169
221
|
},
|
|
170
222
|
flush
|
|
@@ -242,6 +294,14 @@ function usePersistenceBoundary(store, options) {
|
|
|
242
294
|
return;
|
|
243
295
|
}
|
|
244
296
|
return () => {
|
|
297
|
+
emitStoreDebugEvent(store, {
|
|
298
|
+
detail: {
|
|
299
|
+
trigger: "unmount"
|
|
300
|
+
},
|
|
301
|
+
event: "persist.boundary.flush",
|
|
302
|
+
minimumLevel: "verbose",
|
|
303
|
+
source: "persist"
|
|
304
|
+
});
|
|
245
305
|
void store.persist.flush();
|
|
246
306
|
};
|
|
247
307
|
}, [flushOnUnmount, store]);
|
|
@@ -250,6 +310,14 @@ function usePersistenceBoundary(store, options) {
|
|
|
250
310
|
return;
|
|
251
311
|
}
|
|
252
312
|
const handlePageHide = () => {
|
|
313
|
+
emitStoreDebugEvent(store, {
|
|
314
|
+
detail: {
|
|
315
|
+
trigger: "pagehide"
|
|
316
|
+
},
|
|
317
|
+
event: "persist.boundary.flush",
|
|
318
|
+
minimumLevel: "verbose",
|
|
319
|
+
source: "persist"
|
|
320
|
+
});
|
|
253
321
|
void store.persist.flush();
|
|
254
322
|
};
|
|
255
323
|
window.addEventListener("pagehide", handlePageHide);
|
|
@@ -317,19 +385,28 @@ function PersistStoreProvider(props) {
|
|
|
317
385
|
);
|
|
318
386
|
if ("initialState" in props) {
|
|
319
387
|
const initialState = props.initialState;
|
|
320
|
-
return /* @__PURE__ */ jsx(
|
|
388
|
+
return /* @__PURE__ */ jsx(
|
|
389
|
+
StoreProvider,
|
|
390
|
+
{
|
|
391
|
+
builder: props.builder,
|
|
392
|
+
debug: props.debug,
|
|
393
|
+
initialState,
|
|
394
|
+
children: ({ store }) => content(store)
|
|
395
|
+
}
|
|
396
|
+
);
|
|
321
397
|
}
|
|
322
398
|
if (props.loadInitialState) {
|
|
323
399
|
return /* @__PURE__ */ jsx(
|
|
324
400
|
StoreProvider,
|
|
325
401
|
{
|
|
326
402
|
builder: props.builder,
|
|
403
|
+
debug: props.debug,
|
|
327
404
|
loadInitialState: props.loadInitialState,
|
|
328
405
|
children: ({ store }) => content(store)
|
|
329
406
|
}
|
|
330
407
|
);
|
|
331
408
|
}
|
|
332
|
-
return /* @__PURE__ */ jsx(StoreProvider, { builder: props.builder, children: ({ store }) => content(store) });
|
|
409
|
+
return /* @__PURE__ */ jsx(StoreProvider, { builder: props.builder, debug: props.debug, children: ({ store }) => content(store) });
|
|
333
410
|
}
|
|
334
411
|
|
|
335
412
|
export { PersistStoreProvider, persist, usePersistentStore };
|