@omnigraph/json-schema 1.0.0-alpha-20220804093904-8e2e41f7f → 1.0.0-alpha-20230420220344-25b6b92bf

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/README.md +5 -4
  2. package/cjs/addExecutionLogicToComposer.js +208 -0
  3. package/cjs/addRootFieldResolver.js +395 -0
  4. package/cjs/bundle.js +65 -0
  5. package/cjs/directives.js +580 -0
  6. package/cjs/getComposerFromJSONSchema.js +1297 -0
  7. package/cjs/getDereferencedJSONSchemaFromOperations.js +33 -0
  8. package/cjs/getGraphQLSchemaFromDereferencedJSONSchema.js +39 -0
  9. package/cjs/getJSONSchemaStringFormatScalarMap.js +61 -0
  10. package/cjs/getReferencedJSONSchemaFromOperations.js +260 -0
  11. package/cjs/getTypeResolverFromOutputTCs.js +69 -0
  12. package/cjs/getUnionTypeComposers.js +85 -0
  13. package/cjs/getValidTypeName.js +20 -0
  14. package/cjs/index.js +14 -0
  15. package/cjs/loadGraphQLSchemaFromJSONSchemas.js +59 -0
  16. package/cjs/package.json +1 -0
  17. package/cjs/resolveDataByUnionInputType.js +40 -0
  18. package/cjs/scalars.js +30 -0
  19. package/cjs/types.js +0 -0
  20. package/cjs/utils.js +65 -0
  21. package/esm/addExecutionLogicToComposer.js +204 -0
  22. package/esm/addRootFieldResolver.js +390 -0
  23. package/esm/bundle.js +60 -0
  24. package/esm/directives.js +565 -0
  25. package/esm/getComposerFromJSONSchema.js +1293 -0
  26. package/esm/getDereferencedJSONSchemaFromOperations.js +29 -0
  27. package/esm/getGraphQLSchemaFromDereferencedJSONSchema.js +35 -0
  28. package/esm/getJSONSchemaStringFormatScalarMap.js +56 -0
  29. package/esm/getReferencedJSONSchemaFromOperations.js +255 -0
  30. package/esm/getTypeResolverFromOutputTCs.js +65 -0
  31. package/esm/getUnionTypeComposers.js +80 -0
  32. package/esm/getValidTypeName.js +16 -0
  33. package/esm/index.js +9 -0
  34. package/esm/loadGraphQLSchemaFromJSONSchemas.js +54 -0
  35. package/esm/resolveDataByUnionInputType.js +36 -0
  36. package/esm/scalars.js +27 -0
  37. package/esm/types.js +0 -0
  38. package/esm/utils.js +57 -0
  39. package/package.json +34 -27
  40. package/typings/addExecutionLogicToComposer.d.cts +14 -0
  41. package/typings/addExecutionLogicToComposer.d.ts +14 -0
  42. package/typings/addRootFieldResolver.d.cts +26 -0
  43. package/typings/addRootFieldResolver.d.ts +26 -0
  44. package/typings/bundle.d.cts +34 -0
  45. package/typings/bundle.d.ts +34 -0
  46. package/typings/directives.d.cts +54 -0
  47. package/typings/directives.d.ts +54 -0
  48. package/typings/getComposerFromJSONSchema.d.cts +13 -0
  49. package/{getComposerFromJSONSchema.d.ts → typings/getComposerFromJSONSchema.d.ts} +4 -1
  50. package/typings/getDereferencedJSONSchemaFromOperations.d.cts +14 -0
  51. package/{getDereferencedJSONSchemaFromOperations.d.ts → typings/getDereferencedJSONSchemaFromOperations.d.ts} +5 -3
  52. package/typings/getGraphQLSchemaFromDereferencedJSONSchema.d.cts +5 -0
  53. package/typings/getGraphQLSchemaFromDereferencedJSONSchema.d.ts +5 -0
  54. package/typings/getJSONSchemaStringFormatScalarMap.d.cts +2 -0
  55. package/typings/getJSONSchemaStringFormatScalarMap.d.ts +2 -0
  56. package/typings/getReferencedJSONSchemaFromOperations.d.cts +16 -0
  57. package/{getReferencedJSONSchemaFromOperations.d.ts → typings/getReferencedJSONSchemaFromOperations.d.ts} +6 -4
  58. package/typings/getTypeResolverFromOutputTCs.d.cts +7 -0
  59. package/typings/getTypeResolverFromOutputTCs.d.ts +7 -0
  60. package/typings/getUnionTypeComposers.d.cts +24 -0
  61. package/typings/getUnionTypeComposers.d.ts +24 -0
  62. package/{getStringScalarWithMinMaxLength.d.ts → typings/getValidTypeName.d.cts} +4 -3
  63. package/typings/index.d.cts +9 -0
  64. package/typings/index.d.ts +9 -0
  65. package/typings/loadGraphQLSchemaFromJSONSchemas.d.cts +3 -0
  66. package/typings/loadGraphQLSchemaFromJSONSchemas.d.ts +3 -0
  67. package/typings/resolveDataByUnionInputType.d.cts +2 -0
  68. package/typings/resolveDataByUnionInputType.d.ts +2 -0
  69. package/typings/scalars.d.cts +4 -0
  70. package/typings/scalars.d.ts +4 -0
  71. package/typings/types.d.cts +76 -0
  72. package/typings/types.d.ts +76 -0
  73. package/typings/utils.d.cts +15 -0
  74. package/{utils.d.ts → typings/utils.d.ts} +1 -1
  75. package/addExecutionLogicToComposer.d.ts +0 -15
  76. package/bundle.d.ts +0 -39
  77. package/getGenericJSONScalar.d.ts +0 -8
  78. package/getGraphQLSchemaFromDereferencedJSONSchema.d.ts +0 -3
  79. package/getJSONSchemaStringFormatScalarMap.d.ts +0 -3
  80. package/getTypeResolverFromOutputTCs.d.ts +0 -4
  81. package/getUnionTypeComposers.d.ts +0 -17
  82. package/getValidateFnForSchemaPath.d.ts +0 -3
  83. package/index.d.ts +0 -9
  84. package/index.js +0 -1908
  85. package/index.mjs +0 -1895
  86. package/loadGraphQLSchemaFromJSONSchemas.d.ts +0 -2
  87. package/resolveDataByUnionInputType.d.ts +0 -3
  88. package/types.d.ts +0 -62
  89. package/{getValidTypeName.d.ts → typings/getValidTypeName.d.ts} +1 -1
