@commitspark/graphql-api 0.9.4 → 0.10.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.
Files changed (89) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/container.js +21 -13
  3. package/dist/container.js.map +1 -1
  4. package/dist/graphql/field-resolver/entry-reference-resolver.d.ts +9 -0
  5. package/dist/graphql/field-resolver/entry-reference-resolver.js +15 -0
  6. package/dist/graphql/field-resolver/entry-reference-resolver.js.map +1 -0
  7. package/dist/graphql/field-resolver/field-default-value-resolver.d.ts +14 -0
  8. package/dist/graphql/field-resolver/field-default-value-resolver.js +73 -0
  9. package/dist/graphql/field-resolver/field-default-value-resolver.js.map +1 -0
  10. package/dist/graphql/field-resolver/fieldResolver.d.ts +11 -0
  11. package/dist/graphql/field-resolver/fieldResolver.js +3 -0
  12. package/dist/graphql/field-resolver/fieldResolver.js.map +1 -0
  13. package/dist/graphql/field-resolver/union-value-resolver.d.ts +10 -0
  14. package/dist/graphql/field-resolver/union-value-resolver.js +17 -0
  15. package/dist/graphql/field-resolver/union-value-resolver.js.map +1 -0
  16. package/dist/graphql/input-type-generator.service.d.ts +3 -3
  17. package/dist/graphql/input-type-generator.service.js +18 -7
  18. package/dist/graphql/input-type-generator.service.js.map +1 -1
  19. package/dist/graphql/queries-mutations-generator.service.d.ts +1 -1
  20. package/dist/graphql/resolver-generators/mutation-create-resolver-generator.d.ts +3 -1
  21. package/dist/graphql/resolver-generators/mutation-create-resolver-generator.js +46 -4
  22. package/dist/graphql/resolver-generators/mutation-create-resolver-generator.js.map +1 -1
  23. package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.d.ts +3 -1
  24. package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.js +32 -9
  25. package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.js.map +1 -1
  26. package/dist/graphql/resolver-generators/{mutation-update.resolver-generator.d.ts → mutation-update-resolver-generator.d.ts} +4 -1
  27. package/dist/graphql/resolver-generators/mutation-update-resolver-generator.js +53 -0
  28. package/dist/graphql/resolver-generators/mutation-update-resolver-generator.js.map +1 -0
  29. package/dist/graphql/resolver-generators/object-type-field-default-value-resolver-generator.d.ts +13 -0
  30. package/dist/graphql/resolver-generators/object-type-field-default-value-resolver-generator.js +58 -0
  31. package/dist/graphql/resolver-generators/object-type-field-default-value-resolver-generator.js.map +1 -0
  32. package/dist/graphql/resolver-generators/query-all-resolver-generator.js +4 -1
  33. package/dist/graphql/resolver-generators/query-all-resolver-generator.js.map +1 -1
  34. package/dist/graphql/resolver-generators/query-by-id-resolver-generator.js +2 -1
  35. package/dist/graphql/resolver-generators/query-by-id-resolver-generator.js.map +1 -1
  36. package/dist/graphql/resolver-generators/union-type-resolver-generator.d.ts +4 -4
  37. package/dist/graphql/resolver-generators/union-type-resolver-generator.js +3 -3
  38. package/dist/graphql/resolver-generators/union-type-resolver-generator.js.map +1 -1
  39. package/dist/graphql/schema-analyzer.service.d.ts +1 -9
  40. package/dist/graphql/schema-analyzer.service.js +6 -17
  41. package/dist/graphql/schema-analyzer.service.js.map +1 -1
  42. package/dist/graphql/schema-generator.service.d.ts +3 -5
  43. package/dist/graphql/schema-generator.service.js +7 -12
  44. package/dist/graphql/schema-generator.service.js.map +1 -1
  45. package/dist/graphql/schema-utils/entry-reference-util.d.ts +12 -4
  46. package/dist/graphql/schema-utils/entry-reference-util.js +105 -21
  47. package/dist/graphql/schema-utils/entry-reference-util.js.map +1 -1
  48. package/dist/graphql/schema-utils/entry-type-util.d.ts +6 -0
  49. package/dist/graphql/schema-utils/entry-type-util.js +34 -0
  50. package/dist/graphql/schema-utils/entry-type-util.js.map +1 -0
  51. package/dist/graphql/schema-utils/union-type-util.d.ts +5 -0
  52. package/dist/graphql/schema-utils/union-type-util.js +21 -0
  53. package/dist/graphql/schema-utils/union-type-util.js.map +1 -0
  54. package/dist/persistence/persistence.service.d.ts +4 -7
  55. package/dist/persistence/persistence.service.js +18 -83
  56. package/dist/persistence/persistence.service.js.map +1 -1
  57. package/dist/tsconfig.build.tsbuildinfo +1 -1
  58. package/package.json +2 -2
  59. package/src/container.ts +29 -15
  60. package/src/graphql/field-resolver/entry-reference-resolver.ts +49 -0
  61. package/src/graphql/field-resolver/field-default-value-resolver.ts +154 -0
  62. package/src/graphql/field-resolver/fieldResolver.ts +19 -0
  63. package/src/graphql/field-resolver/union-value-resolver.ts +46 -0
  64. package/src/graphql/input-type-generator.service.ts +22 -8
  65. package/src/graphql/queries-mutations-generator.service.ts +1 -1
  66. package/src/graphql/resolver-generators/mutation-create-resolver-generator.ts +78 -13
  67. package/src/graphql/resolver-generators/mutation-delete-resolver-generator.ts +69 -21
  68. package/src/graphql/resolver-generators/mutation-update-resolver-generator.ts +131 -0
  69. package/src/graphql/resolver-generators/object-type-field-default-value-resolver-generator.ts +119 -0
  70. package/src/graphql/resolver-generators/query-all-resolver-generator.ts +5 -1
  71. package/src/graphql/resolver-generators/query-by-id-resolver-generator.ts +3 -1
  72. package/src/graphql/resolver-generators/union-type-resolver-generator.ts +5 -7
  73. package/src/graphql/schema-analyzer.service.ts +10 -24
  74. package/src/graphql/schema-generator.service.ts +11 -20
  75. package/src/graphql/schema-utils/entry-reference-util.ts +170 -30
  76. package/src/graphql/schema-utils/entry-type-util.ts +42 -0
  77. package/src/graphql/schema-utils/union-type-util.ts +23 -0
  78. package/src/persistence/persistence.service.ts +33 -132
  79. package/dist/graphql/resolver-generators/entry-reference-resolver.generator.d.ts +0 -12
  80. package/dist/graphql/resolver-generators/entry-reference-resolver.generator.js +0 -29
  81. package/dist/graphql/resolver-generators/entry-reference-resolver.generator.js.map +0 -1
  82. package/dist/graphql/resolver-generators/mutation-update.resolver-generator.js +0 -29
  83. package/dist/graphql/resolver-generators/mutation-update.resolver-generator.js.map +0 -1
  84. package/dist/graphql/resolver-generators/union-value-resolver-generator.d.ts +0 -13
  85. package/dist/graphql/resolver-generators/union-value-resolver-generator.js +0 -80
  86. package/dist/graphql/resolver-generators/union-value-resolver-generator.js.map +0 -1
  87. package/src/graphql/resolver-generators/entry-reference-resolver.generator.ts +0 -71
  88. package/src/graphql/resolver-generators/mutation-update.resolver-generator.ts +0 -59
  89. package/src/graphql/resolver-generators/union-value-resolver-generator.ts +0 -125
