@commitspark/graphql-api 0.7.0 → 0.9.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 (129) hide show
  1. package/.eslintrc.js +3 -2
  2. package/.github/workflows/jest.yaml +17 -0
  3. package/.github/workflows/lint.yaml +17 -0
  4. package/CHANGELOG.md +15 -0
  5. package/dist/jest.config.d.ts +7 -0
  6. package/dist/jest.config.js +12 -0
  7. package/dist/jest.config.js.map +1 -0
  8. package/dist/{app → src/app}/api.service.js +1 -0
  9. package/dist/src/app/api.service.js.map +1 -0
  10. package/dist/src/container.js.map +1 -0
  11. package/dist/src/graphql/apollo-config-factory.service.js.map +1 -0
  12. package/dist/{graphql → src/graphql}/input-type-generator.service.js +1 -1
  13. package/dist/src/graphql/input-type-generator.service.js.map +1 -0
  14. package/dist/{graphql → src/graphql}/queries-mutations-generator.service.js +1 -1
  15. package/dist/src/graphql/queries-mutations-generator.service.js.map +1 -0
  16. package/dist/{graphql → src/graphql}/resolver-generators/entry-reference-resolver.generator.d.ts +1 -1
  17. package/dist/{graphql → src/graphql}/resolver-generators/entry-reference-resolver.generator.js +2 -2
  18. package/dist/src/graphql/resolver-generators/entry-reference-resolver.generator.js.map +1 -0
  19. package/dist/src/graphql/resolver-generators/mutation-create-resolver-generator.js +31 -0
  20. package/dist/src/graphql/resolver-generators/mutation-create-resolver-generator.js.map +1 -0
  21. package/dist/{graphql → src/graphql}/resolver-generators/mutation-delete-resolver-generator.js +12 -0
  22. package/dist/src/graphql/resolver-generators/mutation-delete-resolver-generator.js.map +1 -0
  23. package/dist/{graphql → src/graphql}/resolver-generators/mutation-update.resolver-generator.js +12 -0
  24. package/dist/src/graphql/resolver-generators/mutation-update.resolver-generator.js.map +1 -0
  25. package/dist/src/graphql/resolver-generators/query-all-resolver-generator.js.map +1 -0
  26. package/dist/src/graphql/resolver-generators/query-by-id-resolver-generator.js.map +1 -0
  27. package/dist/src/graphql/resolver-generators/query-count-all-resolver-generator.js.map +1 -0
  28. package/dist/src/graphql/resolver-generators/query-type-by-id-resolver-generator.js.map +1 -0
  29. package/dist/src/graphql/resolver-generators/union-type-resolver-generator.js.map +1 -0
  30. package/dist/src/graphql/resolver-generators/union-value-resolver-generator.js.map +1 -0
  31. package/dist/src/graphql/schema-analyzer.service.js.map +1 -0
  32. package/dist/{graphql → src/graphql}/schema-generator.service.js +10 -9
  33. package/dist/src/graphql/schema-generator.service.js.map +1 -0
  34. package/dist/{graphql → src/graphql}/schema-root-type-generator.service.js +3 -1
  35. package/dist/src/graphql/schema-root-type-generator.service.js.map +1 -0
  36. package/dist/src/graphql/schema-utils/entry-reference-util.js.map +1 -0
  37. package/dist/src/graphql/schema-validator.js.map +1 -0
  38. package/dist/src/index.js.map +1 -0
  39. package/dist/{persistence → src/persistence}/persistence.service.d.ts +6 -9
  40. package/dist/{persistence → src/persistence}/persistence.service.js +15 -11
  41. package/dist/src/persistence/persistence.service.js.map +1 -0
  42. package/dist/tests/integration/mutation/create.test.d.ts +1 -0
  43. package/dist/tests/integration/mutation/create.test.js +78 -0
  44. package/dist/tests/integration/mutation/create.test.js.map +1 -0
  45. package/dist/tests/integration/mutation/delete.test.d.ts +1 -0
  46. package/dist/tests/integration/mutation/delete.test.js +117 -0
  47. package/dist/tests/integration/mutation/delete.test.js.map +1 -0
  48. package/dist/tests/integration/mutation/update.test.d.ts +1 -0
  49. package/dist/tests/integration/mutation/update.test.js +134 -0
  50. package/dist/tests/integration/mutation/update.test.js.map +1 -0
  51. package/dist/tests/integration/query/query.test.d.ts +1 -0
  52. package/dist/tests/integration/query/query.test.js +237 -0
  53. package/dist/tests/integration/query/query.test.js.map +1 -0
  54. package/dist/tests/integration/schema/schema-generator.test.d.ts +1 -0
  55. package/dist/tests/integration/schema/schema-generator.test.js +381 -0
  56. package/dist/tests/integration/schema/schema-generator.test.js.map +1 -0
  57. package/dist/tsconfig.build.tsbuildinfo +1 -1
  58. package/jest.config.ts +14 -0
  59. package/package.json +8 -5
  60. package/src/app/api.service.ts +2 -0
  61. package/src/graphql/input-type-generator.service.ts +1 -1
  62. package/src/graphql/queries-mutations-generator.service.ts +1 -1
  63. package/src/graphql/resolver-generators/entry-reference-resolver.generator.ts +5 -5
  64. package/src/graphql/resolver-generators/mutation-create-resolver-generator.ts +23 -4
  65. package/src/graphql/resolver-generators/mutation-delete-resolver-generator.ts +20 -0
  66. package/src/graphql/resolver-generators/mutation-update.resolver-generator.ts +20 -0
  67. package/src/graphql/schema-generator.service.ts +13 -10
  68. package/src/graphql/schema-root-type-generator.service.ts +3 -1
  69. package/src/persistence/persistence.service.ts +28 -25
  70. package/tests/integration/mutation/create.test.ts +89 -0
  71. package/tests/integration/mutation/delete.test.ts +133 -0
  72. package/tests/integration/mutation/update.test.ts +151 -0
  73. package/tests/integration/query/query.test.ts +253 -0
  74. package/tests/integration/schema/schema-generator.test.ts +399 -0
  75. package/dist/app/api.service.js.map +0 -1
  76. package/dist/container.js.map +0 -1
  77. package/dist/graphql/apollo-config-factory.service.js.map +0 -1
  78. package/dist/graphql/input-type-generator.service.js.map +0 -1
  79. package/dist/graphql/queries-mutations-generator.service.js.map +0 -1
  80. package/dist/graphql/resolver-generators/entry-reference-resolver.generator.js.map +0 -1
  81. package/dist/graphql/resolver-generators/mutation-create-resolver-generator.js +0 -17
  82. package/dist/graphql/resolver-generators/mutation-create-resolver-generator.js.map +0 -1
  83. package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.js.map +0 -1
  84. package/dist/graphql/resolver-generators/mutation-update.resolver-generator.js.map +0 -1
  85. package/dist/graphql/resolver-generators/query-all-resolver-generator.js.map +0 -1
  86. package/dist/graphql/resolver-generators/query-by-id-resolver-generator.js.map +0 -1
  87. package/dist/graphql/resolver-generators/query-count-all-resolver-generator.js.map +0 -1
  88. package/dist/graphql/resolver-generators/query-type-by-id-resolver-generator.js.map +0 -1
  89. package/dist/graphql/resolver-generators/union-type-resolver-generator.js.map +0 -1
  90. package/dist/graphql/resolver-generators/union-value-resolver-generator.js.map +0 -1
  91. package/dist/graphql/schema-analyzer.service.js.map +0 -1
  92. package/dist/graphql/schema-generator.service.js.map +0 -1
  93. package/dist/graphql/schema-root-type-generator.service.js.map +0 -1
  94. package/dist/graphql/schema-utils/entry-reference-util.js.map +0 -1
  95. package/dist/graphql/schema-validator.js.map +0 -1
  96. package/dist/index.js.map +0 -1
  97. package/dist/persistence/persistence.service.js.map +0 -1
  98. /package/dist/{app → src/app}/api.service.d.ts +0 -0
  99. /package/dist/{container.d.ts → src/container.d.ts} +0 -0
  100. /package/dist/{container.js → src/container.js} +0 -0
  101. /package/dist/{graphql → src/graphql}/apollo-config-factory.service.d.ts +0 -0
  102. /package/dist/{graphql → src/graphql}/apollo-config-factory.service.js +0 -0
  103. /package/dist/{graphql → src/graphql}/input-type-generator.service.d.ts +0 -0
  104. /package/dist/{graphql → src/graphql}/queries-mutations-generator.service.d.ts +0 -0
  105. /package/dist/{graphql → src/graphql}/resolver-generators/mutation-create-resolver-generator.d.ts +0 -0
  106. /package/dist/{graphql → src/graphql}/resolver-generators/mutation-delete-resolver-generator.d.ts +0 -0
  107. /package/dist/{graphql → src/graphql}/resolver-generators/mutation-update.resolver-generator.d.ts +0 -0
  108. /package/dist/{graphql → src/graphql}/resolver-generators/query-all-resolver-generator.d.ts +0 -0
  109. /package/dist/{graphql → src/graphql}/resolver-generators/query-all-resolver-generator.js +0 -0
  110. /package/dist/{graphql → src/graphql}/resolver-generators/query-by-id-resolver-generator.d.ts +0 -0
  111. /package/dist/{graphql → src/graphql}/resolver-generators/query-by-id-resolver-generator.js +0 -0
  112. /package/dist/{graphql → src/graphql}/resolver-generators/query-count-all-resolver-generator.d.ts +0 -0
  113. /package/dist/{graphql → src/graphql}/resolver-generators/query-count-all-resolver-generator.js +0 -0
  114. /package/dist/{graphql → src/graphql}/resolver-generators/query-type-by-id-resolver-generator.d.ts +0 -0
  115. /package/dist/{graphql → src/graphql}/resolver-generators/query-type-by-id-resolver-generator.js +0 -0
  116. /package/dist/{graphql → src/graphql}/resolver-generators/union-type-resolver-generator.d.ts +0 -0
  117. /package/dist/{graphql → src/graphql}/resolver-generators/union-type-resolver-generator.js +0 -0
  118. /package/dist/{graphql → src/graphql}/resolver-generators/union-value-resolver-generator.d.ts +0 -0
  119. /package/dist/{graphql → src/graphql}/resolver-generators/union-value-resolver-generator.js +0 -0
  120. /package/dist/{graphql → src/graphql}/schema-analyzer.service.d.ts +0 -0
  121. /package/dist/{graphql → src/graphql}/schema-analyzer.service.js +0 -0
  122. /package/dist/{graphql → src/graphql}/schema-generator.service.d.ts +0 -0
  123. /package/dist/{graphql → src/graphql}/schema-root-type-generator.service.d.ts +0 -0
  124. /package/dist/{graphql → src/graphql}/schema-utils/entry-reference-util.d.ts +0 -0
  125. /package/dist/{graphql → src/graphql}/schema-utils/entry-reference-util.js +0 -0
  126. /package/dist/{graphql → src/graphql}/schema-validator.d.ts +0 -0
  127. /package/dist/{graphql → src/graphql}/schema-validator.js +0 -0
  128. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  129. /package/dist/{index.js → src/index.js} +0 -0
