@livestore/graphql 0.4.0-dev.9 → 0.4.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 +3 -3
- package/dist/graphql.d.ts.map +1 -1
- package/dist/graphql.js +12 -11
- package/dist/graphql.js.map +1 -1
- package/package.json +53 -12
- package/src/graphql.ts +16 -13
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 type { RefreshReason, SqliteDbWrapper, Store } from '@livestore/livestore';
|
|
3
|
-
import { LiveQueries, ReactiveGraph } from '@livestore/livestore/internal';
|
|
4
|
-
import { Schema } from '@livestore/utils/effect';
|
|
5
2
|
import * as otel from '@opentelemetry/api';
|
|
6
3
|
import type { GraphQLSchema } from 'graphql';
|
|
7
4
|
import * as graphql from 'graphql';
|
|
5
|
+
import type { RefreshReason, SqliteDbWrapper, Store } from '@livestore/livestore';
|
|
6
|
+
import { LiveQueries, ReactiveGraph } from '@livestore/livestore/internal';
|
|
7
|
+
import { Schema } from '@livestore/utils/effect';
|
|
8
8
|
export type BaseGraphQLContext = {
|
|
9
9
|
queriedTables: Set<string>;
|
|
10
10
|
/** Needed by Pothos Otel plugin for resolver tracing to work */
|
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;
|
|
1
|
+
{"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"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"}
|
package/dist/graphql.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
import * as otel from '@opentelemetry/api';
|
|
2
|
+
import * as graphql from 'graphql';
|
|
1
3
|
import { getDurationMsFromSpan } from '@livestore/common';
|
|
4
|
+
import { StoreInternalsSymbol } from '@livestore/livestore';
|
|
2
5
|
import { LiveQueries, ReactiveGraph } from '@livestore/livestore/internal';
|
|
3
|
-
import { omitUndefineds, shouldNeverHappen } from '@livestore/utils';
|
|
6
|
+
import { objectToString, omitUndefineds, shouldNeverHappen } from '@livestore/utils';
|
|
4
7
|
import { Equal, Hash, Predicate, Schema, TreeFormatter } from '@livestore/utils/effect';
|
|
5
|
-
import * as otel from '@opentelemetry/api';
|
|
6
|
-
import * as graphql from 'graphql';
|
|
7
8
|
export const queryGraphQL = (document, genVariableValues, options = {}) => {
|
|
8
9
|
const documentName = graphql.getOperationAST(document)?.name?.value;
|
|
9
|
-
const hash = options.deps
|
|
10
|
+
const hash = options.deps !== undefined
|
|
10
11
|
? LiveQueries.depsToString(options.deps)
|
|
11
12
|
: (documentName ?? shouldNeverHappen('No document name found and no deps provided'));
|
|
12
13
|
const label = options.label ?? documentName ?? 'graphql';
|
|
@@ -55,12 +56,12 @@ export class LiveStoreGraphQLQuery extends LiveQueries.LiveStoreQueryBase {
|
|
|
55
56
|
this.mapResult =
|
|
56
57
|
map === undefined
|
|
57
58
|
? (res) => res
|
|
58
|
-
: Schema.isSchema(map)
|
|
59
|
+
: Schema.isSchema(map) === true
|
|
59
60
|
? (res) => {
|
|
60
61
|
const parseResult = Schema.decodeEither(map)(res);
|
|
61
62
|
if (parseResult._tag === 'Left') {
|
|
62
63
|
console.error(`Error parsing GraphQL query result: ${TreeFormatter.formatErrorSync(parseResult.left)}`);
|
|
63
|
-
return shouldNeverHappen(`Error parsing SQL query result: ${parseResult.left}`);
|
|
64
|
+
return shouldNeverHappen(`Error parsing SQL query result: ${String(parseResult.left)}`);
|
|
64
65
|
}
|
|
65
66
|
else {
|
|
66
67
|
return parseResult.right;
|
|
@@ -68,7 +69,7 @@ export class LiveStoreGraphQLQuery extends LiveQueries.LiveStoreQueryBase {
|
|
|
68
69
|
}
|
|
69
70
|
: typeof map === 'function'
|
|
70
71
|
? map
|
|
71
|
-
: shouldNeverHappen(`Invalid map function ${map}`);
|
|
72
|
+
: shouldNeverHappen(`Invalid map function ${objectToString(map)}`);
|
|
72
73
|
// TODO don't even create a thunk if variables are static
|
|
73
74
|
let variableValues$OrvariableValues;
|
|
74
75
|
if (typeof genVariableValues === 'function') {
|
|
@@ -83,7 +84,7 @@ export class LiveStoreGraphQLQuery extends LiveQueries.LiveStoreQueryBase {
|
|
|
83
84
|
const resultsLabel = `${labelWithDefault}:results`;
|
|
84
85
|
this.results$ = this.reactivityGraph.makeThunk((get, setDebugInfo, ctx, otelContext, debugRefreshReason) => {
|
|
85
86
|
const { store, otelTracer, rootOtelContext } = ctx;
|
|
86
|
-
const variableValues = ReactiveGraph.isThunk(variableValues$OrvariableValues)
|
|
87
|
+
const variableValues = ReactiveGraph.isThunk(variableValues$OrvariableValues) === true
|
|
87
88
|
? get(variableValues$OrvariableValues, otelContext, debugRefreshReason)
|
|
88
89
|
: variableValues$OrvariableValues;
|
|
89
90
|
const { result, queriedTables, durationMs } = this.queryOnce({
|
|
@@ -96,7 +97,7 @@ export class LiveStoreGraphQLQuery extends LiveQueries.LiveStoreQueryBase {
|
|
|
96
97
|
});
|
|
97
98
|
// Add dependencies on any tables that were used
|
|
98
99
|
for (const tableName of queriedTables) {
|
|
99
|
-
const tableRef = store.tableRefs[tableName] ?? shouldNeverHappen(`No table ref found for ${tableName}`);
|
|
100
|
+
const tableRef = store[StoreInternalsSymbol].tableRefs[tableName] ?? shouldNeverHappen(`No table ref found for ${tableName}`);
|
|
100
101
|
get(tableRef);
|
|
101
102
|
}
|
|
102
103
|
setDebugInfo({ _tag: 'graphql', label: resultsLabel, query: graphql.print(document), durationMs });
|
|
@@ -118,7 +119,7 @@ export class LiveStoreGraphQLQuery extends LiveQueries.LiveStoreQueryBase {
|
|
|
118
119
|
variableValues,
|
|
119
120
|
});
|
|
120
121
|
// TODO track number of nested SQL queries via Otel + debug info
|
|
121
|
-
if (res.errors) {
|
|
122
|
+
if (res.errors !== undefined) {
|
|
122
123
|
span.setStatus({ code: otel.SpanStatusCode.ERROR, message: 'GraphQL error' });
|
|
123
124
|
span.setAttribute('graphql.error', res.errors.join('\n'));
|
|
124
125
|
span.setAttribute('graphql.error-detail', JSON.stringify(res.errors));
|
|
@@ -126,7 +127,7 @@ export class LiveStoreGraphQLQuery extends LiveQueries.LiveStoreQueryBase {
|
|
|
126
127
|
for (const error of res.errors) {
|
|
127
128
|
console.error(error);
|
|
128
129
|
}
|
|
129
|
-
//
|
|
130
|
+
// oxlint-disable-next-line eslint(no-debugger) -- intentional breakpoint for GraphQL errors
|
|
130
131
|
debugger;
|
|
131
132
|
shouldNeverHappen(`GraphQL error: ${res.errors.join('\n')}`);
|
|
132
133
|
}
|
package/dist/graphql.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql.js","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"graphql.js","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,31 +1,72 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/graphql",
|
|
3
|
-
"version": "0.4.0
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"license": "Apache-2.0",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/livestorejs/livestore.git"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"package.json",
|
|
12
|
+
"src"
|
|
13
|
+
],
|
|
4
14
|
"type": "module",
|
|
15
|
+
"sideEffects": false,
|
|
5
16
|
"exports": {
|
|
6
17
|
".": "./dist/index.js"
|
|
7
18
|
},
|
|
19
|
+
"publishConfig": {
|
|
20
|
+
"access": "public"
|
|
21
|
+
},
|
|
8
22
|
"dependencies": {
|
|
9
23
|
"@graphql-typed-document-node/core": "3.2.0",
|
|
10
24
|
"@opentelemetry/api": "1.9.0",
|
|
11
|
-
"@livestore/common": "0.4.0
|
|
12
|
-
"@livestore/
|
|
13
|
-
"@livestore/
|
|
25
|
+
"@livestore/common": "^0.4.0",
|
|
26
|
+
"@livestore/livestore": "^0.4.0",
|
|
27
|
+
"@livestore/utils": "^0.4.0"
|
|
14
28
|
},
|
|
15
29
|
"devDependencies": {
|
|
16
30
|
"graphql": "16.11.0"
|
|
17
31
|
},
|
|
18
|
-
"files": [
|
|
19
|
-
"package.json",
|
|
20
|
-
"src",
|
|
21
|
-
"dist"
|
|
22
|
-
],
|
|
23
|
-
"license": "Apache-2.0",
|
|
24
32
|
"peerDependencies": {
|
|
33
|
+
"@effect/ai": "^0.35.0",
|
|
34
|
+
"@effect/cli": "^0.75.1",
|
|
35
|
+
"@effect/cluster": "^0.58.2",
|
|
36
|
+
"@effect/experimental": "^0.60.0",
|
|
37
|
+
"@effect/opentelemetry": "^0.63.0",
|
|
38
|
+
"@effect/platform": "^0.96.1",
|
|
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",
|
|
48
|
+
"@opentelemetry/api": "^1.9.0",
|
|
49
|
+
"@opentelemetry/resources": "^2.2.0",
|
|
50
|
+
"@standard-schema/spec": "^1.1.0",
|
|
51
|
+
"effect": "^3.21.2",
|
|
25
52
|
"graphql": "^16.11.0"
|
|
26
53
|
},
|
|
27
|
-
"
|
|
28
|
-
"
|
|
54
|
+
"$genie": {
|
|
55
|
+
"source": "package.json.genie.ts",
|
|
56
|
+
"warning": "DO NOT EDIT - changes will be overwritten",
|
|
57
|
+
"workspaceClosureDirs": [
|
|
58
|
+
"packages/@livestore/adapter-web",
|
|
59
|
+
"packages/@livestore/common",
|
|
60
|
+
"packages/@livestore/common-cf",
|
|
61
|
+
"packages/@livestore/devtools-web-common",
|
|
62
|
+
"packages/@livestore/graphql",
|
|
63
|
+
"packages/@livestore/livestore",
|
|
64
|
+
"packages/@livestore/sqlite-wasm",
|
|
65
|
+
"packages/@livestore/utils",
|
|
66
|
+
"packages/@livestore/utils-dev",
|
|
67
|
+
"packages/@livestore/wa-sqlite",
|
|
68
|
+
"packages/@livestore/webmesh"
|
|
69
|
+
]
|
|
29
70
|
},
|
|
30
71
|
"scripts": {
|
|
31
72
|
"test": "echo 'No tests'"
|
package/src/graphql.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
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
6
|
import { getDurationMsFromSpan } from '@livestore/common'
|
|
3
7
|
import type { RefreshReason, SqliteDbWrapper, Store } from '@livestore/livestore'
|
|
8
|
+
import { StoreInternalsSymbol } from '@livestore/livestore'
|
|
4
9
|
import { LiveQueries, ReactiveGraph } from '@livestore/livestore/internal'
|
|
5
|
-
import { omitUndefineds, shouldNeverHappen } from '@livestore/utils'
|
|
10
|
+
import { objectToString, omitUndefineds, shouldNeverHappen } from '@livestore/utils'
|
|
6
11
|
import { Equal, Hash, Predicate, Schema, TreeFormatter } from '@livestore/utils/effect'
|
|
7
|
-
import * as otel from '@opentelemetry/api'
|
|
8
|
-
import type { GraphQLSchema } from 'graphql'
|
|
9
|
-
import * as graphql from 'graphql'
|
|
10
12
|
|
|
11
13
|
export type BaseGraphQLContext = {
|
|
12
14
|
queriedTables: Set<string>
|
|
@@ -48,7 +50,7 @@ export const queryGraphQL = <
|
|
|
48
50
|
} = {},
|
|
49
51
|
): LiveQueries.LiveQueryDef<TResultMapped> => {
|
|
50
52
|
const documentName = graphql.getOperationAST(document)?.name?.value
|
|
51
|
-
const hash = options.deps
|
|
53
|
+
const hash = options.deps !== undefined
|
|
52
54
|
? LiveQueries.depsToString(options.deps)
|
|
53
55
|
: (documentName ?? shouldNeverHappen('No document name found and no deps provided'))
|
|
54
56
|
const label = options.label ?? documentName ?? 'graphql'
|
|
@@ -130,19 +132,19 @@ export class LiveStoreGraphQLQuery<
|
|
|
130
132
|
this.mapResult =
|
|
131
133
|
map === undefined
|
|
132
134
|
? (res: TResult) => res as any as TResultMapped
|
|
133
|
-
: Schema.isSchema(map)
|
|
135
|
+
: Schema.isSchema(map) === true
|
|
134
136
|
? (res: TResult) => {
|
|
135
137
|
const parseResult = Schema.decodeEither(map as Schema.Schema<TResultMapped, TResult>)(res)
|
|
136
138
|
if (parseResult._tag === 'Left') {
|
|
137
139
|
console.error(`Error parsing GraphQL query result: ${TreeFormatter.formatErrorSync(parseResult.left)}`)
|
|
138
|
-
return shouldNeverHappen(`Error parsing SQL query result: ${parseResult.left}`)
|
|
140
|
+
return shouldNeverHappen(`Error parsing SQL query result: ${String(parseResult.left)}`)
|
|
139
141
|
} else {
|
|
140
|
-
return parseResult.right
|
|
142
|
+
return parseResult.right
|
|
141
143
|
}
|
|
142
144
|
}
|
|
143
145
|
: typeof map === 'function'
|
|
144
146
|
? map
|
|
145
|
-
|
|
147
|
+
: shouldNeverHappen(`Invalid map function ${objectToString(map)}`)
|
|
146
148
|
|
|
147
149
|
// TODO don't even create a thunk if variables are static
|
|
148
150
|
let variableValues$OrvariableValues:
|
|
@@ -167,7 +169,7 @@ export class LiveStoreGraphQLQuery<
|
|
|
167
169
|
this.results$ = this.reactivityGraph.makeThunk<TResultMapped>(
|
|
168
170
|
(get, setDebugInfo, ctx, otelContext, debugRefreshReason) => {
|
|
169
171
|
const { store, otelTracer, rootOtelContext } = ctx
|
|
170
|
-
const variableValues = ReactiveGraph.isThunk(variableValues$OrvariableValues)
|
|
172
|
+
const variableValues = ReactiveGraph.isThunk(variableValues$OrvariableValues) === true
|
|
171
173
|
? (get(variableValues$OrvariableValues, otelContext, debugRefreshReason) as TVariableValues)
|
|
172
174
|
: (variableValues$OrvariableValues as TVariableValues)
|
|
173
175
|
const { result, queriedTables, durationMs } = this.queryOnce({
|
|
@@ -181,7 +183,8 @@ export class LiveStoreGraphQLQuery<
|
|
|
181
183
|
|
|
182
184
|
// Add dependencies on any tables that were used
|
|
183
185
|
for (const tableName of queriedTables) {
|
|
184
|
-
const tableRef =
|
|
186
|
+
const tableRef =
|
|
187
|
+
store[StoreInternalsSymbol].tableRefs[tableName] ?? shouldNeverHappen(`No table ref found for ${tableName}`)
|
|
185
188
|
get(tableRef)
|
|
186
189
|
}
|
|
187
190
|
|
|
@@ -230,7 +233,7 @@ export class LiveStoreGraphQLQuery<
|
|
|
230
233
|
|
|
231
234
|
// TODO track number of nested SQL queries via Otel + debug info
|
|
232
235
|
|
|
233
|
-
if (res.errors) {
|
|
236
|
+
if (res.errors !== undefined) {
|
|
234
237
|
span.setStatus({ code: otel.SpanStatusCode.ERROR, message: 'GraphQL error' })
|
|
235
238
|
span.setAttribute('graphql.error', res.errors.join('\n'))
|
|
236
239
|
span.setAttribute('graphql.error-detail', JSON.stringify(res.errors))
|
|
@@ -238,7 +241,7 @@ export class LiveStoreGraphQLQuery<
|
|
|
238
241
|
for (const error of res.errors) {
|
|
239
242
|
console.error(error)
|
|
240
243
|
}
|
|
241
|
-
//
|
|
244
|
+
// oxlint-disable-next-line eslint(no-debugger) -- intentional breakpoint for GraphQL errors
|
|
242
245
|
debugger
|
|
243
246
|
shouldNeverHappen(`GraphQL error: ${res.errors.join('\n')}`)
|
|
244
247
|
}
|