@livestore/livestore 0.4.0-dev.14 → 0.4.0-dev.15
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/effect/LiveStore.d.ts +1 -1
- package/dist/effect/LiveStore.d.ts.map +1 -1
- package/dist/effect/LiveStore.js +2 -2
- package/dist/effect/LiveStore.js.map +1 -1
- package/dist/store/create-store.d.ts +38 -7
- package/dist/store/create-store.d.ts.map +1 -1
- package/dist/store/create-store.js +8 -3
- package/dist/store/create-store.js.map +1 -1
- package/package.json +5 -5
- package/src/effect/LiveStore.ts +3 -1
- package/src/store/create-store.ts +65 -10
|
@@ -4,7 +4,7 @@ import type { Cause, OtelTracer, Scope } from '@livestore/utils/effect';
|
|
|
4
4
|
import { Effect, Layer } from '@livestore/utils/effect';
|
|
5
5
|
import type { LiveStoreContextProps } from '../store/create-store.ts';
|
|
6
6
|
import { DeferredStoreContext, LiveStoreContextRunning } from '../store/create-store.ts';
|
|
7
|
-
export declare const makeLiveStoreContext: <TSchema extends LiveStoreSchema, TContext = {}>({ schema, storeId, context, boot, adapter, disableDevtools, onBootStatus, batchUpdates, }: LiveStoreContextProps<TSchema, TContext>) => Effect.Effect<LiveStoreContextRunning["Type"], UnexpectedError | Cause.TimeoutException, DeferredStoreContext | Scope.Scope | OtelTracer.OtelTracer>;
|
|
7
|
+
export declare const makeLiveStoreContext: <TSchema extends LiveStoreSchema, TContext = {}>({ schema, storeId, context, boot, adapter, disableDevtools, onBootStatus, batchUpdates, syncPayload, syncPayloadSchema, }: LiveStoreContextProps<TSchema, TContext>) => Effect.Effect<LiveStoreContextRunning["Type"], UnexpectedError | Cause.TimeoutException, DeferredStoreContext | Scope.Scope | OtelTracer.OtelTracer>;
|
|
8
8
|
export declare const LiveStoreContextLayer: <TSchema extends LiveStoreSchema, TContext = {}>(props: LiveStoreContextProps<TSchema, TContext>) => Layer.Layer<LiveStoreContextRunning, UnexpectedError | Cause.TimeoutException, OtelTracer.OtelTracer>;
|
|
9
9
|
export declare const LiveStoreContextDeferred: Layer.Layer<DeferredStoreContext, never, never>;
|
|
10
10
|
//# sourceMappingURL=LiveStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveStore.d.ts","sourceRoot":"","sources":["../../src/effect/LiveStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAsB,MAAM,EAAE,KAAK,EAAQ,MAAM,yBAAyB,CAAA;AAEjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAe,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAErG,eAAO,MAAM,oBAAoB,GAAI,OAAO,SAAS,eAAe,EAAE,QAAQ,GAAG,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"LiveStore.d.ts","sourceRoot":"","sources":["../../src/effect/LiveStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAsB,MAAM,EAAE,KAAK,EAAQ,MAAM,yBAAyB,CAAA;AAEjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAe,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAErG,eAAO,MAAM,oBAAoB,GAAI,OAAO,SAAS,eAAe,EAAE,QAAQ,GAAG,EAAE,EAAE,2HAWlF,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAG,MAAM,CAAC,MAAM,CACzD,uBAAuB,CAAC,MAAM,CAAC,EAC/B,eAAe,GAAG,KAAK,CAAC,gBAAgB,EACxC,oBAAoB,GAAG,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CA0BzD,CAAA;AAEH,eAAO,MAAM,qBAAqB,GAAI,OAAO,SAAS,eAAe,EAAE,QAAQ,GAAG,EAAE,EAClF,OAAO,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,KAC9C,KAAK,CAAC,KAAK,CAAC,uBAAuB,EAAE,eAAe,GAAG,KAAK,CAAC,gBAAgB,EAAE,UAAU,CAAC,UAAU,CAIpG,CAAA;AAEH,eAAO,MAAM,wBAAwB,iDAGpC,CAAA"}
|
package/dist/effect/LiveStore.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { omitUndefineds } from '@livestore/utils';
|
|
2
2
|
import { Deferred, Duration, Effect, Layer, pipe } from '@livestore/utils/effect';
|
|
3
3
|
import { createStore, DeferredStoreContext, LiveStoreContextRunning } from "../store/create-store.js";
|
|
4
|
-
export const makeLiveStoreContext = ({ schema, storeId = 'default', context, boot, adapter, disableDevtools, onBootStatus, batchUpdates, }) => pipe(Effect.gen(function* () {
|
|
4
|
+
export const makeLiveStoreContext = ({ schema, storeId = 'default', context, boot, adapter, disableDevtools, onBootStatus, batchUpdates, syncPayload, syncPayloadSchema, }) => pipe(Effect.gen(function* () {
|
|
5
5
|
const store = yield* createStore({
|
|
6
6
|
schema,
|
|
7
7
|
storeId,
|
|
8
8
|
adapter,
|
|
9
9
|
batchUpdates,
|
|
10
|
-
...omitUndefineds({ context, boot, disableDevtools, onBootStatus }),
|
|
10
|
+
...omitUndefineds({ context, boot, disableDevtools, onBootStatus, syncPayload, syncPayloadSchema }),
|
|
11
11
|
});
|
|
12
12
|
globalThis.__debugLiveStore ??= {};
|
|
13
13
|
if (Object.keys(globalThis.__debugLiveStore).length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveStore.js","sourceRoot":"","sources":["../../src/effect/LiveStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAGjF,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAErG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAiD,EACnF,MAAM,EACN,OAAO,GAAG,SAAS,EACnB,OAAO,EACP,IAAI,EACJ,OAAO,EACP,eAAe,EACf,YAAY,EACZ,YAAY,
|
|
1
|
+
{"version":3,"file":"LiveStore.js","sourceRoot":"","sources":["../../src/effect/LiveStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAGjF,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAErG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAiD,EACnF,MAAM,EACN,OAAO,GAAG,SAAS,EACnB,OAAO,EACP,IAAI,EACJ,OAAO,EACP,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,iBAAiB,GACwB,EAIzC,EAAE,CACF,IAAI,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;QAC/B,MAAM;QACN,OAAO;QACP,OAAO;QACP,YAAY;QACZ,GAAG,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;KACpG,CAAC,CAAA;IAEF,UAAU,CAAC,gBAAgB,KAAK,EAAE,CAAA;IAClC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,UAAU,CAAC,gBAAgB,CAAC,CAAC,GAAG,KAAK,CAAA;IACvC,CAAC;IACD,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,KAAK,CAAA;IAE5C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAA4C,CAAA;AAC9E,CAAC,CAAC,EACF,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAC9G,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxG,+BAA+B;AAC/B,8BAA8B;AAC9B,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EACnC,MAAM,CAAC,QAAQ,CAAC,kDAAkD,CAAC,CACpE,CAAA;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,KAA+C,EACwD,EAAE,CACzG,KAAK,CAAC,MAAM,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CACrE,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC3B,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC,CACxC,CAAA;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC,MAAM,CAClD,oBAAoB,EACpB,QAAQ,CAAC,IAAI,EAAoD,CAClE,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Adapter, type BootStatus, type ClientSessionSyncProcessorSimulationParams, type MigrationsReport, UnexpectedError } from '@livestore/common';
|
|
2
2
|
import type { LiveStoreSchema } from '@livestore/common/schema';
|
|
3
|
-
import { Context, Deferred, Effect, Layer, OtelTracer,
|
|
3
|
+
import { Context, Deferred, Effect, Layer, OtelTracer, Schema, Scope } from '@livestore/utils/effect';
|
|
4
4
|
import * as otel from '@opentelemetry/api';
|
|
5
5
|
import { Store } from './store.ts';
|
|
6
6
|
import type { LiveStoreContextRunning as LiveStoreContextRunning_, OtelOptions, ShutdownDeferred } from './store-types.ts';
|
|
@@ -14,7 +14,7 @@ export declare class LiveStoreContextRunning extends LiveStoreContextRunning_bas
|
|
|
14
14
|
declare const DeferredStoreContext_base: Context.TagClass<DeferredStoreContext, "@livestore/livestore/effect/DeferredStoreContext", Deferred.Deferred<LiveStoreContextRunning_, UnexpectedError>>;
|
|
15
15
|
export declare class DeferredStoreContext extends DeferredStoreContext_base {
|
|
16
16
|
}
|
|
17
|
-
export type LiveStoreContextProps<TSchema extends LiveStoreSchema, TContext = {}> = {
|
|
17
|
+
export type LiveStoreContextProps<TSchema extends LiveStoreSchema, TContext = {}, TSyncPayloadSchema extends Schema.Schema<any> = typeof Schema.JsonValue> = {
|
|
18
18
|
schema: TSchema;
|
|
19
19
|
/**
|
|
20
20
|
* The `storeId` can be used to isolate multiple stores from each other.
|
|
@@ -37,8 +37,27 @@ export type LiveStoreContextProps<TSchema extends LiveStoreSchema, TContext = {}
|
|
|
37
37
|
disableDevtools?: boolean | 'auto';
|
|
38
38
|
onBootStatus?: (status: BootStatus) => void;
|
|
39
39
|
batchUpdates: (run: () => void) => void;
|
|
40
|
+
/**
|
|
41
|
+
* Schema describing the shape of the sync payload and used to encode it.
|
|
42
|
+
*
|
|
43
|
+
* - If omitted, `Schema.JsonValue` is used (no additional typing/validation).
|
|
44
|
+
* - Prefer exporting a schema from your app (e.g. `export const SyncPayload = Schema.Struct({ authToken: Schema.String })`)
|
|
45
|
+
* and pass it here to get end-to-end type safety and validation.
|
|
46
|
+
*/
|
|
47
|
+
syncPayloadSchema?: TSyncPayloadSchema;
|
|
48
|
+
/**
|
|
49
|
+
* Payload that is sent to the sync backend during connection establishment.
|
|
50
|
+
*
|
|
51
|
+
* - Its TypeScript type is inferred from `syncPayloadSchema` (i.e. `typeof SyncPayload.Type`).
|
|
52
|
+
* - At runtime this value is encoded with `syncPayloadSchema` before being handed to the adapter.
|
|
53
|
+
*
|
|
54
|
+
* Example:
|
|
55
|
+
* const SyncPayload = Schema.Struct({ authToken: Schema.String })
|
|
56
|
+
* <LiveStoreProvider syncPayloadSchema={SyncPayload} syncPayload={{ authToken: '...' }} />
|
|
57
|
+
*/
|
|
58
|
+
syncPayload?: Schema.Schema.Type<TSyncPayloadSchema>;
|
|
40
59
|
};
|
|
41
|
-
export interface CreateStoreOptions<TSchema extends LiveStoreSchema, TContext = {}> {
|
|
60
|
+
export interface CreateStoreOptions<TSchema extends LiveStoreSchema, TContext = {}, TSyncPayloadSchema extends Schema.Schema<any> = typeof Schema.JsonValue> {
|
|
42
61
|
schema: TSchema;
|
|
43
62
|
adapter: Adapter;
|
|
44
63
|
storeId: string;
|
|
@@ -64,11 +83,23 @@ export interface CreateStoreOptions<TSchema extends LiveStoreSchema, TContext =
|
|
|
64
83
|
*/
|
|
65
84
|
confirmUnsavedChanges?: boolean;
|
|
66
85
|
/**
|
|
67
|
-
*
|
|
86
|
+
* Schema describing the shape of the sync payload and used to encode it.
|
|
87
|
+
*
|
|
88
|
+
* - If omitted, `Schema.JsonValue` is used (no additional typing/validation).
|
|
89
|
+
* - Prefer exporting a schema from your app (e.g. `export const SyncPayload = Schema.Struct({ authToken: Schema.String })`)
|
|
90
|
+
* and pass it here to get end-to-end type safety and validation.
|
|
91
|
+
*/
|
|
92
|
+
syncPayloadSchema?: TSyncPayloadSchema;
|
|
93
|
+
/**
|
|
94
|
+
* Payload that is sent to the sync backend during connection establishment.
|
|
95
|
+
*
|
|
96
|
+
* - Its TypeScript type is inferred from `syncPayloadSchema` (i.e. `typeof SyncPayload.Type`).
|
|
97
|
+
* - At runtime this value is encoded with `syncPayloadSchema` and carried through the adapter
|
|
98
|
+
* to the backend where it can be decoded with the same schema.
|
|
68
99
|
*
|
|
69
100
|
* @default undefined
|
|
70
101
|
*/
|
|
71
|
-
syncPayload?: Schema.
|
|
102
|
+
syncPayload?: Schema.Schema.Type<TSyncPayloadSchema>;
|
|
72
103
|
params?: {
|
|
73
104
|
leaderPushBatchSize?: number;
|
|
74
105
|
simulation?: {
|
|
@@ -80,10 +111,10 @@ export interface CreateStoreOptions<TSchema extends LiveStoreSchema, TContext =
|
|
|
80
111
|
};
|
|
81
112
|
}
|
|
82
113
|
/** Create a new LiveStore Store */
|
|
83
|
-
export declare const createStorePromise: <TSchema extends LiveStoreSchema = LiveStoreSchema.Any, TContext = {}>({ signal, otelOptions, ...options }: CreateStoreOptions<TSchema, TContext> & {
|
|
114
|
+
export declare const createStorePromise: <TSchema extends LiveStoreSchema = LiveStoreSchema.Any, TContext = {}, TSyncPayloadSchema extends Schema.Schema<any> = typeof Schema.JsonValue>({ signal, otelOptions, ...options }: CreateStoreOptions<TSchema, TContext, TSyncPayloadSchema> & {
|
|
84
115
|
signal?: AbortSignal;
|
|
85
116
|
otelOptions?: Partial<OtelOptions>;
|
|
86
117
|
}) => Promise<Store<TSchema, TContext>>;
|
|
87
|
-
export declare const createStore: <TSchema extends LiveStoreSchema = LiveStoreSchema.Any, TContext = {}>({ schema, adapter, storeId, context, boot, batchUpdates, disableDevtools, onBootStatus, shutdownDeferred, params, debug, confirmUnsavedChanges, syncPayload, }: CreateStoreOptions<TSchema, TContext>) => Effect.Effect<Store<TSchema, TContext>, UnexpectedError, Scope.Scope | OtelTracer.OtelTracer>;
|
|
118
|
+
export declare const createStore: <TSchema extends LiveStoreSchema = LiveStoreSchema.Any, TContext = {}, TSyncPayloadSchema extends Schema.Schema<any> = typeof Schema.JsonValue>({ schema, adapter, storeId, context, boot, batchUpdates, disableDevtools, onBootStatus, shutdownDeferred, params, debug, confirmUnsavedChanges, syncPayload, syncPayloadSchema, }: CreateStoreOptions<TSchema, TContext, TSyncPayloadSchema>) => Effect.Effect<Store<TSchema, TContext>, UnexpectedError, Scope.Scope | OtelTracer.OtelTracer>;
|
|
88
119
|
export {};
|
|
89
120
|
//# sourceMappingURL=create-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-store.d.ts","sourceRoot":"","sources":["../../src/store/create-store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,UAAU,EAGf,KAAK,0CAA0C,EAK/C,KAAK,gBAAgB,EAGrB,eAAe,EAChB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,OAAO,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EAIN,KAAK,EAGL,UAAU,EAGV,
|
|
1
|
+
{"version":3,"file":"create-store.d.ts","sourceRoot":"","sources":["../../src/store/create-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { provideOtel, UnexpectedError, } from '@livestore/common';
|
|
2
2
|
import { isDevEnv, LS_DEV, omitUndefineds } from '@livestore/utils';
|
|
3
|
-
import { Context, Deferred, Effect, Exit, Fiber, identity, Layer, Logger, LogLevel, OtelTracer, Queue, Runtime, Scope, TaskTracing, } from '@livestore/utils/effect';
|
|
3
|
+
import { Context, Deferred, Effect, Exit, Fiber, identity, Layer, Logger, LogLevel, OtelTracer, Queue, Runtime, Schema, Scope, TaskTracing, } from '@livestore/utils/effect';
|
|
4
4
|
import { nanoid } from '@livestore/utils/nanoid';
|
|
5
5
|
import * as otel from '@opentelemetry/api';
|
|
6
6
|
import { connectDevtoolsToStore } from "./devtools.js";
|
|
@@ -30,11 +30,12 @@ export const createStorePromise = async ({ signal, otelOptions, ...options }) =>
|
|
|
30
30
|
}).pipe(Effect.withSpan('createStore', {
|
|
31
31
|
attributes: { storeId: options.storeId, disableDevtools: options.disableDevtools },
|
|
32
32
|
}), provideOtel(omitUndefineds({ parentSpanContext: otelOptions?.rootSpanContext, otelTracer: otelOptions?.tracer })), Effect.tapCauseLogPretty, Effect.annotateLogs({ thread: 'window' }), Effect.provide(Logger.prettyWithThread('window')), Logger.withMinimumLogLevel(LogLevel.Debug), Effect.runPromise);
|
|
33
|
-
export const createStore = ({ schema, adapter, storeId, context = {}, boot, batchUpdates, disableDevtools, onBootStatus, shutdownDeferred, params, debug, confirmUnsavedChanges = true, syncPayload, }) => Effect.gen(function* () {
|
|
33
|
+
export const createStore = ({ schema, adapter, storeId, context = {}, boot, batchUpdates, disableDevtools, onBootStatus, shutdownDeferred, params, debug, confirmUnsavedChanges = true, syncPayload, syncPayloadSchema, }) => Effect.gen(function* () {
|
|
34
34
|
const lifetimeScope = yield* Scope.make();
|
|
35
35
|
yield* validateStoreId(storeId);
|
|
36
36
|
yield* Effect.addFinalizer((_) => Scope.close(lifetimeScope, _));
|
|
37
37
|
const debugInstanceId = debug?.instanceId ?? nanoid(10);
|
|
38
|
+
const resolvedSyncPayloadSchema = (syncPayloadSchema ?? Schema.JsonValue);
|
|
38
39
|
return yield* Effect.gen(function* () {
|
|
39
40
|
const span = yield* OtelTracer.currentOtelSpan.pipe(Effect.orDie);
|
|
40
41
|
const otelRootSpanContext = otel.trace.setSpan(otel.context.active(), span);
|
|
@@ -57,6 +58,9 @@ export const createStore = ({ schema, adapter, storeId, context = {}, boot, batc
|
|
|
57
58
|
// Given that the shutdown flow might also interrupt the effect that is calling the shutdown,
|
|
58
59
|
// we want to detach the shutdown effect so it's not interrupted by itself
|
|
59
60
|
Effect.runFork, Fiber.join);
|
|
61
|
+
const syncPayloadEncoded = syncPayload === undefined
|
|
62
|
+
? undefined
|
|
63
|
+
: yield* Schema.encode(resolvedSyncPayloadSchema)(syncPayload).pipe(UnexpectedError.mapToUnexpectedError);
|
|
60
64
|
const clientSession = yield* adapter({
|
|
61
65
|
schema,
|
|
62
66
|
storeId,
|
|
@@ -65,7 +69,8 @@ export const createStore = ({ schema, adapter, storeId, context = {}, boot, batc
|
|
|
65
69
|
shutdown,
|
|
66
70
|
connectDevtoolsToStore: connectDevtoolsToStore_,
|
|
67
71
|
debugInstanceId,
|
|
68
|
-
|
|
72
|
+
syncPayloadSchema: resolvedSyncPayloadSchema,
|
|
73
|
+
syncPayloadEncoded,
|
|
69
74
|
}).pipe(Effect.withPerformanceMeasure('livestore:makeAdapter'), Effect.withSpan('createStore:makeAdapter'));
|
|
70
75
|
if (LS_DEV && clientSession.leaderThread.initialState.migrationsReport.migrations.length > 0) {
|
|
71
76
|
yield* Effect.logDebug('[@livestore/livestore:createStore] migrationsReport', ...clientSession.leaderThread.initialState.migrationsReport.migrations.map((m) => m.hashes.actual === undefined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-store.js","sourceRoot":"","sources":["../../src/store/create-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,WAAW,EAEX,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,QAAQ,EACR,UAAU,EACV,KAAK,EACL,OAAO,
|
|
1
|
+
{"version":3,"file":"create-store.js","sourceRoot":"","sources":["../../src/store/create-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,WAAW,EAEX,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,QAAQ,EACR,UAAU,EACV,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,WAAW,GACZ,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAOlC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,mBAAmB,EAAE,GAAG;CACzB,CAAA;AAED,MAAM,OAAO,uBAAwB,SAAQ,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,EAG5G;IACD,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAA;QAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAA;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAA;IACpD,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;;AAG7B,MAAM,OAAO,oBAAqB,SAAQ,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,EAGtG;CAAG;AAiHN,mCAAmC;AACnC,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAIrC,EACA,MAAM,EACN,WAAW,EACX,GAAG,OAAO,EAIX,EAAqC,EAAE,CACtC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;IAEvC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACpC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;QACxF,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AACrE,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE;IAC7B,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE;CACnF,CAAC,EACF,WAAW,CAAC,cAAc,CAAC,EAAE,iBAAiB,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,EACjH,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EACzC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EACjD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC1C,MAAM,CAAC,UAAU,CAClB,CAAA;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,CAIzB,EACA,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,GAAG,EAAc,EACxB,IAAI,EACJ,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,KAAK,EACL,qBAAqB,GAAG,IAAI,EAC5B,WAAW,EACX,iBAAiB,GACyC,EAI1D,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;IAEzC,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IAE/B,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAA;IAEhE,MAAM,eAAe,GAAG,KAAK,EAAE,UAAU,IAAI,MAAM,CAAC,EAAE,CAAC,CAAA;IACvD,MAAM,yBAAyB,GAAG,CAAC,iBAAiB,IAAI,MAAM,CAAC,SAAS,CAAuB,CAAA;IAE/F,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACjE,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAA;QAC3E,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAA;QAE/C,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,EAAc,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;QAExG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CACrC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,EAClD,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EACjG,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,UAAU,CAClB,CAAA;QAED,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAS,CAAA;QAEnD,MAAM,uBAAuB,GAAG,CAAC,oBAAkD,EAAE,EAAE,CACrF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;YAClC,KAAK,CAAC,CAAC,sBAAsB,CAAC,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAA;QAChE,CAAC,CAAC,CAAA;QAEJ,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAe,CAAA;QAEpD,MAAM,QAAQ,GAAG,CACf,IAGC,EACD,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,IAAI,CAC1C,MAAM,CAAC,wBAAwB,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAC1F,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EACpB,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE,CACvC,MAAM,CAAC,QAAQ,CAAC,yDAAyD,CAAC,CAC3E,CACF,CAAA;YAED,IAAI,gBAAgB,EAAE,CAAC;gBACrB,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;YAC9C,CAAC;YAED,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAA;QACvD,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAChD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EACvB,MAAM,CAAC,iBAAiB;QACxB,6FAA6F;QAC7F,0EAA0E;QAC1E,MAAM,CAAC,OAAO,EACd,KAAK,CAAC,IAAI,CACX,CAAA;QAEH,MAAM,kBAAkB,GACtB,WAAW,KAAK,SAAS;YACvB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAA;QAE7G,MAAM,aAAa,GAAkB,KAAK,CAAC,CAAC,OAAO,CAAC;YAClD,MAAM;YACN,OAAO;YACP,eAAe,EAAE,kBAAkB,CAAC,eAAe,CAAC;YACpD,eAAe;YACf,QAAQ;YACR,sBAAsB,EAAE,uBAAuB;YAC/C,eAAe;YACf,iBAAiB,EAAE,yBAAyB;YAC5C,kBAAkB;SACnB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAA;QAE3G,IAAI,MAAM,IAAI,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7F,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CACpB,qDAAqD,EACrD,GAAG,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/E,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;gBAC3B,CAAC,CAAC,UAAU,CAAC,CAAC,SAAS,wCAAwC;gBAC/D,CAAC,CAAC,mCAAmC,CAAC,CAAC,SAAS,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,eAAe,CAAC,CAAC,MAAM,CAAC,QAAQ,uBAAuB,CACnI,CACF,CAAA;QACH,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAoB;YACzC,aAAa;YACb,MAAM;YACN,OAAO;YACP,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB,EAAE;YACzE,aAAa,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE;YACzC,wFAAwF;YACxF,wEAAwE;YACxE,mBAAmB,EAAE,kBAAkB,CAAC,eAAe,CAAC,KAAK,KAAK;YAClE,qBAAqB;YACrB,uEAAuE;YACvE,+DAA+D;YAC/D,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE;YAC5B,OAAO;YACP,MAAM,EAAE;gBACN,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,IAAI,cAAc,CAAC,mBAAmB;gBACtF,GAAG,cAAc,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;aACtD;SACF,CAAC,CAAA;QAEF,sEAAsE;QACtE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;QAEjB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,wEAAwE;YACxE,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CACxB,IAAI,CAAC,KAAK,EAAE,EAAE,gBAAgB,EAAE,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,gBAAgB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAC9G,CAAC,IAAI,CACJ,eAAe,CAAC,oBAAoB,EACpC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAqB,EAAE,CAAC,CAAC,EAC1G,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CACpC,CAAA;QACH,CAAC;QAED,+FAA+F;QAC/F,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;QAExB,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,+EAA+E;YAC/E,KAAK,CAAC,eAAe,CAAC,OAAQ,CAAC,cAAc,GAAG,YAAY,CAAA;QAC9D,CAAC;QAED,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,KAAqB,CAAC,CAAA;QAE7D,OAAO,KAAK,CAAA;IACd,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,UAAU,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,CAAC,EAC5E,MAAM,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EACjD,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAE,OAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EACpG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAC5B,CAAA;AACH,CAAC,CAAC,CAAA;AAEJ,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,EAAE,CAC1C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,UAAU,GAAG,kBAAkB,CAAA;IAErC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC;YACjC,KAAK,EAAE,oBAAoB,OAAO,uEAAuE;YACzG,OAAO,EAAE,EAAE,OAAO,EAAE;SACrB,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ,MAAM,kBAAkB,GAAG,CAAC,eAA6C,EAAE,EAAE;IAC3E,6CAA6C;IAC7C,IAAI,eAAe,KAAK,IAAI,IAAI,eAAe,KAAK,KAAK,EAAE,CAAC;QAC1D,OAAO,CAAC,eAAe,CAAA;IACzB,CAAC;IAED,IAAI,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/livestore",
|
|
3
|
-
"version": "0.4.0-dev.
|
|
3
|
+
"version": "0.4.0-dev.15",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": {
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@opentelemetry/api": "1.9.0",
|
|
14
|
-
"@livestore/
|
|
15
|
-
"@livestore/
|
|
14
|
+
"@livestore/utils": "0.4.0-dev.15",
|
|
15
|
+
"@livestore/common": "0.4.0-dev.15"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@opentelemetry/sdk-trace-base": "^2.0.1",
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
"typescript": "5.9.2",
|
|
21
21
|
"vite": "7.1.7",
|
|
22
22
|
"vitest": "3.2.4",
|
|
23
|
-
"@livestore/
|
|
24
|
-
"@livestore/
|
|
23
|
+
"@livestore/utils-dev": "0.4.0-dev.15",
|
|
24
|
+
"@livestore/adapter-web": "0.4.0-dev.15"
|
|
25
25
|
},
|
|
26
26
|
"files": [
|
|
27
27
|
"package.json",
|
package/src/effect/LiveStore.ts
CHANGED
|
@@ -16,6 +16,8 @@ export const makeLiveStoreContext = <TSchema extends LiveStoreSchema, TContext =
|
|
|
16
16
|
disableDevtools,
|
|
17
17
|
onBootStatus,
|
|
18
18
|
batchUpdates,
|
|
19
|
+
syncPayload,
|
|
20
|
+
syncPayloadSchema,
|
|
19
21
|
}: LiveStoreContextProps<TSchema, TContext>): Effect.Effect<
|
|
20
22
|
LiveStoreContextRunning['Type'],
|
|
21
23
|
UnexpectedError | Cause.TimeoutException,
|
|
@@ -28,7 +30,7 @@ export const makeLiveStoreContext = <TSchema extends LiveStoreSchema, TContext =
|
|
|
28
30
|
storeId,
|
|
29
31
|
adapter,
|
|
30
32
|
batchUpdates,
|
|
31
|
-
...omitUndefineds({ context, boot, disableDevtools, onBootStatus }),
|
|
33
|
+
...omitUndefineds({ context, boot, disableDevtools, onBootStatus, syncPayload, syncPayloadSchema }),
|
|
32
34
|
})
|
|
33
35
|
|
|
34
36
|
globalThis.__debugLiveStore ??= {}
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
OtelTracer,
|
|
29
29
|
Queue,
|
|
30
30
|
Runtime,
|
|
31
|
-
|
|
31
|
+
Schema,
|
|
32
32
|
Scope,
|
|
33
33
|
TaskTracing,
|
|
34
34
|
} from '@livestore/utils/effect'
|
|
@@ -63,7 +63,11 @@ export class DeferredStoreContext extends Context.Tag('@livestore/livestore/effe
|
|
|
63
63
|
Deferred.Deferred<LiveStoreContextRunning['Type'], UnexpectedError>
|
|
64
64
|
>() {}
|
|
65
65
|
|
|
66
|
-
export type LiveStoreContextProps<
|
|
66
|
+
export type LiveStoreContextProps<
|
|
67
|
+
TSchema extends LiveStoreSchema,
|
|
68
|
+
TContext = {},
|
|
69
|
+
TSyncPayloadSchema extends Schema.Schema<any> = typeof Schema.JsonValue,
|
|
70
|
+
> = {
|
|
67
71
|
schema: TSchema
|
|
68
72
|
/**
|
|
69
73
|
* The `storeId` can be used to isolate multiple stores from each other.
|
|
@@ -88,9 +92,32 @@ export type LiveStoreContextProps<TSchema extends LiveStoreSchema, TContext = {}
|
|
|
88
92
|
disableDevtools?: boolean | 'auto'
|
|
89
93
|
onBootStatus?: (status: BootStatus) => void
|
|
90
94
|
batchUpdates: (run: () => void) => void
|
|
95
|
+
/**
|
|
96
|
+
* Schema describing the shape of the sync payload and used to encode it.
|
|
97
|
+
*
|
|
98
|
+
* - If omitted, `Schema.JsonValue` is used (no additional typing/validation).
|
|
99
|
+
* - Prefer exporting a schema from your app (e.g. `export const SyncPayload = Schema.Struct({ authToken: Schema.String })`)
|
|
100
|
+
* and pass it here to get end-to-end type safety and validation.
|
|
101
|
+
*/
|
|
102
|
+
syncPayloadSchema?: TSyncPayloadSchema
|
|
103
|
+
/**
|
|
104
|
+
* Payload that is sent to the sync backend during connection establishment.
|
|
105
|
+
*
|
|
106
|
+
* - Its TypeScript type is inferred from `syncPayloadSchema` (i.e. `typeof SyncPayload.Type`).
|
|
107
|
+
* - At runtime this value is encoded with `syncPayloadSchema` before being handed to the adapter.
|
|
108
|
+
*
|
|
109
|
+
* Example:
|
|
110
|
+
* const SyncPayload = Schema.Struct({ authToken: Schema.String })
|
|
111
|
+
* <LiveStoreProvider syncPayloadSchema={SyncPayload} syncPayload={{ authToken: '...' }} />
|
|
112
|
+
*/
|
|
113
|
+
syncPayload?: Schema.Schema.Type<TSyncPayloadSchema>
|
|
91
114
|
}
|
|
92
115
|
|
|
93
|
-
export interface CreateStoreOptions<
|
|
116
|
+
export interface CreateStoreOptions<
|
|
117
|
+
TSchema extends LiveStoreSchema,
|
|
118
|
+
TContext = {},
|
|
119
|
+
TSyncPayloadSchema extends Schema.Schema<any> = typeof Schema.JsonValue,
|
|
120
|
+
> {
|
|
94
121
|
schema: TSchema
|
|
95
122
|
adapter: Adapter
|
|
96
123
|
storeId: string
|
|
@@ -119,11 +146,23 @@ export interface CreateStoreOptions<TSchema extends LiveStoreSchema, TContext =
|
|
|
119
146
|
*/
|
|
120
147
|
confirmUnsavedChanges?: boolean
|
|
121
148
|
/**
|
|
122
|
-
*
|
|
149
|
+
* Schema describing the shape of the sync payload and used to encode it.
|
|
150
|
+
*
|
|
151
|
+
* - If omitted, `Schema.JsonValue` is used (no additional typing/validation).
|
|
152
|
+
* - Prefer exporting a schema from your app (e.g. `export const SyncPayload = Schema.Struct({ authToken: Schema.String })`)
|
|
153
|
+
* and pass it here to get end-to-end type safety and validation.
|
|
154
|
+
*/
|
|
155
|
+
syncPayloadSchema?: TSyncPayloadSchema
|
|
156
|
+
/**
|
|
157
|
+
* Payload that is sent to the sync backend during connection establishment.
|
|
158
|
+
*
|
|
159
|
+
* - Its TypeScript type is inferred from `syncPayloadSchema` (i.e. `typeof SyncPayload.Type`).
|
|
160
|
+
* - At runtime this value is encoded with `syncPayloadSchema` and carried through the adapter
|
|
161
|
+
* to the backend where it can be decoded with the same schema.
|
|
123
162
|
*
|
|
124
163
|
* @default undefined
|
|
125
164
|
*/
|
|
126
|
-
syncPayload?: Schema.
|
|
165
|
+
syncPayload?: Schema.Schema.Type<TSyncPayloadSchema>
|
|
127
166
|
params?: {
|
|
128
167
|
leaderPushBatchSize?: number
|
|
129
168
|
simulation?: {
|
|
@@ -136,11 +175,15 @@ export interface CreateStoreOptions<TSchema extends LiveStoreSchema, TContext =
|
|
|
136
175
|
}
|
|
137
176
|
|
|
138
177
|
/** Create a new LiveStore Store */
|
|
139
|
-
export const createStorePromise = async <
|
|
178
|
+
export const createStorePromise = async <
|
|
179
|
+
TSchema extends LiveStoreSchema = LiveStoreSchema.Any,
|
|
180
|
+
TContext = {},
|
|
181
|
+
TSyncPayloadSchema extends Schema.Schema<any> = typeof Schema.JsonValue,
|
|
182
|
+
>({
|
|
140
183
|
signal,
|
|
141
184
|
otelOptions,
|
|
142
185
|
...options
|
|
143
|
-
}: CreateStoreOptions<TSchema, TContext> & {
|
|
186
|
+
}: CreateStoreOptions<TSchema, TContext, TSyncPayloadSchema> & {
|
|
144
187
|
signal?: AbortSignal
|
|
145
188
|
otelOptions?: Partial<OtelOptions>
|
|
146
189
|
}): Promise<Store<TSchema, TContext>> =>
|
|
@@ -167,7 +210,11 @@ export const createStorePromise = async <TSchema extends LiveStoreSchema = LiveS
|
|
|
167
210
|
Effect.runPromise,
|
|
168
211
|
)
|
|
169
212
|
|
|
170
|
-
export const createStore = <
|
|
213
|
+
export const createStore = <
|
|
214
|
+
TSchema extends LiveStoreSchema = LiveStoreSchema.Any,
|
|
215
|
+
TContext = {},
|
|
216
|
+
TSyncPayloadSchema extends Schema.Schema<any> = typeof Schema.JsonValue,
|
|
217
|
+
>({
|
|
171
218
|
schema,
|
|
172
219
|
adapter,
|
|
173
220
|
storeId,
|
|
@@ -181,7 +228,8 @@ export const createStore = <TSchema extends LiveStoreSchema = LiveStoreSchema.An
|
|
|
181
228
|
debug,
|
|
182
229
|
confirmUnsavedChanges = true,
|
|
183
230
|
syncPayload,
|
|
184
|
-
|
|
231
|
+
syncPayloadSchema,
|
|
232
|
+
}: CreateStoreOptions<TSchema, TContext, TSyncPayloadSchema>): Effect.Effect<
|
|
185
233
|
Store<TSchema, TContext>,
|
|
186
234
|
UnexpectedError,
|
|
187
235
|
Scope.Scope | OtelTracer.OtelTracer
|
|
@@ -194,6 +242,7 @@ export const createStore = <TSchema extends LiveStoreSchema = LiveStoreSchema.An
|
|
|
194
242
|
yield* Effect.addFinalizer((_) => Scope.close(lifetimeScope, _))
|
|
195
243
|
|
|
196
244
|
const debugInstanceId = debug?.instanceId ?? nanoid(10)
|
|
245
|
+
const resolvedSyncPayloadSchema = (syncPayloadSchema ?? Schema.JsonValue) as TSyncPayloadSchema
|
|
197
246
|
|
|
198
247
|
return yield* Effect.gen(function* () {
|
|
199
248
|
const span = yield* OtelTracer.currentOtelSpan.pipe(Effect.orDie)
|
|
@@ -250,6 +299,11 @@ export const createStore = <TSchema extends LiveStoreSchema = LiveStoreSchema.An
|
|
|
250
299
|
Fiber.join,
|
|
251
300
|
)
|
|
252
301
|
|
|
302
|
+
const syncPayloadEncoded =
|
|
303
|
+
syncPayload === undefined
|
|
304
|
+
? undefined
|
|
305
|
+
: yield* Schema.encode(resolvedSyncPayloadSchema)(syncPayload).pipe(UnexpectedError.mapToUnexpectedError)
|
|
306
|
+
|
|
253
307
|
const clientSession: ClientSession = yield* adapter({
|
|
254
308
|
schema,
|
|
255
309
|
storeId,
|
|
@@ -258,7 +312,8 @@ export const createStore = <TSchema extends LiveStoreSchema = LiveStoreSchema.An
|
|
|
258
312
|
shutdown,
|
|
259
313
|
connectDevtoolsToStore: connectDevtoolsToStore_,
|
|
260
314
|
debugInstanceId,
|
|
261
|
-
|
|
315
|
+
syncPayloadSchema: resolvedSyncPayloadSchema,
|
|
316
|
+
syncPayloadEncoded,
|
|
262
317
|
}).pipe(Effect.withPerformanceMeasure('livestore:makeAdapter'), Effect.withSpan('createStore:makeAdapter'))
|
|
263
318
|
|
|
264
319
|
if (LS_DEV && clientSession.leaderThread.initialState.migrationsReport.migrations.length > 0) {
|