@livestore/livestore 0.0.9 → 0.0.12
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/package.json +7 -7
- package/src/__tests__/react/fixture.tsx +1 -13
- package/src/__tests__/reactive.test.ts +39 -0
- package/src/inMemoryDatabase.ts +5 -5
- package/src/react/useGraphQL.ts +6 -7
- package/src/react/useLiveStoreComponent.ts +38 -48
- package/src/reactive.ts +12 -11
- package/src/reactiveQueries/graphql.ts +5 -3
- package/src/reactiveQueries/js.ts +1 -3
- package/src/reactiveQueries/sql.ts +6 -6
- package/src/store.ts +45 -31
- package/dist/.tsbuildinfo +0 -1
- package/dist/QueryCache.d.ts +0 -20
- package/dist/QueryCache.d.ts.map +0 -1
- package/dist/QueryCache.js +0 -71
- package/dist/QueryCache.js.map +0 -1
- package/dist/__tests__/react/fixture.d.ts +0 -141
- package/dist/__tests__/react/fixture.d.ts.map +0 -1
- package/dist/__tests__/react/fixture.js +0 -72
- package/dist/__tests__/react/fixture.js.map +0 -1
- package/dist/__tests__/react/useLiveStoreComponent.test.d.ts +0 -2
- package/dist/__tests__/react/useLiveStoreComponent.test.d.ts.map +0 -1
- package/dist/__tests__/react/useLiveStoreComponent.test.js +0 -78
- package/dist/__tests__/react/useLiveStoreComponent.test.js.map +0 -1
- package/dist/__tests__/reactive.test.d.ts +0 -2
- package/dist/__tests__/reactive.test.d.ts.map +0 -1
- package/dist/__tests__/reactive.test.js +0 -167
- package/dist/__tests__/reactive.test.js.map +0 -1
- package/dist/backends/base.d.ts +0 -13
- package/dist/backends/base.d.ts.map +0 -1
- package/dist/backends/base.js +0 -53
- package/dist/backends/base.js.map +0 -1
- package/dist/backends/index.d.ts +0 -45
- package/dist/backends/index.d.ts.map +0 -1
- package/dist/backends/index.js +0 -38
- package/dist/backends/index.js.map +0 -1
- package/dist/backends/noop.d.ts +0 -18
- package/dist/backends/noop.d.ts.map +0 -1
- package/dist/backends/noop.js +0 -21
- package/dist/backends/noop.js.map +0 -1
- package/dist/backends/tauri.d.ts +0 -22
- package/dist/backends/tauri.d.ts.map +0 -1
- package/dist/backends/tauri.js +0 -48
- package/dist/backends/tauri.js.map +0 -1
- package/dist/backends/utils/idb.d.ts +0 -10
- package/dist/backends/utils/idb.d.ts.map +0 -1
- package/dist/backends/utils/idb.js +0 -58
- package/dist/backends/utils/idb.js.map +0 -1
- package/dist/backends/web-in-memory.d.ts +0 -22
- package/dist/backends/web-in-memory.d.ts.map +0 -1
- package/dist/backends/web-in-memory.js +0 -45
- package/dist/backends/web-in-memory.js.map +0 -1
- package/dist/backends/web-worker.d.ts +0 -17
- package/dist/backends/web-worker.d.ts.map +0 -1
- package/dist/backends/web-worker.js +0 -139
- package/dist/backends/web-worker.js.map +0 -1
- package/dist/backends/web.d.ts +0 -27
- package/dist/backends/web.d.ts.map +0 -1
- package/dist/backends/web.js +0 -63
- package/dist/backends/web.js.map +0 -1
- package/dist/bounded-collections.d.ts +0 -34
- package/dist/bounded-collections.d.ts.map +0 -1
- package/dist/bounded-collections.js +0 -103
- package/dist/bounded-collections.js.map +0 -1
- package/dist/componentKey.d.ts +0 -20
- package/dist/componentKey.d.ts.map +0 -1
- package/dist/componentKey.js +0 -3
- package/dist/componentKey.js.map +0 -1
- package/dist/effect/LiveStore.d.ts +0 -42
- package/dist/effect/LiveStore.d.ts.map +0 -1
- package/dist/effect/LiveStore.js +0 -40
- package/dist/effect/LiveStore.js.map +0 -1
- package/dist/effect/index.d.ts +0 -2
- package/dist/effect/index.d.ts.map +0 -1
- package/dist/effect/index.js +0 -2
- package/dist/effect/index.js.map +0 -1
- package/dist/events.d.ts +0 -7
- package/dist/events.d.ts.map +0 -1
- package/dist/events.js +0 -2
- package/dist/events.js.map +0 -1
- package/dist/inMemoryDatabase.d.ts +0 -65
- package/dist/inMemoryDatabase.d.ts.map +0 -1
- package/dist/inMemoryDatabase.js +0 -241
- package/dist/inMemoryDatabase.js.map +0 -1
- package/dist/index.d.ts +0 -20
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -10
- package/dist/index.js.map +0 -1
- package/dist/otel.d.ts +0 -5
- package/dist/otel.d.ts.map +0 -1
- package/dist/otel.js +0 -17
- package/dist/otel.js.map +0 -1
- package/dist/react/LiveStoreContext.d.ts +0 -11
- package/dist/react/LiveStoreContext.d.ts.map +0 -1
- package/dist/react/LiveStoreContext.js +0 -10
- package/dist/react/LiveStoreContext.js.map +0 -1
- package/dist/react/LiveStoreProvider.d.ts +0 -21
- package/dist/react/LiveStoreProvider.d.ts.map +0 -1
- package/dist/react/LiveStoreProvider.js +0 -48
- package/dist/react/LiveStoreProvider.js.map +0 -1
- package/dist/react/index.d.ts +0 -7
- package/dist/react/index.d.ts.map +0 -1
- package/dist/react/index.js +0 -6
- package/dist/react/index.js.map +0 -1
- package/dist/react/useGlobalQuery.d.ts +0 -3
- package/dist/react/useGlobalQuery.d.ts.map +0 -1
- package/dist/react/useGlobalQuery.js +0 -25
- package/dist/react/useGlobalQuery.js.map +0 -1
- package/dist/react/useGraphQL.d.ts +0 -11
- package/dist/react/useGraphQL.d.ts.map +0 -1
- package/dist/react/useGraphQL.js +0 -68
- package/dist/react/useGraphQL.js.map +0 -1
- package/dist/react/useLiveStoreComponent.d.ts +0 -70
- package/dist/react/useLiveStoreComponent.d.ts.map +0 -1
- package/dist/react/useLiveStoreComponent.js +0 -261
- package/dist/react/useLiveStoreComponent.js.map +0 -1
- package/dist/react/utils/useStateRefWithReactiveInput.d.ts +0 -13
- package/dist/react/utils/useStateRefWithReactiveInput.d.ts.map +0 -1
- package/dist/react/utils/useStateRefWithReactiveInput.js +0 -38
- package/dist/react/utils/useStateRefWithReactiveInput.js.map +0 -1
- package/dist/reactive.d.ts +0 -140
- package/dist/reactive.d.ts.map +0 -1
- package/dist/reactive.js +0 -301
- package/dist/reactive.js.map +0 -1
- package/dist/reactiveQueries/base-class.d.ts +0 -24
- package/dist/reactiveQueries/base-class.d.ts.map +0 -1
- package/dist/reactiveQueries/base-class.js +0 -22
- package/dist/reactiveQueries/base-class.js.map +0 -1
- package/dist/reactiveQueries/graphql.d.ts +0 -25
- package/dist/reactiveQueries/graphql.d.ts.map +0 -1
- package/dist/reactiveQueries/graphql.js +0 -14
- package/dist/reactiveQueries/graphql.js.map +0 -1
- package/dist/reactiveQueries/js.d.ts +0 -19
- package/dist/reactiveQueries/js.d.ts.map +0 -1
- package/dist/reactiveQueries/js.js +0 -13
- package/dist/reactiveQueries/js.js.map +0 -1
- package/dist/reactiveQueries/sql.d.ts +0 -31
- package/dist/reactiveQueries/sql.d.ts.map +0 -1
- package/dist/reactiveQueries/sql.js +0 -28
- package/dist/reactiveQueries/sql.js.map +0 -1
- package/dist/schema.d.ts +0 -163
- package/dist/schema.d.ts.map +0 -1
- package/dist/schema.js +0 -92
- package/dist/schema.js.map +0 -1
- package/dist/store.d.ts +0 -175
- package/dist/store.d.ts.map +0 -1
- package/dist/store.js +0 -549
- package/dist/store.js.map +0 -1
- package/dist/util.d.ts +0 -24
- package/dist/util.d.ts.map +0 -1
- package/dist/util.js +0 -51
- package/dist/util.js.map +0 -1
package/src/store.ts
CHANGED
|
@@ -32,7 +32,7 @@ export type LiveStoreQuery<TResult extends Record<string, any> = any> =
|
|
|
32
32
|
export type BaseGraphQLContext = {
|
|
33
33
|
queriedTables: Set<string>
|
|
34
34
|
/** Needed by Pothos Otel plugin for resolver tracing to work */
|
|
35
|
-
|
|
35
|
+
otelContext?: otel.Context
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export const RESET_DB_LOCAL_STORAGE_KEY = 'livestore-reset'
|
|
@@ -124,6 +124,7 @@ export class Store<TGraphQLContext extends BaseGraphQLContext> {
|
|
|
124
124
|
}: StoreOptions<TGraphQLContext>) {
|
|
125
125
|
this.inMemoryDB = db
|
|
126
126
|
this.graph = new ReactiveGraph({
|
|
127
|
+
// TODO move this into React module
|
|
127
128
|
// Do all our updates inside a single React setState batch to avoid multiple UI re-renders
|
|
128
129
|
effectsWrapper: (run) => ReactDOM.unstable_batchedUpdates(() => run()),
|
|
129
130
|
otelTracer,
|
|
@@ -186,21 +187,30 @@ export class Store<TGraphQLContext extends BaseGraphQLContext> {
|
|
|
186
187
|
*/
|
|
187
188
|
querySQL = <TResult>(
|
|
188
189
|
genQueryString: (get: GetAtom) => string,
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
190
|
+
{
|
|
191
|
+
queriedTables,
|
|
192
|
+
bindValues,
|
|
193
|
+
componentKey,
|
|
194
|
+
label,
|
|
195
|
+
otelContext = otel.context.active(),
|
|
196
|
+
}: {
|
|
197
|
+
/**
|
|
198
|
+
* List of tables that are queried in this query;
|
|
199
|
+
* used to determine reactive dependencies.
|
|
200
|
+
*
|
|
201
|
+
* NOTE In the future we want to auto-generate this via parsing the query
|
|
202
|
+
*/
|
|
203
|
+
queriedTables: string[]
|
|
204
|
+
bindValues?: Bindable | undefined
|
|
205
|
+
componentKey?: ComponentKey | undefined
|
|
206
|
+
label?: string | undefined
|
|
207
|
+
otelContext?: otel.Context
|
|
208
|
+
},
|
|
199
209
|
): LiveStoreSQLQuery<TResult> =>
|
|
200
210
|
this.otel.tracer.startActiveSpan(
|
|
201
211
|
'querySQL', // NOTE span name will be overridden further down
|
|
202
212
|
{ attributes: { label } },
|
|
203
|
-
|
|
213
|
+
otelContext,
|
|
204
214
|
(span) => {
|
|
205
215
|
const otelContext = otel.trace.setSpan(otel.context.active(), span)
|
|
206
216
|
|
|
@@ -240,11 +250,7 @@ export class Store<TGraphQLContext extends BaseGraphQLContext> {
|
|
|
240
250
|
span.setAttribute('sql.query', sqlString)
|
|
241
251
|
span.updateName(`sql:${sqlString.slice(0, 50)}`)
|
|
242
252
|
|
|
243
|
-
const results = this.inMemoryDB.select(sqlString, {
|
|
244
|
-
queriedTables,
|
|
245
|
-
bindValues,
|
|
246
|
-
parentSpanContext: otelContext,
|
|
247
|
-
})
|
|
253
|
+
const results = this.inMemoryDB.select(sqlString, { queriedTables, bindValues, otelContext })
|
|
248
254
|
|
|
249
255
|
span.setAttribute('sql.rowsCount', results.length)
|
|
250
256
|
addDebugInfo({ _tag: 'sql', label: label ?? '', query: sqlString })
|
|
@@ -282,11 +288,13 @@ export class Store<TGraphQLContext extends BaseGraphQLContext> {
|
|
|
282
288
|
|
|
283
289
|
queryJS = <TResult>(
|
|
284
290
|
genResults: (get: GetAtom) => TResult,
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
291
|
+
{
|
|
292
|
+
componentKey = globalComponentKey,
|
|
293
|
+
label = `js${uniqueId()}`,
|
|
294
|
+
otelContext = otel.context.active(),
|
|
295
|
+
}: { componentKey?: ComponentKey; label?: string; otelContext?: otel.Context },
|
|
288
296
|
): LiveStoreJSQuery<TResult> =>
|
|
289
|
-
this.otel.tracer.startActiveSpan(`queryJS:${label}`, { attributes: { label } },
|
|
297
|
+
this.otel.tracer.startActiveSpan(`queryJS:${label}`, { attributes: { label } }, otelContext, (span) => {
|
|
290
298
|
const otelContext = otel.trace.setSpan(otel.context.active(), span)
|
|
291
299
|
const queryLabel = `${label}:results` + (this.temporaryQueries ? ':temp' : '')
|
|
292
300
|
const results$ = this.graph.makeThunk(
|
|
@@ -320,13 +328,20 @@ export class Store<TGraphQLContext extends BaseGraphQLContext> {
|
|
|
320
328
|
queryGraphQL = <TResult extends Record<string, any>, TVariableValues extends Record<string, any>>(
|
|
321
329
|
document: DocumentNode<TResult, TVariableValues>,
|
|
322
330
|
genVariableValues: (get: GetAtom) => TVariableValues,
|
|
323
|
-
{
|
|
324
|
-
|
|
331
|
+
{
|
|
332
|
+
componentKey,
|
|
333
|
+
label,
|
|
334
|
+
otelContext = otel.context.active(),
|
|
335
|
+
}: {
|
|
336
|
+
componentKey: ComponentKey
|
|
337
|
+
label?: string
|
|
338
|
+
otelContext?: otel.Context
|
|
339
|
+
},
|
|
325
340
|
): LiveStoreGraphQLQuery<TResult, TVariableValues, TGraphQLContext> =>
|
|
326
341
|
this.otel.tracer.startActiveSpan(
|
|
327
|
-
`queryGraphQL
|
|
342
|
+
`queryGraphQL:`, // NOTE span name will be overridden further down
|
|
328
343
|
{},
|
|
329
|
-
|
|
344
|
+
otelContext,
|
|
330
345
|
(span) => {
|
|
331
346
|
const otelContext = otel.trace.setSpan(otel.context.active(), span)
|
|
332
347
|
|
|
@@ -390,25 +405,24 @@ export class Store<TGraphQLContext extends BaseGraphQLContext> {
|
|
|
390
405
|
queryGraphQLOnce = <TResult extends Record<string, any>, TVariableValues extends Record<string, any>>(
|
|
391
406
|
document: DocumentNode<TResult, TVariableValues>,
|
|
392
407
|
variableValues: TVariableValues,
|
|
393
|
-
|
|
408
|
+
otelContext: otel.Context = this.otel.queriesSpanContext,
|
|
394
409
|
): { result: TResult; queriedTables: string[] } => {
|
|
395
410
|
const schema =
|
|
396
411
|
this.graphQLSchema ?? shouldNeverHappen("Can't run a GraphQL query on a store without GraphQL schema")
|
|
397
412
|
const context =
|
|
398
413
|
this.graphQLContext ?? shouldNeverHappen("Can't run a GraphQL query on a store without GraphQL context")
|
|
399
414
|
const tracer = this.otel.tracer
|
|
400
|
-
const spanContext = parentSpanContext ?? this.otel.queriesSpanContext
|
|
401
415
|
|
|
402
416
|
const operationName = graphql.getOperationAST(document)?.name?.value
|
|
403
417
|
|
|
404
|
-
return tracer.startActiveSpan(`executeGraphQLQuery: ${operationName}`, {},
|
|
418
|
+
return tracer.startActiveSpan(`executeGraphQLQuery: ${operationName}`, {}, otelContext, (span) => {
|
|
405
419
|
try {
|
|
406
420
|
span.setAttribute('graphql.variables', JSON.stringify(variableValues))
|
|
407
421
|
span.setAttribute('graphql.query', graphql.print(document))
|
|
408
422
|
|
|
409
423
|
context.queriedTables.clear()
|
|
410
424
|
|
|
411
|
-
context.
|
|
425
|
+
context.otelContext = otel.trace.setSpan(otel.context.active(), span)
|
|
412
426
|
|
|
413
427
|
const res = graphql.executeSync({
|
|
414
428
|
document,
|
|
@@ -713,7 +727,7 @@ export class Store<TGraphQLContext extends BaseGraphQLContext> {
|
|
|
713
727
|
private applyEventWithoutRefresh = (
|
|
714
728
|
eventType: string,
|
|
715
729
|
args: any = {},
|
|
716
|
-
|
|
730
|
+
otelContext: otel.Context,
|
|
717
731
|
): { writeTables: string[]; durationMs: number } => {
|
|
718
732
|
return this.otel.tracer.startActiveSpan(
|
|
719
733
|
'LiveStore:applyEventWithoutRefresh',
|
|
@@ -723,7 +737,7 @@ export class Store<TGraphQLContext extends BaseGraphQLContext> {
|
|
|
723
737
|
'livestore.args': JSON.stringify(args, null, 2),
|
|
724
738
|
},
|
|
725
739
|
},
|
|
726
|
-
|
|
740
|
+
otelContext,
|
|
727
741
|
(span) => {
|
|
728
742
|
const otelContext = otel.trace.setSpan(otel.context.active(), span)
|
|
729
743
|
|