@livestore/livestore 0.0.0-snapshot-df546e17f0470b8f4f9bd33aad8c4fca65ec6355 → 0.0.0-snapshot-3b921bf0919e38fd218b5ef2926920c8c4806157
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 -2
- package/dist/effect/LiveStore.d.ts.map +1 -1
- package/dist/effect/LiveStore.js +1 -1
- package/dist/effect/LiveStore.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/reactiveQueries/base-class.d.ts +4 -3
- package/dist/reactiveQueries/base-class.d.ts.map +1 -1
- package/dist/reactiveQueries/base-class.js.map +1 -1
- package/dist/reactiveQueries/{js.d.ts → computed.d.ts} +3 -3
- package/dist/reactiveQueries/computed.d.ts.map +1 -0
- package/dist/reactiveQueries/{js.js → computed.js} +3 -3
- package/dist/reactiveQueries/computed.js.map +1 -0
- package/dist/reactiveQueries/graphql.d.ts +2 -1
- package/dist/reactiveQueries/graphql.d.ts.map +1 -1
- package/dist/reactiveQueries/graphql.js.map +1 -1
- package/dist/reactiveQueries/sql.d.ts +1 -1
- package/dist/reactiveQueries/sql.d.ts.map +1 -1
- package/dist/reactiveQueries/sql.js +1 -1
- package/dist/reactiveQueries/sql.js.map +1 -1
- package/dist/row-query.js +1 -1
- package/dist/row-query.js.map +1 -1
- package/dist/store/create-store.d.ts +28 -0
- package/dist/store/create-store.d.ts.map +1 -0
- package/dist/store/create-store.js +149 -0
- package/dist/store/create-store.js.map +1 -0
- package/dist/{store-devtools.d.ts → store/devtools.d.ts} +4 -4
- package/dist/store/devtools.d.ts.map +1 -0
- package/dist/{store-devtools.js → store/devtools.js} +3 -3
- package/dist/store/devtools.js.map +1 -0
- package/dist/store/store-types.d.ts +101 -0
- package/dist/store/store-types.d.ts.map +1 -0
- package/dist/{store-context.js → store/store-types.js} +1 -1
- package/dist/store/store-types.js.map +1 -0
- package/dist/store/store.d.ts +88 -0
- package/dist/store/store.d.ts.map +1 -0
- package/dist/{store.js → store/store.js} +13 -155
- package/dist/store/store.js.map +1 -0
- package/dist/utils/dev.d.ts +1 -0
- package/dist/utils/dev.d.ts.map +1 -1
- package/dist/utils/dev.js +5 -0
- package/dist/utils/dev.js.map +1 -1
- package/package.json +6 -5
- package/src/ambient.d.ts +3 -1
- package/src/effect/LiveStore.ts +2 -3
- package/src/index.ts +5 -5
- package/src/reactiveQueries/base-class.ts +4 -3
- package/src/reactiveQueries/{js.ts → computed.ts} +3 -3
- package/src/reactiveQueries/graphql.ts +2 -1
- package/src/reactiveQueries/sql.ts +2 -2
- package/src/row-query.ts +2 -2
- package/src/store/create-store.ts +296 -0
- package/src/{store-devtools.ts → store/devtools.ts} +5 -5
- package/src/store/store-types.ts +111 -0
- package/src/{store.ts → store/store.ts} +18 -385
- package/src/utils/dev.ts +6 -0
- package/dist/reactiveQueries/js.d.ts.map +0 -1
- package/dist/reactiveQueries/js.js.map +0 -1
- package/dist/store-context.d.ts +0 -26
- package/dist/store-context.d.ts.map +0 -1
- package/dist/store-context.js.map +0 -1
- package/dist/store-devtools.d.ts.map +0 -1
- package/dist/store-devtools.js.map +0 -1
- package/dist/store.d.ts +0 -175
- package/dist/store.d.ts.map +0 -1
- package/dist/store.js.map +0 -1
- package/src/store-context.ts +0 -23
|
@@ -1,15 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
BootDb,
|
|
4
|
-
BootStatus,
|
|
5
|
-
ClientSession,
|
|
6
|
-
EventId,
|
|
7
|
-
IntentionalShutdownCause,
|
|
8
|
-
ParamsObject,
|
|
9
|
-
PreparedBindValues,
|
|
10
|
-
StoreDevtoolsChannel,
|
|
11
|
-
} from '@livestore/common'
|
|
12
|
-
import { getExecArgsFromMutation, prepareBindValues, replaceSessionIdSymbol, UnexpectedError } from '@livestore/common'
|
|
1
|
+
import type { ClientSession, ParamsObject } from '@livestore/common'
|
|
2
|
+
import { getExecArgsFromMutation, prepareBindValues, replaceSessionIdSymbol } from '@livestore/common'
|
|
13
3
|
import type { LiveStoreSchema, MutationEvent } from '@livestore/common/schema'
|
|
14
4
|
import {
|
|
15
5
|
isPartialMutationEvent,
|
|
@@ -18,124 +8,22 @@ import {
|
|
|
18
8
|
SCHEMA_MUTATIONS_META_TABLE,
|
|
19
9
|
SESSION_CHANGESET_META_TABLE,
|
|
20
10
|
} from '@livestore/common/schema'
|
|
21
|
-
import { assertNever,
|
|
22
|
-
import {
|
|
23
|
-
|
|
24
|
-
Data,
|
|
25
|
-
Deferred,
|
|
26
|
-
Duration,
|
|
27
|
-
Effect,
|
|
28
|
-
Exit,
|
|
29
|
-
FiberSet,
|
|
30
|
-
Inspectable,
|
|
31
|
-
Layer,
|
|
32
|
-
Logger,
|
|
33
|
-
LogLevel,
|
|
34
|
-
MutableHashMap,
|
|
35
|
-
OtelTracer,
|
|
36
|
-
Queue,
|
|
37
|
-
Runtime,
|
|
38
|
-
Schema,
|
|
39
|
-
Scope,
|
|
40
|
-
Stream,
|
|
41
|
-
} from '@livestore/utils/effect'
|
|
11
|
+
import { assertNever, shouldNeverHappen } from '@livestore/utils'
|
|
12
|
+
import type { Scope } from '@livestore/utils/effect'
|
|
13
|
+
import { Data, Effect, FiberSet, Inspectable, MutableHashMap, Runtime, Schema, Stream } from '@livestore/utils/effect'
|
|
42
14
|
import * as otel from '@opentelemetry/api'
|
|
43
15
|
import type { GraphQLSchema } from 'graphql'
|
|
44
16
|
|
|
45
|
-
import {
|
|
46
|
-
import type {
|
|
47
|
-
import
|
|
48
|
-
import {
|
|
49
|
-
import {
|
|
50
|
-
import {
|
|
51
|
-
import {
|
|
52
|
-
import { getDurationMsFromSpan } from './utils/otel.js'
|
|
53
|
-
import type { StackInfo } from './utils/stack-info.js'
|
|
54
|
-
|
|
55
|
-
export type BaseGraphQLContext = {
|
|
56
|
-
queriedTables: Set<string>
|
|
57
|
-
/** Needed by Pothos Otel plugin for resolver tracing to work */
|
|
58
|
-
otelContext?: otel.Context
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export type GraphQLOptions<TContext> = {
|
|
62
|
-
schema: GraphQLSchema
|
|
63
|
-
makeContext: (db: SynchronousDatabaseWrapper, tracer: otel.Tracer, sessionId: string) => TContext
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export type OtelOptions = {
|
|
67
|
-
tracer: otel.Tracer
|
|
68
|
-
rootSpanContext: otel.Context
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export type StoreOptions<
|
|
72
|
-
TGraphQLContext extends BaseGraphQLContext,
|
|
73
|
-
TSchema extends LiveStoreSchema = LiveStoreSchema,
|
|
74
|
-
> = {
|
|
75
|
-
clientSession: ClientSession
|
|
76
|
-
schema: TSchema
|
|
77
|
-
storeId: string
|
|
78
|
-
// TODO remove graphql-related stuff from store and move to GraphQL query directly
|
|
79
|
-
graphQLOptions?: GraphQLOptions<TGraphQLContext>
|
|
80
|
-
otelOptions: OtelOptions
|
|
81
|
-
reactivityGraph: ReactivityGraph
|
|
82
|
-
disableDevtools?: boolean
|
|
83
|
-
fiberSet: FiberSet.FiberSet
|
|
84
|
-
runtime: Runtime.Runtime<Scope.Scope>
|
|
85
|
-
batchUpdates: (runUpdates: () => void) => void
|
|
86
|
-
currentMutationEventIdRef: { current: EventId }
|
|
87
|
-
unsyncedMutationEvents: MutableHashMap.MutableHashMap<EventId, MutationEvent.ForSchema<TSchema>>
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export type RefreshReason =
|
|
91
|
-
| DebugRefreshReasonBase
|
|
92
|
-
| {
|
|
93
|
-
_tag: 'mutate'
|
|
94
|
-
/** The mutations that were applied */
|
|
95
|
-
mutations: ReadonlyArray<MutationEvent.Any>
|
|
17
|
+
import type { Ref } from '../reactive.js'
|
|
18
|
+
import type { LiveQuery, QueryContext, ReactivityGraph } from '../reactiveQueries/base-class.js'
|
|
19
|
+
import { SynchronousDatabaseWrapper } from '../SynchronousDatabaseWrapper.js'
|
|
20
|
+
import { ReferenceCountedSet } from '../utils/data-structures.js'
|
|
21
|
+
import { downloadBlob, exposeDebugUtils } from '../utils/dev.js'
|
|
22
|
+
import { getDurationMsFromSpan } from '../utils/otel.js'
|
|
23
|
+
import type { BaseGraphQLContext, RefreshReason, StoreMutateOptions, StoreOptions, StoreOtel } from './store-types.js'
|
|
96
24
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
| {
|
|
101
|
-
// TODO rename to a more appropriate name which is framework-agnostic
|
|
102
|
-
_tag: 'react'
|
|
103
|
-
api: string
|
|
104
|
-
label?: string
|
|
105
|
-
stackInfo?: StackInfo
|
|
106
|
-
}
|
|
107
|
-
| { _tag: 'manual'; label?: string }
|
|
108
|
-
|
|
109
|
-
export type QueryDebugInfo = {
|
|
110
|
-
_tag: 'graphql' | 'sql' | 'js' | 'unknown'
|
|
111
|
-
label: string
|
|
112
|
-
query: string
|
|
113
|
-
durationMs: number
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
export type StoreOtel = {
|
|
117
|
-
tracer: otel.Tracer
|
|
118
|
-
mutationsSpanContext: otel.Context
|
|
119
|
-
queriesSpanContext: otel.Context
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
export type StoreMutateOptions = {
|
|
123
|
-
label?: string
|
|
124
|
-
skipRefresh?: boolean
|
|
125
|
-
wasSyncMessage?: boolean
|
|
126
|
-
/**
|
|
127
|
-
* When set to `false` the mutation won't be persisted in the mutation log and sync server (but still synced).
|
|
128
|
-
* This can be useful e.g. for fine-granular update events (e.g. position updates during drag & drop)
|
|
129
|
-
*
|
|
130
|
-
* @default true
|
|
131
|
-
*/
|
|
132
|
-
persisted?: boolean
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// eslint-disable-next-line unicorn/prefer-global-this
|
|
136
|
-
if (import.meta.env.DEV && typeof window !== 'undefined') {
|
|
137
|
-
// eslint-disable-next-line unicorn/prefer-global-this
|
|
138
|
-
window.__debugDownloadBlob = downloadBlob
|
|
25
|
+
if (import.meta.env.DEV) {
|
|
26
|
+
exposeDebugUtils()
|
|
139
27
|
}
|
|
140
28
|
|
|
141
29
|
export class Store<
|
|
@@ -501,6 +389,7 @@ export class Store<
|
|
|
501
389
|
|
|
502
390
|
return res
|
|
503
391
|
}
|
|
392
|
+
// #endregion mutate
|
|
504
393
|
|
|
505
394
|
/**
|
|
506
395
|
* This can be used in combination with `skipRefresh` when applying mutations.
|
|
@@ -520,6 +409,7 @@ export class Store<
|
|
|
520
409
|
)
|
|
521
410
|
}
|
|
522
411
|
|
|
412
|
+
// #region mutateWithoutRefresh
|
|
523
413
|
/**
|
|
524
414
|
* Apply a mutation to the store.
|
|
525
415
|
* Returns the tables that were affected by the event.
|
|
@@ -614,7 +504,7 @@ export class Store<
|
|
|
614
504
|
},
|
|
615
505
|
)
|
|
616
506
|
}
|
|
617
|
-
// #endregion
|
|
507
|
+
// #endregion mutateWithoutRefresh
|
|
618
508
|
|
|
619
509
|
/**
|
|
620
510
|
* Directly execute a SQL query on the Store.
|
|
@@ -657,7 +547,7 @@ export class Store<
|
|
|
657
547
|
// NOTE This is needed because when booting a Store via Effect it seems to call `toJSON` in the error path
|
|
658
548
|
toJSON = () => {
|
|
659
549
|
return {
|
|
660
|
-
_tag: 'Store',
|
|
550
|
+
_tag: 'livestore.Store',
|
|
661
551
|
reactivityGraph: this.reactivityGraph.getSnapshot({ includeResults: true }),
|
|
662
552
|
}
|
|
663
553
|
}
|
|
@@ -665,260 +555,3 @@ export class Store<
|
|
|
665
555
|
private runEffectFork = <A, E>(effect: Effect.Effect<A, E, never>) =>
|
|
666
556
|
effect.pipe(Effect.tapCauseLogPretty, FiberSet.run(this.fiberSet), Runtime.runFork(this.runtime))
|
|
667
557
|
}
|
|
668
|
-
|
|
669
|
-
export type CreateStoreOptions<TGraphQLContext extends BaseGraphQLContext, TSchema extends LiveStoreSchema> = {
|
|
670
|
-
schema: TSchema
|
|
671
|
-
adapter: Adapter
|
|
672
|
-
storeId: string
|
|
673
|
-
reactivityGraph?: ReactivityGraph
|
|
674
|
-
graphQLOptions?: GraphQLOptions<TGraphQLContext>
|
|
675
|
-
otelOptions?: Partial<OtelOptions>
|
|
676
|
-
boot?: (db: BootDb, parentSpan: otel.Span) => void | Promise<void> | Effect.Effect<void, unknown, otel.Tracer>
|
|
677
|
-
batchUpdates?: (run: () => void) => void
|
|
678
|
-
disableDevtools?: boolean
|
|
679
|
-
onBootStatus?: (status: BootStatus) => void
|
|
680
|
-
}
|
|
681
|
-
|
|
682
|
-
/** Create a new LiveStore Store */
|
|
683
|
-
export const createStorePromise = async <
|
|
684
|
-
TGraphQLContext extends BaseGraphQLContext,
|
|
685
|
-
TSchema extends LiveStoreSchema = LiveStoreSchema,
|
|
686
|
-
>({
|
|
687
|
-
signal,
|
|
688
|
-
...options
|
|
689
|
-
}: CreateStoreOptions<TGraphQLContext, TSchema> & { signal?: AbortSignal }): Promise<Store<TGraphQLContext, TSchema>> =>
|
|
690
|
-
Effect.gen(function* () {
|
|
691
|
-
const scope = yield* Scope.make()
|
|
692
|
-
const runtime = yield* Effect.runtime()
|
|
693
|
-
|
|
694
|
-
if (signal !== undefined) {
|
|
695
|
-
signal.addEventListener('abort', () => {
|
|
696
|
-
Scope.close(scope, Exit.void).pipe(Effect.tapCauseLogPretty, Runtime.runFork(runtime))
|
|
697
|
-
})
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
return yield* FiberSet.make().pipe(
|
|
701
|
-
Effect.andThen((fiberSet) => createStore({ ...options, fiberSet })),
|
|
702
|
-
Scope.extend(scope),
|
|
703
|
-
)
|
|
704
|
-
}).pipe(
|
|
705
|
-
Effect.withSpan('createStore'),
|
|
706
|
-
Effect.tapCauseLogPretty,
|
|
707
|
-
Effect.annotateLogs({ thread: 'window' }),
|
|
708
|
-
Effect.provide(Logger.pretty),
|
|
709
|
-
Logger.withMinimumLogLevel(LogLevel.Debug),
|
|
710
|
-
Effect.runPromise,
|
|
711
|
-
)
|
|
712
|
-
|
|
713
|
-
// #region createStore
|
|
714
|
-
export const createStore = <
|
|
715
|
-
TGraphQLContext extends BaseGraphQLContext,
|
|
716
|
-
TSchema extends LiveStoreSchema = LiveStoreSchema,
|
|
717
|
-
>({
|
|
718
|
-
schema,
|
|
719
|
-
adapter,
|
|
720
|
-
storeId,
|
|
721
|
-
graphQLOptions,
|
|
722
|
-
otelOptions,
|
|
723
|
-
boot,
|
|
724
|
-
reactivityGraph = globalReactivityGraph,
|
|
725
|
-
batchUpdates,
|
|
726
|
-
disableDevtools,
|
|
727
|
-
onBootStatus,
|
|
728
|
-
fiberSet,
|
|
729
|
-
}: CreateStoreOptions<TGraphQLContext, TSchema> & { fiberSet: FiberSet.FiberSet }): Effect.Effect<
|
|
730
|
-
Store<TGraphQLContext, TSchema>,
|
|
731
|
-
UnexpectedError,
|
|
732
|
-
Scope.Scope
|
|
733
|
-
> => {
|
|
734
|
-
const otelTracer = otelOptions?.tracer ?? makeNoopTracer()
|
|
735
|
-
const otelRootSpanContext = otelOptions?.rootSpanContext ?? otel.context.active()
|
|
736
|
-
|
|
737
|
-
const TracingLive = Layer.unwrapEffect(Effect.map(OtelTracer.make, Layer.setTracer)).pipe(
|
|
738
|
-
Layer.provide(Layer.sync(OtelTracer.Tracer, () => otelTracer)),
|
|
739
|
-
)
|
|
740
|
-
|
|
741
|
-
return Effect.gen(function* () {
|
|
742
|
-
const span = yield* OtelTracer.currentOtelSpan.pipe(Effect.orDie)
|
|
743
|
-
|
|
744
|
-
const bootStatusQueue = yield* Queue.unbounded<BootStatus>().pipe(Effect.acquireRelease(Queue.shutdown))
|
|
745
|
-
|
|
746
|
-
yield* Queue.take(bootStatusQueue).pipe(
|
|
747
|
-
Effect.tapSync((status) => onBootStatus?.(status)),
|
|
748
|
-
Effect.tap((status) => (status.stage === 'done' ? Queue.shutdown(bootStatusQueue) : Effect.void)),
|
|
749
|
-
Effect.forever,
|
|
750
|
-
Effect.tapCauseLogPretty,
|
|
751
|
-
Effect.forkScoped,
|
|
752
|
-
)
|
|
753
|
-
|
|
754
|
-
const storeDeferred = yield* Deferred.make<Store>()
|
|
755
|
-
|
|
756
|
-
const connectDevtoolsToStore_ = (storeDevtoolsChannel: StoreDevtoolsChannel) =>
|
|
757
|
-
Effect.gen(function* () {
|
|
758
|
-
const store = yield* Deferred.await(storeDeferred)
|
|
759
|
-
yield* connectDevtoolsToStore({ storeDevtoolsChannel, store })
|
|
760
|
-
})
|
|
761
|
-
|
|
762
|
-
const runtime = yield* Effect.runtime<Scope.Scope>()
|
|
763
|
-
|
|
764
|
-
const runEffectFork = (effect: Effect.Effect<any, any, never>) =>
|
|
765
|
-
effect.pipe(Effect.tapCauseLogPretty, FiberSet.run(fiberSet), Runtime.runFork(runtime))
|
|
766
|
-
|
|
767
|
-
// TODO close parent scope? (Needs refactor with Mike A)
|
|
768
|
-
const shutdown = (cause: Cause.Cause<UnexpectedError | IntentionalShutdownCause>) =>
|
|
769
|
-
Effect.gen(function* () {
|
|
770
|
-
// NOTE we're calling `cause.toString()` here to avoid triggering a `console.error` in the grouped log
|
|
771
|
-
const logCause =
|
|
772
|
-
Cause.isFailType(cause) && cause.error._tag === 'LiveStore.IntentionalShutdownCause'
|
|
773
|
-
? cause.toString()
|
|
774
|
-
: cause
|
|
775
|
-
yield* Effect.logDebug(`Shutting down LiveStore`, logCause)
|
|
776
|
-
|
|
777
|
-
FiberSet.clear(fiberSet).pipe(
|
|
778
|
-
Effect.andThen(() => FiberSet.run(fiberSet, Effect.failCause(cause))),
|
|
779
|
-
Effect.timeout(Duration.seconds(1)),
|
|
780
|
-
Effect.logWarnIfTakesLongerThan({ label: '@livestore/livestore:shutdown:clear-fiber-set', duration: 500 }),
|
|
781
|
-
Effect.catchTag('TimeoutException', (err) =>
|
|
782
|
-
Effect.logError('Store shutdown timed out. Forcing shutdown.', err).pipe(
|
|
783
|
-
Effect.andThen(FiberSet.run(fiberSet, Effect.failCause(cause))),
|
|
784
|
-
),
|
|
785
|
-
),
|
|
786
|
-
Runtime.runFork(runtime), // NOTE we need to fork this separately otherwise it will also be interrupted
|
|
787
|
-
)
|
|
788
|
-
}).pipe(Effect.withSpan('livestore:shutdown'))
|
|
789
|
-
|
|
790
|
-
const clientSession: ClientSession = yield* adapter({
|
|
791
|
-
schema,
|
|
792
|
-
storeId,
|
|
793
|
-
devtoolsEnabled: disableDevtools !== true,
|
|
794
|
-
bootStatusQueue,
|
|
795
|
-
shutdown,
|
|
796
|
-
connectDevtoolsToStore: connectDevtoolsToStore_,
|
|
797
|
-
}).pipe(Effect.withPerformanceMeasure('livestore:makeAdapter'), Effect.withSpan('createStore:makeAdapter'))
|
|
798
|
-
|
|
799
|
-
const mutationEventSchema = makeMutationEventSchemaMemo(schema)
|
|
800
|
-
|
|
801
|
-
// TODO get rid of this
|
|
802
|
-
// const __processedMutationIds = new Set<number>()
|
|
803
|
-
|
|
804
|
-
const currentMutationEventIdRef = { current: yield* clientSession.coordinator.getCurrentMutationEventId }
|
|
805
|
-
|
|
806
|
-
// TODO fill up with unsynced mutation events from the coordinator
|
|
807
|
-
const unsyncedMutationEvents = MutableHashMap.empty<EventId, MutationEvent.ForSchema<TSchema>>()
|
|
808
|
-
|
|
809
|
-
// TODO consider moving booting into the storage backend
|
|
810
|
-
if (boot !== undefined) {
|
|
811
|
-
let isInTxn = false
|
|
812
|
-
let txnExecuteStmnts: [string, PreparedBindValues | undefined][] = []
|
|
813
|
-
|
|
814
|
-
const bootDbImpl: BootDb = {
|
|
815
|
-
_tag: 'BootDb',
|
|
816
|
-
execute: (queryStr, bindValues) => {
|
|
817
|
-
const stmt = clientSession.syncDb.prepare(queryStr)
|
|
818
|
-
stmt.execute(bindValues)
|
|
819
|
-
|
|
820
|
-
if (isInTxn === true) {
|
|
821
|
-
txnExecuteStmnts.push([queryStr, bindValues])
|
|
822
|
-
} else {
|
|
823
|
-
clientSession.coordinator.execute(queryStr, bindValues).pipe(runEffectFork)
|
|
824
|
-
}
|
|
825
|
-
},
|
|
826
|
-
mutate: (...list) => {
|
|
827
|
-
for (const mutationEventDecoded_ of list) {
|
|
828
|
-
const mutationDef =
|
|
829
|
-
schema.mutations.get(mutationEventDecoded_.mutation) ??
|
|
830
|
-
shouldNeverHappen(`Unknown mutation type: ${mutationEventDecoded_.mutation}`)
|
|
831
|
-
|
|
832
|
-
const { id, parentId } = clientSession.coordinator
|
|
833
|
-
.nextMutationEventIdPair({ localOnly: mutationDef.options.localOnly })
|
|
834
|
-
.pipe(Effect.runSync)
|
|
835
|
-
|
|
836
|
-
currentMutationEventIdRef.current = id
|
|
837
|
-
|
|
838
|
-
const mutationEventDecoded = { ...mutationEventDecoded_, id, parentId }
|
|
839
|
-
|
|
840
|
-
replaceSessionIdSymbol(mutationEventDecoded.args, clientSession.coordinator.sessionId)
|
|
841
|
-
|
|
842
|
-
MutableHashMap.set(unsyncedMutationEvents, Data.struct(mutationEventDecoded.id), mutationEventDecoded)
|
|
843
|
-
|
|
844
|
-
// __processedMutationIds.add(mutationEventDecoded.id.global)
|
|
845
|
-
|
|
846
|
-
const execArgsArr = getExecArgsFromMutation({ mutationDef, mutationEventDecoded })
|
|
847
|
-
// const { bindValues, statementSql } = getExecArgsFromMutation({ mutationDef, mutationEventDecoded })
|
|
848
|
-
|
|
849
|
-
for (const { statementSql, bindValues } of execArgsArr) {
|
|
850
|
-
clientSession.syncDb.execute(statementSql, bindValues)
|
|
851
|
-
}
|
|
852
|
-
|
|
853
|
-
const mutationEventEncoded = Schema.encodeUnknownSync(mutationEventSchema)(mutationEventDecoded)
|
|
854
|
-
|
|
855
|
-
clientSession.coordinator
|
|
856
|
-
.mutate(mutationEventEncoded as MutationEvent.AnyEncoded, { persisted: true })
|
|
857
|
-
.pipe(runEffectFork)
|
|
858
|
-
}
|
|
859
|
-
},
|
|
860
|
-
select: (queryStr, bindValues) => {
|
|
861
|
-
const stmt = clientSession.syncDb.prepare(queryStr)
|
|
862
|
-
return stmt.select(bindValues)
|
|
863
|
-
},
|
|
864
|
-
txn: (callback) => {
|
|
865
|
-
try {
|
|
866
|
-
isInTxn = true
|
|
867
|
-
// clientSession.syncDb.execute('BEGIN TRANSACTION', undefined)
|
|
868
|
-
|
|
869
|
-
callback()
|
|
870
|
-
|
|
871
|
-
// clientSession.syncDb.execute('COMMIT', undefined)
|
|
872
|
-
|
|
873
|
-
// clientSession.coordinator.execute('BEGIN', undefined, undefined)
|
|
874
|
-
for (const [queryStr, bindValues] of txnExecuteStmnts) {
|
|
875
|
-
clientSession.coordinator.execute(queryStr, bindValues).pipe(runEffectFork)
|
|
876
|
-
}
|
|
877
|
-
// clientSession.coordinator.execute('COMMIT', undefined, undefined)
|
|
878
|
-
} catch (e: any) {
|
|
879
|
-
// clientSession.syncDb.execute('ROLLBACK', undefined)
|
|
880
|
-
throw e
|
|
881
|
-
} finally {
|
|
882
|
-
isInTxn = false
|
|
883
|
-
txnExecuteStmnts = []
|
|
884
|
-
}
|
|
885
|
-
},
|
|
886
|
-
}
|
|
887
|
-
|
|
888
|
-
yield* Effect.tryAll(() => boot(bootDbImpl, span)).pipe(
|
|
889
|
-
UnexpectedError.mapToUnexpectedError,
|
|
890
|
-
Effect.withSpan('createStore:boot'),
|
|
891
|
-
)
|
|
892
|
-
}
|
|
893
|
-
|
|
894
|
-
const store = Store.createStore<TGraphQLContext, TSchema>(
|
|
895
|
-
{
|
|
896
|
-
clientSession,
|
|
897
|
-
schema,
|
|
898
|
-
graphQLOptions,
|
|
899
|
-
otelOptions: { tracer: otelTracer, rootSpanContext: otelRootSpanContext },
|
|
900
|
-
reactivityGraph,
|
|
901
|
-
disableDevtools,
|
|
902
|
-
currentMutationEventIdRef,
|
|
903
|
-
unsyncedMutationEvents,
|
|
904
|
-
fiberSet,
|
|
905
|
-
runtime,
|
|
906
|
-
batchUpdates: batchUpdates ?? ((run) => run()),
|
|
907
|
-
storeId,
|
|
908
|
-
},
|
|
909
|
-
span,
|
|
910
|
-
)
|
|
911
|
-
|
|
912
|
-
yield* Deferred.succeed(storeDeferred, store as any as Store)
|
|
913
|
-
|
|
914
|
-
return store
|
|
915
|
-
}).pipe(
|
|
916
|
-
Effect.withSpan('createStore', {
|
|
917
|
-
parent: otelOptions?.rootSpanContext
|
|
918
|
-
? OtelTracer.makeExternalSpan(otel.trace.getSpanContext(otelOptions.rootSpanContext)!)
|
|
919
|
-
: undefined,
|
|
920
|
-
}),
|
|
921
|
-
Effect.provide(TracingLive),
|
|
922
|
-
)
|
|
923
|
-
}
|
|
924
|
-
// #endregion createStore
|
package/src/utils/dev.ts
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"js.d.ts","sourceRoot":"","sources":["../../src/reactiveQueries/js.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAIjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC9F,OAAO,EAAE,kBAAkB,EAAqB,MAAM,iBAAiB,CAAA;AAEvE,eAAO,MAAM,QAAQ,GAAI,OAAO,EAAE,UAAU,SAAS,SAAS,sBACxD,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,YACzB;IACR,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,SAAS,CAAC,EAAE,UAAU,CAAA;CACvB,KACA,SAAS,CAAC,OAAO,EAAE,UAAU,CAM5B,CAAA;AAEJ,qBAAa,gBAAgB,CAAC,OAAO,EAAE,UAAU,SAAS,SAAS,GAAG,aAAa,CAAE,SAAQ,kBAAkB,CAC7G,OAAO,EACP,UAAU,CACX;IACC,IAAI,EAAE,IAAI,CAAO;IAEjB,sDAAsD;IACtD,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,CAAC,CAAA;IAErD,KAAK,EAAE,MAAM,CAAA;IAEb,SAAS,CAAC,eAAe,EAAE,eAAe,CAAA;IAE1C,SAAS,EAAE,UAAU,CAAA;IAErB;;;;;OAKG;IACH,OAAO,CAAC,SAAS,CAA0B;gBAE/B,EACV,EAAE,EACF,KAAK,EACL,SAAS,EACT,eAAe,EACf,SAAS,GACV,EAAE;QACD,KAAK,EAAE,MAAM,CAAA;QACb,EAAE,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAA;QACnC,oEAAoE;QACpE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;QACtB,eAAe,CAAC,EAAE,eAAe,CAAA;QACjC,SAAS,CAAC,EAAE,UAAU,CAAA;KACvB;IA0CD,OAAO,aAGN;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"js.js","sourceRoot":"","sources":["../../src/reactiveQueries/js.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAG1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEvE,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,EAAmC,EACnC,OAIC,EAC+B,EAAE,CAClC,IAAI,gBAAgB,CAAsB;IACxC,EAAE;IACF,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,QAAQ,EAAE;IACtC,eAAe,EAAE,OAAO,EAAE,eAAe;IACzC,SAAS,EAAE,OAAO,EAAE,SAAS;CAC9B,CAAC,CAAA;AAEJ,MAAM,OAAO,gBAAwE,SAAQ,kBAG5F;IACC,IAAI,GAAS,IAAI,CAAA;IAEjB,sDAAsD;IACtD,QAAQ,CAA6C;IAErD,KAAK,CAAQ;IAEH,eAAe,CAAiB;IAE1C,SAAS,CAAY;IAErB;;;;;OAKG;IACK,SAAS,CAA0B;IAE3C,YAAY,EACV,EAAE,EACF,KAAK,EACL,SAAS,EACT,eAAe,EACf,SAAS,GAQV;QACC,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAElB,IAAI,CAAC,eAAe,GAAG,eAAe,IAAI,qBAAqB,CAAA;QAC/D,IAAI,CAAC,SAAS,GAAG,SAAS,IAAK,EAAE,IAAI,EAAE,MAAM,EAAiB,CAAA;QAE9D,MAAM,UAAU,GAAG,GAAG,KAAK,UAAU,CAAA;QAErC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAC5C,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,WAAW,EAAE,EAAE,CAClE,UAAU,CAAC,eAAe,CAAC,MAAM,KAAK,EAAE,EAAE,EAAE,EAAE,WAAW,IAAI,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE;YACrF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAA;YACnE,MAAM,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAA;YAEnD,IAAI,CAAC,GAAG,EAAE,CAAA;YAEV,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;YAE9C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAEpC,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;YAErE,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,EACJ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,EAAE,CACjE,CAAA;IACH,CAAC;IAED,qFAAqF;IACrF,2BAA2B;IAC3B,qBAAqB;IACrB,2CAA2C;IAC3C,gCAAgC;IAChC,SAAS;IACT,iCAAiC;IACjC,uCAAuC;IACvC,6CAA6C;IAC7C,OAAO;IAEP,OAAO,GAAG,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC/C,IAAI,CAAC,SAAS,EAAE,EAAE,CAAA;IACpB,CAAC,CAAA;CACF"}
|
package/dist/store-context.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { IntentionalShutdownCause, UnexpectedError } from '@livestore/common';
|
|
2
|
-
import { Schema } from '@livestore/utils/effect';
|
|
3
|
-
import type { Store } from './store.js';
|
|
4
|
-
export type LiveStoreContext = LiveStoreContextRunning | {
|
|
5
|
-
stage: 'error';
|
|
6
|
-
error: UnexpectedError | unknown;
|
|
7
|
-
} | {
|
|
8
|
-
stage: 'shutdown';
|
|
9
|
-
cause: IntentionalShutdownCause | StoreAbort;
|
|
10
|
-
};
|
|
11
|
-
declare const StoreAbort_base: Schema.TaggedErrorClass<StoreAbort, "LiveStore.StoreAbort", {
|
|
12
|
-
readonly _tag: Schema.tag<"LiveStore.StoreAbort">;
|
|
13
|
-
}>;
|
|
14
|
-
export declare class StoreAbort extends StoreAbort_base {
|
|
15
|
-
}
|
|
16
|
-
declare const StoreInterrupted_base: Schema.TaggedErrorClass<StoreInterrupted, "LiveStore.StoreInterrupted", {
|
|
17
|
-
readonly _tag: Schema.tag<"LiveStore.StoreInterrupted">;
|
|
18
|
-
}>;
|
|
19
|
-
export declare class StoreInterrupted extends StoreInterrupted_base {
|
|
20
|
-
}
|
|
21
|
-
export type LiveStoreContextRunning = {
|
|
22
|
-
stage: 'running';
|
|
23
|
-
store: Store;
|
|
24
|
-
};
|
|
25
|
-
export {};
|
|
26
|
-
//# sourceMappingURL=store-context.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store-context.d.ts","sourceRoot":"","sources":["../src/store-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC,MAAM,MAAM,gBAAgB,GACxB,uBAAuB,GACvB;IACE,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,eAAe,GAAG,OAAO,CAAA;CACjC,GACD;IACE,KAAK,EAAE,UAAU,CAAA;IACjB,KAAK,EAAE,wBAAwB,GAAG,UAAU,CAAA;CAC7C,CAAA;;;;AAEL,qBAAa,UAAW,SAAQ,eAA4D;CAAG;;;;AAC/F,qBAAa,gBAAiB,SAAQ,qBAAwE;CAAG;AAEjH,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,KAAK,CAAA;CACb,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store-context.js","sourceRoot":"","sources":["../src/store-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAehD,MAAM,OAAO,UAAW,SAAQ,MAAM,CAAC,WAAW,EAAc,CAAC,sBAAsB,EAAE,EAAE,CAAC;CAAG;AAC/F,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAAC,4BAA4B,EAAE,EAAE,CAAC;CAAG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store-devtools.d.ts","sourceRoot":"","sources":["../src/store-devtools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,mBAAmB,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAoB,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAE/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,MAAM,EAAU,MAAM,yBAAyB,CAAA;AAGxD,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAA;AAEjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAErE,KAAK,MAAM,GAAG;IACZ,aAAa,EAAE,aAAa,CAAA;IAC5B,eAAe,EAAE,eAAe,CAAA;IAChC,aAAa,EAAE,0BAA0B,CAAA;IACzC,aAAa,EAAE,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;CACnD,CAAA;AAMD,eAAO,MAAM,sBAAsB,qCAGhC;IACD,oBAAoB,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,qBAAqB,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAA;IAC7G,KAAK,EAAE,MAAM,CAAA;CACd,uEA2LsG,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store-devtools.js","sourceRoot":"","sources":["../src/store-devtools.ts"],"names":[],"mappings":"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"}
|