@livestore/livestore 0.4.0-dev.14 → 0.4.0-dev.16
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 +39 -8
- package/dist/store/create-store.d.ts.map +1 -1
- package/dist/store/create-store.js +10 -5
- 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 +67 -14
|
@@ -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
|
-
import { type Adapter, type BootStatus, type ClientSessionSyncProcessorSimulationParams, type MigrationsReport, UnexpectedError } from '@livestore/common';
|
|
1
|
+
import { type Adapter, type BootStatus, type ClientSessionSyncProcessorSimulationParams, LogConfig, 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> extends LogConfig.WithLoggerOptions {
|
|
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,
|
|
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
|
-
import { provideOtel, UnexpectedError, } from '@livestore/common';
|
|
1
|
+
import { LogConfig, provideOtel, UnexpectedError, } from '@livestore/common';
|
|
2
2
|
import { isDevEnv, LS_DEV, omitUndefineds } from '@livestore/utils';
|
|
3
|
-
import { Context, Deferred, Effect, Exit, Fiber, identity, Layer,
|
|
3
|
+
import { Context, Deferred, Effect, Exit, Fiber, identity, Layer, 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";
|
|
@@ -29,12 +29,13 @@ export const createStorePromise = async ({ signal, otelOptions, ...options }) =>
|
|
|
29
29
|
return yield* createStore({ ...options }).pipe(Scope.extend(scope));
|
|
30
30
|
}).pipe(Effect.withSpan('createStore', {
|
|
31
31
|
attributes: { storeId: options.storeId, disableDevtools: options.disableDevtools },
|
|
32
|
-
}), provideOtel(omitUndefineds({ parentSpanContext: otelOptions?.rootSpanContext, otelTracer: otelOptions?.tracer })), Effect.tapCauseLogPretty, Effect.annotateLogs({ thread: 'window' }),
|
|
33
|
-
export const createStore = ({ schema, adapter, storeId, context = {}, boot, batchUpdates, disableDevtools, onBootStatus, shutdownDeferred, params, debug, confirmUnsavedChanges = true, syncPayload, }) => Effect.gen(function* () {
|
|
32
|
+
}), provideOtel(omitUndefineds({ parentSpanContext: otelOptions?.rootSpanContext, otelTracer: otelOptions?.tracer })), Effect.tapCauseLogPretty, Effect.annotateLogs({ thread: 'window' }), LogConfig.withLoggerConfig(options, { threadName: 'window' }), Effect.runPromise);
|
|
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,
|
|
1
|
+
{"version":3,"file":"create-store.js","sourceRoot":"","sources":["../../src/store/create-store.ts"],"names":[],"mappings":"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"}
|
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.16",
|
|
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/common": "0.4.0-dev.
|
|
15
|
-
"@livestore/utils": "0.4.0-dev.
|
|
14
|
+
"@livestore/common": "0.4.0-dev.16",
|
|
15
|
+
"@livestore/utils": "0.4.0-dev.16"
|
|
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.16",
|
|
24
|
+
"@livestore/adapter-web": "0.4.0-dev.16"
|
|
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 ??= {}
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
type IntentionalShutdownCause,
|
|
8
8
|
type InvalidPullError,
|
|
9
9
|
type IsOfflineError,
|
|
10
|
+
LogConfig,
|
|
10
11
|
type MaterializeError,
|
|
11
12
|
type MigrationsReport,
|
|
12
13
|
provideOtel,
|
|
@@ -23,12 +24,10 @@ import {
|
|
|
23
24
|
Fiber,
|
|
24
25
|
identity,
|
|
25
26
|
Layer,
|
|
26
|
-
Logger,
|
|
27
|
-
LogLevel,
|
|
28
27
|
OtelTracer,
|
|
29
28
|
Queue,
|
|
30
29
|
Runtime,
|
|
31
|
-
|
|
30
|
+
Schema,
|
|
32
31
|
Scope,
|
|
33
32
|
TaskTracing,
|
|
34
33
|
} from '@livestore/utils/effect'
|
|
@@ -63,7 +62,11 @@ export class DeferredStoreContext extends Context.Tag('@livestore/livestore/effe
|
|
|
63
62
|
Deferred.Deferred<LiveStoreContextRunning['Type'], UnexpectedError>
|
|
64
63
|
>() {}
|
|
65
64
|
|
|
66
|
-
export type LiveStoreContextProps<
|
|
65
|
+
export type LiveStoreContextProps<
|
|
66
|
+
TSchema extends LiveStoreSchema,
|
|
67
|
+
TContext = {},
|
|
68
|
+
TSyncPayloadSchema extends Schema.Schema<any> = typeof Schema.JsonValue,
|
|
69
|
+
> = {
|
|
67
70
|
schema: TSchema
|
|
68
71
|
/**
|
|
69
72
|
* The `storeId` can be used to isolate multiple stores from each other.
|
|
@@ -88,9 +91,32 @@ export type LiveStoreContextProps<TSchema extends LiveStoreSchema, TContext = {}
|
|
|
88
91
|
disableDevtools?: boolean | 'auto'
|
|
89
92
|
onBootStatus?: (status: BootStatus) => void
|
|
90
93
|
batchUpdates: (run: () => void) => void
|
|
94
|
+
/**
|
|
95
|
+
* Schema describing the shape of the sync payload and used to encode it.
|
|
96
|
+
*
|
|
97
|
+
* - If omitted, `Schema.JsonValue` is used (no additional typing/validation).
|
|
98
|
+
* - Prefer exporting a schema from your app (e.g. `export const SyncPayload = Schema.Struct({ authToken: Schema.String })`)
|
|
99
|
+
* and pass it here to get end-to-end type safety and validation.
|
|
100
|
+
*/
|
|
101
|
+
syncPayloadSchema?: TSyncPayloadSchema
|
|
102
|
+
/**
|
|
103
|
+
* Payload that is sent to the sync backend during connection establishment.
|
|
104
|
+
*
|
|
105
|
+
* - Its TypeScript type is inferred from `syncPayloadSchema` (i.e. `typeof SyncPayload.Type`).
|
|
106
|
+
* - At runtime this value is encoded with `syncPayloadSchema` before being handed to the adapter.
|
|
107
|
+
*
|
|
108
|
+
* Example:
|
|
109
|
+
* const SyncPayload = Schema.Struct({ authToken: Schema.String })
|
|
110
|
+
* <LiveStoreProvider syncPayloadSchema={SyncPayload} syncPayload={{ authToken: '...' }} />
|
|
111
|
+
*/
|
|
112
|
+
syncPayload?: Schema.Schema.Type<TSyncPayloadSchema>
|
|
91
113
|
}
|
|
92
114
|
|
|
93
|
-
export interface CreateStoreOptions<
|
|
115
|
+
export interface CreateStoreOptions<
|
|
116
|
+
TSchema extends LiveStoreSchema,
|
|
117
|
+
TContext = {},
|
|
118
|
+
TSyncPayloadSchema extends Schema.Schema<any> = typeof Schema.JsonValue,
|
|
119
|
+
> extends LogConfig.WithLoggerOptions {
|
|
94
120
|
schema: TSchema
|
|
95
121
|
adapter: Adapter
|
|
96
122
|
storeId: string
|
|
@@ -119,11 +145,23 @@ export interface CreateStoreOptions<TSchema extends LiveStoreSchema, TContext =
|
|
|
119
145
|
*/
|
|
120
146
|
confirmUnsavedChanges?: boolean
|
|
121
147
|
/**
|
|
122
|
-
*
|
|
148
|
+
* Schema describing the shape of the sync payload and used to encode it.
|
|
149
|
+
*
|
|
150
|
+
* - If omitted, `Schema.JsonValue` is used (no additional typing/validation).
|
|
151
|
+
* - Prefer exporting a schema from your app (e.g. `export const SyncPayload = Schema.Struct({ authToken: Schema.String })`)
|
|
152
|
+
* and pass it here to get end-to-end type safety and validation.
|
|
153
|
+
*/
|
|
154
|
+
syncPayloadSchema?: TSyncPayloadSchema
|
|
155
|
+
/**
|
|
156
|
+
* Payload that is sent to the sync backend during connection establishment.
|
|
157
|
+
*
|
|
158
|
+
* - Its TypeScript type is inferred from `syncPayloadSchema` (i.e. `typeof SyncPayload.Type`).
|
|
159
|
+
* - At runtime this value is encoded with `syncPayloadSchema` and carried through the adapter
|
|
160
|
+
* to the backend where it can be decoded with the same schema.
|
|
123
161
|
*
|
|
124
162
|
* @default undefined
|
|
125
163
|
*/
|
|
126
|
-
syncPayload?: Schema.
|
|
164
|
+
syncPayload?: Schema.Schema.Type<TSyncPayloadSchema>
|
|
127
165
|
params?: {
|
|
128
166
|
leaderPushBatchSize?: number
|
|
129
167
|
simulation?: {
|
|
@@ -136,11 +174,15 @@ export interface CreateStoreOptions<TSchema extends LiveStoreSchema, TContext =
|
|
|
136
174
|
}
|
|
137
175
|
|
|
138
176
|
/** Create a new LiveStore Store */
|
|
139
|
-
export const createStorePromise = async <
|
|
177
|
+
export const createStorePromise = async <
|
|
178
|
+
TSchema extends LiveStoreSchema = LiveStoreSchema.Any,
|
|
179
|
+
TContext = {},
|
|
180
|
+
TSyncPayloadSchema extends Schema.Schema<any> = typeof Schema.JsonValue,
|
|
181
|
+
>({
|
|
140
182
|
signal,
|
|
141
183
|
otelOptions,
|
|
142
184
|
...options
|
|
143
|
-
}: CreateStoreOptions<TSchema, TContext> & {
|
|
185
|
+
}: CreateStoreOptions<TSchema, TContext, TSyncPayloadSchema> & {
|
|
144
186
|
signal?: AbortSignal
|
|
145
187
|
otelOptions?: Partial<OtelOptions>
|
|
146
188
|
}): Promise<Store<TSchema, TContext>> =>
|
|
@@ -162,12 +204,15 @@ export const createStorePromise = async <TSchema extends LiveStoreSchema = LiveS
|
|
|
162
204
|
provideOtel(omitUndefineds({ parentSpanContext: otelOptions?.rootSpanContext, otelTracer: otelOptions?.tracer })),
|
|
163
205
|
Effect.tapCauseLogPretty,
|
|
164
206
|
Effect.annotateLogs({ thread: 'window' }),
|
|
165
|
-
|
|
166
|
-
Logger.withMinimumLogLevel(LogLevel.Debug),
|
|
207
|
+
LogConfig.withLoggerConfig(options, { threadName: 'window' }),
|
|
167
208
|
Effect.runPromise,
|
|
168
209
|
)
|
|
169
210
|
|
|
170
|
-
export const createStore = <
|
|
211
|
+
export const createStore = <
|
|
212
|
+
TSchema extends LiveStoreSchema = LiveStoreSchema.Any,
|
|
213
|
+
TContext = {},
|
|
214
|
+
TSyncPayloadSchema extends Schema.Schema<any> = typeof Schema.JsonValue,
|
|
215
|
+
>({
|
|
171
216
|
schema,
|
|
172
217
|
adapter,
|
|
173
218
|
storeId,
|
|
@@ -181,7 +226,8 @@ export const createStore = <TSchema extends LiveStoreSchema = LiveStoreSchema.An
|
|
|
181
226
|
debug,
|
|
182
227
|
confirmUnsavedChanges = true,
|
|
183
228
|
syncPayload,
|
|
184
|
-
|
|
229
|
+
syncPayloadSchema,
|
|
230
|
+
}: CreateStoreOptions<TSchema, TContext, TSyncPayloadSchema>): Effect.Effect<
|
|
185
231
|
Store<TSchema, TContext>,
|
|
186
232
|
UnexpectedError,
|
|
187
233
|
Scope.Scope | OtelTracer.OtelTracer
|
|
@@ -194,6 +240,7 @@ export const createStore = <TSchema extends LiveStoreSchema = LiveStoreSchema.An
|
|
|
194
240
|
yield* Effect.addFinalizer((_) => Scope.close(lifetimeScope, _))
|
|
195
241
|
|
|
196
242
|
const debugInstanceId = debug?.instanceId ?? nanoid(10)
|
|
243
|
+
const resolvedSyncPayloadSchema = (syncPayloadSchema ?? Schema.JsonValue) as TSyncPayloadSchema
|
|
197
244
|
|
|
198
245
|
return yield* Effect.gen(function* () {
|
|
199
246
|
const span = yield* OtelTracer.currentOtelSpan.pipe(Effect.orDie)
|
|
@@ -250,6 +297,11 @@ export const createStore = <TSchema extends LiveStoreSchema = LiveStoreSchema.An
|
|
|
250
297
|
Fiber.join,
|
|
251
298
|
)
|
|
252
299
|
|
|
300
|
+
const syncPayloadEncoded =
|
|
301
|
+
syncPayload === undefined
|
|
302
|
+
? undefined
|
|
303
|
+
: yield* Schema.encode(resolvedSyncPayloadSchema)(syncPayload).pipe(UnexpectedError.mapToUnexpectedError)
|
|
304
|
+
|
|
253
305
|
const clientSession: ClientSession = yield* adapter({
|
|
254
306
|
schema,
|
|
255
307
|
storeId,
|
|
@@ -258,7 +310,8 @@ export const createStore = <TSchema extends LiveStoreSchema = LiveStoreSchema.An
|
|
|
258
310
|
shutdown,
|
|
259
311
|
connectDevtoolsToStore: connectDevtoolsToStore_,
|
|
260
312
|
debugInstanceId,
|
|
261
|
-
|
|
313
|
+
syncPayloadSchema: resolvedSyncPayloadSchema,
|
|
314
|
+
syncPayloadEncoded,
|
|
262
315
|
}).pipe(Effect.withPerformanceMeasure('livestore:makeAdapter'), Effect.withSpan('createStore:makeAdapter'))
|
|
263
316
|
|
|
264
317
|
if (LS_DEV && clientSession.leaderThread.initialState.migrationsReport.migrations.length > 0) {
|