@@ -0,0 +1,1297 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getComposerFromJSONSchema = void 0;
4
+ /* eslint-disable no-case-declarations */
5
+ const graphql_1 = require("graphql");
6
+ const graphql_compose_1 = require("graphql-compose");
7
+ const graphql_scalars_1 = require("graphql-scalars");
8
+ const json_machete_1 = require("json-machete");
9
+ const utils_1 = require("@graphql-mesh/utils");
10
+ const directives_js_1 = require("./directives.js");
11
+ const getJSONSchemaStringFormatScalarMap_js_1 = require("./getJSONSchemaStringFormatScalarMap.js");
12
+ const getUnionTypeComposers_js_1 = require("./getUnionTypeComposers.js");
13
+ const getValidTypeName_js_1 = require("./getValidTypeName.js");
14
+ const scalars_js_1 = require("./scalars.js");
15
+ function getComposerFromJSONSchema(schema, logger) {
16
+ const schemaComposer = new graphql_compose_1.SchemaComposer();
17
+ const formatScalarMap = (0, getJSONSchemaStringFormatScalarMap_js_1.getJSONSchemaStringFormatScalarMap)();
18
+ const rootInputTypeNameComposerMap = {
19
+ QueryInput: () => schemaComposer.Query,
20
+ MutationInput: () => schemaComposer.Mutation,
21
+ SubscriptionInput: () => schemaComposer.Subscription,
22
+ };
23
+ return (0, json_machete_1.visitJSONSchema)(schema, {
24
+ enter(subSchema, { path, visitedSubschemaResultMap }) {
25
+ var _a, _b, _c, _d, _e, _f;
26
+ if (typeof subSchema === 'boolean' || subSchema.title === 'Any') {
27
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLJSON);
28
+ return subSchema
29
+ ? {
30
+ input: typeComposer,
31
+ output: typeComposer,
32
+ }
33
+ : undefined;
34
+ }
35
+ if (!subSchema) {
36
+ throw new Error(`Something is wrong with ${path}`);
37
+ }
38
+ if (subSchema.type === 'array') {
39
+ if (subSchema.items != null &&
40
+ typeof subSchema.items === 'object' &&
41
+ Object.keys(subSchema.items).length > 0) {
42
+ return {
43
+ // These are filled after enter
44
+ get input() {
45
+ const typeComposers = visitedSubschemaResultMap.get(subSchema.items);
46
+ return typeComposers.input.getTypePlural();
47
+ },
48
+ get output() {
49
+ const typeComposers = visitedSubschemaResultMap.get(subSchema.items);
50
+ return typeComposers.output.getTypePlural();
51
+ },
52
+ ...subSchema,
53
+ };
54
+ }
55
+ if (subSchema.contains) {
56
+ // Scalars cannot be in union type
57
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLJSON).getTypePlural();
58
+ return {
59
+ input: typeComposer,
60
+ output: typeComposer,
61
+ nullable: subSchema.nullable,
62
+ readOnly: subSchema.readOnly,
63
+ writeOnly: subSchema.writeOnly,
64
+ default: subSchema.default,
65
+ };
66
+ }
67
+ // If it doesn't have any clue
68
+ {
69
+ // const typeComposer = getGenericJSONScalar({
70
+ // schemaComposer,
71
+ // isInput: false,
72
+ // subSchema,
73
+ // validateWithJSONSchema,
74
+ // }).getTypePlural();
75
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLJSON).getTypePlural();
76
+ return {
77
+ input: typeComposer,
78
+ output: typeComposer,
79
+ description: subSchema.description,
80
+ nullable: subSchema.nullable,
81
+ readOnly: subSchema.readOnly,
82
+ writeOnly: subSchema.writeOnly,
83
+ default: subSchema.default,
84
+ };
85
+ }
86
+ }
87
+ if (subSchema.pattern) {
88
+ let typeScriptType;
89
+ switch (subSchema.type) {
90
+ case 'number':
91
+ typeScriptType = 'number';
92
+ break;
93
+ case 'integer':
94
+ if (subSchema.format === 'int64') {
95
+ typeScriptType = 'bigint';
96
+ }
97
+ else {
98
+ typeScriptType = 'number';
99
+ }
100
+ break;
101
+ default:
102
+ typeScriptType = 'string';
103
+ break;
104
+ }
105
+ schemaComposer.addDirective(directives_js_1.RegExpDirective);
106
+ schemaComposer.addDirective(directives_js_1.TypeScriptDirective);
107
+ const typeComposer = schemaComposer.createScalarTC({
108
+ name: (0, getValidTypeName_js_1.getValidTypeName)({
109
+ schemaComposer,
110
+ isInput: false,
111
+ subSchema,
112
+ }),
113
+ directives: [
114
+ {
115
+ name: 'regexp',
116
+ args: {
117
+ pattern: subSchema.pattern,
118
+ },
119
+ },
120
+ {
121
+ name: 'typescript',
122
+ args: {
123
+ type: typeScriptType,
124
+ },
125
+ },
126
+ ],
127
+ });
128
+ return {
129
+ input: typeComposer,
130
+ output: typeComposer,
131
+ nullable: subSchema.nullable,
132
+ readOnly: subSchema.readOnly,
133
+ writeOnly: subSchema.writeOnly,
134
+ };
135
+ }
136
+ if (subSchema.const) {
137
+ const scalarTypeName = (0, getValidTypeName_js_1.getValidTypeName)({
138
+ schemaComposer,
139
+ isInput: false,
140
+ subSchema,
141
+ });
142
+ schemaComposer.addDirective(directives_js_1.EnumDirective);
143
+ schemaComposer.addDirective(directives_js_1.TypeScriptDirective);
144
+ schemaComposer.addDirective(directives_js_1.ExampleDirective);
145
+ const typeComposer = schemaComposer.createEnumTC({
146
+ name: scalarTypeName,
147
+ values: {
148
+ [(0, utils_1.sanitizeNameForGraphQL)(subSchema.const.toString())]: {
149
+ directives: [
150
+ {
151
+ name: 'enum',
152
+ args: {
153
+ value: JSON.stringify(subSchema.const),
154
+ },
155
+ },
156
+ ],
157
+ },
158
+ },
159
+ directives: [
160
+ {
161
+ name: 'typescript',
162
+ args: {
163
+ type: JSON.stringify(subSchema.const),
164
+ },
165
+ },
166
+ {
167
+ name: 'example',
168
+ args: {
169
+ value: subSchema.const,
170
+ },
171
+ },
172
+ ],
173
+ extensions: {
174
+ default: subSchema.const,
175
+ },
176
+ });
177
+ return {
178
+ input: typeComposer,
179
+ output: typeComposer,
180
+ nullable: subSchema.nullable,
181
+ readOnly: subSchema.readOnly,
182
+ writeOnly: subSchema.writeOnly,
183
+ };
184
+ }
185
+ if (subSchema.enum && subSchema.type !== 'boolean') {
186
+ const values = {};
187
+ for (const value of subSchema.enum) {
188
+ let enumKey = (0, utils_1.sanitizeNameForGraphQL)(value.toString());
189
+ if (enumKey === 'false' || enumKey === 'true' || enumKey === 'null') {
190
+ enumKey = enumKey.toUpperCase();
191
+ }
192
+ if (typeof enumKey === 'string' && enumKey.length === 0) {
193
+ enumKey = '_';
194
+ }
195
+ schemaComposer.addDirective(directives_js_1.EnumDirective);
196
+ // Falsy values are ignored by GraphQL
197
+ // eslint-disable-next-line no-unneeded-ternary
198
+ const enumValue = value ? value : value === null || value === void 0 ? void 0 : value.toString();
199
+ const directives = [];
200
+ if (enumValue !== enumKey) {
201
+ directives.push({
202
+ name: 'enum',
203
+ args: {
204
+ value: JSON.stringify(enumValue),
205
+ },
206
+ });
207
+ }
208
+ values[enumKey] = {
209
+ directives,
210
+ value: enumValue,
211
+ };
212
+ }
213
+ const directives = [];
214
+ if ((_a = subSchema.examples) === null || _a === void 0 ? void 0 : _a.length) {
215
+ schemaComposer.addDirective(directives_js_1.ExampleDirective);
216
+ for (const example of subSchema.examples) {
217
+ directives.push({
218
+ name: 'example',
219
+ args: {
220
+ value: example,
221
+ },
222
+ });
223
+ }
224
+ }
225
+ const typeComposer = schemaComposer.createEnumTC({
226
+ name: (0, getValidTypeName_js_1.getValidTypeName)({
227
+ schemaComposer,
228
+ isInput: false,
229
+ subSchema,
230
+ }),
231
+ values,
232
+ description: subSchema.description,
233
+ directives,
234
+ extensions: {
235
+ default: subSchema.default,
236
+ },
237
+ });
238
+ return {
239
+ input: typeComposer,
240
+ output: typeComposer,
241
+ nullable: subSchema.nullable,
242
+ readOnly: subSchema.readOnly,
243
+ writeOnly: subSchema.writeOnly,
244
+ default: subSchema.default,
245
+ };
246
+ }
247
+ if (Array.isArray(subSchema.type)) {
248
+ const validTypes = subSchema.type.filter((typeName) => typeName !== 'null');
249
+ if (validTypes.length === 1) {
250
+ subSchema.type = validTypes[0];
251
+ // continue with the single type
252
+ }
253
+ else {
254
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLJSON);
255
+ return {
256
+ input: typeComposer,
257
+ output: typeComposer,
258
+ nullable: subSchema.nullable,
259
+ readOnly: subSchema.readOnly,
260
+ writeOnly: subSchema.writeOnly,
261
+ default: subSchema.default,
262
+ };
263
+ }
264
+ }
265
+ if (subSchema.format) {
266
+ switch (subSchema.format) {
267
+ case 'byte': {
268
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLByte);
269
+ return {
270
+ input: typeComposer,
271
+ output: typeComposer,
272
+ description: subSchema.description,
273
+ nullable: subSchema.nullable,
274
+ default: subSchema.default,
275
+ };
276
+ }
277
+ case 'binary': {
278
+ const typeComposer = schemaComposer.getAnyTC(scalars_js_1.GraphQLFile);
279
+ return {
280
+ input: typeComposer,
281
+ output: typeComposer,
282
+ description: subSchema.description,
283
+ nullable: subSchema.nullable,
284
+ default: subSchema.default,
285
+ };
286
+ }
287
+ case 'date-time': {
288
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLDateTime);
289
+ return {
290
+ input: typeComposer,
291
+ output: typeComposer,
292
+ description: subSchema.description,
293
+ nullable: subSchema.nullable,
294
+ readOnly: subSchema.readOnly,
295
+ writeOnly: subSchema.writeOnly,
296
+ default: subSchema.default,
297
+ };
298
+ }
299
+ case 'time': {
300
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLTime);
301
+ return {
302
+ input: typeComposer,
303
+ output: typeComposer,
304
+ description: subSchema.description,
305
+ nullable: subSchema.nullable,
306
+ readOnly: subSchema.readOnly,
307
+ writeOnly: subSchema.writeOnly,
308
+ default: subSchema.default,
309
+ };
310
+ }
311
+ case 'email': {
312
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLEmailAddress);
313
+ return {
314
+ input: typeComposer,
315
+ output: typeComposer,
316
+ description: subSchema.description,
317
+ nullable: subSchema.nullable,
318
+ readOnly: subSchema.readOnly,
319
+ writeOnly: subSchema.writeOnly,
320
+ default: subSchema.default,
321
+ };
322
+ }
323
+ case 'ipv4': {
324
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLIPv4);
325
+ return {
326
+ input: typeComposer,
327
+ output: typeComposer,
328
+ description: subSchema.description,
329
+ nullable: subSchema.nullable,
330
+ readOnly: subSchema.readOnly,
331
+ writeOnly: subSchema.writeOnly,
332
+ default: subSchema.default,
333
+ };
334
+ }
335
+ case 'ipv6': {
336
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLIPv6);
337
+ return {
338
+ input: typeComposer,
339
+ output: typeComposer,
340
+ description: subSchema.description,
341
+ nullable: subSchema.nullable,
342
+ readOnly: subSchema.readOnly,
343
+ writeOnly: subSchema.writeOnly,
344
+ default: subSchema.default,
345
+ };
346
+ }
347
+ case 'uri': {
348
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLURL);
349
+ return {
350
+ input: typeComposer,
351
+ output: typeComposer,
352
+ description: subSchema.description,
353
+ nullable: subSchema.nullable,
354
+ readOnly: subSchema.readOnly,
355
+ writeOnly: subSchema.writeOnly,
356
+ default: subSchema.default,
357
+ };
358
+ }
359
+ case 'uuid': {
360
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLUUID);
361
+ return {
362
+ input: typeComposer,
363
+ output: typeComposer,
364
+ description: subSchema.description,
365
+ nullable: subSchema.nullable,
366
+ readOnly: subSchema.readOnly,
367
+ writeOnly: subSchema.writeOnly,
368
+ default: subSchema.default,
369
+ };
370
+ }
371
+ case 'unix-time': {
372
+ const typeComposer = schemaComposer.createScalarTC(graphql_scalars_1.GraphQLTimestamp);
373
+ return {
374
+ input: typeComposer,
375
+ output: typeComposer,
376
+ description: subSchema.description,
377
+ nullable: subSchema.nullable,
378
+ readOnly: subSchema.readOnly,
379
+ writeOnly: subSchema.writeOnly,
380
+ default: subSchema.default,
381
+ };
382
+ }
383
+ case 'int64': {
384
+ const typeComposer = schemaComposer.createScalarTC(graphql_scalars_1.GraphQLBigInt);
385
+ return {
386
+ input: typeComposer,
387
+ output: typeComposer,
388
+ description: subSchema.description,
389
+ nullable: subSchema.nullable,
390
+ readOnly: subSchema.readOnly,
391
+ writeOnly: subSchema.writeOnly,
392
+ default: subSchema.default,
393
+ };
394
+ }
395
+ case 'int32': {
396
+ const typeComposer = schemaComposer.createScalarTC(graphql_1.GraphQLInt);
397
+ return {
398
+ input: typeComposer,
399
+ output: typeComposer,
400
+ description: subSchema.description,
401
+ nullable: subSchema.nullable,
402
+ readOnly: subSchema.readOnly,
403
+ writeOnly: subSchema.writeOnly,
404
+ default: subSchema.default,
405
+ };
406
+ }
407
+ case 'decimal':
408
+ case 'float': {
409
+ const typeComposer = schemaComposer.createScalarTC(graphql_1.GraphQLFloat);
410
+ return {
411
+ input: typeComposer,
412
+ output: typeComposer,
413
+ description: subSchema.description,
414
+ nullable: subSchema.nullable,
415
+ readOnly: subSchema.readOnly,
416
+ writeOnly: subSchema.writeOnly,
417
+ default: subSchema.default,
418
+ };
419
+ }
420
+ default: {
421
+ const formatScalar = formatScalarMap.get(subSchema.format);
422
+ if (formatScalar) {
423
+ const typeComposer = schemaComposer.getAnyTC(formatScalar);
424
+ return {
425
+ input: typeComposer,
426
+ output: typeComposer,
427
+ description: subSchema.description,
428
+ nullable: subSchema.nullable,
429
+ readOnly: subSchema.readOnly,
430
+ writeOnly: subSchema.writeOnly,
431
+ default: subSchema.default,
432
+ };
433
+ }
434
+ }
435
+ }
436
+ }
437
+ if (subSchema.minimum === 0) {
438
+ const typeComposer = schemaComposer.getAnyTC(subSchema.type === 'integer' ? graphql_scalars_1.GraphQLNonNegativeInt : graphql_scalars_1.GraphQLNonNegativeFloat);
439
+ return {
440
+ input: typeComposer,
441
+ output: typeComposer,
442
+ description: subSchema.description,
443
+ nullable: subSchema.nullable,
444
+ readOnly: subSchema.readOnly,
445
+ writeOnly: subSchema.writeOnly,
446
+ default: subSchema.default,
447
+ };
448
+ }
449
+ else if (subSchema.minimum > 0) {
450
+ const typeComposer = schemaComposer.getAnyTC(subSchema.type === 'integer' ? graphql_scalars_1.GraphQLPositiveInt : graphql_scalars_1.GraphQLPositiveFloat);
451
+ return {
452
+ input: typeComposer,
453
+ output: typeComposer,
454
+ description: subSchema.description,
455
+ nullable: subSchema.nullable,
456
+ readOnly: subSchema.readOnly,
457
+ writeOnly: subSchema.writeOnly,
458
+ default: subSchema.default,
459
+ };
460
+ }
461
+ if (subSchema.maximum === 0) {
462
+ const typeComposer = schemaComposer.getAnyTC(subSchema.type === 'integer' ? graphql_scalars_1.GraphQLNonPositiveInt : graphql_scalars_1.GraphQLNonPositiveFloat);
463
+ return {
464
+ input: typeComposer,
465
+ output: typeComposer,
466
+ description: subSchema.description,
467
+ nullable: subSchema.nullable,
468
+ readOnly: subSchema.readOnly,
469
+ writeOnly: subSchema.writeOnly,
470
+ default: subSchema.default,
471
+ };
472
+ }
473
+ else if (subSchema.maximum < 0) {
474
+ const typeComposer = schemaComposer.getAnyTC(subSchema.type === 'integer' ? graphql_scalars_1.GraphQLNegativeInt : graphql_scalars_1.GraphQLNegativeFloat);
475
+ return {
476
+ input: typeComposer,
477
+ output: typeComposer,
478
+ description: subSchema.description,
479
+ nullable: subSchema.nullable,
480
+ readOnly: subSchema.readOnly,
481
+ writeOnly: subSchema.writeOnly,
482
+ default: subSchema.default,
483
+ };
484
+ }
485
+ if (subSchema.maximum > Number.MAX_SAFE_INTEGER ||
486
+ subSchema.minimum < Number.MIN_SAFE_INTEGER) {
487
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLBigInt);
488
+ return {
489
+ input: typeComposer,
490
+ output: typeComposer,
491
+ description: subSchema.description,
492
+ nullable: subSchema.nullable,
493
+ readOnly: subSchema.readOnly,
494
+ writeOnly: subSchema.writeOnly,
495
+ default: subSchema.default,
496
+ };
497
+ }
498
+ switch (subSchema.type) {
499
+ case 'boolean': {
500
+ const typeComposer = schemaComposer.getAnyTC(graphql_1.GraphQLBoolean);
501
+ return {
502
+ input: typeComposer,
503
+ output: typeComposer,
504
+ description: subSchema.description,
505
+ nullable: subSchema.nullable,
506
+ readOnly: subSchema.readOnly,
507
+ writeOnly: subSchema.writeOnly,
508
+ default: subSchema.default,
509
+ };
510
+ }
511
+ case 'null': {
512
+ const typeComposer = schemaComposer.getAnyTC(scalars_js_1.GraphQLVoid);
513
+ return {
514
+ input: typeComposer,
515
+ output: typeComposer,
516
+ description: subSchema.description,
517
+ nullable: subSchema.nullable,
518
+ readOnly: subSchema.readOnly,
519
+ writeOnly: subSchema.writeOnly,
520
+ default: subSchema.default,
521
+ };
522
+ }
523
+ case 'integer': {
524
+ const typeComposer = schemaComposer.getAnyTC(graphql_1.GraphQLInt);
525
+ return {
526
+ input: typeComposer,
527
+ output: typeComposer,
528
+ description: subSchema.description,
529
+ nullable: subSchema.nullable,
530
+ readOnly: subSchema.readOnly,
531
+ writeOnly: subSchema.writeOnly,
532
+ default: subSchema.default,
533
+ };
534
+ }
535
+ case 'number': {
536
+ const typeComposer = schemaComposer.getAnyTC(graphql_1.GraphQLFloat);
537
+ return {
538
+ input: typeComposer,
539
+ output: typeComposer,
540
+ description: subSchema.description,
541
+ nullable: subSchema.nullable,
542
+ readOnly: subSchema.readOnly,
543
+ writeOnly: subSchema.writeOnly,
544
+ default: subSchema.default,
545
+ };
546
+ }
547
+ case 'string': {
548
+ if (subSchema.minLength === 1 && subSchema.maxLength == null) {
549
+ const tc = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLNonEmptyString);
550
+ return {
551
+ input: tc,
552
+ output: tc,
553
+ description: subSchema.description,
554
+ nullable: subSchema.nullable,
555
+ readOnly: subSchema.readOnly,
556
+ writeOnly: subSchema.writeOnly,
557
+ default: subSchema.default,
558
+ };
559
+ }
560
+ if (subSchema.minLength || subSchema.maxLength) {
561
+ schemaComposer.addDirective(directives_js_1.LengthDirective);
562
+ const typeComposer = schemaComposer.createScalarTC({
563
+ name: (0, getValidTypeName_js_1.getValidTypeName)({
564
+ schemaComposer,
565
+ isInput: false,
566
+ subSchema,
567
+ }),
568
+ description: subSchema.description,
569
+ directives: [
570
+ {
571
+ name: 'length',
572
+ args: {
573
+ min: subSchema.minLength,
574
+ max: subSchema.maxLength,
575
+ },
576
+ },
577
+ ],
578
+ });
579
+ return {
580
+ input: typeComposer,
581
+ output: typeComposer,
582
+ description: subSchema.description,
583
+ nullable: subSchema.nullable,
584
+ readOnly: subSchema.readOnly,
585
+ writeOnly: subSchema.writeOnly,
586
+ default: subSchema.default,
587
+ };
588
+ }
589
+ const typeComposer = schemaComposer.getAnyTC(graphql_1.GraphQLString);
590
+ return {
591
+ input: typeComposer,
592
+ output: typeComposer,
593
+ description: subSchema.description,
594
+ nullable: subSchema.nullable,
595
+ readOnly: subSchema.readOnly,
596
+ writeOnly: subSchema.writeOnly,
597
+ default: subSchema.default,
598
+ };
599
+ }
600
+ case 'object': {
601
+ switch (subSchema.title) {
602
+ case '_schema':
603
+ return {
604
+ output: schemaComposer,
605
+ ...subSchema,
606
+ };
607
+ case 'Query':
608
+ return {
609
+ output: schemaComposer.Query,
610
+ ...subSchema,
611
+ };
612
+ case 'Mutation':
613
+ return {
614
+ output: schemaComposer.Mutation,
615
+ ...subSchema,
616
+ };
617
+ case 'Subscription':
618
+ if (path === '/properties/subscription') {
619
+ return {
620
+ output: schemaComposer.Subscription,
621
+ ...subSchema,
622
+ };
623
+ }
624
+ subSchema.title = 'Subscription_';
625
+ break;
626
+ }
627
+ }
628
+ }
629
+ if (subSchema.oneOf && !subSchema.properties) {
630
+ schemaComposer.addDirective(directives_js_1.OneOfDirective);
631
+ const input = schemaComposer.createInputTC({
632
+ name: (0, getValidTypeName_js_1.getValidTypeName)({
633
+ schemaComposer,
634
+ isInput: true,
635
+ subSchema,
636
+ }),
637
+ fields: {},
638
+ directives: [
639
+ {
640
+ name: 'oneOf',
641
+ },
642
+ ],
643
+ });
644
+ const extensions = {};
645
+ const directives = [];
646
+ if ((_b = subSchema.$comment) === null || _b === void 0 ? void 0 : _b.startsWith('statusCodeOneOfIndexMap:')) {
647
+ const statusCodeOneOfIndexMapStr = subSchema.$comment.replace('statusCodeOneOfIndexMap:', '');
648
+ const statusCodeOneOfIndexMap = JSON.parse(statusCodeOneOfIndexMapStr);
649
+ if (statusCodeOneOfIndexMap) {
650
+ extensions.statusCodeOneOfIndexMap = statusCodeOneOfIndexMap;
651
+ }
652
+ }
653
+ if ((_c = subSchema.discriminator) === null || _c === void 0 ? void 0 : _c.propertyName) {
654
+ schemaComposer.addDirective(directives_js_1.DiscriminatorDirective);
655
+ const mappingByName = {};
656
+ for (const discriminatorValue in subSchema.discriminator.mapping) {
657
+ const ref = subSchema.discriminator.mapping[discriminatorValue];
658
+ const typeName = ref.replace('#/components/schemas/', '');
659
+ mappingByName[discriminatorValue] = typeName;
660
+ }
661
+ directives.push({
662
+ name: 'discriminator',
663
+ args: {
664
+ field: subSchema.discriminator.propertyName,
665
+ mapping: mappingByName,
666
+ },
667
+ });
668
+ }
669
+ const output = schemaComposer.createUnionTC({
670
+ name: (0, getValidTypeName_js_1.getValidTypeName)({
671
+ schemaComposer,
672
+ isInput: false,
673
+ subSchema,
674
+ }),
675
+ description: subSchema.description,
676
+ types: [],
677
+ directives,
678
+ extensions,
679
+ });
680
+ return {
681
+ input,
682
+ output,
683
+ ...subSchema,
684
+ };
685
+ }
686
+ if (subSchema.properties ||
687
+ subSchema.allOf ||
688
+ subSchema.anyOf ||
689
+ subSchema.additionalProperties) {
690
+ if (subSchema.title === 'Any') {
691
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLJSON);
692
+ return {
693
+ input: typeComposer,
694
+ output: typeComposer,
695
+ description: subSchema.description,
696
+ nullable: subSchema.nullable,
697
+ readOnly: subSchema.readOnly,
698
+ writeOnly: subSchema.writeOnly,
699
+ default: subSchema.default,
700
+ };
701
+ }
702
+ const config = {
703
+ name: (0, getValidTypeName_js_1.getValidTypeName)({
704
+ schemaComposer,
705
+ isInput: false,
706
+ subSchema,
707
+ }),
708
+ description: subSchema.description,
709
+ fields: {},
710
+ directives: [],
711
+ extensions: {
712
+ default: subSchema.default,
713
+ },
714
+ };
715
+ if ((_d = subSchema.examples) === null || _d === void 0 ? void 0 : _d.length) {
716
+ schemaComposer.addDirective(directives_js_1.ExampleDirective);
717
+ for (const example of subSchema.examples) {
718
+ config.directives.push({
719
+ name: 'example',
720
+ args: {
721
+ value: example,
722
+ },
723
+ });
724
+ }
725
+ }
726
+ if ((_e = subSchema.discriminator) === null || _e === void 0 ? void 0 : _e.propertyName) {
727
+ schemaComposer.addDirective(directives_js_1.DiscriminatorDirective);
728
+ }
729
+ const directives = [];
730
+ if ((_f = subSchema.examples) === null || _f === void 0 ? void 0 : _f.length) {
731
+ schemaComposer.addDirective(directives_js_1.ExampleDirective);
732
+ for (const example of subSchema.examples) {
733
+ directives.push({
734
+ name: 'example',
735
+ args: {
736
+ value: example,
737
+ },
738
+ });
739
+ }
740
+ }
741
+ return {
742
+ input: schemaComposer.createInputTC({
743
+ name: (0, getValidTypeName_js_1.getValidTypeName)({
744
+ schemaComposer,
745
+ isInput: true,
746
+ subSchema,
747
+ }),
748
+ description: subSchema.description,
749
+ fields: {},
750
+ directives,
751
+ extensions: {
752
+ default: subSchema.default,
753
+ },
754
+ }),
755
+ output: subSchema.discriminator
756
+ ? schemaComposer.createInterfaceTC({
757
+ ...config,
758
+ resolveType(root) {
759
+ return root[subSchema.discriminator.propertyName];
760
+ },
761
+ directives: [
762
+ {
763
+ name: 'discriminator',
764
+ args: {
765
+ propertyName: subSchema.discriminator.propertyName,
766
+ },
767
+ },
768
+ ],
769
+ })
770
+ : schemaComposer.createObjectTC(config),
771
+ ...subSchema,
772
+ ...(subSchema.properties ? { properties: { ...subSchema.properties } } : {}),
773
+ ...(subSchema.allOf ? { allOf: [...subSchema.allOf] } : {}),
774
+ ...(subSchema.additionalProperties
775
+ ? {
776
+ additionalProperties: subSchema.additionalProperties === true
777
+ ? true
778
+ : { ...subSchema.additionalProperties },
779
+ }
780
+ : {}),
781
+ };
782
+ }
783
+ return subSchema;
784
+ },
785
+ leave(subSchemaAndTypeComposers, { path }) {
786
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
787
+ // const validateWithJSONSchema = getValidateFnForSchemaPath(ajv, path, schema);
788
+ const subSchemaOnly = {
789
+ ...subSchemaAndTypeComposers,
790
+ input: undefined,
791
+ output: undefined,
792
+ };
793
+ if (subSchemaAndTypeComposers.oneOf && !subSchemaAndTypeComposers.properties) {
794
+ const isPlural = subSchemaAndTypeComposers.oneOf.some(({ output }) => 'ofType' in output);
795
+ if (isPlural) {
796
+ const { input, output } = (0, getUnionTypeComposers_js_1.getUnionTypeComposers)({
797
+ schemaComposer,
798
+ typeComposersList: subSchemaAndTypeComposers.oneOf.map(({ input, output }) => ({
799
+ input: input.ofType || input,
800
+ output: output.ofType || output,
801
+ })),
802
+ subSchemaAndTypeComposers,
803
+ logger,
804
+ });
805
+ return {
806
+ input: input.getTypePlural(),
807
+ output: output.getTypePlural(),
808
+ nullable: subSchemaAndTypeComposers.nullable,
809
+ default: subSchemaAndTypeComposers.default,
810
+ readOnly: subSchemaAndTypeComposers.readOnly,
811
+ writeOnly: subSchemaAndTypeComposers.writeOnly,
812
+ };
813
+ }
814
+ return (0, getUnionTypeComposers_js_1.getUnionTypeComposers)({
815
+ schemaComposer,
816
+ typeComposersList: subSchemaAndTypeComposers.oneOf,
817
+ subSchemaAndTypeComposers,
818
+ logger,
819
+ });
820
+ }
821
+ const fieldMap = {};
822
+ const inputFieldMap = {};
823
+ let isList = false;
824
+ if (subSchemaAndTypeComposers.allOf) {
825
+ let ableToUseGraphQLInputObjectType = true;
826
+ for (const maybeTypeComposers of subSchemaAndTypeComposers.allOf) {
827
+ let { input: inputTypeComposer, output: outputTypeComposer } = maybeTypeComposers;
828
+ if (inputTypeComposer instanceof graphql_compose_1.ListComposer) {
829
+ isList = true;
830
+ inputTypeComposer = inputTypeComposer.ofType;
831
+ }
832
+ if (outputTypeComposer instanceof graphql_compose_1.ListComposer) {
833
+ isList = true;
834
+ outputTypeComposer = outputTypeComposer.ofType;
835
+ }
836
+ if (inputTypeComposer instanceof graphql_compose_1.ScalarTypeComposer ||
837
+ inputTypeComposer instanceof graphql_compose_1.EnumTypeComposer) {
838
+ ableToUseGraphQLInputObjectType = false;
839
+ }
840
+ else {
841
+ const inputTypeElemFieldMap = inputTypeComposer.getFields();
842
+ for (const fieldName in inputTypeElemFieldMap) {
843
+ const field = inputTypeElemFieldMap[fieldName];
844
+ inputFieldMap[fieldName] = field;
845
+ }
846
+ }
847
+ if ((0, graphql_compose_1.isSomeInputTypeComposer)(outputTypeComposer)) {
848
+ schemaComposer.addDirective(directives_js_1.ResolveRootDirective);
849
+ fieldMap[outputTypeComposer.getTypeName()] = {
850
+ type: outputTypeComposer,
851
+ directives: [
852
+ {
853
+ name: 'resolveRoot',
854
+ },
855
+ ],
856
+ };
857
+ }
858
+ else if (outputTypeComposer instanceof graphql_compose_1.UnionTypeComposer) {
859
+ const outputTCElems = outputTypeComposer.getTypes();
860
+ for (const outputTCElem of outputTCElems) {
861
+ const outputTypeElemFieldMap = outputTCElem.getFields();
862
+ for (const fieldName in outputTypeElemFieldMap) {
863
+ const field = outputTypeElemFieldMap[fieldName];
864
+ fieldMap[fieldName] = field;
865
+ }
866
+ }
867
+ }
868
+ else {
869
+ if (outputTypeComposer instanceof graphql_compose_1.InterfaceTypeComposer) {
870
+ subSchemaAndTypeComposers.output.addInterface(outputTypeComposer);
871
+ }
872
+ const typeElemFieldMap = outputTypeComposer.getFields();
873
+ for (const fieldName in typeElemFieldMap) {
874
+ const field = typeElemFieldMap[fieldName];
875
+ fieldMap[fieldName] = field;
876
+ }
877
+ }
878
+ }
879
+ if ((_a = subSchemaAndTypeComposers.examples) === null || _a === void 0 ? void 0 : _a.length) {
880
+ schemaComposer.addDirective(directives_js_1.ExampleDirective);
881
+ const directives = subSchemaAndTypeComposers.output.getDirectives() || [];
882
+ for (const example of subSchemaAndTypeComposers.examples) {
883
+ directives.push({
884
+ name: 'example',
885
+ args: {
886
+ value: example,
887
+ },
888
+ });
889
+ }
890
+ subSchemaAndTypeComposers.output.setDirectives(directives);
891
+ }
892
+ subSchemaAndTypeComposers.output.addFields(fieldMap);
893
+ subSchemaAndTypeComposers.output.setExtensions({
894
+ // validateWithJSONSchema,
895
+ default: subSchemaAndTypeComposers.default,
896
+ });
897
+ if (ableToUseGraphQLInputObjectType) {
898
+ subSchemaAndTypeComposers.input.addFields(inputFieldMap);
899
+ if ((_b = subSchemaAndTypeComposers.examples) === null || _b === void 0 ? void 0 : _b.length) {
900
+ schemaComposer.addDirective(directives_js_1.ExampleDirective);
901
+ const directives = subSchemaAndTypeComposers.input.getDirectives() || [];
902
+ for (const example of subSchemaAndTypeComposers.examples) {
903
+ directives.push({
904
+ name: 'example',
905
+ args: {
906
+ value: example,
907
+ },
908
+ });
909
+ }
910
+ subSchemaAndTypeComposers.input.setDirectives(directives);
911
+ }
912
+ subSchemaAndTypeComposers.input.setExtensions({
913
+ default: subSchemaAndTypeComposers.default,
914
+ });
915
+ }
916
+ else {
917
+ subSchemaAndTypeComposers.input = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLJSON);
918
+ }
919
+ }
920
+ if (subSchemaAndTypeComposers.anyOf) {
921
+ // It should not have `required` because it is `anyOf` not `allOf`
922
+ let ableToUseGraphQLInputObjectType = true;
923
+ for (const typeComposers of subSchemaAndTypeComposers.anyOf) {
924
+ let { input: inputTypeComposer, output: outputTypeComposer } = typeComposers;
925
+ if (inputTypeComposer instanceof graphql_compose_1.ListComposer ||
926
+ outputTypeComposer instanceof graphql_compose_1.ListComposer) {
927
+ isList = true;
928
+ inputTypeComposer = inputTypeComposer.ofType;
929
+ outputTypeComposer = outputTypeComposer.ofType;
930
+ }
931
+ if (inputTypeComposer instanceof graphql_compose_1.ScalarTypeComposer ||
932
+ inputTypeComposer instanceof graphql_compose_1.EnumTypeComposer) {
933
+ ableToUseGraphQLInputObjectType = false;
934
+ }
935
+ else {
936
+ const inputTypeElemFieldMap = inputTypeComposer.getFields();
937
+ for (const fieldName in inputTypeElemFieldMap) {
938
+ // In case of conflict set it to JSON
939
+ // TODO: But instead we can convert that field into a oneOf of all possible types
940
+ if (inputFieldMap[fieldName]) {
941
+ let existingType = inputFieldMap[fieldName].type;
942
+ if (typeof existingType === 'function') {
943
+ existingType = existingType();
944
+ }
945
+ let newType = inputTypeElemFieldMap[fieldName].type;
946
+ if (typeof newType === 'function') {
947
+ newType = newType();
948
+ }
949
+ const newTypeName = newType.getTypeName().replace('!', '');
950
+ const existingTypeName = existingType.getTypeName().replace('!', '');
951
+ if (existingTypeName !== newTypeName) {
952
+ if (newTypeName !== 'JSON') {
953
+ inputFieldMap[fieldName] = {
954
+ type: schemaComposer.getAnyTC(graphql_scalars_1.GraphQLJSON),
955
+ };
956
+ }
957
+ if (existingTypeName === 'JSON') {
958
+ const field = inputTypeElemFieldMap[fieldName];
959
+ inputFieldMap[fieldName] = (0, graphql_1.isNonNullType)(field.type.getType())
960
+ ? {
961
+ ...field,
962
+ type: () => field.type.ofType,
963
+ }
964
+ : field;
965
+ }
966
+ }
967
+ }
968
+ else {
969
+ const field = inputTypeElemFieldMap[fieldName];
970
+ inputFieldMap[fieldName] = (0, graphql_1.isNonNullType)(field.type.getType())
971
+ ? {
972
+ ...field,
973
+ type: () => field.type.ofType,
974
+ }
975
+ : field;
976
+ }
977
+ }
978
+ }
979
+ if (outputTypeComposer instanceof graphql_compose_1.ScalarTypeComposer) {
980
+ const typeName = outputTypeComposer.getTypeName();
981
+ // In case of conflict set it to JSON
982
+ // TODO: But instead we can convert that field into a union of all possible types
983
+ if (fieldMap[typeName]) {
984
+ const existingTypeName = (_d = (_c = fieldMap[typeName]) === null || _c === void 0 ? void 0 : _c.type) === null || _d === void 0 ? void 0 : _d.getTypeName();
985
+ if (existingTypeName === 'JSON') {
986
+ schemaComposer.addDirective(directives_js_1.ResolveRootDirective);
987
+ fieldMap[typeName] = {
988
+ type: outputTypeComposer,
989
+ directives: [
990
+ {
991
+ name: 'resolveRoot',
992
+ },
993
+ ],
994
+ };
995
+ }
996
+ if (typeName !== 'JSON' && existingTypeName !== typeName) {
997
+ fieldMap[typeName] = {
998
+ type: schemaComposer.getAnyTC(graphql_scalars_1.GraphQLJSON),
999
+ };
1000
+ }
1001
+ }
1002
+ else {
1003
+ schemaComposer.addDirective(directives_js_1.ResolveRootDirective);
1004
+ fieldMap[typeName] = {
1005
+ type: outputTypeComposer,
1006
+ directives: [
1007
+ {
1008
+ name: 'resolveRoot',
1009
+ },
1010
+ ],
1011
+ };
1012
+ }
1013
+ }
1014
+ else {
1015
+ const typeElemFieldMap = outputTypeComposer.getFields();
1016
+ for (const fieldName in typeElemFieldMap) {
1017
+ // In case of conflict set it to JSON
1018
+ // TODO: But instead we can convert that field into a union of all possible types
1019
+ const field = typeElemFieldMap[fieldName];
1020
+ const existingField = fieldMap[fieldName];
1021
+ fieldMap[fieldName] = {
1022
+ ...field,
1023
+ type: () => {
1024
+ const fieldType = field.type.getType();
1025
+ const namedType = (0, graphql_1.getNamedType)(fieldType);
1026
+ if (existingField) {
1027
+ const existingFieldType = existingField.type();
1028
+ const existingNamedType = (0, graphql_1.getNamedType)(existingFieldType);
1029
+ const existingTypeName = existingNamedType.name;
1030
+ const newTypeName = namedType.name;
1031
+ if (existingTypeName !== 'JSON' && existingNamedType.name !== namedType.name) {
1032
+ return schemaComposer.getAnyTC(graphql_scalars_1.GraphQLJSON);
1033
+ }
1034
+ if (newTypeName === 'JSON') {
1035
+ return existingFieldType;
1036
+ }
1037
+ }
1038
+ return field.type.getType();
1039
+ },
1040
+ };
1041
+ }
1042
+ }
1043
+ }
1044
+ let outputTypeComposer = subSchemaAndTypeComposers.output;
1045
+ if ('ofType' in outputTypeComposer) {
1046
+ outputTypeComposer = outputTypeComposer.ofType;
1047
+ }
1048
+ outputTypeComposer.addFields(fieldMap);
1049
+ if ((_e = subSchemaAndTypeComposers.examples) === null || _e === void 0 ? void 0 : _e.length) {
1050
+ schemaComposer.addDirective(directives_js_1.ExampleDirective);
1051
+ const directives = outputTypeComposer.getDirectives() || [];
1052
+ for (const example of subSchemaAndTypeComposers.examples) {
1053
+ directives.push({
1054
+ name: 'example',
1055
+ args: {
1056
+ value: example,
1057
+ },
1058
+ });
1059
+ }
1060
+ outputTypeComposer.setDirectives(directives);
1061
+ }
1062
+ outputTypeComposer.setExtensions({
1063
+ // validateWithJSONSchema,
1064
+ default: subSchemaAndTypeComposers.default,
1065
+ });
1066
+ let inputTypeComposer = subSchemaAndTypeComposers.input;
1067
+ if ('ofType' in inputTypeComposer) {
1068
+ inputTypeComposer = inputTypeComposer.ofType;
1069
+ }
1070
+ if (ableToUseGraphQLInputObjectType) {
1071
+ inputTypeComposer.addFields(inputFieldMap);
1072
+ if ((_f = subSchemaAndTypeComposers.examples) === null || _f === void 0 ? void 0 : _f.length) {
1073
+ schemaComposer.addDirective(directives_js_1.ExampleDirective);
1074
+ const directives = inputTypeComposer.getDirectives() || [];
1075
+ for (const example of subSchemaAndTypeComposers.examples) {
1076
+ directives.push({
1077
+ name: 'example',
1078
+ args: {
1079
+ value: example,
1080
+ },
1081
+ });
1082
+ }
1083
+ inputTypeComposer.setDirectives(directives);
1084
+ }
1085
+ inputTypeComposer.setExtensions({
1086
+ default: subSchemaAndTypeComposers.default,
1087
+ });
1088
+ }
1089
+ else {
1090
+ subSchemaAndTypeComposers.input = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLJSON);
1091
+ }
1092
+ }
1093
+ switch (subSchemaAndTypeComposers.type) {
1094
+ case 'object':
1095
+ if (subSchemaAndTypeComposers.properties) {
1096
+ for (const propertyName in subSchemaAndTypeComposers.properties) {
1097
+ // TODO: needs to be fixed
1098
+ if (propertyName === 'additionalProperties') {
1099
+ continue;
1100
+ }
1101
+ const fieldName = (0, utils_1.sanitizeNameForGraphQL)(propertyName);
1102
+ const fieldDirectives = [];
1103
+ if (propertyName !== fieldName) {
1104
+ schemaComposer.addDirective(directives_js_1.ResolveRootFieldDirective);
1105
+ fieldDirectives.push({
1106
+ name: 'resolveRootField',
1107
+ args: {
1108
+ field: propertyName,
1109
+ },
1110
+ });
1111
+ }
1112
+ fieldMap[fieldName] = {
1113
+ type: () => {
1114
+ var _a;
1115
+ const typeComposers = subSchemaAndTypeComposers.properties[propertyName];
1116
+ let nullable = true;
1117
+ if ((_a = subSchemaAndTypeComposers.required) === null || _a === void 0 ? void 0 : _a.includes(propertyName)) {
1118
+ nullable = false;
1119
+ }
1120
+ // Nullable has more priority
1121
+ if (typeComposers.nullable === false) {
1122
+ nullable = false;
1123
+ }
1124
+ if (typeComposers.nullable === true) {
1125
+ nullable = true;
1126
+ }
1127
+ if (subSchemaAndTypeComposers.properties[propertyName].writeOnly) {
1128
+ nullable = true;
1129
+ }
1130
+ return !nullable ? typeComposers.output.getTypeNonNull() : typeComposers.output;
1131
+ },
1132
+ // Make sure you get the right property
1133
+ directives: fieldDirectives,
1134
+ description: subSchemaAndTypeComposers.properties[propertyName].description ||
1135
+ ((_g = subSchemaAndTypeComposers.properties[propertyName].output) === null || _g === void 0 ? void 0 : _g.description),
1136
+ };
1137
+ const directives = [];
1138
+ if (fieldName !== propertyName) {
1139
+ schemaComposer.addDirective(directives_js_1.ResolveRootFieldDirective);
1140
+ directives.push({
1141
+ name: 'resolveRootField',
1142
+ args: {
1143
+ field: propertyName,
1144
+ },
1145
+ });
1146
+ }
1147
+ inputFieldMap[fieldName] = {
1148
+ type: () => {
1149
+ var _a, _b;
1150
+ const typeComposers = subSchemaAndTypeComposers.properties[propertyName];
1151
+ let nullable = true;
1152
+ if ((_a = subSchemaAndTypeComposers.required) === null || _a === void 0 ? void 0 : _a.includes(propertyName)) {
1153
+ nullable = false;
1154
+ }
1155
+ // Nullable has more priority
1156
+ if (typeComposers.nullable === false) {
1157
+ nullable = false;
1158
+ }
1159
+ if (typeComposers.nullable === true) {
1160
+ nullable = true;
1161
+ }
1162
+ if (subSchemaAndTypeComposers.properties[propertyName].readOnly) {
1163
+ nullable = true;
1164
+ }
1165
+ return !nullable ? (_b = typeComposers.input) === null || _b === void 0 ? void 0 : _b.getTypeNonNull() : typeComposers.input;
1166
+ },
1167
+ directives,
1168
+ description: subSchemaAndTypeComposers.properties[propertyName].description ||
1169
+ ((_h = subSchemaAndTypeComposers.properties[propertyName].input) === null || _h === void 0 ? void 0 : _h.description),
1170
+ defaultValue: ((_j = subSchemaAndTypeComposers.properties[propertyName]) === null || _j === void 0 ? void 0 : _j.default) ||
1171
+ ((_l = (_k = subSchemaAndTypeComposers.properties[propertyName]) === null || _k === void 0 ? void 0 : _k.extensions) === null || _l === void 0 ? void 0 : _l.default) ||
1172
+ ((_o = (_m = subSchemaAndTypeComposers.properties[propertyName]) === null || _m === void 0 ? void 0 : _m.input) === null || _o === void 0 ? void 0 : _o.default),
1173
+ };
1174
+ }
1175
+ }
1176
+ if (subSchemaAndTypeComposers.additionalProperties) {
1177
+ // Take a look later
1178
+ if (typeof subSchemaAndTypeComposers.additionalProperties === 'object' &&
1179
+ subSchemaAndTypeComposers.additionalProperties.output instanceof graphql_compose_1.ObjectTypeComposer) {
1180
+ const containerOutputTC = schemaComposer.createObjectTC({
1181
+ name: `${subSchemaAndTypeComposers.additionalProperties.output.getTypeName()}_entry`,
1182
+ fields: {
1183
+ key: {
1184
+ type: 'ID!',
1185
+ },
1186
+ value: {
1187
+ type: subSchemaAndTypeComposers.additionalProperties.output,
1188
+ },
1189
+ },
1190
+ });
1191
+ schemaComposer.addDirective(directives_js_1.DictionaryDirective);
1192
+ fieldMap.additionalProperties = {
1193
+ type: containerOutputTC.List,
1194
+ directives: [
1195
+ {
1196
+ name: 'dictionary',
1197
+ },
1198
+ ],
1199
+ };
1200
+ }
1201
+ else if (Object.keys(fieldMap).length > 0) {
1202
+ schemaComposer.addDirective(directives_js_1.ResolveRootDirective);
1203
+ fieldMap.additionalProperties = {
1204
+ type: graphql_scalars_1.GraphQLJSON,
1205
+ directives: [
1206
+ {
1207
+ name: 'resolveRoot',
1208
+ },
1209
+ ],
1210
+ };
1211
+ }
1212
+ else {
1213
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLJSON);
1214
+ schemaComposer.delete((_q = (_p = subSchemaAndTypeComposers.input) === null || _p === void 0 ? void 0 : _p.getTypeName) === null || _q === void 0 ? void 0 : _q.call(_p));
1215
+ schemaComposer.delete((_s = (_r = subSchemaAndTypeComposers.output) === null || _r === void 0 ? void 0 : _r.getTypeName) === null || _s === void 0 ? void 0 : _s.call(_r));
1216
+ return {
1217
+ input: typeComposer,
1218
+ output: typeComposer,
1219
+ description: subSchemaAndTypeComposers.description,
1220
+ nullable: subSchemaAndTypeComposers.nullable,
1221
+ default: subSchemaAndTypeComposers.default,
1222
+ readOnly: subSchemaAndTypeComposers.readOnly,
1223
+ writeOnly: subSchemaAndTypeComposers.writeOnly,
1224
+ };
1225
+ }
1226
+ }
1227
+ if (subSchemaAndTypeComposers.title in rootInputTypeNameComposerMap) {
1228
+ const typeComposer = rootInputTypeNameComposerMap[subSchemaAndTypeComposers.title]();
1229
+ for (const fieldName in inputFieldMap) {
1230
+ let inputTC = inputFieldMap[fieldName].type();
1231
+ if ('ofType' in inputTC) {
1232
+ inputTC = inputTC.ofType;
1233
+ }
1234
+ typeComposer.addFieldArgs(fieldName, inputTC.getFields());
1235
+ }
1236
+ return {
1237
+ output: typeComposer,
1238
+ };
1239
+ }
1240
+ let output = subSchemaAndTypeComposers.output;
1241
+ if (Object.keys(fieldMap).length === 0) {
1242
+ output = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLJSON);
1243
+ }
1244
+ else if ('addFields' in output) {
1245
+ output.addFields(fieldMap);
1246
+ }
1247
+ let input = subSchemaAndTypeComposers.input;
1248
+ if (Object.keys(inputFieldMap).length === 0) {
1249
+ input = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLJSON);
1250
+ }
1251
+ else if (input != null && 'addFields' in input) {
1252
+ input.addFields(inputFieldMap);
1253
+ }
1254
+ if (isList) {
1255
+ input = input.List;
1256
+ output = output.List;
1257
+ }
1258
+ return {
1259
+ input,
1260
+ output,
1261
+ nullable: subSchemaAndTypeComposers.nullable,
1262
+ default: subSchemaAndTypeComposers.default,
1263
+ readOnly: subSchemaAndTypeComposers.readOnly,
1264
+ writeOnly: subSchemaAndTypeComposers.writeOnly,
1265
+ };
1266
+ }
1267
+ if (subSchemaAndTypeComposers.input || subSchemaAndTypeComposers.output) {
1268
+ return {
1269
+ input: subSchemaAndTypeComposers.input,
1270
+ output: subSchemaAndTypeComposers.output,
1271
+ description: subSchemaAndTypeComposers.description,
1272
+ nullable: subSchemaAndTypeComposers.nullable,
1273
+ default: subSchemaAndTypeComposers.default,
1274
+ readOnly: subSchemaAndTypeComposers.readOnly,
1275
+ writeOnly: subSchemaAndTypeComposers.writeOnly,
1276
+ };
1277
+ }
1278
+ else {
1279
+ logger.debug(`GraphQL Type cannot be created for this JSON Schema definition;`, {
1280
+ subSchema: subSchemaOnly,
1281
+ path,
1282
+ });
1283
+ const typeComposer = schemaComposer.getAnyTC(graphql_scalars_1.GraphQLJSON);
1284
+ return {
1285
+ input: typeComposer,
1286
+ output: typeComposer,
1287
+ description: subSchemaAndTypeComposers.description,
1288
+ nullable: subSchemaAndTypeComposers.nullable,
1289
+ readOnly: subSchemaAndTypeComposers.readOnly,
1290
+ writeOnly: subSchemaAndTypeComposers.writeOnly,
1291
+ default: subSchemaAndTypeComposers.default,
1292
+ };
1293
+ }
1294
+ },
1295
+ });
1296
+ }
1297
+ exports.getComposerFromJSONSchema = getComposerFromJSONSchema;