@livestore/react 0.4.0-dev.21 → 0.4.0-dev.22
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/dist/.tsbuildinfo +1 -1
- package/dist/StoreRegistryContext.d.ts +56 -0
- package/dist/StoreRegistryContext.d.ts.map +1 -0
- package/dist/StoreRegistryContext.js +61 -0
- package/dist/StoreRegistryContext.js.map +1 -0
- package/dist/__tests__/fixture.d.ts.map +1 -1
- package/dist/__tests__/fixture.js +1 -6
- package/dist/__tests__/fixture.js.map +1 -1
- package/dist/experimental/components/LiveList.d.ts +4 -2
- package/dist/experimental/components/LiveList.d.ts.map +1 -1
- package/dist/experimental/components/LiveList.js +6 -5
- package/dist/experimental/components/LiveList.js.map +1 -1
- package/dist/experimental/mod.d.ts +0 -1
- package/dist/experimental/mod.d.ts.map +1 -1
- package/dist/experimental/mod.js +0 -1
- package/dist/experimental/mod.js.map +1 -1
- package/dist/mod.d.ts +4 -3
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +3 -2
- package/dist/mod.js.map +1 -1
- package/dist/useClientDocument.d.ts.map +1 -1
- package/dist/useClientDocument.js +1 -4
- package/dist/useClientDocument.js.map +1 -1
- package/dist/useQuery.d.ts +1 -1
- package/dist/useQuery.d.ts.map +1 -1
- package/dist/useQuery.js +2 -5
- package/dist/useQuery.js.map +1 -1
- package/dist/useStore.d.ts +50 -46
- package/dist/useStore.d.ts.map +1 -1
- package/dist/useStore.js +66 -59
- package/dist/useStore.js.map +1 -1
- package/dist/useStore.test.d.ts.map +1 -0
- package/dist/{experimental/multi-store/useStore.test.js → useStore.test.js} +20 -22
- package/dist/useStore.test.js.map +1 -0
- package/package.json +7 -7
- package/src/StoreRegistryContext.tsx +69 -0
- package/src/__tests__/fixture.tsx +1 -13
- package/src/experimental/components/LiveList.tsx +13 -4
- package/src/experimental/mod.ts +0 -1
- package/src/mod.ts +4 -3
- package/src/useClientDocument.ts +1 -5
- package/src/useQuery.ts +2 -6
- package/src/{experimental/multi-store/useStore.test.tsx → useStore.test.tsx} +32 -30
- package/src/useStore.ts +94 -66
- package/dist/LiveStoreContext.d.ts +0 -40
- package/dist/LiveStoreContext.d.ts.map +0 -1
- package/dist/LiveStoreContext.js +0 -21
- package/dist/LiveStoreContext.js.map +0 -1
- package/dist/LiveStoreProvider.d.ts +0 -73
- package/dist/LiveStoreProvider.d.ts.map +0 -1
- package/dist/LiveStoreProvider.js +0 -233
- package/dist/LiveStoreProvider.js.map +0 -1
- package/dist/LiveStoreProvider.test.d.ts +0 -2
- package/dist/LiveStoreProvider.test.d.ts.map +0 -1
- package/dist/LiveStoreProvider.test.js +0 -117
- package/dist/LiveStoreProvider.test.js.map +0 -1
- package/dist/experimental/multi-store/StoreRegistry.d.ts +0 -105
- package/dist/experimental/multi-store/StoreRegistry.d.ts.map +0 -1
- package/dist/experimental/multi-store/StoreRegistry.js +0 -184
- package/dist/experimental/multi-store/StoreRegistry.js.map +0 -1
- package/dist/experimental/multi-store/StoreRegistry.test.d.ts +0 -2
- package/dist/experimental/multi-store/StoreRegistry.test.d.ts.map +0 -1
- package/dist/experimental/multi-store/StoreRegistry.test.js +0 -381
- package/dist/experimental/multi-store/StoreRegistry.test.js.map +0 -1
- package/dist/experimental/multi-store/StoreRegistryContext.d.ts +0 -10
- package/dist/experimental/multi-store/StoreRegistryContext.d.ts.map +0 -1
- package/dist/experimental/multi-store/StoreRegistryContext.js +0 -15
- package/dist/experimental/multi-store/StoreRegistryContext.js.map +0 -1
- package/dist/experimental/multi-store/mod.d.ts +0 -6
- package/dist/experimental/multi-store/mod.d.ts.map +0 -1
- package/dist/experimental/multi-store/mod.js +0 -6
- package/dist/experimental/multi-store/mod.js.map +0 -1
- package/dist/experimental/multi-store/storeOptions.d.ts +0 -4
- package/dist/experimental/multi-store/storeOptions.d.ts.map +0 -1
- package/dist/experimental/multi-store/storeOptions.js +0 -4
- package/dist/experimental/multi-store/storeOptions.js.map +0 -1
- package/dist/experimental/multi-store/types.d.ts +0 -25
- package/dist/experimental/multi-store/types.d.ts.map +0 -1
- package/dist/experimental/multi-store/types.js +0 -2
- package/dist/experimental/multi-store/types.js.map +0 -1
- package/dist/experimental/multi-store/useStore.d.ts +0 -11
- package/dist/experimental/multi-store/useStore.d.ts.map +0 -1
- package/dist/experimental/multi-store/useStore.js +0 -16
- package/dist/experimental/multi-store/useStore.js.map +0 -1
- package/dist/experimental/multi-store/useStore.test.d.ts.map +0 -1
- package/dist/experimental/multi-store/useStore.test.js.map +0 -1
- package/src/LiveStoreContext.ts +0 -41
- package/src/LiveStoreProvider.test.tsx +0 -248
- package/src/LiveStoreProvider.tsx +0 -430
- package/src/experimental/multi-store/StoreRegistry.test.ts +0 -518
- package/src/experimental/multi-store/StoreRegistry.ts +0 -253
- package/src/experimental/multi-store/StoreRegistryContext.tsx +0 -23
- package/src/experimental/multi-store/mod.ts +0 -5
- package/src/experimental/multi-store/storeOptions.ts +0 -8
- package/src/experimental/multi-store/types.ts +0 -37
- package/src/experimental/multi-store/useStore.ts +0 -26
- /package/dist/{experimental/multi-store/useStore.test.d.ts → useStore.test.d.ts} +0 -0
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
import { Fragment as _Fragment, jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { LogConfig, provideOtel, UnknownError } from '@livestore/common';
|
|
3
|
-
import { createStore, makeShutdownDeferred, StoreInterrupted } from '@livestore/livestore';
|
|
4
|
-
import { errorToString, IS_REACT_NATIVE, LS_DEV, omitUndefineds } from '@livestore/utils';
|
|
5
|
-
import { Cause, Deferred, Effect, Exit, identity, Schema, Scope, TaskTracing } from '@livestore/utils/effect';
|
|
6
|
-
import React from 'react';
|
|
7
|
-
import { LiveStoreContext } from "./LiveStoreContext.js";
|
|
8
|
-
const defaultRenderError = (error) => IS_REACT_NATIVE ? null : Schema.is(UnknownError)(error) ? error.toString() : errorToString(error);
|
|
9
|
-
const defaultRenderShutdown = (cause) => {
|
|
10
|
-
const reason = cause._tag === 'LiveStore.StoreInterrupted'
|
|
11
|
-
? `interrupted due to: ${cause.reason}`
|
|
12
|
-
: cause._tag === 'InvalidPushError' || cause._tag === 'InvalidPullError'
|
|
13
|
-
? `sync error: ${cause.cause}`
|
|
14
|
-
: cause.reason === 'devtools-import'
|
|
15
|
-
? 'devtools import'
|
|
16
|
-
: cause.reason === 'devtools-reset'
|
|
17
|
-
? 'devtools reset'
|
|
18
|
-
: cause.reason === 'adapter-reset'
|
|
19
|
-
? 'adapter reset'
|
|
20
|
-
: cause.reason === 'manual'
|
|
21
|
-
? 'manual shutdown'
|
|
22
|
-
: 'unknown reason';
|
|
23
|
-
return IS_REACT_NATIVE ? null : _jsxs(_Fragment, { children: ["LiveStore Shutdown due to ", reason] });
|
|
24
|
-
};
|
|
25
|
-
const defaultRenderLoading = (status) => IS_REACT_NATIVE ? null : _jsxs(_Fragment, { children: ["LiveStore is loading (", status.stage, ")..."] });
|
|
26
|
-
export const LiveStoreProvider = ({ renderLoading = defaultRenderLoading, renderError = defaultRenderError, renderShutdown = defaultRenderShutdown, otelOptions, children, schema, storeId = 'default', boot, adapter, batchUpdates, disableDevtools, signal, confirmUnsavedChanges = true, params, syncPayload, syncPayloadSchema, debug, logger, logLevel, }) => {
|
|
27
|
-
const storeCtx = useCreateStore({
|
|
28
|
-
storeId,
|
|
29
|
-
schema,
|
|
30
|
-
adapter,
|
|
31
|
-
batchUpdates,
|
|
32
|
-
confirmUnsavedChanges,
|
|
33
|
-
...omitUndefineds({
|
|
34
|
-
otelOptions,
|
|
35
|
-
boot,
|
|
36
|
-
disableDevtools,
|
|
37
|
-
params,
|
|
38
|
-
signal,
|
|
39
|
-
syncPayload,
|
|
40
|
-
syncPayloadSchema,
|
|
41
|
-
debug,
|
|
42
|
-
}),
|
|
43
|
-
logger,
|
|
44
|
-
logLevel,
|
|
45
|
-
});
|
|
46
|
-
if (storeCtx.stage === 'error') {
|
|
47
|
-
return renderError(storeCtx.error);
|
|
48
|
-
}
|
|
49
|
-
if (storeCtx.stage === 'shutdown') {
|
|
50
|
-
return renderShutdown(storeCtx.cause);
|
|
51
|
-
}
|
|
52
|
-
if (storeCtx.stage !== 'running') {
|
|
53
|
-
return renderLoading(storeCtx);
|
|
54
|
-
}
|
|
55
|
-
globalThis.__debugLiveStore ??= {};
|
|
56
|
-
if (Object.keys(globalThis.__debugLiveStore).length === 0) {
|
|
57
|
-
globalThis.__debugLiveStore._ = storeCtx.store;
|
|
58
|
-
}
|
|
59
|
-
globalThis.__debugLiveStore[debug?.instanceId ?? storeId] = storeCtx.store;
|
|
60
|
-
return _jsx(LiveStoreContext.Provider, { value: storeCtx, children: children });
|
|
61
|
-
};
|
|
62
|
-
const useCreateStore = ({ schema, storeId, otelOptions, boot, adapter, batchUpdates, disableDevtools, signal, context, params, confirmUnsavedChanges, syncPayload, syncPayloadSchema, debug, logger, logLevel, }) => {
|
|
63
|
-
const [_, rerender] = React.useState(0);
|
|
64
|
-
const ctxValueRef = React.useRef({
|
|
65
|
-
value: { stage: 'loading' },
|
|
66
|
-
componentScope: undefined,
|
|
67
|
-
shutdownDeferred: undefined,
|
|
68
|
-
previousShutdownDeferred: undefined,
|
|
69
|
-
counter: 0,
|
|
70
|
-
});
|
|
71
|
-
const debugInstanceId = debug?.instanceId;
|
|
72
|
-
// console.debug(`useCreateStore (${ctxValueRef.current.counter})`, ctxValueRef.current.value.stage)
|
|
73
|
-
const inputPropsCacheRef = React.useRef({
|
|
74
|
-
schema,
|
|
75
|
-
otelOptions,
|
|
76
|
-
boot,
|
|
77
|
-
adapter,
|
|
78
|
-
batchUpdates,
|
|
79
|
-
disableDevtools,
|
|
80
|
-
signal,
|
|
81
|
-
context,
|
|
82
|
-
params,
|
|
83
|
-
confirmUnsavedChanges,
|
|
84
|
-
syncPayload,
|
|
85
|
-
syncPayloadSchema,
|
|
86
|
-
debugInstanceId,
|
|
87
|
-
});
|
|
88
|
-
const interrupt = React.useCallback((componentScope, shutdownDeferred, error) => Effect.gen(function* () {
|
|
89
|
-
// console.log('[@livestore/livestore/react] interupting', error)
|
|
90
|
-
yield* Scope.close(componentScope, Exit.fail(error));
|
|
91
|
-
yield* Deferred.fail(shutdownDeferred, error);
|
|
92
|
-
}).pipe(Effect.tapErrorCause((cause) => Effect.logDebug('[@livestore/livestore/react] interupting', cause)), Effect.runFork), []);
|
|
93
|
-
const inputPropChanges = {
|
|
94
|
-
schema: inputPropsCacheRef.current.schema !== schema,
|
|
95
|
-
otelOptions: inputPropsCacheRef.current.otelOptions !== otelOptions,
|
|
96
|
-
boot: inputPropsCacheRef.current.boot !== boot,
|
|
97
|
-
adapter: inputPropsCacheRef.current.adapter !== adapter,
|
|
98
|
-
batchUpdates: inputPropsCacheRef.current.batchUpdates !== batchUpdates,
|
|
99
|
-
disableDevtools: inputPropsCacheRef.current.disableDevtools !== disableDevtools,
|
|
100
|
-
signal: inputPropsCacheRef.current.signal !== signal,
|
|
101
|
-
context: inputPropsCacheRef.current.context !== context,
|
|
102
|
-
params: inputPropsCacheRef.current.params !== params,
|
|
103
|
-
confirmUnsavedChanges: inputPropsCacheRef.current.confirmUnsavedChanges !== confirmUnsavedChanges,
|
|
104
|
-
syncPayload: inputPropsCacheRef.current.syncPayload !== syncPayload,
|
|
105
|
-
syncPayloadSchema: inputPropsCacheRef.current.syncPayloadSchema !== syncPayloadSchema,
|
|
106
|
-
debugInstanceId: inputPropsCacheRef.current.debugInstanceId !== debugInstanceId,
|
|
107
|
-
};
|
|
108
|
-
if (inputPropChanges.schema ||
|
|
109
|
-
inputPropChanges.otelOptions ||
|
|
110
|
-
inputPropChanges.boot ||
|
|
111
|
-
inputPropChanges.adapter ||
|
|
112
|
-
inputPropChanges.batchUpdates ||
|
|
113
|
-
inputPropChanges.disableDevtools ||
|
|
114
|
-
inputPropChanges.signal ||
|
|
115
|
-
inputPropChanges.context ||
|
|
116
|
-
inputPropChanges.params ||
|
|
117
|
-
inputPropChanges.confirmUnsavedChanges ||
|
|
118
|
-
inputPropChanges.syncPayload ||
|
|
119
|
-
inputPropChanges.syncPayloadSchema) {
|
|
120
|
-
inputPropsCacheRef.current = {
|
|
121
|
-
schema,
|
|
122
|
-
otelOptions,
|
|
123
|
-
boot,
|
|
124
|
-
adapter,
|
|
125
|
-
batchUpdates,
|
|
126
|
-
disableDevtools,
|
|
127
|
-
signal,
|
|
128
|
-
context,
|
|
129
|
-
params,
|
|
130
|
-
confirmUnsavedChanges,
|
|
131
|
-
syncPayload,
|
|
132
|
-
syncPayloadSchema,
|
|
133
|
-
debugInstanceId,
|
|
134
|
-
};
|
|
135
|
-
if (ctxValueRef.current.componentScope !== undefined && ctxValueRef.current.shutdownDeferred !== undefined) {
|
|
136
|
-
const changedInputProps = Object.keys(inputPropChanges).filter((key) => inputPropChanges[key]);
|
|
137
|
-
interrupt(ctxValueRef.current.componentScope, ctxValueRef.current.shutdownDeferred, new StoreInterrupted({ reason: `re-rendering due to changed input props: ${changedInputProps.join(', ')}` }));
|
|
138
|
-
ctxValueRef.current.componentScope = undefined;
|
|
139
|
-
ctxValueRef.current.shutdownDeferred = undefined;
|
|
140
|
-
}
|
|
141
|
-
ctxValueRef.current = {
|
|
142
|
-
value: { stage: 'loading' },
|
|
143
|
-
componentScope: undefined,
|
|
144
|
-
shutdownDeferred: undefined,
|
|
145
|
-
previousShutdownDeferred: ctxValueRef.current.shutdownDeferred,
|
|
146
|
-
counter: ctxValueRef.current.counter + 1,
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
React.useEffect(() => {
|
|
150
|
-
const counter = ctxValueRef.current.counter;
|
|
151
|
-
const setContextValue = (value) => {
|
|
152
|
-
if (ctxValueRef.current.counter !== counter)
|
|
153
|
-
return;
|
|
154
|
-
ctxValueRef.current.value = value;
|
|
155
|
-
rerender((c) => c + 1);
|
|
156
|
-
};
|
|
157
|
-
signal?.addEventListener('abort', () => {
|
|
158
|
-
if (ctxValueRef.current.componentScope !== undefined &&
|
|
159
|
-
ctxValueRef.current.shutdownDeferred !== undefined &&
|
|
160
|
-
ctxValueRef.current.counter === counter) {
|
|
161
|
-
interrupt(ctxValueRef.current.componentScope, ctxValueRef.current.shutdownDeferred, new StoreInterrupted({ reason: 'Aborted via provided AbortController' }));
|
|
162
|
-
ctxValueRef.current.componentScope = undefined;
|
|
163
|
-
ctxValueRef.current.shutdownDeferred = undefined;
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
const cancel = Effect.gen(function* () {
|
|
167
|
-
// Wait for the previous store to fully shutdown before creating a new one
|
|
168
|
-
if (ctxValueRef.current.previousShutdownDeferred) {
|
|
169
|
-
yield* Deferred.await(ctxValueRef.current.previousShutdownDeferred);
|
|
170
|
-
}
|
|
171
|
-
const componentScope = yield* Scope.make().pipe(Effect.acquireRelease(Scope.close));
|
|
172
|
-
const shutdownDeferred = yield* makeShutdownDeferred;
|
|
173
|
-
ctxValueRef.current.componentScope = componentScope;
|
|
174
|
-
ctxValueRef.current.shutdownDeferred = shutdownDeferred;
|
|
175
|
-
yield* Effect.gen(function* () {
|
|
176
|
-
const store = yield* createStore({
|
|
177
|
-
schema,
|
|
178
|
-
storeId,
|
|
179
|
-
adapter,
|
|
180
|
-
shutdownDeferred,
|
|
181
|
-
...omitUndefineds({
|
|
182
|
-
boot,
|
|
183
|
-
batchUpdates,
|
|
184
|
-
disableDevtools,
|
|
185
|
-
context,
|
|
186
|
-
params,
|
|
187
|
-
confirmUnsavedChanges,
|
|
188
|
-
syncPayload,
|
|
189
|
-
syncPayloadSchema,
|
|
190
|
-
}),
|
|
191
|
-
onBootStatus: (status) => {
|
|
192
|
-
if (ctxValueRef.current.value.stage === 'running' || ctxValueRef.current.value.stage === 'error')
|
|
193
|
-
return;
|
|
194
|
-
// NOTE sometimes when status come in in rapid succession, only the last value will be rendered by React
|
|
195
|
-
setContextValue(status);
|
|
196
|
-
},
|
|
197
|
-
debug: { ...omitUndefineds({ instanceId: debugInstanceId }) },
|
|
198
|
-
}).pipe(Effect.tapErrorCause((cause) => Deferred.failCause(shutdownDeferred, cause)));
|
|
199
|
-
setContextValue({ stage: 'running', store });
|
|
200
|
-
}).pipe(Scope.extend(componentScope), Effect.forkIn(componentScope));
|
|
201
|
-
const shutdownContext = (cause) => Effect.sync(() => setContextValue({ stage: 'shutdown', cause }));
|
|
202
|
-
yield* Deferred.await(shutdownDeferred).pipe(Effect.tapErrorCause((cause) => Effect.logDebug('[@livestore/livestore/react] shutdown', Cause.pretty(cause))), Effect.tap((intentionalShutdown) => shutdownContext(intentionalShutdown)), Effect.catchTag('InvalidPushError', (cause) => shutdownContext(cause)), Effect.catchTag('InvalidPullError', (cause) => shutdownContext(cause)), Effect.catchTag('LiveStore.StoreInterrupted', (cause) => shutdownContext(cause)), Effect.tapError((error) => Effect.sync(() => setContextValue({ stage: 'error', error }))), Effect.tapDefect((defect) => Effect.sync(() => setContextValue({ stage: 'error', error: defect }))), Effect.exit);
|
|
203
|
-
}).pipe(Effect.scoped, Effect.withSpan('@livestore/react:useCreateStore'), LS_DEV ? TaskTracing.withAsyncTaggingTracing((name) => console.createTask(name)) : identity, provideOtel(omitUndefineds({ parentSpanContext: otelOptions?.rootSpanContext, otelTracer: otelOptions?.tracer })), Effect.tapCauseLogPretty, Effect.annotateLogs({ thread: 'window' }), LogConfig.withLoggerConfig({ logger, logLevel }, { threadName: 'window' }), Effect.runCallback);
|
|
204
|
-
return () => {
|
|
205
|
-
cancel();
|
|
206
|
-
if (ctxValueRef.current.componentScope !== undefined && ctxValueRef.current.shutdownDeferred !== undefined) {
|
|
207
|
-
interrupt(ctxValueRef.current.componentScope, ctxValueRef.current.shutdownDeferred, new StoreInterrupted({ reason: 'unmounting component' }));
|
|
208
|
-
ctxValueRef.current.componentScope = undefined;
|
|
209
|
-
ctxValueRef.current.shutdownDeferred = undefined;
|
|
210
|
-
}
|
|
211
|
-
};
|
|
212
|
-
}, [
|
|
213
|
-
schema,
|
|
214
|
-
otelOptions,
|
|
215
|
-
boot,
|
|
216
|
-
adapter,
|
|
217
|
-
batchUpdates,
|
|
218
|
-
disableDevtools,
|
|
219
|
-
signal,
|
|
220
|
-
storeId,
|
|
221
|
-
context,
|
|
222
|
-
params,
|
|
223
|
-
confirmUnsavedChanges,
|
|
224
|
-
syncPayload,
|
|
225
|
-
syncPayloadSchema,
|
|
226
|
-
debugInstanceId,
|
|
227
|
-
interrupt,
|
|
228
|
-
logger,
|
|
229
|
-
logLevel,
|
|
230
|
-
]);
|
|
231
|
-
return ctxValueRef.current.value;
|
|
232
|
-
};
|
|
233
|
-
//# sourceMappingURL=LiveStoreProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LiveStoreProvider.js","sourceRoot":"","sources":["../src/LiveStoreProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LiveStoreProvider.test.d.ts","sourceRoot":"","sources":["../src/LiveStoreProvider.test.tsx"],"names":[],"mappings":""}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/** biome-ignore-all lint/a11y: test files need a11y disabled */
|
|
3
|
-
import { makeInMemoryAdapter } from '@livestore/adapter-web';
|
|
4
|
-
import { queryDb, StoreInternalsSymbol } from '@livestore/livestore';
|
|
5
|
-
import { Schema } from '@livestore/utils/effect';
|
|
6
|
-
import * as ReactTesting from '@testing-library/react';
|
|
7
|
-
import React from 'react';
|
|
8
|
-
import { unstable_batchedUpdates as batchUpdates } from 'react-dom';
|
|
9
|
-
import { describe, expect, it } from 'vitest';
|
|
10
|
-
import { events, schema, tables } from "./__tests__/fixture.js";
|
|
11
|
-
import { LiveStoreProvider } from "./LiveStoreProvider.js";
|
|
12
|
-
import * as LiveStoreReact from "./mod.js";
|
|
13
|
-
describe.each([true, false])('LiveStoreProvider (strictMode: %s)', (strictMode) => {
|
|
14
|
-
const WithStrictMode = strictMode ? React.StrictMode : React.Fragment;
|
|
15
|
-
it('simple', async () => {
|
|
16
|
-
let appRenderCount = 0;
|
|
17
|
-
const allTodos$ = queryDb({ query: `select * from todos`, schema: Schema.Array(tables.todos.rowSchema) });
|
|
18
|
-
const App = () => {
|
|
19
|
-
appRenderCount++;
|
|
20
|
-
const { store } = LiveStoreReact.useStore();
|
|
21
|
-
const todos = store.useQuery(allTodos$);
|
|
22
|
-
return _jsx("div", { children: JSON.stringify(todos) });
|
|
23
|
-
};
|
|
24
|
-
const abortController = new AbortController();
|
|
25
|
-
const Root = ({ forceUpdate }) => {
|
|
26
|
-
const bootCb = React.useCallback((store) => store.commit(events.todoCreated({ id: 't1', text: 'buy milk', completed: false })), []);
|
|
27
|
-
// biome-ignore lint/correctness/useExhaustiveDependencies: forceUpdate is used to force a re-render
|
|
28
|
-
const adapterMemo = React.useMemo(() => makeInMemoryAdapter(), [forceUpdate]);
|
|
29
|
-
return (_jsx(WithStrictMode, { children: _jsx(LiveStoreProvider, { schema: schema, renderLoading: (status) => _jsxs("div", { children: ["Loading LiveStore: ", status.stage] }), adapter: adapterMemo, boot: bootCb, signal: abortController.signal, batchUpdates: batchUpdates, children: _jsx(App, {}) }) }));
|
|
30
|
-
};
|
|
31
|
-
const { rerender } = ReactTesting.render(_jsx(Root, { forceUpdate: 1 }));
|
|
32
|
-
expect(appRenderCount).toBe(0);
|
|
33
|
-
await ReactTesting.waitForElementToBeRemoved(() => ReactTesting.screen.getByText((_) => _.startsWith('Loading LiveStore')));
|
|
34
|
-
expect(appRenderCount).toBe(strictMode ? 2 : 1);
|
|
35
|
-
rerender(_jsx(Root, { forceUpdate: 2 }));
|
|
36
|
-
await ReactTesting.waitFor(() => ReactTesting.screen.getByText('Loading LiveStore: loading'));
|
|
37
|
-
await ReactTesting.waitFor(() => ReactTesting.screen.getByText((_) => _.includes('buy milk')));
|
|
38
|
-
expect(appRenderCount).toBe(strictMode ? 4 : 2);
|
|
39
|
-
abortController.abort();
|
|
40
|
-
await ReactTesting.waitFor(() => ReactTesting.screen.getByText('LiveStore Shutdown due to interrupted', { exact: false }));
|
|
41
|
-
});
|
|
42
|
-
// TODO test aborting during boot
|
|
43
|
-
it('error during boot', async () => {
|
|
44
|
-
let appRenderCount = 0;
|
|
45
|
-
const App = () => {
|
|
46
|
-
appRenderCount++;
|
|
47
|
-
return _jsx("div", { children: "hello world" });
|
|
48
|
-
};
|
|
49
|
-
const Root = ({ forceUpdate }) => {
|
|
50
|
-
const bootCb = React.useCallback((_store) => {
|
|
51
|
-
// This should trigger an error because we're trying to insert invalid data
|
|
52
|
-
throw new Error('Simulated boot error');
|
|
53
|
-
}, []);
|
|
54
|
-
// biome-ignore lint/correctness/useExhaustiveDependencies: forceUpdate is used to force a re-render
|
|
55
|
-
const adapterMemo = React.useMemo(() => makeInMemoryAdapter(), [forceUpdate]);
|
|
56
|
-
return (_jsx(WithStrictMode, { children: _jsx(LiveStoreProvider, { schema: schema, renderLoading: (status) => _jsxs("div", { children: ["Loading LiveStore: ", status.stage] }), adapter: adapterMemo, boot: bootCb, batchUpdates: batchUpdates, children: _jsx(App, {}) }) }));
|
|
57
|
-
};
|
|
58
|
-
ReactTesting.render(_jsx(Root, { forceUpdate: 1 }));
|
|
59
|
-
expect(appRenderCount).toBe(0);
|
|
60
|
-
await ReactTesting.waitFor(() => ReactTesting.screen.getByText((_) => _.startsWith('LiveStore.UnknownError')));
|
|
61
|
-
});
|
|
62
|
-
it('unmounts when store is shutdown', async () => {
|
|
63
|
-
let appRenderCount = 0;
|
|
64
|
-
const allTodos$ = queryDb({ query: `select * from todos`, schema: Schema.Array(tables.todos.rowSchema) });
|
|
65
|
-
const shutdownDeferred = Promise.withResolvers();
|
|
66
|
-
const App = () => {
|
|
67
|
-
appRenderCount++;
|
|
68
|
-
const { store } = LiveStoreReact.useStore();
|
|
69
|
-
React.useEffect(() => {
|
|
70
|
-
shutdownDeferred.promise.then(() => {
|
|
71
|
-
console.log('shutdown');
|
|
72
|
-
return store.shutdown();
|
|
73
|
-
});
|
|
74
|
-
}, [store]);
|
|
75
|
-
const todos = store.useQuery(allTodos$);
|
|
76
|
-
return _jsx("div", { children: JSON.stringify(todos) });
|
|
77
|
-
};
|
|
78
|
-
const adapter = makeInMemoryAdapter();
|
|
79
|
-
const Root = () => {
|
|
80
|
-
return (_jsx(WithStrictMode, { children: _jsx(LiveStoreProvider, { schema: schema, renderLoading: (status) => _jsxs("div", { children: ["Loading LiveStore: ", status.stage] }), adapter: adapter, batchUpdates: batchUpdates, children: _jsx(App, {}) }) }));
|
|
81
|
-
};
|
|
82
|
-
ReactTesting.render(_jsx(Root, {}));
|
|
83
|
-
expect(appRenderCount).toBe(0);
|
|
84
|
-
await ReactTesting.waitFor(() => ReactTesting.screen.getByText('[]'));
|
|
85
|
-
React.act(() => shutdownDeferred.resolve());
|
|
86
|
-
expect(appRenderCount).toBe(strictMode ? 2 : 1);
|
|
87
|
-
await ReactTesting.waitFor(() => ReactTesting.screen.getByText('LiveStore Shutdown due to manual shutdown', { exact: false }));
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
it('should work two stores with the same storeId', async () => {
|
|
91
|
-
const allTodos$ = queryDb({ query: `select * from todos`, schema: Schema.Array(tables.todos.rowSchema) });
|
|
92
|
-
const appRenderCount = {
|
|
93
|
-
store1: 0,
|
|
94
|
-
store2: 0,
|
|
95
|
-
};
|
|
96
|
-
const App = () => {
|
|
97
|
-
const { store } = LiveStoreReact.useStore();
|
|
98
|
-
const instanceId = store[StoreInternalsSymbol].clientSession.debugInstanceId;
|
|
99
|
-
appRenderCount[instanceId]++;
|
|
100
|
-
const todos = store.useQuery(allTodos$);
|
|
101
|
-
return (_jsxs("div", { id: instanceId, children: [_jsx("div", { role: "heading", children: instanceId }), _jsx("div", { role: "content", children: JSON.stringify(todos) }), _jsxs("button", { onClick: () => store.commit(events.todoCreated({ id: 't1', text: 'buy milk', completed: false })), children: ["create todo ", instanceId] })] }));
|
|
102
|
-
};
|
|
103
|
-
const Root = () => {
|
|
104
|
-
const storeId = 'fixed-store-id';
|
|
105
|
-
return (_jsxs("div", { children: [_jsx(LiveStoreProvider, { storeId: storeId, debug: { instanceId: 'store1' }, schema: schema, adapter: makeInMemoryAdapter(), batchUpdates: batchUpdates, children: _jsx(App, {}) }), _jsx(LiveStoreProvider, { storeId: storeId, debug: { instanceId: 'store2' }, schema: schema, adapter: makeInMemoryAdapter(), batchUpdates: batchUpdates, children: _jsx(App, {}) })] }));
|
|
106
|
-
};
|
|
107
|
-
const { container } = ReactTesting.render(_jsx(Root, {}));
|
|
108
|
-
await ReactTesting.waitFor(() => ReactTesting.screen.getByRole('heading', { name: 'store1' }));
|
|
109
|
-
await ReactTesting.waitFor(() => ReactTesting.screen.getByRole('heading', { name: 'store2' }));
|
|
110
|
-
expect(appRenderCount.store1).toBe(1);
|
|
111
|
-
expect(appRenderCount.store2).toBe(1);
|
|
112
|
-
ReactTesting.fireEvent.click(ReactTesting.screen.getByText('create todo store1'));
|
|
113
|
-
expect(appRenderCount.store1).toBe(2);
|
|
114
|
-
expect(container.querySelector('#store1 > div[role="content"]')?.textContent).toBe('[{"id":"t1","text":"buy milk","completed":false}]');
|
|
115
|
-
expect(container.querySelector('#store2 > div[role="content"]')?.textContent).toBe('[]');
|
|
116
|
-
});
|
|
117
|
-
//# sourceMappingURL=LiveStoreProvider.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LiveStoreProvider.test.js","sourceRoot":"","sources":["../src/LiveStoreProvider.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { UnknownError } from '@livestore/common';
|
|
2
|
-
import type { LiveStoreSchema } from '@livestore/common/schema';
|
|
3
|
-
import { type Store } from '@livestore/livestore';
|
|
4
|
-
import { Effect, type OtelTracer, Runtime, type Scope } from '@livestore/utils/effect';
|
|
5
|
-
import type { CachedStoreOptions } from './types.ts';
|
|
6
|
-
type DefaultStoreOptions = Partial<Pick<CachedStoreOptions, 'batchUpdates' | 'disableDevtools' | 'confirmUnsavedChanges' | 'syncPayload' | 'debug' | 'otelOptions'>> & {
|
|
7
|
-
/**
|
|
8
|
-
* The time in milliseconds that unused stores remain in memory.
|
|
9
|
-
* When a store becomes unused (no active retentions), it will be disposed
|
|
10
|
-
* after this duration.
|
|
11
|
-
*
|
|
12
|
-
* Stores transition to the unused state as soon as they have no
|
|
13
|
-
* active retentions, so when all components which use that store
|
|
14
|
-
* have unmounted.
|
|
15
|
-
*
|
|
16
|
-
* @remarks
|
|
17
|
-
* - If set to `Infinity`, will disable disposal
|
|
18
|
-
* - The maximum allowed time is about {@link https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout#maximum_delay_value | 24 days}
|
|
19
|
-
*
|
|
20
|
-
* @defaultValue `60_000` (60 seconds) or `Infinity` during SSR to avoid
|
|
21
|
-
* disposing stores before server render completes.
|
|
22
|
-
*/
|
|
23
|
-
unusedCacheTime?: number;
|
|
24
|
-
/**
|
|
25
|
-
* Optionally, pass a custom runtime that will be used to run all operations (loading, caching, etc.).
|
|
26
|
-
*/
|
|
27
|
-
runtime?: Runtime.Runtime<Scope.Scope | OtelTracer.OtelTracer>;
|
|
28
|
-
};
|
|
29
|
-
/**
|
|
30
|
-
* Store Registry coordinating store loading, caching, and retention
|
|
31
|
-
*
|
|
32
|
-
* @public
|
|
33
|
-
*/
|
|
34
|
-
export declare class StoreRegistry {
|
|
35
|
-
#private;
|
|
36
|
-
/**
|
|
37
|
-
* Creates a new StoreRegistry instance.
|
|
38
|
-
*
|
|
39
|
-
* @param params.defaultOptions - Default options applied to all stores managed by this registry when they are loaded.
|
|
40
|
-
*
|
|
41
|
-
* @example
|
|
42
|
-
* ```ts
|
|
43
|
-
* const registry = new StoreRegistry({
|
|
44
|
-
* defaultOptions: {
|
|
45
|
-
* batchUpdates,
|
|
46
|
-
* unusedCacheTime: 30_000,
|
|
47
|
-
* }
|
|
48
|
-
* })
|
|
49
|
-
* ```
|
|
50
|
-
*/
|
|
51
|
-
constructor(params?: {
|
|
52
|
-
defaultOptions?: DefaultStoreOptions;
|
|
53
|
-
});
|
|
54
|
-
/**
|
|
55
|
-
* Gets a cached store or loads a new one, with the store lifetime scoped to the caller.
|
|
56
|
-
*
|
|
57
|
-
* @typeParam TSchema - The schema type for the store
|
|
58
|
-
* @returns An Effect that yields the store, scoped to the provided Scope
|
|
59
|
-
*
|
|
60
|
-
* @remarks
|
|
61
|
-
* - Stores are kept in cache and reused while any scope holds them
|
|
62
|
-
* - When the scope closes, the reference is released; the store is disposed after `unusedCacheTime`
|
|
63
|
-
* if no other scopes retain it
|
|
64
|
-
* - Concurrent calls with the same storeId share the same store instance
|
|
65
|
-
*/
|
|
66
|
-
getOrLoad: <TSchema extends LiveStoreSchema>(options: CachedStoreOptions<TSchema>) => Effect.Effect<Store<TSchema>, UnknownError, Scope.Scope>;
|
|
67
|
-
/**
|
|
68
|
-
* Get or load a store, returning it directly if already loaded or a promise if loading.
|
|
69
|
-
*
|
|
70
|
-
* @typeParam TSchema - The schema type for the store
|
|
71
|
-
* @returns The loaded store if available, or a Promise that resolves to the loaded store
|
|
72
|
-
* @throws unknown loading error
|
|
73
|
-
*
|
|
74
|
-
* @remarks
|
|
75
|
-
* - Returns the store instance directly (synchronous) when already loaded
|
|
76
|
-
* - Returns a stable Promise reference when loading is in progress or needs to be initiated
|
|
77
|
-
* - Throws with the same error instance on subsequent calls after failure
|
|
78
|
-
* - Applies default options from registry config, with call-site options taking precedence
|
|
79
|
-
* - Concurrent calls with the same storeId share the same store instance
|
|
80
|
-
*/
|
|
81
|
-
getOrLoadPromise: <TSchema extends LiveStoreSchema>(options: CachedStoreOptions<TSchema>) => Store<TSchema> | Promise<Store<TSchema>>;
|
|
82
|
-
/**
|
|
83
|
-
* Retains the store in cache until the returned release function is called.
|
|
84
|
-
*
|
|
85
|
-
* @returns A release function that, when called, removes this retention hold
|
|
86
|
-
*
|
|
87
|
-
* @remarks
|
|
88
|
-
* - Multiple retains on the same store are independent; each must be released separately
|
|
89
|
-
* - If the store isn't cached yet, it will be loaded and then retained
|
|
90
|
-
*/
|
|
91
|
-
retain: (options: CachedStoreOptions<any>) => (() => void);
|
|
92
|
-
/**
|
|
93
|
-
* Warms the cache for a store without adding a retention.
|
|
94
|
-
*
|
|
95
|
-
* @typeParam TSchema - The schema of the store to preload
|
|
96
|
-
* @returns A promise that resolves when the loading is complete (success or failure)
|
|
97
|
-
*
|
|
98
|
-
* @remarks
|
|
99
|
-
* - We don't return the store or throw as this is a fire-and-forget operation.
|
|
100
|
-
* - If the entry remains unused after preload resolves/rejects, it is scheduled for disposal.
|
|
101
|
-
*/
|
|
102
|
-
preload: <TSchema extends LiveStoreSchema>(options: CachedStoreOptions<TSchema>) => Promise<void>;
|
|
103
|
-
}
|
|
104
|
-
export {};
|
|
105
|
-
//# sourceMappingURL=StoreRegistry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StoreRegistry.d.ts","sourceRoot":"","sources":["../../../src/experimental/multi-store/StoreRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAEL,MAAM,EAON,KAAK,UAAU,EAEf,OAAO,EACP,KAAK,KAAK,EACX,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAYpD,KAAK,mBAAmB,GAAG,OAAO,CAChC,IAAI,CACF,kBAAkB,EAClB,cAAc,GAAG,iBAAiB,GAAG,uBAAuB,GAAG,aAAa,GAAG,OAAO,GAAG,aAAa,CACvG,CACF,GAAG;IACF;;;;;;;;;;;;;;;OAeG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;CAC/D,CAAA;AAkCD;;;;GAIG;AACH,qBAAa,aAAa;;IAmBxB;;;;;;;;;;;;;;OAcG;gBACS,MAAM,GAAE;QAAE,cAAc,CAAC,EAAE,mBAAmB,CAAA;KAAO;IAkBjE;;;;;;;;;;;OAWG;IACH,SAAS,GAAI,OAAO,SAAS,eAAe,EAC1C,SAAS,kBAAkB,CAAC,OAAO,CAAC,KACnC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAMa;IAExE;;;;;;;;;;;;;OAaG;IACH,gBAAgB,GAAI,OAAO,SAAS,eAAe,EACjD,SAAS,kBAAkB,CAAC,OAAO,CAAC,KACnC,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CA0B1C;IAED;;;;;;;;OAQG;IACH,MAAM,GAAI,SAAS,kBAAkB,CAAC,GAAG,CAAC,KAAG,CAAC,MAAM,IAAI,CAAC,CAWxD;IAED;;;;;;;;;OASG;IACH,OAAO,GAAU,OAAO,SAAS,eAAe,EAAE,SAAS,kBAAkB,CAAC,OAAO,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CAMrG;CACF"}
|