@@ -1,71 +0,0 @@
1
- import { GraphQLField, GraphQLObjectType } from 'graphql'
2
- import {
3
- Entry,
4
- PersistenceService,
5
- } from '../../persistence/persistence.service'
6
- import { ApolloContext } from '../../app/api.service'
7
- import { GraphQLFieldResolver } from 'graphql/type/definition'
8
-
9
- export class EntryReferenceResolverGenerator {
10
- constructor(private readonly persistence: PersistenceService) {}
11
-
12
- public createResolver(
13
- context: ApolloContext,
14
- obj: {
15
- type: GraphQLObjectType
16
- fields: GraphQLField<any, any>[]
17
- },
18
- ): Record<
19
- string,
20
- GraphQLFieldResolver<
21
- Record<string, any>,
22
- ApolloContext,
23
- any,
24
- Promise<Entry | Entry[] | null>
25
- >
26
- > {
27
- const persistence = this.persistence
28
-
29
- const fieldResolvers: Record<
30
- string,
31
- GraphQLFieldResolver<
32
- Record<string, any>,
33
- ApolloContext,
34
- any,
35
- Promise<Entry | Entry[] | null>
36
- >
37
- > = {}
38
-
39
- for (const field of obj.fields) {
40
- const fieldName = field.name
41
- fieldResolvers[fieldName] = async (
42
- source,
43
- args,
44
- context,
45
- info,
46
- ): Promise<Entry | Entry[] | null> => {
47
- if (source[fieldName] === undefined || source[fieldName] === null) {
48
- return null
49
- }
50
- // TODO decide this based on type definition, not data
51
- if (Array.isArray(source[fieldName])) {
52
- return source[fieldName].map((el: any) =>
53
- persistence.findById(
54
- context.gitAdapter,
55
- context.getCurrentRef(),
56
- el.id,
57
- ),
58
- )
59
- } else {
60
- return persistence.findById(
61
- context.gitAdapter,
62
- context.getCurrentRef(),
63
- source[fieldName].id,
64
- )
65
- }
66
- }
67
- }
68
-
69
- return fieldResolvers
70
- }
71
- }
@@ -1,59 +0,0 @@
1
- import {
2
- Entry,
3
- PersistenceService,
4
- } from '../../persistence/persistence.service'
5
- import { GraphQLFieldResolver } from 'graphql/type/definition'
6
- import { ApolloContext } from '../../app/api.service'
7
- import { GraphQLError } from 'graphql/error/GraphQLError'
8
-
9
- export class MutationUpdateResolverGenerator {
10
- constructor(private readonly persistence: PersistenceService) {}
11
-
12
- public createResolver(
13
- typeName: string,
14
- ): GraphQLFieldResolver<any, ApolloContext, any, Promise<Entry>> {
15
- return async (
16
- source,
17
- args,
18
- context: ApolloContext,
19
- info,
20
- ): Promise<Entry> => {
21
- try {
22
- await this.persistence.findByTypeId(
23
- context.gitAdapter,
24
- context.getCurrentRef(),
25
- typeName,
26
- args.id,
27
- )
28
- } catch (_) {
29
- throw new GraphQLError(
30
- `No entry of type "${typeName}" with id "${args.id}" exists`,
31
- {
32
- extensions: {
33
- code: 'BAD_USER_INPUT',
34
- argumentName: 'id',
35
- },
36
- },
37
- )
38
- }
39
-
40
- // TODO validate ID references in payload to assert referenced ID exists and points to correct entry type
41
- const updateResult = await this.persistence.updateByTypeId(
42
- context.gitAdapter,
43
- context.branch,
44
- context.getCurrentRef(),
45
- typeName,
46
- args.id,
47
- args.data,
48
- args.message,
49
- )
50
- context.setCurrentRef(updateResult.ref)
51
- return this.persistence.findByTypeId(
52
- context.gitAdapter,
53
- context.getCurrentRef(),
54
- typeName,
55
- args.id,
56
- )
57
- }
58
- }
59
- }
@@ -1,125 +0,0 @@
1
- import { GraphQLFieldResolver } from 'graphql/type/definition'
2
- import { ApolloContext } from '../../app/api.service'
3
- import { Entry } from '../../persistence/persistence.service'
4
- import {
5
- GraphQLField,
6
- GraphQLNullableType,
7
- GraphQLObjectType,
8
- GraphQLSchema,
9
- isListType,
10
- isNonNullType,
11
- isObjectType,
12
- isUnionType,
13
- } from 'graphql'
14
- import { EntryReferenceUtil } from '../schema-utils/entry-reference-util'
15
-
16
- export class UnionValueResolverGenerator {
17
- constructor(private readonly entryReferenceUtil: EntryReferenceUtil) {}
18
-
19
- public createResolver(
20
- schema: GraphQLSchema,
21
- ): Record<
22
- string,
23
- Record<string, GraphQLFieldResolver<any, ApolloContext, any, Entry | null>>
24
- > {
25
- const resolvers: Record<
26
- string,
27
- Record<
28
- string,
29
- GraphQLFieldResolver<any, ApolloContext, any, Entry | null>
30
- >
31
- > = {}
32
- for (const typeName of Object.keys(schema.getTypeMap())) {
33
- const type = schema.getType(typeName)
34
- if (!isObjectType(type)) {
35
- continue
36
- }
37
- const objectType = type as GraphQLObjectType
38
- const unionFieldsNotUsingEntry =
39
- this.getFieldsWithUnionTypeNotUsingEntryTypes(objectType)
40
-
41
- const fieldResolvers: Record<
42
- string,
43
- GraphQLFieldResolver<any, ApolloContext, any, Entry | null>
44
- > = {}
45
- for (const field of unionFieldsNotUsingEntry) {
46
- fieldResolvers[field.name] = (
47
- obj,
48
- args,
49
- context,
50
- info,
51
- ): Entry | null => {
52
- const fieldValue = obj[info.fieldName]
53
- return this.collapseTypeField(field.type, fieldValue)
54
- }
55
- }
56
-
57
- if (Object.keys(fieldResolvers).length > 0) {
58
- resolvers[typeName] = fieldResolvers
59
- }
60
- }
61
-
62
- return resolvers
63
- }
64
-
65
- private getFieldsWithUnionTypeNotUsingEntryTypes(
66
- objectType: GraphQLObjectType,
67
- ): GraphQLField<any, any>[] {
68
- const fields = []
69
- for (const fieldsKey in objectType.getFields()) {
70
- const field: GraphQLField<any, any> = objectType.getFields()[fieldsKey]
71
- if (
72
- this.buildsOnUnionType(field.type) &&
73
- !this.entryReferenceUtil.buildsOnTypeWithEntryDirective(field.type)
74
- ) {
75
- fields.push(field)
76
- }
77
- }
78
- return fields
79
- }
80
-
81
- private buildsOnUnionType(type: GraphQLNullableType): boolean {
82
- if (isNonNullType(type)) {
83
- return this.buildsOnUnionType(type.ofType)
84
- } else if (isListType(type)) {
85
- return this.buildsOnUnionType(type.ofType)
86
- } else if (isUnionType(type)) {
87
- return true
88
- } else if (isObjectType(type)) {
89
- return false
90
- }
91
- return false
92
- }
93
-
94
- private collapseTypeField(
95
- type: GraphQLNullableType,
96
- fieldValue: Record<string, any> | Record<string, any>[] | null,
97
- ): Record<string, any> | null {
98
- if (isNonNullType(type)) {
99
- return this.collapseTypeField(type.ofType, fieldValue)
100
- } else if (fieldValue === null) {
101
- return null
102
- } else if (isListType(type)) {
103
- if (!Array.isArray(fieldValue)) {
104
- throw new Error('Expected array value')
105
- }
106
- return fieldValue.map((item) => this.collapseTypeField(type.ofType, item))
107
- } else {
108
- // Based on our @oneOf directive, we expect only one field whose name
109
- // corresponds to the concrete type's name.
110
- const firstKey = Object.keys(fieldValue)[0]
111
- if (Array.isArray(fieldValue)) {
112
- throw new Error('Did not expect array value')
113
- }
114
-
115
- // We replace the above name field that nests our concrete data directly
116
- // with the data and a `__typename` field, so that our output data
117
- // corresponds to the output schema provided by the user (i.e. there is
118
- // no additional nesting level there).
119
- return {
120
- ...fieldValue[firstKey],
121
- __typename: firstKey.slice(0, 1).toUpperCase() + firstKey.slice(1),
122
- }
123
- }
124
- }
125
- }