@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.
Files changed (70) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/effect/LiveStore.d.ts +1 -2
  3. package/dist/effect/LiveStore.d.ts.map +1 -1
  4. package/dist/effect/LiveStore.js +1 -1
  5. package/dist/effect/LiveStore.js.map +1 -1
  6. package/dist/index.d.ts +5 -4
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +4 -3
  9. package/dist/index.js.map +1 -1
  10. package/dist/reactiveQueries/base-class.d.ts +4 -3
  11. package/dist/reactiveQueries/base-class.d.ts.map +1 -1
  12. package/dist/reactiveQueries/base-class.js.map +1 -1
  13. package/dist/reactiveQueries/{js.d.ts → computed.d.ts} +3 -3
  14. package/dist/reactiveQueries/computed.d.ts.map +1 -0
  15. package/dist/reactiveQueries/{js.js → computed.js} +3 -3
  16. package/dist/reactiveQueries/computed.js.map +1 -0
  17. package/dist/reactiveQueries/graphql.d.ts +2 -1
  18. package/dist/reactiveQueries/graphql.d.ts.map +1 -1
  19. package/dist/reactiveQueries/graphql.js.map +1 -1
  20. package/dist/reactiveQueries/sql.d.ts +1 -1
  21. package/dist/reactiveQueries/sql.d.ts.map +1 -1
  22. package/dist/reactiveQueries/sql.js +1 -1
  23. package/dist/reactiveQueries/sql.js.map +1 -1
  24. package/dist/row-query.js +1 -1
  25. package/dist/row-query.js.map +1 -1
  26. package/dist/store/create-store.d.ts +28 -0
  27. package/dist/store/create-store.d.ts.map +1 -0
  28. package/dist/store/create-store.js +149 -0
  29. package/dist/store/create-store.js.map +1 -0
  30. package/dist/{store-devtools.d.ts → store/devtools.d.ts} +4 -4
  31. package/dist/store/devtools.d.ts.map +1 -0
  32. package/dist/{store-devtools.js → store/devtools.js} +3 -3
  33. package/dist/store/devtools.js.map +1 -0
  34. package/dist/store/store-types.d.ts +101 -0
  35. package/dist/store/store-types.d.ts.map +1 -0
  36. package/dist/{store-context.js → store/store-types.js} +1 -1
  37. package/dist/store/store-types.js.map +1 -0
  38. package/dist/store/store.d.ts +88 -0
  39. package/dist/store/store.d.ts.map +1 -0
  40. package/dist/{store.js → store/store.js} +13 -155
  41. package/dist/store/store.js.map +1 -0
  42. package/dist/utils/dev.d.ts +1 -0
  43. package/dist/utils/dev.d.ts.map +1 -1
  44. package/dist/utils/dev.js +5 -0
  45. package/dist/utils/dev.js.map +1 -1
  46. package/package.json +6 -5
  47. package/src/ambient.d.ts +3 -1
  48. package/src/effect/LiveStore.ts +2 -3
  49. package/src/index.ts +5 -5
  50. package/src/reactiveQueries/base-class.ts +4 -3
  51. package/src/reactiveQueries/{js.ts → computed.ts} +3 -3
  52. package/src/reactiveQueries/graphql.ts +2 -1
  53. package/src/reactiveQueries/sql.ts +2 -2
  54. package/src/row-query.ts +2 -2
  55. package/src/store/create-store.ts +296 -0
  56. package/src/{store-devtools.ts → store/devtools.ts} +5 -5
  57. package/src/store/store-types.ts +111 -0
  58. package/src/{store.ts → store/store.ts} +18 -385
  59. package/src/utils/dev.ts +6 -0
  60. package/dist/reactiveQueries/js.d.ts.map +0 -1
  61. package/dist/reactiveQueries/js.js.map +0 -1
  62. package/dist/store-context.d.ts +0 -26
  63. package/dist/store-context.d.ts.map +0 -1
  64. package/dist/store-context.js.map +0 -1
  65. package/dist/store-devtools.d.ts.map +0 -1
  66. package/dist/store-devtools.js.map +0 -1
  67. package/dist/store.d.ts +0 -175
  68. package/dist/store.d.ts.map +0 -1
  69. package/dist/store.js.map +0 -1
  70. package/src/store-context.ts +0 -23
@@ -1,15 +1,5 @@
1
- import type {
2
- Adapter,
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, makeNoopTracer, shouldNeverHappen } from '@livestore/utils'
22
- import {
23
- Cause,
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 { globalReactivityGraph } from './global-state.js'
46
- import type { DebugRefreshReasonBase, Ref } from './reactive.js'
47
- import type { LiveQuery, QueryContext, ReactivityGraph } from './reactiveQueries/base-class.js'
48
- import { connectDevtoolsToStore } from './store-devtools.js'
49
- import { SynchronousDatabaseWrapper } from './SynchronousDatabaseWrapper.js'
50
- import { ReferenceCountedSet } from './utils/data-structures.js'
51
- import { downloadBlob } from './utils/dev.js'
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
- /** The tables that were written to by the event */
98
- writeTables: ReadonlyArray<string>
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 mutate
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
@@ -22,3 +22,9 @@ export const downloadURL = (data: string, fileName: string) => {
22
22
  a.click()
23
23
  a.remove()
24
24
  }
25
+
26
+ export const exposeDebugUtils = () => {
27
+ if (import.meta.env.DEV) {
28
+ globalThis.__debugDownloadBlob = downloadBlob
29
+ }
30
+ }
@@ -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"}
@@ -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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"}