1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.extractExtensionsFromSchema = void 0;
|
4 | const helpers_js_1 = require("./helpers.js");
|
5 | const Interfaces_js_1 = require("./Interfaces.js");
|
6 | const mapSchema_js_1 = require("./mapSchema.js");
|
7 | function handleDirectiveExtensions(extensions, removeDirectives) {
|
8 | extensions = extensions || {};
|
9 | const { directives: existingDirectives, ...rest } = extensions;
|
10 | const finalExtensions = {
|
11 | ...rest,
|
12 | };
|
13 | if (!removeDirectives) {
|
14 | if (existingDirectives != null) {
|
15 | const directives = {};
|
16 | for (const directiveName in existingDirectives) {
|
17 | directives[directiveName] = [...(0, helpers_js_1.asArray)(existingDirectives[directiveName])];
|
18 | }
|
19 | finalExtensions.directives = directives;
|
20 | }
|
21 | }
|
22 | return finalExtensions;
|
23 | }
|
24 | function extractExtensionsFromSchema(schema, removeDirectives = false) {
|
25 | const result = {
|
26 | schemaExtensions: handleDirectiveExtensions(schema.extensions, removeDirectives),
|
27 | types: {},
|
28 | };
|
29 | (0, mapSchema_js_1.mapSchema)(schema, {
|
30 | [Interfaces_js_1.MapperKind.OBJECT_TYPE]: type => {
|
31 | result.types[type.name] = {
|
32 | fields: {},
|
33 | type: 'object',
|
34 | extensions: handleDirectiveExtensions(type.extensions, removeDirectives),
|
35 | };
|
36 | return type;
|
37 | },
|
38 | [Interfaces_js_1.MapperKind.INTERFACE_TYPE]: type => {
|
39 | result.types[type.name] = {
|
40 | fields: {},
|
41 | type: 'interface',
|
42 | extensions: handleDirectiveExtensions(type.extensions, removeDirectives),
|
43 | };
|
44 | return type;
|
45 | },
|
46 | [Interfaces_js_1.MapperKind.FIELD]: (field, fieldName, typeName) => {
|
47 | result.types[typeName].fields[fieldName] = {
|
48 | arguments: {},
|
49 | extensions: handleDirectiveExtensions(field.extensions, removeDirectives),
|
50 | };
|
51 | const args = field.args;
|
52 | if (args != null) {
|
53 | for (const argName in args) {
|
54 | result.types[typeName].fields[fieldName].arguments[argName] =
|
55 | handleDirectiveExtensions(args[argName].extensions, removeDirectives);
|
56 | }
|
57 | }
|
58 | return field;
|
59 | },
|
60 | [Interfaces_js_1.MapperKind.ENUM_TYPE]: type => {
|
61 | result.types[type.name] = {
|
62 | values: {},
|
63 | type: 'enum',
|
64 | extensions: handleDirectiveExtensions(type.extensions, removeDirectives),
|
65 | };
|
66 | return type;
|
67 | },
|
68 | [Interfaces_js_1.MapperKind.ENUM_VALUE]: (value, typeName, _schema, valueName) => {
|
69 | result.types[typeName].values[valueName] = handleDirectiveExtensions(value.extensions, removeDirectives);
|
70 | return value;
|
71 | },
|
72 | [Interfaces_js_1.MapperKind.SCALAR_TYPE]: type => {
|
73 | result.types[type.name] = {
|
74 | type: 'scalar',
|
75 | extensions: handleDirectiveExtensions(type.extensions, removeDirectives),
|
76 | };
|
77 | return type;
|
78 | },
|
79 | [Interfaces_js_1.MapperKind.UNION_TYPE]: type => {
|
80 | result.types[type.name] = {
|
81 | type: 'union',
|
82 | extensions: handleDirectiveExtensions(type.extensions, removeDirectives),
|
83 | };
|
84 | return type;
|
85 | },
|
86 | [Interfaces_js_1.MapperKind.INPUT_OBJECT_TYPE]: type => {
|
87 | result.types[type.name] = {
|
88 | fields: {},
|
89 | type: 'input',
|
90 | extensions: handleDirectiveExtensions(type.extensions, removeDirectives),
|
91 | };
|
92 | return type;
|
93 | },
|
94 | [Interfaces_js_1.MapperKind.INPUT_OBJECT_FIELD]: (field, fieldName, typeName) => {
|
95 | result.types[typeName].fields[fieldName] = {
|
96 | extensions: handleDirectiveExtensions(field.extensions, removeDirectives),
|
97 | };
|
98 | return field;
|
99 | },
|
100 | });
|
101 | return result;
|
102 | }
|
103 | exports.extractExtensionsFromSchema = extractExtensionsFromSchema;
|