@livestore/livestore 0.0.16 → 0.0.21
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/README.md +18 -21
- package/dist/.tsbuildinfo +1 -1
- package/dist/QueryCache.d.ts +1 -1
- package/dist/QueryCache.d.ts.map +1 -1
- package/dist/QueryCache.js.map +1 -1
- package/dist/__tests__/react/fixture.d.ts +5 -4
- package/dist/__tests__/react/fixture.d.ts.map +1 -1
- package/dist/__tests__/react/fixture.js +5 -5
- package/dist/__tests__/react/fixture.js.map +1 -1
- package/dist/__tests__/react/useComponentState.test.d.ts +2 -0
- package/dist/__tests__/react/useComponentState.test.d.ts.map +1 -0
- package/dist/__tests__/react/useComponentState.test.js +68 -0
- package/dist/__tests__/react/useComponentState.test.js.map +1 -0
- package/dist/__tests__/react/useLQuery.test.d.ts +2 -0
- package/dist/__tests__/react/useLQuery.test.d.ts.map +1 -0
- package/dist/__tests__/react/useLQuery.test.js +38 -0
- package/dist/__tests__/react/useLQuery.test.js.map +1 -0
- package/dist/__tests__/react/useLiveStoreComponent.test.js +4 -9
- package/dist/__tests__/react/useLiveStoreComponent.test.js.map +1 -1
- package/dist/__tests__/react/useQuery.test.d.ts +2 -0
- package/dist/__tests__/react/useQuery.test.d.ts.map +1 -0
- package/dist/__tests__/react/useQuery.test.js +33 -0
- package/dist/__tests__/react/useQuery.test.js.map +1 -0
- package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.d.ts +2 -0
- package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.d.ts.map +1 -0
- package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.js +38 -0
- package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.js.map +1 -0
- package/dist/__tests__/reactive.test.js +167 -93
- package/dist/__tests__/reactive.test.js.map +1 -1
- package/dist/__tests__/reactiveQueries/sql.test.d.ts +2 -0
- package/dist/__tests__/reactiveQueries/sql.test.d.ts.map +1 -0
- package/dist/__tests__/reactiveQueries/sql.test.js +337 -0
- package/dist/__tests__/reactiveQueries/sql.test.js.map +1 -0
- package/dist/inMemoryDatabase.d.ts +2 -2
- package/dist/inMemoryDatabase.d.ts.map +1 -1
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/react/index.d.ts +3 -3
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +2 -2
- package/dist/react/index.js.map +1 -1
- package/dist/react/useComponentState.d.ts +50 -0
- package/dist/react/useComponentState.d.ts.map +1 -0
- package/dist/react/useComponentState.js +248 -0
- package/dist/react/useComponentState.js.map +1 -0
- package/dist/react/useGlobalQuery.d.ts +3 -0
- package/dist/react/useGlobalQuery.d.ts.map +1 -0
- package/dist/react/useGlobalQuery.js +26 -0
- package/dist/react/useGlobalQuery.js.map +1 -0
- package/dist/react/useGraphQL.d.ts +3 -3
- package/dist/react/useGraphQL.d.ts.map +1 -1
- package/dist/react/useGraphQL.js +10 -8
- package/dist/react/useGraphQL.js.map +1 -1
- package/dist/react/useLiveStoreComponent.d.ts +6 -6
- package/dist/react/useLiveStoreComponent.d.ts.map +1 -1
- package/dist/react/useLiveStoreComponent.js +143 -99
- package/dist/react/useLiveStoreComponent.js.map +1 -1
- package/dist/react/useQuery.d.ts +2 -2
- package/dist/react/useQuery.d.ts.map +1 -1
- package/dist/react/useQuery.js +26 -22
- package/dist/react/useQuery.js.map +1 -1
- package/dist/react/useTemporaryQuery.d.ts +8 -0
- package/dist/react/useTemporaryQuery.d.ts.map +1 -0
- package/dist/react/useTemporaryQuery.js +17 -0
- package/dist/react/useTemporaryQuery.js.map +1 -0
- package/dist/react/utils/extractNamesFromStackTrace.d.ts +3 -0
- package/dist/react/utils/extractNamesFromStackTrace.d.ts.map +1 -0
- package/dist/react/utils/extractNamesFromStackTrace.js +40 -0
- package/dist/react/utils/extractNamesFromStackTrace.js.map +1 -0
- package/dist/react/utils/extractStackInfoFromStackTrace.d.ts +7 -0
- package/dist/react/utils/extractStackInfoFromStackTrace.d.ts.map +1 -0
- package/dist/react/utils/extractStackInfoFromStackTrace.js +40 -0
- package/dist/react/utils/extractStackInfoFromStackTrace.js.map +1 -0
- package/dist/reactive.d.ts +42 -48
- package/dist/reactive.d.ts.map +1 -1
- package/dist/reactive.js +293 -186
- package/dist/reactive.js.map +1 -1
- package/dist/reactiveQueries/base-class.d.ts +28 -23
- package/dist/reactiveQueries/base-class.d.ts.map +1 -1
- package/dist/reactiveQueries/base-class.js +25 -18
- package/dist/reactiveQueries/base-class.js.map +1 -1
- package/dist/reactiveQueries/graph.d.ts +10 -0
- package/dist/reactiveQueries/graph.d.ts.map +1 -0
- package/dist/reactiveQueries/graph.js +6 -0
- package/dist/reactiveQueries/graph.js.map +1 -0
- package/dist/reactiveQueries/graphql.d.ts +34 -17
- package/dist/reactiveQueries/graphql.d.ts.map +1 -1
- package/dist/reactiveQueries/graphql.js +91 -10
- package/dist/reactiveQueries/graphql.js.map +1 -1
- package/dist/reactiveQueries/js.d.ts +16 -12
- package/dist/reactiveQueries/js.d.ts.map +1 -1
- package/dist/reactiveQueries/js.js +31 -8
- package/dist/reactiveQueries/js.js.map +1 -1
- package/dist/reactiveQueries/sql.d.ts +22 -18
- package/dist/reactiveQueries/sql.d.ts.map +1 -1
- package/dist/reactiveQueries/sql.js +82 -16
- package/dist/reactiveQueries/sql.js.map +1 -1
- package/dist/store.d.ts +12 -52
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +283 -264
- package/dist/store.js.map +1 -1
- package/package.json +10 -9
- package/src/QueryCache.ts +1 -1
- package/src/__tests__/react/fixture.tsx +12 -7
- package/src/__tests__/react/{useLiveStoreComponent.test.tsx → useComponentState.test.tsx} +9 -20
- package/src/__tests__/react/useQuery.test.tsx +48 -0
- package/src/__tests__/react/utils/extractStackInfoFromStackTrace.test.ts +40 -0
- package/src/__tests__/reactive.test.ts +193 -140
- package/src/__tests__/reactiveQueries/sql.test.ts +372 -0
- package/src/inMemoryDatabase.ts +2 -2
- package/src/index.ts +7 -11
- package/src/react/index.ts +3 -7
- package/src/react/{useLiveStoreComponent.ts → useComponentState.ts} +89 -247
- package/src/react/useQuery.ts +29 -27
- package/src/react/useTemporaryQuery.ts +21 -0
- package/src/react/utils/extractStackInfoFromStackTrace.ts +47 -0
- package/src/reactive.ts +385 -268
- package/src/reactiveQueries/base-class.ts +60 -44
- package/src/reactiveQueries/graph.ts +15 -0
- package/src/reactiveQueries/graphql.ts +145 -29
- package/src/reactiveQueries/js.ts +53 -20
- package/src/reactiveQueries/sql.ts +129 -36
- package/src/store.ts +338 -408
- package/src/react/useGraphQL.ts +0 -138
|
@@ -1,31 +1,97 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { shouldNeverHappen } from '@livestore/utils';
|
|
2
|
+
import * as otel from '@opentelemetry/api';
|
|
3
|
+
import { prepareBindValues } from '../util.js';
|
|
4
|
+
import { LiveStoreQueryBase, makeGetAtomResult } from './base-class.js';
|
|
5
|
+
import { dbGraph } from './graph.js';
|
|
6
|
+
import { LiveStoreJSQuery } from './js.js';
|
|
7
|
+
export const querySQL = (query, options) => new LiveStoreSQLQuery({
|
|
8
|
+
label: options.label,
|
|
9
|
+
genQueryString: query,
|
|
10
|
+
queriedTables: options.queriedTables,
|
|
11
|
+
bindValues: options.bindValues,
|
|
12
|
+
});
|
|
2
13
|
/* An object encapsulating a reactive SQL query */
|
|
3
14
|
export class LiveStoreSQLQuery extends LiveStoreQueryBase {
|
|
4
|
-
constructor({
|
|
5
|
-
super(
|
|
15
|
+
constructor({ genQueryString, queriedTables, bindValues, label: label_, }) {
|
|
16
|
+
super();
|
|
6
17
|
this._tag = 'sql';
|
|
7
18
|
/**
|
|
8
19
|
* Returns a new reactive query that contains the result of
|
|
9
20
|
* running an arbitrary JS computation on the results of this SQL query.
|
|
10
21
|
*/
|
|
11
|
-
this.pipe = (fn) =>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
22
|
+
this.pipe = (fn) => new LiveStoreJSQuery({
|
|
23
|
+
fn: (get) => {
|
|
24
|
+
const results = get(this.results$);
|
|
25
|
+
return fn(results, get);
|
|
26
|
+
},
|
|
16
27
|
label: `${this.label}:js`,
|
|
17
|
-
|
|
28
|
+
onDestroy: () => this.destroy(),
|
|
18
29
|
});
|
|
19
30
|
/** Returns a reactive query */
|
|
20
|
-
this.getFirstRow = (args) =>
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
31
|
+
this.getFirstRow = (args) => new LiveStoreJSQuery({
|
|
32
|
+
fn: (get) => {
|
|
33
|
+
const results = get(this.results$);
|
|
34
|
+
if (results.length === 0 && args?.defaultValue === undefined) {
|
|
35
|
+
// const queryLabel = this._tag === 'sql' ? this.queryString$!.computeResult(otelContext) : this.label
|
|
36
|
+
const queryLabel = this.label;
|
|
37
|
+
throw new Error(`Expected query ${queryLabel} to return at least one result`);
|
|
38
|
+
}
|
|
39
|
+
return results[0] ?? args.defaultValue;
|
|
40
|
+
},
|
|
41
|
+
label: `${this.label}:first`,
|
|
42
|
+
onDestroy: () => this.destroy(),
|
|
43
|
+
});
|
|
44
|
+
this.destroy = () => {
|
|
45
|
+
dbGraph.destroy(this.queryString$);
|
|
46
|
+
dbGraph.destroy(this.results$);
|
|
47
|
+
};
|
|
48
|
+
const label = label_ ?? genQueryString.toString();
|
|
49
|
+
// TODO don't even create a thunk if query string is static
|
|
50
|
+
const queryString$ = dbGraph.makeThunk((get, addDebugInfo, { rootOtelContext }, otelContext) => {
|
|
51
|
+
if (typeof genQueryString === 'function') {
|
|
52
|
+
const queryString = genQueryString(makeGetAtomResult(get, otelContext ?? rootOtelContext));
|
|
53
|
+
addDebugInfo({ _tag: 'js', label: `${label}:queryString`, query: queryString });
|
|
54
|
+
return queryString;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
return genQueryString;
|
|
25
58
|
}
|
|
26
|
-
|
|
27
|
-
}, { componentKey: this.componentKey, label: `${this.label}:first`, otelContext: this.otelContext });
|
|
59
|
+
}, { label: `${label}:queryString`, meta: { liveStoreThunkType: 'sqlQueryString' } });
|
|
28
60
|
this.queryString$ = queryString$;
|
|
61
|
+
// TODO come up with different way to handle labels
|
|
62
|
+
// label = label ?? `sql(${queryString$.computeResult()})`
|
|
63
|
+
this.label = `sql(${label})`;
|
|
64
|
+
// span.updateName(`querySQL:${label}`)
|
|
65
|
+
const queryLabel = `${label}:results`;
|
|
66
|
+
// const queryLabel = `${label}:results` + (this.temporaryQueries ? ':temp' : '')
|
|
67
|
+
const results$ = dbGraph.makeThunk((get, addDebugInfo, { store, otelTracer, rootOtelContext }, otelContext) => otelTracer.startActiveSpan('sql:', // NOTE span name will be overridden further down
|
|
68
|
+
{}, otelContext ?? rootOtelContext, (span) => {
|
|
69
|
+
try {
|
|
70
|
+
const otelContext = otel.trace.setSpan(otel.context.active(), span);
|
|
71
|
+
// Establish a reactive dependency on the tables used in the query
|
|
72
|
+
for (const tableName of queriedTables) {
|
|
73
|
+
const tableRef = store.tableRefs[tableName] ?? shouldNeverHappen(`No table ref found for ${tableName}`);
|
|
74
|
+
get(tableRef, otelContext);
|
|
75
|
+
}
|
|
76
|
+
const sqlString = get(queryString$, otelContext);
|
|
77
|
+
span.setAttribute('sql.query', sqlString);
|
|
78
|
+
span.updateName(`sql:${sqlString.slice(0, 50)}`);
|
|
79
|
+
const results = store.inMemoryDB.select(sqlString, {
|
|
80
|
+
queriedTables,
|
|
81
|
+
bindValues: bindValues ? prepareBindValues(bindValues, sqlString) : undefined,
|
|
82
|
+
otelContext,
|
|
83
|
+
});
|
|
84
|
+
span.setAttribute('sql.rowsCount', results.length);
|
|
85
|
+
addDebugInfo({ _tag: 'sql', label: label ?? '', query: sqlString });
|
|
86
|
+
return results;
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
span.end();
|
|
90
|
+
}
|
|
91
|
+
}), { label: queryLabel });
|
|
92
|
+
// this.queryString$ = queryString$
|
|
93
|
+
// this.results$ = results$
|
|
94
|
+
// this.payload = payload
|
|
29
95
|
this.results$ = results$;
|
|
30
96
|
}
|
|
31
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/reactiveQueries/sql.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/reactiveQueries/sql.ts"],"names":[],"mappings":"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"}
|
package/dist/store.d.ts
CHANGED
|
@@ -1,20 +1,18 @@
|
|
|
1
|
-
import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';
|
|
2
1
|
import * as otel from '@opentelemetry/api';
|
|
3
2
|
import type { GraphQLSchema } from 'graphql';
|
|
4
3
|
import type * as Sqlite from 'sqlite-esm';
|
|
5
4
|
import type { ComponentKey } from './componentKey.js';
|
|
6
|
-
import type { QueryDefinition } from './effect/LiveStore.js';
|
|
7
5
|
import type { LiveStoreEvent } from './events.js';
|
|
8
6
|
import { InMemoryDatabase } from './inMemoryDatabase.js';
|
|
9
|
-
import type {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
7
|
+
import type { ReactiveGraph, Ref } from './reactive.js';
|
|
8
|
+
import type { ILiveStoreQuery } from './reactiveQueries/base-class.js';
|
|
9
|
+
import { type DbContext } from './reactiveQueries/graph.js';
|
|
10
|
+
import type { LiveStoreGraphQLQuery } from './reactiveQueries/graphql.js';
|
|
11
|
+
import type { LiveStoreJSQuery } from './reactiveQueries/js.js';
|
|
12
|
+
import type { LiveStoreSQLQuery } from './reactiveQueries/sql.js';
|
|
14
13
|
import type { GetActionArgs, Schema } from './schema.js';
|
|
15
14
|
import type { Storage, StorageInit } from './storage/index.js';
|
|
16
|
-
import type {
|
|
17
|
-
export type GetAtomResult = <T>(atom: Atom<T> | LiveStoreJSQuery<T>) => T;
|
|
15
|
+
import type { ParamsObject } from './util.js';
|
|
18
16
|
export type LiveStoreQuery<TResult extends Record<string, any> = any> = LiveStoreSQLQuery<TResult> | LiveStoreJSQuery<TResult> | LiveStoreGraphQLQuery<TResult, any, any>;
|
|
19
17
|
export type BaseGraphQLContext = {
|
|
20
18
|
queriedTables: Set<string>;
|
|
@@ -22,6 +20,7 @@ export type BaseGraphQLContext = {
|
|
|
22
20
|
otelContext?: otel.Context;
|
|
23
21
|
};
|
|
24
22
|
export type QueryResult<TQuery> = TQuery extends LiveStoreSQLQuery<infer R> ? ReadonlyArray<Readonly<R>> : TQuery extends LiveStoreJSQuery<infer S> ? Readonly<S> : TQuery extends LiveStoreGraphQLQuery<infer Result, any, any> ? Readonly<Result> : never;
|
|
23
|
+
export declare const globalComponentKey: ComponentKey;
|
|
25
24
|
export type GraphQLOptions<TContext> = {
|
|
26
25
|
schema: GraphQLSchema;
|
|
27
26
|
makeContext: (db: InMemoryDatabase, tracer: otel.Tracer) => TContext;
|
|
@@ -69,7 +68,7 @@ export type StoreOtel = {
|
|
|
69
68
|
queriesSpanContext: otel.Context;
|
|
70
69
|
};
|
|
71
70
|
export declare class Store<TGraphQLContext extends BaseGraphQLContext = BaseGraphQLContext> {
|
|
72
|
-
graph: ReactiveGraph<RefreshReason, QueryDebugInfo>;
|
|
71
|
+
graph: ReactiveGraph<RefreshReason, QueryDebugInfo, DbContext>;
|
|
73
72
|
inMemoryDB: InMemoryDatabase;
|
|
74
73
|
_proxyDb: InMemoryDatabase;
|
|
75
74
|
schema: Schema;
|
|
@@ -93,58 +92,20 @@ export declare class Store<TGraphQLContext extends BaseGraphQLContext = BaseGrap
|
|
|
93
92
|
*
|
|
94
93
|
* NOTE The query is actually running (even if no one has subscribed to it yet) and will be kept up to date.
|
|
95
94
|
*/
|
|
96
|
-
querySQL: <TResult>(genQueryString: string | ((get: GetAtomResult) => string), { queriedTables, bindValues, componentKey, label, otelContext, }: {
|
|
97
|
-
/**
|
|
98
|
-
* List of tables that are queried in this query;
|
|
99
|
-
* used to determine reactive dependencies.
|
|
100
|
-
*
|
|
101
|
-
* NOTE In the future we want to auto-generate this via parsing the query
|
|
102
|
-
*/
|
|
103
|
-
queriedTables: string[];
|
|
104
|
-
bindValues?: Bindable | undefined;
|
|
105
|
-
componentKey?: ComponentKey | undefined;
|
|
106
|
-
label?: string | undefined;
|
|
107
|
-
otelContext?: otel.Context | undefined;
|
|
108
|
-
}) => LiveStoreSQLQuery<TResult>;
|
|
109
|
-
queryJS: <TResult>(genResults: (get: GetAtomResult) => TResult, { componentKey, label, otelContext, }: {
|
|
110
|
-
componentKey?: ComponentKey | undefined;
|
|
111
|
-
label?: string | undefined;
|
|
112
|
-
otelContext?: otel.Context | undefined;
|
|
113
|
-
}) => LiveStoreJSQuery<TResult>;
|
|
114
|
-
queryGraphQL: <TResult extends Record<string, any>, TVariableValues extends Record<string, any>>(document: DocumentNode<TResult, TVariableValues>, genVariableValues: TVariableValues | ((get: GetAtomResult) => TVariableValues), { componentKey, label, otelContext, }: {
|
|
115
|
-
componentKey: ComponentKey;
|
|
116
|
-
label?: string | undefined;
|
|
117
|
-
otelContext?: otel.Context | undefined;
|
|
118
|
-
}) => LiveStoreGraphQLQuery<TResult, TVariableValues, TGraphQLContext>;
|
|
119
|
-
queryGraphQLOnce: <TResult extends Record<string, any>, TVariableValues extends Record<string, any>>(document: DocumentNode<TResult, TVariableValues>, variableValues: TVariableValues, otelContext?: otel.Context) => {
|
|
120
|
-
result: TResult;
|
|
121
|
-
queriedTables: string[];
|
|
122
|
-
};
|
|
123
95
|
/**
|
|
124
96
|
* Subscribe to the results of a query
|
|
125
97
|
* Returns a function to cancel the subscription.
|
|
126
98
|
*/
|
|
127
|
-
subscribe: <
|
|
99
|
+
subscribe: <TResult>(query: ILiveStoreQuery<TResult>, onNewValue: (value: TResult) => void, onSubsubscribe?: () => void, options?: {
|
|
128
100
|
label?: string;
|
|
101
|
+
otelContext?: otel.Context;
|
|
129
102
|
} | undefined) => (() => void);
|
|
130
|
-
/**
|
|
131
|
-
* Any queries created in the callback will be destroyed when the callback is complete.
|
|
132
|
-
* Useful for temporarily creating reactive queries, which is an idempotent operation
|
|
133
|
-
* that can be safely called inside a React useMemo hook.
|
|
134
|
-
*/
|
|
135
|
-
inTempQueryContext: <TResult>(callback: () => TResult) => TResult;
|
|
136
103
|
/**
|
|
137
104
|
* Destroys the entire store, including all queries and subscriptions.
|
|
138
105
|
*
|
|
139
106
|
* Currently only used when shutting down the app for debugging purposes (e.g. to close Otel spans).
|
|
140
107
|
*/
|
|
141
108
|
destroy: () => void;
|
|
142
|
-
private destroyQuery;
|
|
143
|
-
/**
|
|
144
|
-
* Clean up queries and downstream subscriptions associated with a component.
|
|
145
|
-
* This is critical to avoid memory leaks.
|
|
146
|
-
*/
|
|
147
|
-
unmountComponent: (componentKey: ComponentKey) => void;
|
|
148
109
|
applyEvent: <TEventType extends string>(eventType: TEventType, args?: any, options?: {
|
|
149
110
|
skipRefresh?: boolean;
|
|
150
111
|
}) => {
|
|
@@ -171,7 +132,6 @@ export declare class Store<TGraphQLContext extends BaseGraphQLContext = BaseGrap
|
|
|
171
132
|
manualRefresh: (options?: {
|
|
172
133
|
label?: string;
|
|
173
134
|
}) => void;
|
|
174
|
-
runOnce: <TQueryDef extends QueryDefinition>(queryDef: TQueryDef) => QueryResult<ReturnType<TQueryDef>>;
|
|
175
135
|
/**
|
|
176
136
|
* Apply an event to the store.
|
|
177
137
|
* Returns the tables that were affected by the event.
|
|
@@ -184,7 +144,7 @@ export declare class Store<TGraphQLContext extends BaseGraphQLContext = BaseGrap
|
|
|
184
144
|
* This should only be used for framework-internal purposes;
|
|
185
145
|
* all app writes should go through applyEvent.
|
|
186
146
|
*/
|
|
187
|
-
execute: (query: string, params?: ParamsObject, writeTables?: string[]) =>
|
|
147
|
+
execute: (query: string, params?: ParamsObject, writeTables?: string[]) => void;
|
|
188
148
|
}
|
|
189
149
|
/** Create a new LiveStore Store */
|
|
190
150
|
export declare const createStore: <TGraphQLContext extends BaseGraphQLContext>({ schema, loadStorage, graphQLOptions, otelTracer, otelRootSpanContext, boot, sqlite3, }: {
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|