@commitspark/graphql-api 1.0.0-beta.6 → 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 +21 -0
- package/README.md +75 -28
- package/dist/cjs/client.d.ts +28 -0
- package/dist/cjs/client.js +15 -22
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/graphql/apollo-config-factory.d.ts +3 -0
- package/dist/cjs/graphql/apollo-config-factory.js +8 -19
- package/dist/cjs/graphql/apollo-config-factory.js.map +1 -1
- package/dist/cjs/graphql/errors.d.ts +19 -0
- package/dist/cjs/graphql/errors.js +1 -1
- package/dist/cjs/graphql/errors.js.map +1 -1
- package/dist/cjs/graphql/input-type-generator.d.ts +5 -0
- package/dist/cjs/graphql/input-type-generator.js +4 -4
- package/dist/cjs/graphql/input-type-generator.js.map +1 -1
- package/dist/cjs/graphql/queries-mutations-generator.d.ts +17 -0
- package/dist/cjs/graphql/queries-mutations-generator.js +12 -12
- package/dist/cjs/graphql/queries-mutations-generator.js.map +1 -1
- package/dist/cjs/graphql/resolvers/field-resolvers/entry-reference-resolver.d.ts +2 -0
- package/dist/cjs/graphql/resolvers/field-resolvers/entry-reference-resolver.js +15 -16
- 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 +2 -0
- package/dist/cjs/graphql/resolvers/field-resolvers/field-default-value-resolver.js +24 -25
- 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 +11 -0
- package/dist/cjs/graphql/resolvers/field-resolvers/union-value-resolver.d.ts +2 -0
- package/dist/cjs/graphql/resolvers/field-resolvers/union-value-resolver.js +9 -15
- 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 +5 -0
- package/dist/cjs/graphql/resolvers/object-type-field-default-value-resolver-generator.js +25 -5
- 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 +3 -0
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.js +26 -29
- 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 -0
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.js +24 -24
- 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 +3 -0
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.js +41 -33
- 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 +3 -0
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.js +5 -14
- 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 +3 -0
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-every-resolver.js +5 -14
- 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 -0
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.js +4 -13
- 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 -0
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/union-type-resolver.js +14 -16
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/union-type-resolver.js.map +1 -1
- package/dist/cjs/graphql/resolvers/types.d.ts +19 -0
- package/dist/cjs/graphql/schema-analyzer.d.ts +8 -0
- package/dist/cjs/graphql/schema-analyzer.js +1 -2
- package/dist/cjs/graphql/schema-analyzer.js.map +1 -1
- package/dist/cjs/graphql/schema-generator.d.ts +3 -0
- package/dist/cjs/graphql/schema-generator.js +75 -85
- package/dist/cjs/graphql/schema-generator.js.map +1 -1
- package/dist/cjs/graphql/schema-root-type-generator.d.ts +2 -0
- package/dist/cjs/graphql/schema-root-type-generator.js.map +1 -1
- package/dist/cjs/graphql/schema-utils/entry-reference-util.d.ts +4 -0
- package/dist/cjs/graphql/schema-utils/entry-reference-util.js +141 -106
- package/dist/cjs/graphql/schema-utils/entry-reference-util.js.map +1 -1
- package/dist/cjs/graphql/schema-utils/entry-type-util.d.ts +4 -0
- package/dist/cjs/graphql/schema-utils/entry-type-util.js +1 -2
- package/dist/cjs/graphql/schema-utils/entry-type-util.js.map +1 -1
- package/dist/cjs/graphql/schema-utils/union-type-util.d.ts +3 -0
- package/dist/cjs/graphql/schema-utils/union-type-util.js +3 -3
- package/dist/cjs/graphql/schema-utils/union-type-util.js.map +1 -1
- package/dist/cjs/graphql/schema-validator.d.ts +2 -0
- package/dist/cjs/graphql/schema-validator.js +3 -7
- package/dist/cjs/graphql/schema-validator.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/cjs/index.d.ts +9 -0
- package/dist/cjs/index.js +8 -19
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/persistence/cache.d.ts +12 -0
- package/dist/cjs/persistence/cache.js +11 -20
- package/dist/cjs/persistence/cache.js.map +1 -1
- package/dist/cjs/persistence/persistence.d.ts +6 -0
- package/dist/cjs/persistence/persistence.js +27 -45
- package/dist/cjs/persistence/persistence.js.map +1 -1
- package/dist/esm/client.js +2 -2
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/graphql/apollo-config-factory.js +1 -1
- package/dist/esm/graphql/apollo-config-factory.js.map +1 -1
- package/dist/esm/graphql/errors.js.map +1 -1
- package/dist/esm/graphql/input-type-generator.js +1 -1
- package/dist/esm/graphql/input-type-generator.js.map +1 -1
- package/dist/esm/graphql/queries-mutations-generator.js +6 -6
- package/dist/esm/graphql/queries-mutations-generator.js.map +1 -1
- package/dist/esm/graphql/resolvers/field-resolvers/entry-reference-resolver.js +10 -2
- 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 +5 -5
- 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 +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 +25 -8
- 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 +6 -6
- 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 +5 -5
- 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 +10 -9
- 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 +2 -2
- 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 +2 -2
- 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 +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 +12 -5
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/union-type-resolver.js.map +1 -1
- package/dist/esm/graphql/schema-generator.js +8 -15
- 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 +65 -16
- package/dist/esm/graphql/schema-utils/entry-reference-util.js.map +1 -1
- package/dist/esm/graphql/schema-utils/union-type-util.js +1 -1
- package/dist/esm/graphql/schema-utils/union-type-util.js.map +1 -1
- package/dist/esm/graphql/util.js +10 -0
- package/dist/esm/graphql/util.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/package.json +1 -0
- package/dist/esm/persistence/cache.js +1 -1
- package/dist/esm/persistence/cache.js.map +1 -1
- package/dist/esm/persistence/persistence.js +1 -1
- package/dist/esm/persistence/persistence.js.map +1 -1
- package/dist/types/client.d.ts +1 -1
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/graphql/apollo-config-factory.d.ts +1 -1
- package/dist/types/graphql/apollo-config-factory.d.ts.map +1 -1
- package/dist/types/graphql/errors.d.ts +0 -1
- package/dist/types/graphql/errors.d.ts.map +1 -1
- package/dist/types/graphql/input-type-generator.d.ts +1 -1
- package/dist/types/graphql/input-type-generator.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 +2 -2
- 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 +2 -2
- 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 +7 -6
- 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 +2 -2
- 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 +16 -4
- package/dist/types/graphql/resolvers/types.d.ts.map +1 -1
- package/dist/types/graphql/schema-generator.d.ts +1 -1
- package/dist/types/graphql/schema-generator.d.ts.map +1 -1
- package/dist/types/graphql/schema-root-type-generator.d.ts +2 -2
- package/dist/types/graphql/schema-root-type-generator.d.ts.map +1 -1
- package/dist/types/graphql/schema-utils/entry-reference-util.d.ts +3 -2
- 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/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/persistence/cache.d.ts +1 -1
- package/dist/types/persistence/cache.d.ts.map +1 -1
- package/dist/types/persistence/persistence.d.ts +1 -1
- package/dist/types/persistence/persistence.d.ts.map +1 -1
- package/package.json +7 -5
- package/src/client.ts +3 -3
- package/src/graphql/apollo-config-factory.ts +2 -2
- package/src/graphql/errors.ts +0 -1
- package/src/graphql/input-type-generator.ts +2 -2
- package/src/graphql/queries-mutations-generator.ts +23 -24
- package/src/graphql/resolvers/field-resolvers/entry-reference-resolver.ts +24 -9
- package/src/graphql/resolvers/field-resolvers/field-default-value-resolver.ts +12 -14
- package/src/graphql/resolvers/field-resolvers/types.ts +9 -8
- package/src/graphql/resolvers/field-resolvers/union-value-resolver.ts +3 -5
- package/src/graphql/resolvers/object-type-field-default-value-resolver-generator.ts +44 -27
- package/src/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.ts +14 -14
- package/src/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.ts +14 -14
- package/src/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.ts +18 -18
- package/src/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.ts +8 -9
- package/src/graphql/resolvers/query-mutation-resolvers/query-every-resolver.ts +8 -9
- package/src/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.ts +8 -9
- package/src/graphql/resolvers/query-mutation-resolvers/union-type-resolver.ts +22 -10
- package/src/graphql/resolvers/types.ts +28 -6
- package/src/graphql/schema-generator.ts +32 -39
- package/src/graphql/schema-root-type-generator.ts +5 -2
- package/src/graphql/schema-utils/entry-reference-util.ts +123 -24
- package/src/graphql/schema-utils/union-type-util.ts +1 -1
- package/src/graphql/util.ts +11 -0
- package/src/index.ts +3 -3
- package/src/persistence/cache.ts +2 -2
- package/src/persistence/persistence.ts +2 -2
- package/dist/tsconfig.build.cjs.tsbuildinfo +0 -1
- package/dist/tsconfig.build.esm.tsbuildinfo +0 -1
- package/dist/tsconfig.build.types.tsbuildinfo +0 -1
|
@@ -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 {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
11
|
+
import { resolveFieldDefaultValue } from './field-resolvers/field-default-value-resolver.ts'
|
|
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
|
-
import { findById, findByTypeId } from '../../../persistence/persistence'
|
|
2
|
-
import {
|
|
3
|
-
import { getReferencedEntryIds } from '../../schema-utils/entry-reference-util'
|
|
1
|
+
import { findById, findByTypeId } from '../../../persistence/persistence.ts'
|
|
2
|
+
import { isObjectType } from 'graphql'
|
|
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 {
|
|
10
|
-
import { createError, ErrorCode } from '../../errors'
|
|
9
|
+
import { QueryMutationResolver } from '../types.ts'
|
|
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
|
-
import { findById, findByTypeId } from '../../../persistence/persistence'
|
|
2
|
-
import { Entry,
|
|
3
|
-
import { getReferencedEntryIds } from '../../schema-utils/entry-reference-util'
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { createError, ErrorCode } from '../../errors'
|
|
1
|
+
import { findById, findByTypeId } from '../../../persistence/persistence.ts'
|
|
2
|
+
import { Entry, EntryDraft } from '@commitspark/git-adapter'
|
|
3
|
+
import { getReferencedEntryIds } from '../../schema-utils/entry-reference-util.ts'
|
|
4
|
+
import { isObjectType } from 'graphql'
|
|
5
|
+
import { QueryMutationResolver } from '../types.ts'
|
|
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,9 +1,9 @@
|
|
|
1
|
-
import { findById, findByTypeId } from '../../../persistence/persistence'
|
|
2
|
-
import { getReferencedEntryIds } from '../../schema-utils/entry-reference-util'
|
|
3
|
-
import {
|
|
1
|
+
import { findById, findByTypeId } from '../../../persistence/persistence.ts'
|
|
2
|
+
import { getReferencedEntryIds } from '../../schema-utils/entry-reference-util.ts'
|
|
3
|
+
import { isObjectType } from 'graphql'
|
|
4
4
|
import { EntryData, EntryDraft } from '@commitspark/git-adapter'
|
|
5
|
-
import {
|
|
6
|
-
import { createError, ErrorCode } from '../../errors'
|
|
5
|
+
import { QueryMutationResolver } from '../types.ts'
|
|
6
|
+
import { createError, ErrorCode } from '../../errors.ts'
|
|
7
7
|
|
|
8
8
|
function mergeData(
|
|
9
9
|
existingEntryData: EntryData,
|
|
@@ -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
|
-
import { findByTypeId } from '../../../persistence/persistence'
|
|
3
|
-
import {
|
|
4
|
-
import { QueryMutationResolverContext } from '../types'
|
|
2
|
+
import { findByTypeId } from '../../../persistence/persistence.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
|
-
import { findByType } from '../../../persistence/persistence'
|
|
3
|
-
import {
|
|
4
|
-
import { QueryMutationResolverContext } from '../types'
|
|
2
|
+
import { findByType } from '../../../persistence/persistence.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
|
-
import { getTypeById } from '../../../persistence/persistence'
|
|
2
|
-
import {
|
|
3
|
-
import { ApolloContext } from '../../../client'
|
|
1
|
+
import { getTypeById } from '../../../persistence/persistence.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 {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { getTypeById } from '../../../persistence/persistence.ts'
|
|
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
|
|
@@ -1,14 +1,36 @@
|
|
|
1
|
-
import { ApolloContext } from '../../client'
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { ApolloContext } from '../../client.ts'
|
|
2
|
+
import {
|
|
3
|
+
GraphQLFieldResolver,
|
|
4
|
+
GraphQLNamedType,
|
|
5
|
+
GraphQLTypeResolver,
|
|
6
|
+
} from 'graphql'
|
|
7
|
+
import { EntryData } from '@commitspark/git-adapter'
|
|
8
|
+
import { RecursiveArray } from './field-resolvers/types.ts'
|
|
4
9
|
|
|
5
10
|
export interface QueryMutationResolverContext extends ApolloContext {
|
|
6
11
|
type: GraphQLNamedType
|
|
7
12
|
}
|
|
8
13
|
|
|
9
14
|
export type QueryMutationResolver<ResultType> = GraphQLFieldResolver<
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
15
|
+
unknown,
|
|
16
|
+
QueryMutationResolverContext,
|
|
17
|
+
{ id: string; data?: EntryData; commitMessage: string },
|
|
13
18
|
Promise<ResultType>
|
|
14
19
|
>
|
|
20
|
+
|
|
21
|
+
export type UnionTypeResolver = GraphQLTypeResolver<
|
|
22
|
+
UnionTypeResolverSourceData,
|
|
23
|
+
ApolloContext
|
|
24
|
+
>
|
|
25
|
+
|
|
26
|
+
type UnionTypeResolverSourceData = EntryData & {
|
|
27
|
+
id?: string
|
|
28
|
+
__typename: string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export type ContextInjectionResolver = GraphQLFieldResolver<
|
|
32
|
+
EntryData,
|
|
33
|
+
ApolloContext,
|
|
34
|
+
Record<string, unknown>,
|
|
35
|
+
Promise<RecursiveArray<EntryData>>
|
|
36
|
+
>
|
|
@@ -1,26 +1,32 @@
|
|
|
1
1
|
import {
|
|
2
2
|
generateQueriesAndMutations,
|
|
3
3
|
generateTypeNameQuery,
|
|
4
|
-
} from './queries-mutations-generator'
|
|
4
|
+
} from './queries-mutations-generator.ts'
|
|
5
5
|
import {
|
|
6
6
|
IExecutableSchemaDefinition,
|
|
7
7
|
makeExecutableSchema,
|
|
8
8
|
} from '@graphql-tools/schema'
|
|
9
|
-
import { analyzeSchema } from './schema-analyzer'
|
|
9
|
+
import { analyzeSchema } from './schema-analyzer.ts'
|
|
10
10
|
import {
|
|
11
11
|
generateIdInputTypeStrings,
|
|
12
12
|
generateObjectInputTypeStrings,
|
|
13
13
|
generateUnionInputTypeStrings,
|
|
14
|
-
} from './input-type-generator'
|
|
15
|
-
import { generateSchemaRootTypeStrings } from './schema-root-type-generator'
|
|
14
|
+
} from './input-type-generator.ts'
|
|
15
|
+
import { generateSchemaRootTypeStrings } from './schema-root-type-generator.ts'
|
|
16
16
|
import { printSchemaWithDirectives } from '@graphql-tools/utils'
|
|
17
|
-
import { unionTypeResolver } from './resolvers/query-mutation-resolvers/union-type-resolver'
|
|
18
|
-
import { ApolloContext } from '../client'
|
|
19
|
-
import {
|
|
20
|
-
import { getValidationResult } from './schema-validator'
|
|
17
|
+
import { unionTypeResolver } from './resolvers/query-mutation-resolvers/union-type-resolver.ts'
|
|
18
|
+
import { ApolloContext } from '../client.ts'
|
|
19
|
+
import { GraphQLTypeResolver } from 'graphql'
|
|
20
|
+
import { getValidationResult } from './schema-validator.ts'
|
|
21
|
+
import { createObjectTypeFieldResolvers } from './resolvers/object-type-field-default-value-resolver-generator.ts'
|
|
22
|
+
import { createError, ErrorCode } from './errors.ts'
|
|
23
|
+
import { FieldResolver } from './resolvers/field-resolvers/types.ts'
|
|
24
|
+
import {
|
|
25
|
+
ContextInjectionResolver,
|
|
26
|
+
QueryMutationResolver,
|
|
27
|
+
UnionTypeResolver,
|
|
28
|
+
} from './resolvers/types.ts'
|
|
21
29
|
import { EntryData } from '@commitspark/git-adapter'
|
|
22
|
-
import { createObjectTypeFieldResolvers } from './resolvers/object-type-field-default-value-resolver-generator'
|
|
23
|
-
import { createError, ErrorCode } from './errors'
|
|
24
30
|
|
|
25
31
|
export async function generateSchema(
|
|
26
32
|
context: ApolloContext,
|
|
@@ -52,19 +58,6 @@ export async function generateSchema(
|
|
|
52
58
|
)
|
|
53
59
|
const generatedTypeNameQuery = generateTypeNameQuery()
|
|
54
60
|
|
|
55
|
-
const generatedEntryReferenceResolvers: Record<
|
|
56
|
-
string,
|
|
57
|
-
Record<
|
|
58
|
-
string,
|
|
59
|
-
GraphQLFieldResolver<
|
|
60
|
-
Record<string, any>,
|
|
61
|
-
ApolloContext,
|
|
62
|
-
any,
|
|
63
|
-
Promise<EntryData | EntryData[] | null>
|
|
64
|
-
>
|
|
65
|
-
>
|
|
66
|
-
> = {}
|
|
67
|
-
|
|
68
61
|
const generatedObjectInputTypeStrings = generateObjectInputTypeStrings(
|
|
69
62
|
schemaAnalyzerResult.objectTypes,
|
|
70
63
|
)
|
|
@@ -85,7 +78,10 @@ export async function generateSchema(
|
|
|
85
78
|
|
|
86
79
|
${generatedSchemaRootTypeStrings}`
|
|
87
80
|
|
|
88
|
-
const generatedUnionTypeResolvers: Record<
|
|
81
|
+
const generatedUnionTypeResolvers: Record<
|
|
82
|
+
string,
|
|
83
|
+
{ __resolveType: UnionTypeResolver }
|
|
84
|
+
> = {}
|
|
89
85
|
for (const unionType of schemaAnalyzerResult.unionTypes) {
|
|
90
86
|
generatedUnionTypeResolvers[unionType.name] = {
|
|
91
87
|
__resolveType: unionTypeResolver,
|
|
@@ -96,11 +92,11 @@ ${generatedSchemaRootTypeStrings}`
|
|
|
96
92
|
|
|
97
93
|
const generatedQueryResolvers: Record<
|
|
98
94
|
string,
|
|
99
|
-
|
|
95
|
+
QueryMutationResolver<EntryData | EntryData[] | string>
|
|
100
96
|
> = {}
|
|
101
97
|
const generatedMutationResolvers: Record<
|
|
102
98
|
string,
|
|
103
|
-
|
|
99
|
+
QueryMutationResolver<EntryData | EntryData[] | string>
|
|
104
100
|
> = {}
|
|
105
101
|
|
|
106
102
|
for (const element of generatedQueriesMutations) {
|
|
@@ -119,11 +115,14 @@ ${generatedSchemaRootTypeStrings}`
|
|
|
119
115
|
|
|
120
116
|
const allGeneratedResolvers: Record<
|
|
121
117
|
string,
|
|
122
|
-
Record<
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
118
|
+
| Record<
|
|
119
|
+
string,
|
|
120
|
+
| QueryMutationResolver<EntryData | EntryData[] | string>
|
|
121
|
+
| GraphQLTypeResolver<unknown, ApolloContext>
|
|
122
|
+
| ContextInjectionResolver
|
|
123
|
+
| FieldResolver
|
|
124
|
+
>
|
|
125
|
+
| UnionTypeResolverRecord
|
|
127
126
|
> = {
|
|
128
127
|
Query: generatedQueryResolvers,
|
|
129
128
|
Mutation: generatedMutationResolvers,
|
|
@@ -141,12 +140,6 @@ ${generatedSchemaRootTypeStrings}`
|
|
|
141
140
|
...generatedObjectTypeFieldResolvers[typeName],
|
|
142
141
|
}
|
|
143
142
|
}
|
|
144
|
-
for (const typeName of Object.keys(generatedEntryReferenceResolvers)) {
|
|
145
|
-
allGeneratedResolvers[typeName] = {
|
|
146
|
-
...(allGeneratedResolvers[typeName] ?? {}),
|
|
147
|
-
...generatedEntryReferenceResolvers[typeName],
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
143
|
|
|
151
144
|
const typeDefs = [
|
|
152
145
|
filteredOriginalSchemaString,
|
|
@@ -162,6 +155,6 @@ ${generatedSchemaRootTypeStrings}`
|
|
|
162
155
|
}
|
|
163
156
|
}
|
|
164
157
|
|
|
165
|
-
interface
|
|
166
|
-
__resolveType:
|
|
158
|
+
interface UnionTypeResolverRecord {
|
|
159
|
+
__resolveType: UnionTypeResolver
|
|
167
160
|
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
GeneratedQuery,
|
|
3
|
+
GeneratedSchema,
|
|
4
|
+
} from './queries-mutations-generator.ts'
|
|
2
5
|
|
|
3
6
|
export function generateSchemaRootTypeStrings(
|
|
4
7
|
generatedSchemas: GeneratedSchema[],
|
|
5
|
-
typeQuery: GeneratedQuery
|
|
8
|
+
typeQuery: GeneratedQuery,
|
|
6
9
|
): string {
|
|
7
10
|
return (
|
|
8
11
|
`type Query {\n` +
|