@@ -0,0 +1,381 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jest_mock_extended_1 = require("jest-mock-extended");
4
+ const src_1 = require("../../../src");
5
+ describe('Schema generator', () => {
6
+ it('should extend schema with a CRUD API for an @Entry type', async () => {
7
+ const gitAdapter = (0, jest_mock_extended_1.mock)();
8
+ const gitRef = 'myRef';
9
+ const commitHash = 'abcd';
10
+ const originalSchema = `directive @Entry on OBJECT
11
+ directive @Ui(visibleList:Boolean) on FIELD_DEFINITION
12
+
13
+ type MyEntry @Entry {
14
+ id: ID!
15
+ name: String @Ui(visibleList:true)
16
+ }`;
17
+ gitAdapter.getLatestCommitHash
18
+ .calledWith(gitRef)
19
+ .mockResolvedValue(commitHash);
20
+ gitAdapter.getSchema
21
+ .calledWith(commitHash)
22
+ .mockResolvedValue(originalSchema);
23
+ const apiService = await (0, src_1.getApiService)();
24
+ const result = await apiService.getSchema(gitAdapter, gitRef);
25
+ const expectedSchema = `directive @Entry on OBJECT
26
+
27
+ directive @Ui(visibleList: Boolean) on FIELD_DEFINITION
28
+
29
+ type MyEntry @Entry {
30
+ id: ID!
31
+ name: String @Ui(visibleList: true)
32
+ }
33
+
34
+ schema {
35
+ query: Query
36
+ mutation: Mutation
37
+ }
38
+
39
+ type Query {
40
+ allMyEntrys: [MyEntry]
41
+ _allMyEntrysMeta: ListMetadata
42
+ MyEntry(id: ID!): MyEntry
43
+ _typeName(id: ID!): String
44
+ }
45
+
46
+ type Mutation {
47
+ createMyEntry(id: ID!, data:MyEntryInput, message:String): MyEntry
48
+ updateMyEntry(id: ID!, data:MyEntryInput, message:String): MyEntry
49
+ deleteMyEntry(id: ID!, message:String): DeletionResult
50
+ }
51
+
52
+ type ListMetadata {
53
+ count: Int!
54
+ }
55
+
56
+ type DeletionResult {
57
+ id: ID
58
+ }
59
+
60
+ input MyEntryIdInput {
61
+ id: ID!
62
+ }
63
+
64
+ input MyEntryInput {
65
+ name: String
66
+ }
67
+ `;
68
+ expect(result.data).toBe(expectedSchema);
69
+ expect(result.ref).toBe(commitHash);
70
+ });
71
+ it('should extend schema with a CRUD API for two @Entry types with reference', async () => {
72
+ const gitAdapter = (0, jest_mock_extended_1.mock)();
73
+ const gitRef = 'myRef';
74
+ const commitHash = 'abcd';
75
+ const originalSchema = `directive @Entry on OBJECT
76
+
77
+ type EntryA @Entry {
78
+ id: ID!
79
+ name: String
80
+ }
81
+
82
+ type EntryB @Entry {
83
+ id: ID!
84
+ entryA: EntryA
85
+ }`;
86
+ gitAdapter.getLatestCommitHash
87
+ .calledWith(gitRef)
88
+ .mockResolvedValue(commitHash);
89
+ gitAdapter.getSchema
90
+ .calledWith(commitHash)
91
+ .mockResolvedValue(originalSchema);
92
+ const apiService = await (0, src_1.getApiService)();
93
+ const result = await apiService.getSchema(gitAdapter, gitRef);
94
+ const expectedSchema = `directive @Entry on OBJECT
95
+
96
+ type EntryA @Entry {
97
+ id: ID!
98
+ name: String
99
+ }
100
+
101
+ type EntryB @Entry {
102
+ id: ID!
103
+ entryA: EntryA
104
+ }
105
+
106
+ schema {
107
+ query: Query
108
+ mutation: Mutation
109
+ }
110
+
111
+ type Query {
112
+ allEntryAs: [EntryA]
113
+ allEntryBs: [EntryB]
114
+ _allEntryAsMeta: ListMetadata
115
+ _allEntryBsMeta: ListMetadata
116
+ EntryA(id: ID!): EntryA
117
+ EntryB(id: ID!): EntryB
118
+ _typeName(id: ID!): String
119
+ }
120
+
121
+ type Mutation {
122
+ createEntryA(id: ID!, data:EntryAInput, message:String): EntryA
123
+ createEntryB(id: ID!, data:EntryBInput, message:String): EntryB
124
+ updateEntryA(id: ID!, data:EntryAInput, message:String): EntryA
125
+ updateEntryB(id: ID!, data:EntryBInput, message:String): EntryB
126
+ deleteEntryA(id: ID!, message:String): DeletionResult
127
+ deleteEntryB(id: ID!, message:String): DeletionResult
128
+ }
129
+
130
+ type ListMetadata {
131
+ count: Int!
132
+ }
133
+
134
+ type DeletionResult {
135
+ id: ID
136
+ }
137
+
138
+ input EntryAIdInput {
139
+ id: ID!
140
+ }
141
+
142
+ input EntryBIdInput {
143
+ id: ID!
144
+ }
145
+
146
+ input EntryAInput {
147
+ name: String
148
+ }
149
+
150
+ input EntryBInput {
151
+ entryA: EntryAIdInput
152
+ }
153
+ `;
154
+ expect(result.data).toBe(expectedSchema);
155
+ expect(result.ref).toBe(commitHash);
156
+ });
157
+ it('should extend schema with a CRUD API for an @Entry-based union type', async () => {
158
+ const gitAdapter = (0, jest_mock_extended_1.mock)();
159
+ const gitRef = 'myRef';
160
+ const commitHash = 'abcd';
161
+ const originalSchema = `directive @Entry on OBJECT
162
+
163
+ type MyEntry @Entry {
164
+ id: ID!
165
+ union: MyUnion
166
+ }
167
+
168
+ union MyUnion =
169
+ | EntryA
170
+ | EntryB
171
+
172
+ type EntryA @Entry {
173
+ id: ID!
174
+ field1: String
175
+ }
176
+
177
+ type EntryB @Entry {
178
+ id: ID!
179
+ field2: String
180
+ }`;
181
+ gitAdapter.getLatestCommitHash
182
+ .calledWith(gitRef)
183
+ .mockResolvedValue(commitHash);
184
+ gitAdapter.getSchema
185
+ .calledWith(commitHash)
186
+ .mockResolvedValue(originalSchema);
187
+ const apiService = await (0, src_1.getApiService)();
188
+ const result = await apiService.getSchema(gitAdapter, gitRef);
189
+ const expectedSchema = `directive @Entry on OBJECT
190
+
191
+ type MyEntry @Entry {
192
+ id: ID!
193
+ union: MyUnion
194
+ }
195
+
196
+ union MyUnion = EntryA | EntryB
197
+
198
+ type EntryA @Entry {
199
+ id: ID!
200
+ field1: String
201
+ }
202
+
203
+ type EntryB @Entry {
204
+ id: ID!
205
+ field2: String
206
+ }
207
+
208
+ schema {
209
+ query: Query
210
+ mutation: Mutation
211
+ }
212
+
213
+ type Query {
214
+ allMyEntrys: [MyEntry]
215
+ allEntryAs: [EntryA]
216
+ allEntryBs: [EntryB]
217
+ _allMyEntrysMeta: ListMetadata
218
+ _allEntryAsMeta: ListMetadata
219
+ _allEntryBsMeta: ListMetadata
220
+ MyEntry(id: ID!): MyEntry
221
+ EntryA(id: ID!): EntryA
222
+ EntryB(id: ID!): EntryB
223
+ _typeName(id: ID!): String
224
+ }
225
+
226
+ type Mutation {
227
+ createMyEntry(id: ID!, data:MyEntryInput, message:String): MyEntry
228
+ createEntryA(id: ID!, data:EntryAInput, message:String): EntryA
229
+ createEntryB(id: ID!, data:EntryBInput, message:String): EntryB
230
+ updateMyEntry(id: ID!, data:MyEntryInput, message:String): MyEntry
231
+ updateEntryA(id: ID!, data:EntryAInput, message:String): EntryA
232
+ updateEntryB(id: ID!, data:EntryBInput, message:String): EntryB
233
+ deleteMyEntry(id: ID!, message:String): DeletionResult
234
+ deleteEntryA(id: ID!, message:String): DeletionResult
235
+ deleteEntryB(id: ID!, message:String): DeletionResult
236
+ }
237
+
238
+ type ListMetadata {
239
+ count: Int!
240
+ }
241
+
242
+ type DeletionResult {
243
+ id: ID
244
+ }
245
+
246
+ input MyEntryIdInput {
247
+ id: ID!
248
+ }
249
+
250
+ input EntryAIdInput {
251
+ id: ID!
252
+ }
253
+
254
+ input EntryBIdInput {
255
+ id: ID!
256
+ }
257
+
258
+ input MyUnionIdInput {
259
+ id: ID!
260
+ }
261
+
262
+ input MyEntryInput {
263
+ union: MyUnionIdInput
264
+ }
265
+
266
+ input EntryAInput {
267
+ field1: String
268
+ }
269
+
270
+ input EntryBInput {
271
+ field2: String
272
+ }
273
+ `;
274
+ expect(result.data).toBe(expectedSchema);
275
+ expect(result.ref).toBe(commitHash);
276
+ });
277
+ it('should create a CRUD API for an inline union type', async () => {
278
+ const gitAdapter = (0, jest_mock_extended_1.mock)();
279
+ const gitRef = 'myRef';
280
+ const commitHash = 'abcd';
281
+ const originalSchema = `directive @Entry on OBJECT
282
+
283
+ type MyEntry @Entry {
284
+ id: ID!
285
+ union: MyUnion
286
+ }
287
+
288
+ union MyUnion =
289
+ | TypeA
290
+ | TypeB
291
+
292
+ type TypeA {
293
+ field1: String
294
+ }
295
+
296
+ type TypeB {
297
+ field2: String
298
+ }`;
299
+ gitAdapter.getLatestCommitHash
300
+ .calledWith(gitRef)
301
+ .mockResolvedValue(commitHash);
302
+ gitAdapter.getSchema
303
+ .calledWith(commitHash)
304
+ .mockResolvedValue(originalSchema);
305
+ const apiService = await (0, src_1.getApiService)();
306
+ const result = await apiService.getSchema(gitAdapter, gitRef);
307
+ const expectedSchema = `directive @Entry on OBJECT
308
+
309
+ type MyEntry @Entry {
310
+ id: ID!
311
+ union: MyUnion
312
+ }
313
+
314
+ union MyUnion = TypeA | TypeB
315
+
316
+ type TypeA {
317
+ field1: String
318
+ }
319
+
320
+ type TypeB {
321
+ field2: String
322
+ }
323
+
324
+ schema {
325
+ query: Query
326
+ mutation: Mutation
327
+ }
328
+
329
+ type Query {
330
+ allMyEntrys: [MyEntry]
331
+ _allMyEntrysMeta: ListMetadata
332
+ MyEntry(id: ID!): MyEntry
333
+ _typeName(id: ID!): String
334
+ }
335
+
336
+ type Mutation {
337
+ createMyEntry(id: ID!, data:MyEntryInput, message:String): MyEntry
338
+ updateMyEntry(id: ID!, data:MyEntryInput, message:String): MyEntry
339
+ deleteMyEntry(id: ID!, message:String): DeletionResult
340
+ }
341
+
342
+ type ListMetadata {
343
+ count: Int!
344
+ }
345
+
346
+ type DeletionResult {
347
+ id: ID
348
+ }
349
+
350
+ input MyEntryIdInput {
351
+ id: ID!
352
+ }
353
+
354
+ input MyUnionIdInput {
355
+ id: ID!
356
+ }
357
+
358
+ input MyEntryInput {
359
+ union: MyUnionInput
360
+ }
361
+
362
+ input TypeAInput {
363
+ field1: String
364
+ }
365
+
366
+ input TypeBInput {
367
+ field2: String
368
+ }
369
+
370
+ input MyUnionInput @oneOf {
371
+ typeA: TypeAInput
372
+ typeB: TypeBInput
373
+ }
374
+
375
+ directive @oneOf on INPUT_OBJECT
376
+ `;
377
+ expect(result.data).toBe(expectedSchema);
378
+ expect(result.ref).toBe(commitHash);
379
+ });
380
+ });
381
+ //# sourceMappingURL=schema-generator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-generator.test.js","sourceRoot":"","sources":["../../../../tests/integration/schema/schema-generator.test.ts"],"names":[],"mappings":"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"}