@commitspark/graphql-api 1.0.0-beta.1 → 1.0.0-beta.3
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 +15 -0
- package/README.md +3 -3
- package/dist/cjs/client.js +1 -1
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/graphql/errors.js +32 -0
- package/dist/cjs/graphql/errors.js.map +1 -0
- package/dist/cjs/graphql/queries-mutations-generator.js +10 -8
- package/dist/cjs/graphql/queries-mutations-generator.js.map +1 -1
- package/dist/cjs/graphql/resolvers/field-resolvers/entry-reference-resolver.js +4 -1
- 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.js +15 -3
- package/dist/cjs/graphql/resolvers/field-resolvers/field-default-value-resolver.js.map +1 -1
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.js +10 -13
- 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.js +5 -6
- 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.js +5 -4
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.js.map +1 -1
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/{query-all-resolver.js → query-every-resolver.js} +4 -4
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-every-resolver.js.map +1 -0
- package/dist/cjs/graphql/schema-generator.js +7 -2
- package/dist/cjs/graphql/schema-generator.js.map +1 -1
- package/dist/cjs/graphql/schema-root-type-generator.js +1 -1
- package/dist/cjs/graphql/schema-root-type-generator.js.map +1 -1
- package/dist/cjs/graphql/schema-utils/entry-reference-util.js +26 -18
- package/dist/cjs/graphql/schema-utils/entry-reference-util.js.map +1 -1
- package/dist/cjs/graphql/schema-utils/union-type-util.js +9 -4
- package/dist/cjs/graphql/schema-utils/union-type-util.js.map +1 -1
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/persistence/persistence.js +11 -14
- package/dist/cjs/persistence/persistence.js.map +1 -1
- package/dist/esm/client.js +1 -1
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/graphql/errors.js +28 -0
- package/dist/esm/graphql/errors.js.map +1 -0
- package/dist/esm/graphql/queries-mutations-generator.js +10 -8
- package/dist/esm/graphql/queries-mutations-generator.js.map +1 -1
- package/dist/esm/graphql/resolvers/field-resolvers/entry-reference-resolver.js +4 -1
- 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 +15 -3
- package/dist/esm/graphql/resolvers/field-resolvers/field-default-value-resolver.js.map +1 -1
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.js +11 -14
- 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 +6 -7
- 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 +5 -4
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.js.map +1 -1
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/{query-all-resolver.js → query-every-resolver.js} +2 -2
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-every-resolver.js.map +1 -0
- package/dist/esm/graphql/schema-generator.js +7 -2
- package/dist/esm/graphql/schema-generator.js.map +1 -1
- package/dist/esm/graphql/schema-root-type-generator.js +1 -1
- package/dist/esm/graphql/schema-root-type-generator.js.map +1 -1
- package/dist/esm/graphql/schema-utils/entry-reference-util.js +27 -19
- package/dist/esm/graphql/schema-utils/entry-reference-util.js.map +1 -1
- package/dist/esm/graphql/schema-utils/union-type-util.js +9 -4
- package/dist/esm/graphql/schema-utils/union-type-util.js.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/persistence/persistence.js +11 -14
- package/dist/esm/persistence/persistence.js.map +1 -1
- package/dist/tsconfig.build.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.build.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.build.types.tsbuildinfo +1 -1
- package/dist/types/graphql/errors.d.ts +20 -0
- package/dist/types/graphql/errors.d.ts.map +1 -0
- package/dist/types/graphql/queries-mutations-generator.d.ts +1 -1
- package/dist/types/graphql/queries-mutations-generator.d.ts.map +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.map +1 -1
- 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.map +1 -1
- 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-every-resolver.d.ts +5 -0
- package/dist/types/graphql/resolvers/query-mutation-resolvers/query-every-resolver.d.ts.map +1 -0
- package/dist/types/graphql/schema-generator.d.ts.map +1 -1
- package/dist/types/graphql/schema-utils/entry-reference-util.d.ts.map +1 -1
- package/dist/types/graphql/schema-utils/union-type-util.d.ts +2 -2
- package/dist/types/graphql/schema-utils/union-type-util.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/persistence/persistence.d.ts.map +1 -1
- package/package.json +12 -4
- package/src/client.ts +1 -1
- package/src/graphql/errors.ts +43 -0
- package/src/graphql/queries-mutations-generator.ts +12 -10
- package/src/graphql/resolvers/field-resolvers/entry-reference-resolver.ts +8 -1
- package/src/graphql/resolvers/field-resolvers/field-default-value-resolver.ts +23 -5
- package/src/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.ts +22 -14
- package/src/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.ts +12 -8
- package/src/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.ts +9 -4
- package/src/graphql/resolvers/query-mutation-resolvers/{query-all-resolver.ts → query-every-resolver.ts} +1 -1
- package/src/graphql/schema-generator.ts +7 -2
- package/src/graphql/schema-root-type-generator.ts +1 -1
- package/src/graphql/schema-utils/entry-reference-util.ts +44 -22
- package/src/graphql/schema-utils/union-type-util.ts +20 -7
- package/src/index.ts +2 -1
- package/src/persistence/persistence.ts +13 -15
- package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-all-resolver.js.map +0 -1
- package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-all-resolver.js.map +0 -1
- package/dist/types/graphql/resolvers/query-mutation-resolvers/query-all-resolver.d.ts +0 -5
- package/dist/types/graphql/resolvers/query-mutation-resolvers/query-all-resolver.d.ts.map +0 -1
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {
|
|
2
|
-
GraphQLError,
|
|
3
2
|
GraphQLNullableType,
|
|
4
3
|
GraphQLObjectType,
|
|
5
4
|
isListType,
|
|
@@ -14,6 +13,7 @@ import {
|
|
|
14
13
|
getUnionValue,
|
|
15
14
|
} from './union-type-util'
|
|
16
15
|
import { hasEntryDirective, isUnionOfEntryTypes } from './entry-type-util'
|
|
16
|
+
import { createError, ErrorCode } from '../errors'
|
|
17
17
|
|
|
18
18
|
function isPermittedReferenceType(
|
|
19
19
|
referencedTypeName: string,
|
|
@@ -45,7 +45,14 @@ async function validateReference(
|
|
|
45
45
|
return
|
|
46
46
|
} else if (isListType(fieldType)) {
|
|
47
47
|
if (!Array.isArray(fieldValue)) {
|
|
48
|
-
throw
|
|
48
|
+
throw createError(
|
|
49
|
+
`Expected array while validation references for field "${fieldName}".`,
|
|
50
|
+
ErrorCode.SCHEMA_DATA_MISMATCH,
|
|
51
|
+
{
|
|
52
|
+
fieldName: fieldName,
|
|
53
|
+
fieldValue: fieldValue,
|
|
54
|
+
},
|
|
55
|
+
)
|
|
49
56
|
}
|
|
50
57
|
for (const fieldListElement of fieldValue) {
|
|
51
58
|
await validateReference(
|
|
@@ -58,7 +65,14 @@ async function validateReference(
|
|
|
58
65
|
return
|
|
59
66
|
} else if (isUnionType(fieldType) || isObjectType(fieldType)) {
|
|
60
67
|
if (!('id' in fieldValue)) {
|
|
61
|
-
throw
|
|
68
|
+
throw createError(
|
|
69
|
+
`Expected key "id" in data while validating reference for field "${fieldName}".`,
|
|
70
|
+
ErrorCode.SCHEMA_DATA_MISMATCH,
|
|
71
|
+
{
|
|
72
|
+
fieldName: fieldName,
|
|
73
|
+
fieldValue: fieldValue,
|
|
74
|
+
},
|
|
75
|
+
)
|
|
62
76
|
}
|
|
63
77
|
const referencedId = fieldValue.id
|
|
64
78
|
let referencedTypeName
|
|
@@ -69,24 +83,22 @@ async function validateReference(
|
|
|
69
83
|
referencedId,
|
|
70
84
|
)
|
|
71
85
|
} catch (error) {
|
|
72
|
-
throw
|
|
73
|
-
`
|
|
86
|
+
throw createError(
|
|
87
|
+
`Failed to resolve entry reference "${referencedId}".`,
|
|
88
|
+
ErrorCode.BAD_USER_INPUT,
|
|
74
89
|
{
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
fieldName: fieldName,
|
|
78
|
-
},
|
|
90
|
+
fieldName: fieldName,
|
|
91
|
+
fieldValue: referencedId,
|
|
79
92
|
},
|
|
80
93
|
)
|
|
81
94
|
}
|
|
82
95
|
if (!isPermittedReferenceType(referencedTypeName, fieldType)) {
|
|
83
|
-
throw
|
|
84
|
-
`Reference with
|
|
96
|
+
throw createError(
|
|
97
|
+
`Reference with ID "${referencedId}" points to entry of incompatible type "${referencedTypeName}".`,
|
|
98
|
+
ErrorCode.BAD_USER_INPUT,
|
|
85
99
|
{
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
fieldName: fieldName,
|
|
89
|
-
},
|
|
100
|
+
fieldName: fieldName,
|
|
101
|
+
fieldValue: referencedId,
|
|
90
102
|
},
|
|
91
103
|
)
|
|
92
104
|
}
|
|
@@ -131,13 +143,23 @@ export async function getReferencedEntryIds(
|
|
|
131
143
|
return [data.id]
|
|
132
144
|
}
|
|
133
145
|
|
|
134
|
-
const
|
|
135
|
-
const
|
|
146
|
+
const requestedUnionTypeName = getUnionTypeNameFromFieldValue(data)
|
|
147
|
+
const concreteFieldUnionType = type
|
|
136
148
|
.getTypes()
|
|
137
|
-
.find(
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
149
|
+
.find(
|
|
150
|
+
(concreteFieldType) =>
|
|
151
|
+
concreteFieldType.name === requestedUnionTypeName,
|
|
152
|
+
)
|
|
153
|
+
if (!concreteFieldUnionType) {
|
|
154
|
+
throw createError(
|
|
155
|
+
`Type "${requestedUnionTypeName}" found in field data is not a valid type for ` +
|
|
156
|
+
`union type "${type.name}".`,
|
|
157
|
+
ErrorCode.BAD_REPOSITORY_DATA,
|
|
158
|
+
{
|
|
159
|
+
typeName: type.name,
|
|
160
|
+
fieldName: fieldName ? fieldName : undefined,
|
|
161
|
+
fieldValue: data,
|
|
162
|
+
},
|
|
141
163
|
)
|
|
142
164
|
}
|
|
143
165
|
const unionValue = getUnionValue(data)
|
|
@@ -145,7 +167,7 @@ export async function getReferencedEntryIds(
|
|
|
145
167
|
rootType,
|
|
146
168
|
context,
|
|
147
169
|
fieldName,
|
|
148
|
-
|
|
170
|
+
concreteFieldUnionType,
|
|
149
171
|
unionValue,
|
|
150
172
|
)
|
|
151
173
|
} else if (isObjectType(type)) {
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import { EntryData } from '@commitspark/git-adapter'
|
|
2
|
+
import { createError, ErrorCode } from '../errors'
|
|
2
3
|
|
|
3
|
-
export function getUnionTypeNameFromFieldValue(fieldValue:
|
|
4
|
-
if (typeof fieldValue !== 'object') {
|
|
5
|
-
throw
|
|
4
|
+
export function getUnionTypeNameFromFieldValue(fieldValue: unknown): string {
|
|
5
|
+
if (typeof fieldValue !== 'object' || fieldValue === null) {
|
|
6
|
+
throw createError(
|
|
7
|
+
`Expected object value in order to determine union type name.`,
|
|
8
|
+
ErrorCode.BAD_REPOSITORY_DATA,
|
|
9
|
+
{
|
|
10
|
+
fieldValue: fieldValue,
|
|
11
|
+
},
|
|
12
|
+
)
|
|
6
13
|
}
|
|
7
14
|
|
|
8
15
|
// Based on our @oneOf directive, we expect only one field whose name
|
|
@@ -10,11 +17,17 @@ export function getUnionTypeNameFromFieldValue(fieldValue: any): string {
|
|
|
10
17
|
return Object.keys(fieldValue)[0]
|
|
11
18
|
}
|
|
12
19
|
|
|
13
|
-
export function getUnionValue(fieldValue:
|
|
14
|
-
if (typeof fieldValue !== 'object') {
|
|
15
|
-
throw
|
|
20
|
+
export function getUnionValue(fieldValue: unknown): EntryData {
|
|
21
|
+
if (typeof fieldValue !== 'object' || fieldValue === null) {
|
|
22
|
+
throw createError(
|
|
23
|
+
`Expected object value in order to determine union value.`,
|
|
24
|
+
ErrorCode.BAD_REPOSITORY_DATA,
|
|
25
|
+
{
|
|
26
|
+
fieldValue: fieldValue,
|
|
27
|
+
},
|
|
28
|
+
)
|
|
16
29
|
}
|
|
17
30
|
|
|
18
31
|
const firstKey = Object.keys(fieldValue)[0]
|
|
19
|
-
return fieldValue[firstKey]
|
|
32
|
+
return (fieldValue as Record<string, EntryData>)[firstKey]
|
|
20
33
|
}
|
package/src/index.ts
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
VariableValues,
|
|
8
8
|
} from './client'
|
|
9
9
|
import { GitAdapter } from '@commitspark/git-adapter'
|
|
10
|
+
import { ErrorCode, ErrorMetadata } from './graphql/errors'
|
|
10
11
|
|
|
11
12
|
interface Client {
|
|
12
13
|
postGraphQL<
|
|
@@ -19,7 +20,7 @@ interface Client {
|
|
|
19
20
|
getSchema(ref: string): Promise<SchemaResponse>
|
|
20
21
|
}
|
|
21
22
|
|
|
22
|
-
export { Client, GraphQLResponse, SchemaResponse }
|
|
23
|
+
export { Client, GraphQLResponse, SchemaResponse, ErrorCode, ErrorMetadata }
|
|
23
24
|
|
|
24
25
|
export async function createClient(gitAdapter: GitAdapter): Promise<Client> {
|
|
25
26
|
return {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Entry, GitAdapter } from '@commitspark/git-adapter'
|
|
2
|
-
import {
|
|
2
|
+
import { createError, ErrorCode } from '../graphql/errors'
|
|
3
3
|
|
|
4
4
|
export async function getTypeById(
|
|
5
5
|
gitAdapter: GitAdapter,
|
|
@@ -9,10 +9,9 @@ export async function getTypeById(
|
|
|
9
9
|
const allEntries = await gitAdapter.getEntries(commitHash)
|
|
10
10
|
const requestedEntry = allEntries.find((entry: Entry) => entry.id === id)
|
|
11
11
|
if (requestedEntry === undefined) {
|
|
12
|
-
throw
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
},
|
|
12
|
+
throw createError(`No entry with id "${id}" exists.`, ErrorCode.NOT_FOUND, {
|
|
13
|
+
argumentName: 'id',
|
|
14
|
+
argumentValue: id,
|
|
16
15
|
})
|
|
17
16
|
}
|
|
18
17
|
|
|
@@ -27,10 +26,9 @@ export async function findById(
|
|
|
27
26
|
const allEntries = await gitAdapter.getEntries(commitHash)
|
|
28
27
|
const requestedEntry = allEntries.find((entry: Entry) => entry.id === id)
|
|
29
28
|
if (requestedEntry === undefined) {
|
|
30
|
-
throw
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
},
|
|
29
|
+
throw createError(`No entry with id "${id}" exists.`, ErrorCode.NOT_FOUND, {
|
|
30
|
+
argumentName: 'id',
|
|
31
|
+
argumentValue: id,
|
|
34
32
|
})
|
|
35
33
|
}
|
|
36
34
|
|
|
@@ -57,13 +55,13 @@ export async function findByTypeId(
|
|
|
57
55
|
(entry: Entry) => entry.id === id && entry.metadata.type === type,
|
|
58
56
|
)
|
|
59
57
|
if (requestedEntry === undefined) {
|
|
60
|
-
throw
|
|
61
|
-
`No entry of type "${type}" with id "${id}" exists
|
|
58
|
+
throw createError(
|
|
59
|
+
`No entry of type "${type}" with id "${id}" exists.`,
|
|
60
|
+
ErrorCode.NOT_FOUND,
|
|
62
61
|
{
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
},
|
|
62
|
+
typeName: type,
|
|
63
|
+
argumentName: 'id',
|
|
64
|
+
argumentValue: id,
|
|
67
65
|
},
|
|
68
66
|
)
|
|
69
67
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query-all-resolver.js","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/query-all-resolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,kEAA6D;AAItD,MAAM,gBAAgB,GAKzB,CAAO,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IACrC,MAAM,OAAO,GAAG,MAAM,IAAA,wBAAU,EAC9B,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,aAAa,EAAE,EACvB,OAAO,CAAC,IAAI,CAAC,IAAI,CAClB,CAAA;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,uCAAY,KAAK,CAAC,IAAI,KAAE,EAAE,EAAE,KAAK,CAAC,EAAE,IAAE;IACxC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA,CAAA;AAfY,QAAA,gBAAgB,oBAe5B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query-all-resolver.js","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/query-all-resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAI7D,MAAM,CAAC,MAAM,gBAAgB,GAKzB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IACrC,MAAM,OAAO,GAAG,MAAM,UAAU,CAC9B,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,aAAa,EAAE,EACvB,OAAO,CAAC,IAAI,CAAC,IAAI,CAClB,CAAA;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAA;IACxC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { EntryData } from '@commitspark/git-adapter';
|
|
2
|
-
import { GraphQLFieldResolver } from 'graphql';
|
|
3
|
-
import { QueryMutationResolverContext } from '../types';
|
|
4
|
-
export declare const queryAllResolver: GraphQLFieldResolver<any, QueryMutationResolverContext, any, Promise<EntryData[]>>;
|
|
5
|
-
//# sourceMappingURL=query-all-resolver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query-all-resolver.d.ts","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/query-all-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAA;AAEvD,eAAO,MAAM,gBAAgB,EAAE,oBAAoB,CACjD,GAAG,EACH,4BAA4B,EAC5B,GAAG,EACH,OAAO,CAAC,SAAS,EAAE,CAAC,CAWrB,CAAA"}
|