@livestore/graphql 0.4.0 → 0.5.0-dev.0
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/graphql.d.ts +4 -4
- package/dist/graphql.d.ts.map +1 -1
- package/dist/graphql.js +10 -10
- package/dist/graphql.js.map +1 -1
- package/package.json +22 -32
- package/src/graphql.ts +23 -20
package/dist/graphql.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';
|
|
2
|
-
import * as otel from '@opentelemetry/api';
|
|
3
|
-
import type { GraphQLSchema } from 'graphql';
|
|
4
|
-
import * as graphql from 'graphql';
|
|
5
2
|
import type { RefreshReason, SqliteDbWrapper, Store } from '@livestore/livestore';
|
|
6
3
|
import { LiveQueries, ReactiveGraph } from '@livestore/livestore/internal';
|
|
7
4
|
import { Schema } from '@livestore/utils/effect';
|
|
5
|
+
import * as otel from '@opentelemetry/api';
|
|
6
|
+
import type { GraphQLSchema } from 'graphql';
|
|
7
|
+
import * as graphql from 'graphql';
|
|
8
8
|
export type BaseGraphQLContext = {
|
|
9
9
|
queriedTables: Set<string>;
|
|
10
10
|
/** Needed by Pothos Otel plugin for resolver tracing to work */
|
|
@@ -23,7 +23,7 @@ export type GraphQLOptions<TContext> = {
|
|
|
23
23
|
schema: GraphQLSchema;
|
|
24
24
|
makeContext: (db: SqliteDbWrapper, tracer: otel.Tracer, sessionId: string) => TContext;
|
|
25
25
|
};
|
|
26
|
-
export type MapResult<To, From> = ((res: From, get: LiveQueries.GetAtomResult) => To) | Schema.
|
|
26
|
+
export type MapResult<To, From> = ((res: From, get: LiveQueries.GetAtomResult) => To) | Schema.Codec<To, From>;
|
|
27
27
|
export declare const queryGraphQL: <TResult extends Record<string, any>, TVariableValues extends Record<string, any>, TResultMapped extends Record<string, any> = TResult>(document: DocumentNode<TResult, TVariableValues>, genVariableValues: TVariableValues | ((get: LiveQueries.GetAtomResult) => TVariableValues), options?: {
|
|
28
28
|
label?: string;
|
|
29
29
|
map?: MapResult<TResultMapped, TResult>;
|
package/dist/graphql.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,IAAI,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAC1F,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"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"}
|
package/dist/graphql.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import * as otel from '@opentelemetry/api';
|
|
2
|
-
import * as graphql from 'graphql';
|
|
3
|
-
import { getDurationMsFromSpan } from '@livestore/common';
|
|
4
1
|
import { StoreInternalsSymbol } from '@livestore/livestore';
|
|
5
2
|
import { LiveQueries, ReactiveGraph } from '@livestore/livestore/internal';
|
|
6
3
|
import { objectToString, omitUndefineds, shouldNeverHappen } from '@livestore/utils';
|
|
7
|
-
import { Equal, Hash, Predicate, Schema,
|
|
4
|
+
import { Equal, Hash, Predicate, Result, Schema, SchemaIssue } from '@livestore/utils/effect';
|
|
5
|
+
import * as otel from '@opentelemetry/api';
|
|
6
|
+
import * as graphql from 'graphql';
|
|
8
7
|
export const queryGraphQL = (document, genVariableValues, options = {}) => {
|
|
9
8
|
const documentName = graphql.getOperationAST(document)?.name?.value;
|
|
10
9
|
const hash = options.deps !== undefined
|
|
@@ -58,13 +57,13 @@ export class LiveStoreGraphQLQuery extends LiveQueries.LiveStoreQueryBase {
|
|
|
58
57
|
? (res) => res
|
|
59
58
|
: Schema.isSchema(map) === true
|
|
60
59
|
? (res) => {
|
|
61
|
-
const parseResult = Schema.
|
|
62
|
-
if (parseResult
|
|
63
|
-
console.error(`Error parsing GraphQL query result: ${
|
|
64
|
-
return shouldNeverHappen(`Error parsing SQL query result: ${String(parseResult.
|
|
60
|
+
const parseResult = Schema.decodeResult(map)(res);
|
|
61
|
+
if (Result.isFailure(parseResult) === true) {
|
|
62
|
+
console.error(`Error parsing GraphQL query result: ${SchemaIssue.makeFormatterDefault()(parseResult.failure.issue)}`);
|
|
63
|
+
return shouldNeverHappen(`Error parsing SQL query result: ${String(parseResult.failure)}`);
|
|
65
64
|
}
|
|
66
65
|
else {
|
|
67
|
-
return parseResult.
|
|
66
|
+
return parseResult.success;
|
|
68
67
|
}
|
|
69
68
|
}
|
|
70
69
|
: typeof map === 'function'
|
|
@@ -108,6 +107,7 @@ export class LiveStoreGraphQLQuery extends LiveQueries.LiveStoreQueryBase {
|
|
|
108
107
|
const { schema, context } = unpackStoreContext(store);
|
|
109
108
|
const operationName = graphql.getOperationAST(document)?.name?.value;
|
|
110
109
|
return otelTracer.startActiveSpan(`executeGraphQLQuery: ${operationName}`, {}, otelContext, (span) => {
|
|
110
|
+
const startTimePerfNow = performance.now();
|
|
111
111
|
span.setAttribute('graphql.variables', JSON.stringify(variableValues));
|
|
112
112
|
span.setAttribute('graphql.query', graphql.print(document));
|
|
113
113
|
context.queriedTables.clear();
|
|
@@ -133,7 +133,7 @@ export class LiveStoreGraphQLQuery extends LiveQueries.LiveStoreQueryBase {
|
|
|
133
133
|
}
|
|
134
134
|
span.end();
|
|
135
135
|
const result = this.mapResult(res.data, get);
|
|
136
|
-
const durationMs =
|
|
136
|
+
const durationMs = performance.now() - startTimePerfNow;
|
|
137
137
|
this.executionTimes.push(durationMs);
|
|
138
138
|
return {
|
|
139
139
|
result,
|
package/dist/graphql.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql.js","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graphql.js","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/graphql",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0-dev.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
|
-
"url": "git+https://github.com/livestorejs/livestore.git"
|
|
7
|
+
"url": "git+https://github.com/livestorejs/livestore-contrib.git"
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
10
|
"dist",
|
|
@@ -21,51 +21,41 @@
|
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@graphql-typed-document-node/core": "3.2.0",
|
|
24
|
-
"@
|
|
25
|
-
"@livestore/
|
|
26
|
-
"@livestore/
|
|
27
|
-
"@
|
|
24
|
+
"@livestore/common": "0.5.0-dev.0",
|
|
25
|
+
"@livestore/livestore": "0.5.0-dev.0",
|
|
26
|
+
"@livestore/utils": "0.5.0-dev.0",
|
|
27
|
+
"@opentelemetry/api": "1.9.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"graphql": "16.11.0"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
|
-
"@effect/
|
|
34
|
-
"@effect/
|
|
35
|
-
"@effect/
|
|
36
|
-
"@effect/
|
|
37
|
-
"@effect/
|
|
38
|
-
"@effect/
|
|
39
|
-
"@effect/platform-browser": "^0.76.0",
|
|
40
|
-
"@effect/platform-bun": "^0.89.0",
|
|
41
|
-
"@effect/platform-node": "^0.106.0",
|
|
42
|
-
"@effect/printer": "^0.49.0",
|
|
43
|
-
"@effect/printer-ansi": "^0.49.0",
|
|
44
|
-
"@effect/rpc": "^0.75.1",
|
|
45
|
-
"@effect/sql": "^0.51.1",
|
|
46
|
-
"@effect/typeclass": "^0.40.0",
|
|
47
|
-
"@effect/vitest": "^0.29.0",
|
|
33
|
+
"@effect/opentelemetry": "^4.0.0-rc.111",
|
|
34
|
+
"@effect/platform-browser": "^4.0.0-rc.111",
|
|
35
|
+
"@effect/platform-bun": "^4.0.0-rc.111",
|
|
36
|
+
"@effect/platform-node": "^4.0.0-rc.111",
|
|
37
|
+
"@effect/platform-node-shared": "^4.0.0-rc.111",
|
|
38
|
+
"@effect/vitest": "^4.0.0-rc.111",
|
|
48
39
|
"@opentelemetry/api": "^1.9.0",
|
|
49
40
|
"@opentelemetry/resources": "^2.2.0",
|
|
50
41
|
"@standard-schema/spec": "^1.1.0",
|
|
51
|
-
"effect": "^
|
|
42
|
+
"effect": "^4.0.0-rc.111",
|
|
52
43
|
"graphql": "^16.11.0"
|
|
53
44
|
},
|
|
54
45
|
"$genie": {
|
|
55
46
|
"source": "package.json.genie.ts",
|
|
56
47
|
"warning": "DO NOT EDIT - changes will be overwritten",
|
|
57
48
|
"workspaceClosureDirs": [
|
|
58
|
-
"packages/@livestore/adapter-web",
|
|
59
|
-
"packages/@livestore/common",
|
|
60
|
-
"packages/@livestore/common-cf",
|
|
61
|
-
"packages/@livestore/devtools-web-common",
|
|
62
49
|
"packages/@livestore/graphql",
|
|
63
|
-
"packages/@livestore/
|
|
64
|
-
"packages/@livestore/
|
|
65
|
-
"packages/@livestore/
|
|
66
|
-
"packages/@livestore/
|
|
67
|
-
"packages/@livestore/
|
|
68
|
-
"packages/@livestore/
|
|
50
|
+
"repos/livestore/packages/@livestore/adapter-web",
|
|
51
|
+
"repos/livestore/packages/@livestore/common",
|
|
52
|
+
"repos/livestore/packages/@livestore/common-cf",
|
|
53
|
+
"repos/livestore/packages/@livestore/livestore",
|
|
54
|
+
"repos/livestore/packages/@livestore/sqlite-wasm",
|
|
55
|
+
"repos/livestore/packages/@livestore/utils",
|
|
56
|
+
"repos/livestore/packages/@livestore/utils-dev",
|
|
57
|
+
"repos/livestore/packages/@livestore/wa-sqlite",
|
|
58
|
+
"repos/livestore/packages/@livestore/webmesh"
|
|
69
59
|
]
|
|
70
60
|
},
|
|
71
61
|
"scripts": {
|
package/src/graphql.ts
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core'
|
|
2
|
-
import * as otel from '@opentelemetry/api'
|
|
3
|
-
import type { GraphQLSchema } from 'graphql'
|
|
4
|
-
import * as graphql from 'graphql'
|
|
5
|
-
|
|
6
|
-
import { getDurationMsFromSpan } from '@livestore/common'
|
|
7
2
|
import type { RefreshReason, SqliteDbWrapper, Store } from '@livestore/livestore'
|
|
8
3
|
import { StoreInternalsSymbol } from '@livestore/livestore'
|
|
9
4
|
import { LiveQueries, ReactiveGraph } from '@livestore/livestore/internal'
|
|
10
5
|
import { objectToString, omitUndefineds, shouldNeverHappen } from '@livestore/utils'
|
|
11
|
-
import { Equal, Hash, Predicate, Schema,
|
|
6
|
+
import { Equal, Hash, Predicate, Result, Schema, SchemaIssue } from '@livestore/utils/effect'
|
|
7
|
+
import * as otel from '@opentelemetry/api'
|
|
8
|
+
import type { GraphQLSchema } from 'graphql'
|
|
9
|
+
import * as graphql from 'graphql'
|
|
12
10
|
|
|
13
11
|
export type BaseGraphQLContext = {
|
|
14
12
|
queriedTables: Set<string>
|
|
@@ -33,7 +31,7 @@ export type GraphQLOptions<TContext> = {
|
|
|
33
31
|
makeContext: (db: SqliteDbWrapper, tracer: otel.Tracer, sessionId: string) => TContext
|
|
34
32
|
}
|
|
35
33
|
|
|
36
|
-
export type MapResult<To, From> = ((res: From, get: LiveQueries.GetAtomResult) => To) | Schema.
|
|
34
|
+
export type MapResult<To, From> = ((res: From, get: LiveQueries.GetAtomResult) => To) | Schema.Codec<To, From>
|
|
37
35
|
|
|
38
36
|
export const queryGraphQL = <
|
|
39
37
|
TResult extends Record<string, any>,
|
|
@@ -50,9 +48,10 @@ export const queryGraphQL = <
|
|
|
50
48
|
} = {},
|
|
51
49
|
): LiveQueries.LiveQueryDef<TResultMapped> => {
|
|
52
50
|
const documentName = graphql.getOperationAST(document)?.name?.value
|
|
53
|
-
const hash =
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
const hash =
|
|
52
|
+
options.deps !== undefined
|
|
53
|
+
? LiveQueries.depsToString(options.deps)
|
|
54
|
+
: (documentName ?? shouldNeverHappen('No document name found and no deps provided'))
|
|
56
55
|
const label = options.label ?? documentName ?? 'graphql'
|
|
57
56
|
const map = options.map
|
|
58
57
|
|
|
@@ -134,17 +133,19 @@ export class LiveStoreGraphQLQuery<
|
|
|
134
133
|
? (res: TResult) => res as any as TResultMapped
|
|
135
134
|
: Schema.isSchema(map) === true
|
|
136
135
|
? (res: TResult) => {
|
|
137
|
-
const parseResult = Schema.
|
|
138
|
-
if (parseResult
|
|
139
|
-
console.error(
|
|
140
|
-
|
|
136
|
+
const parseResult = Schema.decodeResult(map as Schema.Codec<TResultMapped, TResult>)(res)
|
|
137
|
+
if (Result.isFailure(parseResult) === true) {
|
|
138
|
+
console.error(
|
|
139
|
+
`Error parsing GraphQL query result: ${SchemaIssue.makeFormatterDefault()(parseResult.failure.issue)}`,
|
|
140
|
+
)
|
|
141
|
+
return shouldNeverHappen(`Error parsing SQL query result: ${String(parseResult.failure)}`)
|
|
141
142
|
} else {
|
|
142
|
-
return parseResult.
|
|
143
|
+
return parseResult.success
|
|
143
144
|
}
|
|
144
145
|
}
|
|
145
146
|
: typeof map === 'function'
|
|
146
147
|
? map
|
|
147
|
-
|
|
148
|
+
: shouldNeverHappen(`Invalid map function ${objectToString(map)}`)
|
|
148
149
|
|
|
149
150
|
// TODO don't even create a thunk if variables are static
|
|
150
151
|
let variableValues$OrvariableValues:
|
|
@@ -169,9 +170,10 @@ export class LiveStoreGraphQLQuery<
|
|
|
169
170
|
this.results$ = this.reactivityGraph.makeThunk<TResultMapped>(
|
|
170
171
|
(get, setDebugInfo, ctx, otelContext, debugRefreshReason) => {
|
|
171
172
|
const { store, otelTracer, rootOtelContext } = ctx
|
|
172
|
-
const variableValues =
|
|
173
|
-
|
|
174
|
-
|
|
173
|
+
const variableValues =
|
|
174
|
+
ReactiveGraph.isThunk(variableValues$OrvariableValues) === true
|
|
175
|
+
? (get(variableValues$OrvariableValues, otelContext, debugRefreshReason) as TVariableValues)
|
|
176
|
+
: (variableValues$OrvariableValues as TVariableValues)
|
|
175
177
|
const { result, queriedTables, durationMs } = this.queryOnce({
|
|
176
178
|
document,
|
|
177
179
|
variableValues,
|
|
@@ -217,6 +219,7 @@ export class LiveStoreGraphQLQuery<
|
|
|
217
219
|
const operationName = graphql.getOperationAST(document)?.name?.value
|
|
218
220
|
|
|
219
221
|
return otelTracer.startActiveSpan(`executeGraphQLQuery: ${operationName}`, {}, otelContext, (span) => {
|
|
222
|
+
const startTimePerfNow = performance.now()
|
|
220
223
|
span.setAttribute('graphql.variables', JSON.stringify(variableValues))
|
|
221
224
|
span.setAttribute('graphql.query', graphql.print(document))
|
|
222
225
|
|
|
@@ -250,7 +253,7 @@ export class LiveStoreGraphQLQuery<
|
|
|
250
253
|
|
|
251
254
|
const result = this.mapResult(res.data as unknown as TResult, get)
|
|
252
255
|
|
|
253
|
-
const durationMs =
|
|
256
|
+
const durationMs = performance.now() - startTimePerfNow
|
|
254
257
|
|
|
255
258
|
this.executionTimes.push(durationMs)
|
|
256
259
|
|