@commitspark/graphql-api 1.0.0-beta.7 → 1.0.0-beta.8
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/CHANGELOG.md +10 -0
- package/README.md +75 -28
- package/dist/cjs/graphql/errors.d.ts +0 -1
- package/dist/cjs/graphql/errors.js.map +1 -1
- package/dist/cjs/graphql/queries-mutations-generator.d.ts +10 -10
- package/dist/cjs/graphql/queries-mutations-generator.js.map +1 -1
- package/dist/cjs/graphql/resolvers/field-resolvers/entry-reference-resolver.d.ts +1 -1
- package/dist/cjs/graphql/resolvers/field-resolvers/entry-reference-resolver.js +8 -0
- package/dist/cjs/graphql/resolvers/field-resolvers/entry-reference-resolver.js.map +1 -1
- package/dist/cjs/graphql/resolvers/field-resolvers/field-default-value-resolver.d.ts +1 -1
- package/dist/cjs/graphql/resolvers/field-resolvers/field-default-value-resolver.js +1 -1
- package/dist/cjs/graphql/resolvers/field-resolvers/field-default-value-resolver.js.map +1 -1
- package/dist/cjs/graphql/resolvers/field-resolvers/types.d.ts +5 -3
- package/dist/cjs/graphql/resolvers/field-resolvers/union-value-resolver.d.ts +1 -1
- package/dist/cjs/graphql/resolvers/field-resolvers/union-value-resolver.js.map +1 -1
- package/dist/cjs/graphql/resolvers/object-type-field-default-value-resolver-generator.d.ts +4 -6
- package/dist/cjs/graphql/resolvers/object-type-field-default-value-resolver-generator.js +24 -7
- package/dist/cjs/graphql/resolvers/object-type-field-default-value-resolver-generator.js.map +1 -1
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.d.ts +2 -3
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.js +3 -3
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.js.map +1 -1
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.d.ts +2 -4
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.js +2 -2
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.js.map +1 -1
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.d.ts +2 -3
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.js +7 -6
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.js.map +1 -1
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.d.ts +2 -3
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.js +1 -1
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.js.map +1 -1
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-every-resolver.d.ts +2 -3
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-every-resolver.js +1 -1
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-every-resolver.js.map +1 -1
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.d.ts +2 -3
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.js.map +1 -1
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/union-type-resolver.d.ts +2 -3
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/union-type-resolver.js +10 -3
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/union-type-resolver.js.map +1 -1
- package/dist/cjs/graphql/resolvers/types.d.ts +15 -2
- package/dist/cjs/graphql/schema-generator.js +0 -7
- package/dist/cjs/graphql/schema-generator.js.map +1 -1
- package/dist/cjs/graphql/schema-root-type-generator.d.ts +1 -1
- package/dist/cjs/graphql/schema-root-type-generator.js.map +1 -1
- package/dist/cjs/graphql/schema-utils/entry-reference-util.d.ts +2 -1
- package/dist/cjs/graphql/schema-utils/entry-reference-util.js +60 -11
- package/dist/cjs/graphql/schema-utils/entry-reference-util.js.map +1 -1
- package/dist/cjs/graphql/util.d.ts +1 -0
- package/dist/cjs/graphql/util.js +13 -0
- package/dist/cjs/graphql/util.js.map +1 -0
- package/dist/esm/graphql/errors.js.map +1 -1
- package/dist/esm/graphql/queries-mutations-generator.js.map +1 -1
- package/dist/esm/graphql/resolvers/field-resolvers/entry-reference-resolver.js +8 -0
- package/dist/esm/graphql/resolvers/field-resolvers/entry-reference-resolver.js.map +1 -1
- package/dist/esm/graphql/resolvers/field-resolvers/field-default-value-resolver.js +1 -1
- package/dist/esm/graphql/resolvers/field-resolvers/field-default-value-resolver.js.map +1 -1
- package/dist/esm/graphql/resolvers/field-resolvers/union-value-resolver.js.map +1 -1
- package/dist/esm/graphql/resolvers/object-type-field-default-value-resolver-generator.js +24 -7
- package/dist/esm/graphql/resolvers/object-type-field-default-value-resolver-generator.js.map +1 -1
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.js +3 -3
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.js.map +1 -1
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.js +2 -2
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.js.map +1 -1
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.js +7 -6
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.js.map +1 -1
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.js +1 -1
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.js.map +1 -1
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-every-resolver.js +1 -1
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-every-resolver.js.map +1 -1
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.js.map +1 -1
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/union-type-resolver.js +10 -3
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/union-type-resolver.js.map +1 -1
- package/dist/esm/graphql/schema-generator.js +0 -7
- package/dist/esm/graphql/schema-generator.js.map +1 -1
- package/dist/esm/graphql/schema-root-type-generator.js.map +1 -1
- package/dist/esm/graphql/schema-utils/entry-reference-util.js +61 -12
- package/dist/esm/graphql/schema-utils/entry-reference-util.js.map +1 -1
- package/dist/esm/graphql/util.js +10 -0
- package/dist/esm/graphql/util.js.map +1 -0
- package/dist/types/graphql/errors.d.ts +0 -1
- package/dist/types/graphql/errors.d.ts.map +1 -1
- package/dist/types/graphql/queries-mutations-generator.d.ts +10 -10
- package/dist/types/graphql/queries-mutations-generator.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/field-resolvers/entry-reference-resolver.d.ts +1 -1
- package/dist/types/graphql/resolvers/field-resolvers/entry-reference-resolver.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/field-resolvers/field-default-value-resolver.d.ts +1 -1
- package/dist/types/graphql/resolvers/field-resolvers/field-default-value-resolver.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/field-resolvers/types.d.ts +5 -3
- package/dist/types/graphql/resolvers/field-resolvers/types.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/field-resolvers/union-value-resolver.d.ts +1 -1
- package/dist/types/graphql/resolvers/field-resolvers/union-value-resolver.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/object-type-field-default-value-resolver-generator.d.ts +4 -6
- package/dist/types/graphql/resolvers/object-type-field-default-value-resolver-generator.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.d.ts +2 -3
- package/dist/types/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.d.ts +2 -4
- package/dist/types/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.d.ts +2 -3
- package/dist/types/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.d.ts +2 -3
- package/dist/types/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/query-mutation-resolvers/query-every-resolver.d.ts +2 -3
- package/dist/types/graphql/resolvers/query-mutation-resolvers/query-every-resolver.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.d.ts +2 -3
- package/dist/types/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/query-mutation-resolvers/union-type-resolver.d.ts +2 -3
- package/dist/types/graphql/resolvers/query-mutation-resolvers/union-type-resolver.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/types.d.ts +15 -2
- package/dist/types/graphql/resolvers/types.d.ts.map +1 -1
- package/dist/types/graphql/schema-generator.d.ts.map +1 -1
- package/dist/types/graphql/schema-root-type-generator.d.ts +1 -1
- package/dist/types/graphql/schema-root-type-generator.d.ts.map +1 -1
- package/dist/types/graphql/schema-utils/entry-reference-util.d.ts +2 -1
- package/dist/types/graphql/schema-utils/entry-reference-util.d.ts.map +1 -1
- package/dist/types/graphql/util.d.ts +2 -0
- package/dist/types/graphql/util.d.ts.map +1 -0
- package/package.json +2 -2
- package/src/graphql/errors.ts +0 -1
- package/src/graphql/queries-mutations-generator.ts +16 -17
- package/src/graphql/resolvers/field-resolvers/entry-reference-resolver.ts +22 -7
- package/src/graphql/resolvers/field-resolvers/field-default-value-resolver.ts +8 -10
- package/src/graphql/resolvers/field-resolvers/types.ts +7 -5
- package/src/graphql/resolvers/field-resolvers/union-value-resolver.ts +2 -4
- package/src/graphql/resolvers/object-type-field-default-value-resolver-generator.ts +43 -26
- package/src/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.ts +11 -11
- package/src/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.ts +11 -11
- package/src/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.ts +15 -15
- package/src/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.ts +7 -8
- package/src/graphql/resolvers/query-mutation-resolvers/query-every-resolver.ts +7 -8
- package/src/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.ts +7 -8
- package/src/graphql/resolvers/query-mutation-resolvers/union-type-resolver.ts +20 -8
- package/src/graphql/resolvers/types.ts +27 -4
- package/src/graphql/schema-generator.ts +24 -31
- package/src/graphql/schema-root-type-generator.ts +5 -2
- package/src/graphql/schema-utils/entry-reference-util.ts +118 -19
- package/src/graphql/util.ts +11 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GraphQLNullableType, GraphQLObjectType } from 'graphql';
|
|
2
2
|
import { ApolloContext } from '../../client.ts';
|
|
3
|
-
|
|
3
|
+
import { EntryData } from '@commitspark/git-adapter';
|
|
4
|
+
export declare function getReferencedEntryIds(rootType: GraphQLObjectType, context: ApolloContext, fieldName: string | null, type: GraphQLNullableType, data: EntryData | EntryData[]): Promise<string[]>;
|
|
4
5
|
//# sourceMappingURL=entry-reference-util.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry-reference-util.d.ts","sourceRoot":"","sources":["../../../../src/graphql/schema-utils/entry-reference-util.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"entry-reference-util.d.ts","sourceRoot":"","sources":["../../../../src/graphql/schema-utils/entry-reference-util.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EAOlB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAQ/C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AA8FpD,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,IAAI,EAAE,mBAAmB,EACzB,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,GAC5B,OAAO,CAAC,MAAM,EAAE,CAAC,CA2InB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/graphql/util.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUrE"}
|
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"gitops",
|
|
10
10
|
"api"
|
|
11
11
|
],
|
|
12
|
-
"version": "1.0.0-beta.
|
|
12
|
+
"version": "1.0.0-beta.8",
|
|
13
13
|
"license": "ISC",
|
|
14
14
|
"private": false,
|
|
15
15
|
"files": [
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@apollo/server": "^5.2.0",
|
|
47
|
-
"@commitspark/git-adapter": "^0.
|
|
47
|
+
"@commitspark/git-adapter": "^0.30.0",
|
|
48
48
|
"@graphql-tools/schema": "^9.0.0",
|
|
49
49
|
"@graphql-tools/utils": "^9.0.0"
|
|
50
50
|
},
|
package/src/graphql/errors.ts
CHANGED
|
@@ -5,7 +5,6 @@ export const enum ErrorCode {
|
|
|
5
5
|
BAD_USER_INPUT = 'BAD_USER_INPUT',
|
|
6
6
|
NOT_FOUND = 'NOT_FOUND',
|
|
7
7
|
BAD_REPOSITORY_DATA = 'BAD_REPOSITORY_DATA',
|
|
8
|
-
SCHEMA_DATA_MISMATCH = 'SCHEMA_DATA_MISMATCH',
|
|
9
8
|
BAD_SCHEMA = 'BAD_SCHEMA',
|
|
10
9
|
INTERNAL_ERROR = 'INTERNAL_ERROR',
|
|
11
10
|
IN_USE = 'IN_USE',
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { EntryData } from '@commitspark/git-adapter'
|
|
2
|
-
import {
|
|
3
|
-
import { GraphQLFieldResolver, GraphQLObjectType } from 'graphql'
|
|
2
|
+
import { GraphQLObjectType } from 'graphql'
|
|
4
3
|
import { queryEveryResolver } from './resolvers/query-mutation-resolvers/query-every-resolver.ts'
|
|
5
4
|
import { queryByIdResolver } from './resolvers/query-mutation-resolvers/query-by-id-resolver.ts'
|
|
6
5
|
import { mutationCreateResolver } from './resolvers/query-mutation-resolvers/mutation-create-resolver.ts'
|
|
@@ -19,12 +18,12 @@ export function generateQueriesAndMutations(
|
|
|
19
18
|
// pluralization of user-provided typeName
|
|
20
19
|
const queryEveryName = `every${typeName}`
|
|
21
20
|
const queryEveryString = `${queryEveryName}: [${objectType.name}!]`
|
|
22
|
-
const queryEveryResolverFunc:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
const queryEveryResolverFunc: QueryMutationResolver<EntryData[]> = (
|
|
22
|
+
source,
|
|
23
|
+
args,
|
|
24
|
+
context,
|
|
25
|
+
info,
|
|
26
|
+
) =>
|
|
28
27
|
queryEveryResolver(source, args, { ...context, type: objectType }, info)
|
|
29
28
|
|
|
30
29
|
const queryByIdName = typeName
|
|
@@ -69,7 +68,7 @@ export function generateQueriesAndMutations(
|
|
|
69
68
|
|
|
70
69
|
const deleteMutationName = `delete${typeName}`
|
|
71
70
|
const deleteMutationString = `${deleteMutationName}(id: ID!, commitMessage: String): ID`
|
|
72
|
-
const deleteMutationResolver: QueryMutationResolver<
|
|
71
|
+
const deleteMutationResolver: QueryMutationResolver<string> = (
|
|
73
72
|
source,
|
|
74
73
|
args,
|
|
75
74
|
context,
|
|
@@ -112,7 +111,7 @@ export function generateQueriesAndMutations(
|
|
|
112
111
|
})
|
|
113
112
|
}
|
|
114
113
|
|
|
115
|
-
export function generateTypeNameQuery(): GeneratedQuery
|
|
114
|
+
export function generateTypeNameQuery(): GeneratedQuery {
|
|
116
115
|
const entryTypeQueryName = '_typeName'
|
|
117
116
|
const entryTypeQueryString = `${entryTypeQueryName}(id: ID!): String!`
|
|
118
117
|
|
|
@@ -124,15 +123,15 @@ export function generateTypeNameQuery(): GeneratedQuery<Promise<string>> {
|
|
|
124
123
|
}
|
|
125
124
|
|
|
126
125
|
export interface GeneratedSchema {
|
|
127
|
-
queryEvery: GeneratedQuery
|
|
128
|
-
queryById: GeneratedQuery
|
|
129
|
-
createMutation: GeneratedQuery
|
|
130
|
-
updateMutation: GeneratedQuery
|
|
131
|
-
deleteMutation: GeneratedQuery
|
|
126
|
+
queryEvery: GeneratedQuery
|
|
127
|
+
queryById: GeneratedQuery
|
|
128
|
+
createMutation: GeneratedQuery
|
|
129
|
+
updateMutation: GeneratedQuery
|
|
130
|
+
deleteMutation: GeneratedQuery
|
|
132
131
|
}
|
|
133
132
|
|
|
134
|
-
export interface GeneratedQuery
|
|
133
|
+
export interface GeneratedQuery {
|
|
135
134
|
name: string
|
|
136
135
|
schemaString: string
|
|
137
|
-
resolver:
|
|
136
|
+
resolver: QueryMutationResolver<EntryData | EntryData[] | string>
|
|
138
137
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { FieldResolver
|
|
2
|
-
import {
|
|
1
|
+
import { FieldResolver } from './types.ts'
|
|
2
|
+
import { isNamedType } from 'graphql'
|
|
3
3
|
import { findById } from '../../../persistence/persistence.ts'
|
|
4
4
|
import { createError, ErrorCode } from '../../errors.ts'
|
|
5
5
|
|
|
6
|
-
export const resolveEntryReference: FieldResolver
|
|
7
|
-
fieldValue
|
|
8
|
-
args
|
|
9
|
-
context
|
|
10
|
-
info
|
|
6
|
+
export const resolveEntryReference: FieldResolver = async (
|
|
7
|
+
fieldValue,
|
|
8
|
+
args,
|
|
9
|
+
context,
|
|
10
|
+
info,
|
|
11
11
|
) => {
|
|
12
12
|
void info
|
|
13
13
|
if (!isNamedType(context.currentType)) {
|
|
@@ -20,6 +20,21 @@ export const resolveEntryReference: FieldResolver<any> = async (
|
|
|
20
20
|
)
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
if (
|
|
24
|
+
fieldValue === null ||
|
|
25
|
+
typeof fieldValue !== 'object' ||
|
|
26
|
+
!('id' in fieldValue) ||
|
|
27
|
+
typeof fieldValue.id !== 'string'
|
|
28
|
+
) {
|
|
29
|
+
throw createError(
|
|
30
|
+
'Expected fieldValue.id to be a string.',
|
|
31
|
+
ErrorCode.INTERNAL_ERROR,
|
|
32
|
+
{
|
|
33
|
+
fieldValue: fieldValue,
|
|
34
|
+
},
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
|
|
23
38
|
const entry = await findById(context, fieldValue.id)
|
|
24
39
|
|
|
25
40
|
return { ...entry.data, id: entry.id }
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { FieldResolver
|
|
2
|
-
import { EntryData } from '@commitspark/git-adapter'
|
|
1
|
+
import { FieldResolver } from './types.ts'
|
|
3
2
|
import {
|
|
4
3
|
GraphQLNonNull,
|
|
5
|
-
GraphQLResolveInfo,
|
|
6
4
|
GraphQLUnionType,
|
|
7
5
|
isListType,
|
|
8
6
|
isNonNullType,
|
|
@@ -17,12 +15,12 @@ import { resolveEntryReference } from './entry-reference-resolver.ts'
|
|
|
17
15
|
import { resolveUnionValue } from './union-value-resolver.ts'
|
|
18
16
|
import { createError, ErrorCode } from '../../errors.ts'
|
|
19
17
|
|
|
20
|
-
export const resolveFieldDefaultValue: FieldResolver
|
|
21
|
-
fieldValue
|
|
22
|
-
args
|
|
23
|
-
context
|
|
24
|
-
info
|
|
25
|
-
)
|
|
18
|
+
export const resolveFieldDefaultValue: FieldResolver = async (
|
|
19
|
+
fieldValue,
|
|
20
|
+
args,
|
|
21
|
+
context,
|
|
22
|
+
info,
|
|
23
|
+
) => {
|
|
26
24
|
if (isNonNullType(context.currentType)) {
|
|
27
25
|
return resolveFieldDefaultValue(
|
|
28
26
|
fieldValue,
|
|
@@ -46,7 +44,7 @@ export const resolveFieldDefaultValue: FieldResolver<any> = async (
|
|
|
46
44
|
if (!Array.isArray(fieldValue)) {
|
|
47
45
|
throw createError(
|
|
48
46
|
`Expected array while resolving value for field "${info.fieldName}".`,
|
|
49
|
-
ErrorCode.
|
|
47
|
+
ErrorCode.BAD_REPOSITORY_DATA,
|
|
50
48
|
{
|
|
51
49
|
fieldName: info.fieldName,
|
|
52
50
|
fieldValue: fieldValue,
|
|
@@ -2,16 +2,18 @@ import { GraphQLFieldResolver, GraphQLOutputType } from 'graphql'
|
|
|
2
2
|
import { EntryData } from '@commitspark/git-adapter'
|
|
3
3
|
import { ApolloContext } from '../../../client.ts'
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
interface FieldResolverContext extends ApolloContext {
|
|
6
6
|
currentType: GraphQLOutputType
|
|
7
7
|
hasNonNullParent?: boolean
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
+
type FieldResolverSource = EntryData | EntryData[]
|
|
11
|
+
|
|
10
12
|
export type FieldResolver<
|
|
11
|
-
TSource,
|
|
13
|
+
TSource = FieldResolverSource,
|
|
12
14
|
TContext = FieldResolverContext,
|
|
13
|
-
TArgs =
|
|
14
|
-
TResult = Promise<
|
|
15
|
+
TArgs = Record<string, unknown>,
|
|
16
|
+
TResult = Promise<RecursiveArray<EntryData>>,
|
|
15
17
|
> = GraphQLFieldResolver<TSource, TContext, TArgs, TResult>
|
|
16
18
|
|
|
17
|
-
export type
|
|
19
|
+
export type RecursiveArray<T> = T | Array<RecursiveArray<T>>
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { EntryData } from '@commitspark/git-adapter'
|
|
2
|
-
import { FieldResolver
|
|
2
|
+
import { FieldResolver } from './types.ts'
|
|
3
3
|
import {
|
|
4
4
|
getUnionTypeNameFromFieldValue,
|
|
5
5
|
getUnionValue,
|
|
6
6
|
} from '../../schema-utils/union-type-util.ts'
|
|
7
7
|
|
|
8
|
-
export const resolveUnionValue: FieldResolver
|
|
9
|
-
fieldValue: any,
|
|
10
|
-
): Promise<ResolvedEntryData<EntryData | EntryData[] | null>> => {
|
|
8
|
+
export const resolveUnionValue: FieldResolver = async (fieldValue) => {
|
|
11
9
|
const typeName = getUnionTypeNameFromFieldValue(fieldValue)
|
|
12
10
|
const unionValue = getUnionValue(fieldValue)
|
|
13
11
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
2
|
GraphQLField,
|
|
3
|
-
GraphQLFieldResolver,
|
|
4
3
|
GraphQLObjectType,
|
|
5
4
|
GraphQLOutputType,
|
|
6
5
|
GraphQLSchema,
|
|
@@ -9,10 +8,10 @@ import {
|
|
|
9
8
|
isObjectType,
|
|
10
9
|
isUnionType,
|
|
11
10
|
} from 'graphql'
|
|
12
|
-
import { EntryData } from '@commitspark/git-adapter'
|
|
13
|
-
import { ResolvedEntryData } from './field-resolvers/types.ts'
|
|
14
11
|
import { resolveFieldDefaultValue } from './field-resolvers/field-default-value-resolver.ts'
|
|
15
|
-
import {
|
|
12
|
+
import { createError, ErrorCode } from '../errors.ts'
|
|
13
|
+
import { isRecord } from '../util.ts'
|
|
14
|
+
import { ContextInjectionResolver } from './types.ts'
|
|
16
15
|
|
|
17
16
|
function requiresCustomDefaultValueResolver(type: GraphQLOutputType): boolean {
|
|
18
17
|
if (isNonNullType(type)) {
|
|
@@ -29,10 +28,11 @@ function requiresCustomDefaultValueResolver(type: GraphQLOutputType): boolean {
|
|
|
29
28
|
|
|
30
29
|
function getFieldsForCustomDefaultValueResolver(
|
|
31
30
|
objectType: GraphQLObjectType,
|
|
32
|
-
): GraphQLField<
|
|
31
|
+
): GraphQLField<unknown, unknown>[] {
|
|
33
32
|
const fields = []
|
|
34
33
|
for (const fieldsKey in objectType.getFields()) {
|
|
35
|
-
const field: GraphQLField<
|
|
34
|
+
const field: GraphQLField<unknown, unknown> =
|
|
35
|
+
objectType.getFields()[fieldsKey]
|
|
36
36
|
if (requiresCustomDefaultValueResolver(field.type)) {
|
|
37
37
|
fields.push(field)
|
|
38
38
|
}
|
|
@@ -40,38 +40,54 @@ function getFieldsForCustomDefaultValueResolver(
|
|
|
40
40
|
return fields
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
type
|
|
43
|
+
type RecordOfContextInjectionResolvers = Record<
|
|
44
44
|
string,
|
|
45
|
-
|
|
46
|
-
any,
|
|
47
|
-
ApolloContext,
|
|
48
|
-
any,
|
|
49
|
-
Promise<ResolvedEntryData<EntryData | EntryData[] | null>>
|
|
50
|
-
>
|
|
45
|
+
ContextInjectionResolver
|
|
51
46
|
>
|
|
52
47
|
|
|
53
48
|
export function createObjectTypeFieldResolvers(
|
|
54
49
|
schema: GraphQLSchema,
|
|
55
|
-
): Record<string,
|
|
56
|
-
const
|
|
50
|
+
): Record<string, RecordOfContextInjectionResolvers> {
|
|
51
|
+
const adapterResolversByType: Record<
|
|
52
|
+
string,
|
|
53
|
+
RecordOfContextInjectionResolvers
|
|
54
|
+
> = {}
|
|
55
|
+
|
|
57
56
|
for (const typeName of Object.keys(schema.getTypeMap())) {
|
|
58
57
|
const type = schema.getType(typeName)
|
|
59
58
|
if (!isObjectType(type) || type.name.startsWith('__')) {
|
|
60
59
|
continue
|
|
61
60
|
}
|
|
61
|
+
|
|
62
|
+
// only some fields need a custom resolver that generates a default result value on missing source data
|
|
62
63
|
const fieldsForCustomDefaultValueResolver =
|
|
63
64
|
getFieldsForCustomDefaultValueResolver(type)
|
|
64
65
|
|
|
65
|
-
const fieldResolversByFieldName:
|
|
66
|
+
const fieldResolversByFieldName: Record<string, ContextInjectionResolver> =
|
|
67
|
+
{}
|
|
66
68
|
for (const field of fieldsForCustomDefaultValueResolver) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
69
|
+
// the resolvers created here serve as adapters to inject additional context information needed by actual field resolvers
|
|
70
|
+
fieldResolversByFieldName[field.name] = (obj, args, context, info) => {
|
|
71
|
+
let fieldSourceData = null
|
|
72
|
+
if (obj) {
|
|
73
|
+
fieldSourceData = obj[field.name] ?? null
|
|
74
|
+
if (
|
|
75
|
+
fieldSourceData !== null &&
|
|
76
|
+
!(isRecord(fieldSourceData) || Array.isArray(fieldSourceData))
|
|
77
|
+
) {
|
|
78
|
+
throw createError(
|
|
79
|
+
`Expected an object or array as data for passing to resolver of field "${field.name}" in type "${typeName}".`,
|
|
80
|
+
ErrorCode.BAD_REPOSITORY_DATA,
|
|
81
|
+
{
|
|
82
|
+
fieldName: field.name,
|
|
83
|
+
typeName: typeName,
|
|
84
|
+
},
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return resolveFieldDefaultValue(
|
|
90
|
+
fieldSourceData,
|
|
75
91
|
args,
|
|
76
92
|
{
|
|
77
93
|
...context,
|
|
@@ -79,12 +95,13 @@ export function createObjectTypeFieldResolvers(
|
|
|
79
95
|
},
|
|
80
96
|
info,
|
|
81
97
|
)
|
|
98
|
+
}
|
|
82
99
|
}
|
|
83
100
|
|
|
84
101
|
if (Object.keys(fieldResolversByFieldName).length > 0) {
|
|
85
|
-
|
|
102
|
+
adapterResolversByType[typeName] = fieldResolversByFieldName
|
|
86
103
|
}
|
|
87
104
|
}
|
|
88
105
|
|
|
89
|
-
return
|
|
106
|
+
return adapterResolversByType
|
|
90
107
|
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { findById, findByTypeId } from '../../../persistence/persistence.ts'
|
|
2
|
-
import {
|
|
2
|
+
import { isObjectType } from 'graphql'
|
|
3
3
|
import { getReferencedEntryIds } from '../../schema-utils/entry-reference-util.ts'
|
|
4
4
|
import {
|
|
5
5
|
ENTRY_ID_INVALID_CHARACTERS,
|
|
6
6
|
EntryData,
|
|
7
7
|
EntryDraft,
|
|
8
8
|
} from '@commitspark/git-adapter'
|
|
9
|
-
import {
|
|
9
|
+
import { QueryMutationResolver } from '../types.ts'
|
|
10
10
|
import { createError, ErrorCode } from '../../errors.ts'
|
|
11
11
|
|
|
12
|
-
export const mutationCreateResolver:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
export const mutationCreateResolver: QueryMutationResolver<EntryData> = async (
|
|
13
|
+
source,
|
|
14
|
+
args,
|
|
15
|
+
context,
|
|
16
|
+
info,
|
|
17
|
+
) => {
|
|
18
18
|
if (!isObjectType(context.type)) {
|
|
19
19
|
throw createError(
|
|
20
20
|
`Entry of type "${context.type.name}" cannot be created as is not an ObjectType.`,
|
|
@@ -57,7 +57,7 @@ export const mutationCreateResolver: GraphQLFieldResolver<
|
|
|
57
57
|
context,
|
|
58
58
|
null,
|
|
59
59
|
info.returnType,
|
|
60
|
-
args.data,
|
|
60
|
+
args.data ?? null,
|
|
61
61
|
)
|
|
62
62
|
|
|
63
63
|
const referencedEntryUpdates: EntryDraft[] = []
|
|
@@ -84,7 +84,7 @@ export const mutationCreateResolver: GraphQLFieldResolver<
|
|
|
84
84
|
type: context.type.name,
|
|
85
85
|
referencedBy: [],
|
|
86
86
|
},
|
|
87
|
-
data: args.data,
|
|
87
|
+
data: args.data ?? null,
|
|
88
88
|
deletion: false,
|
|
89
89
|
}
|
|
90
90
|
|
|
@@ -94,7 +94,7 @@ export const mutationCreateResolver: GraphQLFieldResolver<
|
|
|
94
94
|
entries: [newEntryDraft, ...referencedEntryUpdates],
|
|
95
95
|
message: args.commitMessage,
|
|
96
96
|
})
|
|
97
|
-
context.setCurrentHash(commit.
|
|
97
|
+
context.setCurrentHash(commit.commitHash)
|
|
98
98
|
|
|
99
99
|
const newEntry = await findByTypeId(context, context.type.name, args.id)
|
|
100
100
|
return { ...newEntry.data, id: newEntry.id }
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { findById, findByTypeId } from '../../../persistence/persistence.ts'
|
|
2
|
-
import { Entry,
|
|
2
|
+
import { Entry, EntryDraft } from '@commitspark/git-adapter'
|
|
3
3
|
import { getReferencedEntryIds } from '../../schema-utils/entry-reference-util.ts'
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { isObjectType } from 'graphql'
|
|
5
|
+
import { QueryMutationResolver } from '../types.ts'
|
|
6
6
|
import { createError, ErrorCode } from '../../errors.ts'
|
|
7
7
|
|
|
8
|
-
export const mutationDeleteResolver:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
export const mutationDeleteResolver: QueryMutationResolver<string> = async (
|
|
9
|
+
source,
|
|
10
|
+
args,
|
|
11
|
+
context,
|
|
12
|
+
info,
|
|
13
|
+
) => {
|
|
14
14
|
const entry: Entry = await findByTypeId(context, context.type.name, args.id)
|
|
15
15
|
|
|
16
16
|
if (entry.metadata.referencedBy && entry.metadata.referencedBy.length > 0) {
|
|
@@ -41,7 +41,7 @@ export const mutationDeleteResolver: GraphQLFieldResolver<
|
|
|
41
41
|
context,
|
|
42
42
|
null,
|
|
43
43
|
entryType,
|
|
44
|
-
entry.data,
|
|
44
|
+
entry.data ?? null,
|
|
45
45
|
)
|
|
46
46
|
const referencedEntryUpdates: EntryDraft[] = []
|
|
47
47
|
for (const referencedEntryId of referencedEntryIds) {
|
|
@@ -70,7 +70,7 @@ export const mutationDeleteResolver: GraphQLFieldResolver<
|
|
|
70
70
|
],
|
|
71
71
|
message: args.commitMessage,
|
|
72
72
|
})
|
|
73
|
-
context.setCurrentHash(commit.
|
|
73
|
+
context.setCurrentHash(commit.commitHash)
|
|
74
74
|
|
|
75
75
|
return args.id
|
|
76
76
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { findById, findByTypeId } from '../../../persistence/persistence.ts'
|
|
2
2
|
import { getReferencedEntryIds } from '../../schema-utils/entry-reference-util.ts'
|
|
3
|
-
import {
|
|
3
|
+
import { isObjectType } from 'graphql'
|
|
4
4
|
import { EntryData, EntryDraft } from '@commitspark/git-adapter'
|
|
5
|
-
import {
|
|
5
|
+
import { QueryMutationResolver } from '../types.ts'
|
|
6
6
|
import { createError, ErrorCode } from '../../errors.ts'
|
|
7
7
|
|
|
8
8
|
function mergeData(
|
|
@@ -15,12 +15,12 @@ function mergeData(
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
export const mutationUpdateResolver:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
export const mutationUpdateResolver: QueryMutationResolver<EntryData> = async (
|
|
19
|
+
source,
|
|
20
|
+
args,
|
|
21
|
+
context,
|
|
22
|
+
info,
|
|
23
|
+
) => {
|
|
24
24
|
if (!isObjectType(context.type)) {
|
|
25
25
|
throw createError(
|
|
26
26
|
`Type "${context.type.name}" cannot be mutated as is not an ObjectType.`,
|
|
@@ -36,10 +36,10 @@ export const mutationUpdateResolver: GraphQLFieldResolver<
|
|
|
36
36
|
context,
|
|
37
37
|
null,
|
|
38
38
|
info.returnType,
|
|
39
|
-
existingEntry.data,
|
|
39
|
+
existingEntry.data ?? null,
|
|
40
40
|
)
|
|
41
41
|
|
|
42
|
-
const mergedData = mergeData(existingEntry.data ?? null, args.data)
|
|
42
|
+
const mergedData = mergeData(existingEntry.data ?? null, args.data ?? null)
|
|
43
43
|
const updatedReferencedEntryIds = await getReferencedEntryIds(
|
|
44
44
|
context.type,
|
|
45
45
|
context,
|
|
@@ -74,10 +74,10 @@ export const mutationUpdateResolver: GraphQLFieldResolver<
|
|
|
74
74
|
}
|
|
75
75
|
for (const newlyReferencedEntryId of newlyReferencedIds) {
|
|
76
76
|
const newlyReferencedEntry = await findById(context, newlyReferencedEntryId)
|
|
77
|
-
const updatedReferenceList: string[] =
|
|
78
|
-
newlyReferencedEntry.metadata.referencedBy ?? []
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
const updatedReferenceList: string[] = [
|
|
78
|
+
...(newlyReferencedEntry.metadata.referencedBy ?? []),
|
|
79
|
+
args.id,
|
|
80
|
+
].sort()
|
|
81
81
|
referencedEntryUpdates.push({
|
|
82
82
|
...newlyReferencedEntry,
|
|
83
83
|
metadata: {
|
|
@@ -97,7 +97,7 @@ export const mutationUpdateResolver: GraphQLFieldResolver<
|
|
|
97
97
|
],
|
|
98
98
|
message: args.commitMessage,
|
|
99
99
|
})
|
|
100
|
-
context.setCurrentHash(commit.
|
|
100
|
+
context.setCurrentHash(commit.commitHash)
|
|
101
101
|
|
|
102
102
|
const updatedEntry = await findByTypeId(context, context.type.name, args.id)
|
|
103
103
|
return { ...updatedEntry.data, id: updatedEntry.id }
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { EntryData } from '@commitspark/git-adapter'
|
|
2
2
|
import { findByTypeId } from '../../../persistence/persistence.ts'
|
|
3
|
-
import {
|
|
4
|
-
import { QueryMutationResolverContext } from '../types.ts'
|
|
3
|
+
import { QueryMutationResolver } from '../types.ts'
|
|
5
4
|
|
|
6
|
-
export const queryByIdResolver:
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
export const queryByIdResolver: QueryMutationResolver<EntryData> = async (
|
|
6
|
+
_source,
|
|
7
|
+
args,
|
|
8
|
+
context,
|
|
9
|
+
info,
|
|
10
|
+
) => {
|
|
12
11
|
void info
|
|
13
12
|
const entry = await findByTypeId(context, context.type.name, args.id)
|
|
14
13
|
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { EntryData } from '@commitspark/git-adapter'
|
|
2
2
|
import { findByType } from '../../../persistence/persistence.ts'
|
|
3
|
-
import {
|
|
4
|
-
import { QueryMutationResolverContext } from '../types.ts'
|
|
3
|
+
import { QueryMutationResolver } from '../types.ts'
|
|
5
4
|
|
|
6
|
-
export const queryEveryResolver:
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
export const queryEveryResolver: QueryMutationResolver<EntryData[]> = async (
|
|
6
|
+
_source,
|
|
7
|
+
_args,
|
|
8
|
+
context,
|
|
9
|
+
info,
|
|
10
|
+
) => {
|
|
12
11
|
void info
|
|
13
12
|
const entries = await findByType(context, context.type.name)
|
|
14
13
|
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { getTypeById } from '../../../persistence/persistence.ts'
|
|
2
|
-
import {
|
|
3
|
-
import { ApolloContext } from '../../../client.ts'
|
|
2
|
+
import { QueryMutationResolver } from '../types.ts'
|
|
4
3
|
|
|
5
|
-
export const queryTypeByIdResolver:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
export const queryTypeByIdResolver: QueryMutationResolver<string> = async (
|
|
5
|
+
_source,
|
|
6
|
+
args,
|
|
7
|
+
context,
|
|
8
|
+
info,
|
|
9
|
+
) => {
|
|
11
10
|
void info
|
|
12
11
|
return getTypeById(context, args.id)
|
|
13
12
|
}
|
|
@@ -1,18 +1,30 @@
|
|
|
1
|
-
import { ApolloContext } from '../../../client.ts'
|
|
2
1
|
import { getTypeById } from '../../../persistence/persistence.ts'
|
|
3
|
-
import { GraphQLTypeResolver } from 'graphql'
|
|
4
2
|
import { buildsOnTypeWithEntryDirective } from '../../schema-utils/entry-type-util.ts'
|
|
3
|
+
import { UnionTypeResolver } from '../types.ts'
|
|
4
|
+
import { createError, ErrorCode } from '../../errors.ts'
|
|
5
5
|
|
|
6
|
-
export const unionTypeResolver:
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
export const unionTypeResolver: UnionTypeResolver = async (
|
|
7
|
+
source,
|
|
8
|
+
context,
|
|
9
|
+
info,
|
|
10
|
+
abstractType,
|
|
11
|
+
) => {
|
|
10
12
|
if (buildsOnTypeWithEntryDirective(abstractType)) {
|
|
11
|
-
|
|
13
|
+
if (!('id' in source) || typeof source.id !== 'string') {
|
|
14
|
+
throw createError(
|
|
15
|
+
`Expected key "id" of type string in data while resolving reference-based union type for field "${info.fieldName}".`,
|
|
16
|
+
ErrorCode.BAD_REPOSITORY_DATA,
|
|
17
|
+
{
|
|
18
|
+
typeName: abstractType.name,
|
|
19
|
+
fieldName: info.fieldName,
|
|
20
|
+
},
|
|
21
|
+
)
|
|
22
|
+
}
|
|
23
|
+
return getTypeById(context, source.id)
|
|
12
24
|
} else {
|
|
13
25
|
// We have injected an internal `__typename` field into the data of fields pointing to a non-entry union
|
|
14
26
|
// in UnionValueResolver. This artificial field holds the type information we need here.
|
|
15
|
-
return
|
|
27
|
+
return source.__typename
|
|
16
28
|
}
|
|
17
29
|
|
|
18
30
|
// TODO same for interface type: https://www.apollographql.com/docs/apollo-server/data/resolvers/#resolving-unions-and-interfaces
|