UNPKG

4.16 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.extractExtensionsFromSchema = void 0;
4const helpers_js_1 = require("./helpers.js");
5const Interfaces_js_1 = require("./Interfaces.js");
6const mapSchema_js_1 = require("./mapSchema.js");
7function 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}
24function 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}
103exports.extractExtensionsFromSchema = extractExtensionsFromSchema;