@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.
@@ -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"]}
@@ -1,5 +1,5 @@
1
- import { S as StoreBuilder } from '../types-CugArdrs.js';
2
- export { R as ReadableStore, a as Store, b as StoreCleanup, c as StoreInitialStateLoader, d as StoreLifecycleMeta, e as StoreLifecycleStatus, f as StorePlugin, g as StorePluginContext, h as StoreState } from '../types-CugArdrs.js';
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
  /**
@@ -1,19 +1,32 @@
1
- import { createStoreInstance } from '../chunk-C5U3Q6O3.js';
2
- import { registerStoreBuilder } from '../chunk-PCSRXZL4.js';
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 = arguments.length > 0;
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([]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/create-store.ts"],"names":[],"mappings":";;;;AAiBO,SAAS,YACd,YAAA,EACsB;AACtB,EAAA,MAAM,uBAAA,GAA0B,UAAU,MAAA,GAAS,CAAA;AAGnD,EAAA,MAAM,aAAA,GAAgB,CACpB,OAAA,KACmC;AACnC,IAAA,MAAM,OAAA,GAA0C;AAAA,MAC9C,OAAO,oBAAA,EAA+B;AACpC,QAAA,MAAM,uBAAA,GAA0B,UAAU,MAAA,GAAS,CAAA;AACnD,QAAA,MAAM,aAAa,mBAAA,CAAoB;AAAA,UACrC,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,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,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'\n\nimport type { Store, StoreBuilder, StorePlugin } 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 builder: StoreBuilder<TState, TPlugins> = {\n create(overrideInitialState?: TState) {\n const hasOverrideInitialState = arguments.length > 0\n const controller = createStoreInstance({\n initialState: hasOverrideInitialState\n ? overrideInitialState\n : initialState,\n readyOnCreate: hasOverrideInitialState || hasDeclaredInitialState,\n })\n\n for (const plugin of plugins) {\n const surface = plugin({\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 return builder\n }\n\n return createBuilder<{}>([])\n}\n"]}
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 { f as StorePlugin, a as Store } from '../../types-CugArdrs.js';
1
+ import { n as StorePlugin, a as Store } from '../../types-DjDVKPhw.js';
2
2
  import '@tanstack/store';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { a as Store, f as StorePlugin, S as StoreBuilder, c as StoreInitialStateLoader } from '../../types-CugArdrs.js';
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-C5U3Q6O3.js';
2
- import { StoreProvider } from '../../chunk-GHGDIRN2.js';
3
- import { getStoreBuilder } from '../../chunk-PCSRXZL4.js';
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(StoreProvider, { builder: props.builder, initialState, children: ({ store }) => content(store) });
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 };