@commitspark/graphql-api 0.9.3 → 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 +17 -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 +4 -5
  17. package/dist/graphql/input-type-generator.service.js +23 -13
  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 -5
  46. package/dist/graphql/schema-utils/entry-reference-util.js +108 -25
  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 +33 -18
  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 +177 -35
  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 -83
  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 -126
@@ -1 +0,0 @@
1
- {"version":3,"file":"union-value-resolver-generator.js","sourceRoot":"","sources":["../../../src/graphql/resolver-generators/union-value-resolver-generator.ts"],"names":[],"mappings":"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"}
@@ -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,126 +0,0 @@
1
- import {
2
- GraphQLFieldResolver,
3
- GraphQLNullableType,
4
- GraphQLUnionType,
5
- } from 'graphql/type/definition'
6
- import { ApolloContext } from '../../app/api.service'
7
- import { Entry } from '../../persistence/persistence.service'
8
- import { GraphQLSchema, Kind } from 'graphql'
9
- import {
10
- GraphQLField,
11
- GraphQLList,
12
- GraphQLNonNull,
13
- GraphQLObjectType,
14
- } from 'graphql/type'
15
- import { EntryReferenceUtil } from '../schema-utils/entry-reference-util'
16
-
17
- export class UnionValueResolverGenerator {
18
- constructor(private readonly entryReferenceUtil: EntryReferenceUtil) {}
19
-
20
- public createResolver(
21
- schema: GraphQLSchema,
22
- ): Record<
23
- string,
24
- Record<string, GraphQLFieldResolver<any, ApolloContext, any, Entry | null>>
25
- > {
26
- const resolvers: Record<
27
- string,
28
- Record<
29
- string,
30
- GraphQLFieldResolver<any, ApolloContext, any, Entry | null>
31
- >
32
- > = {}
33
- for (const typeName of Object.keys(schema.getTypeMap())) {
34
- const type = schema.getType(typeName)
35
- if (!type || type.astNode?.kind !== Kind.OBJECT_TYPE_DEFINITION) {
36
- continue
37
- }
38
- const objectType = type as GraphQLObjectType
39
- const unionFieldsNotUsingEntry =
40
- this.getFieldsWithUnionTypeNotUsingEntryTypes(objectType)
41
-
42
- const fieldResolvers: Record<
43
- string,
44
- GraphQLFieldResolver<any, ApolloContext, any, Entry | null>
45
- > = {}
46
- for (const field of unionFieldsNotUsingEntry) {
47
- fieldResolvers[field.name] = (
48
- obj,
49
- args,
50
- context,
51
- info,
52
- ): Entry | null => {
53
- const fieldValue = obj[info.fieldName]
54
- return this.collapseTypeField(field.type, fieldValue)
55
- }
56
- }
57
-
58
- if (Object.keys(fieldResolvers).length > 0) {
59
- resolvers[typeName] = fieldResolvers
60
- }
61
- }
62
-
63
- return resolvers
64
- }
65
-
66
- private getFieldsWithUnionTypeNotUsingEntryTypes(
67
- objectType: GraphQLObjectType,
68
- ): GraphQLField<any, any>[] {
69
- const fields = []
70
- for (const fieldsKey in objectType.getFields()) {
71
- const field: GraphQLField<any, any> = objectType.getFields()[fieldsKey]
72
- if (
73
- this.buildsOnUnionType(field.type) &&
74
- !this.entryReferenceUtil.buildsOnTypeWithEntryDirective(field.type)
75
- ) {
76
- fields.push(field)
77
- }
78
- }
79
- return fields
80
- }
81
-
82
- private buildsOnUnionType(type: GraphQLNullableType): boolean {
83
- if (type instanceof GraphQLNonNull) {
84
- return this.buildsOnUnionType(type.ofType)
85
- } else if (type instanceof GraphQLList) {
86
- return this.buildsOnUnionType(type.ofType)
87
- } else if (type instanceof GraphQLUnionType) {
88
- return true
89
- } else if (type instanceof GraphQLObjectType) {
90
- return false
91
- }
92
- return false
93
- }
94
-
95
- private collapseTypeField(
96
- type: GraphQLNullableType,
97
- fieldValue: Record<string, any> | Record<string, any>[] | null,
98
- ): Record<string, any> | null {
99
- if (type instanceof GraphQLNonNull) {
100
- return this.collapseTypeField(type.ofType, fieldValue)
101
- } else if (fieldValue === null) {
102
- return null
103
- } else if (type instanceof GraphQLList) {
104
- if (!Array.isArray(fieldValue)) {
105
- throw new Error('Expected array value')
106
- }
107
- return fieldValue.map((item) => this.collapseTypeField(type.ofType, item))
108
- } else {
109
- // Based on our @oneOf directive, we expect only one field whose name
110
- // corresponds to the concrete type's name.
111
- const firstKey = Object.keys(fieldValue)[0]
112
- if (Array.isArray(fieldValue)) {
113
- throw new Error('Did not expect array value')
114
- }
115
-
116
- // We replace the above name field that nests our concrete data directly
117
- // with the data and a `__typename` field, so that our output data
118
- // corresponds to the output schema provided by the user (i.e. there is
119
- // no additional nesting level there).
120
- return {
121
- ...fieldValue[firstKey],
122
- __typename: firstKey.slice(0, 1).toUpperCase() + firstKey.slice(1),
123
- }
124
- }
125
- }
126
- }