UNPKG

4.36 kBJavaScriptView Raw
1import { GraphQLObjectType } from 'graphql';
2import { MapperKind } from './Interfaces.js';
3import { mapSchema, correctASTNodes } from './mapSchema.js';
4import { addTypes } from './addTypes.js';
5export function appendObjectFields(schema, typeName, additionalFields) {
6 if (schema.getType(typeName) == null) {
7 return addTypes(schema, [
8 new GraphQLObjectType({
9 name: typeName,
10 fields: additionalFields,
11 }),
12 ]);
13 }
14 return mapSchema(schema, {
15 [MapperKind.OBJECT_TYPE]: type => {
16 if (type.name === typeName) {
17 const config = type.toConfig();
18 const originalFieldConfigMap = config.fields;
19 const newFieldConfigMap = {};
20 for (const fieldName in originalFieldConfigMap) {
21 newFieldConfigMap[fieldName] = originalFieldConfigMap[fieldName];
22 }
23 for (const fieldName in additionalFields) {
24 newFieldConfigMap[fieldName] = additionalFields[fieldName];
25 }
26 return correctASTNodes(new GraphQLObjectType({
27 ...config,
28 fields: newFieldConfigMap,
29 }));
30 }
31 },
32 });
33}
34export function removeObjectFields(schema, typeName, testFn) {
35 const removedFields = {};
36 const newSchema = mapSchema(schema, {
37 [MapperKind.OBJECT_TYPE]: type => {
38 if (type.name === typeName) {
39 const config = type.toConfig();
40 const originalFieldConfigMap = config.fields;
41 const newFieldConfigMap = {};
42 for (const fieldName in originalFieldConfigMap) {
43 const originalFieldConfig = originalFieldConfigMap[fieldName];
44 if (testFn(fieldName, originalFieldConfig)) {
45 removedFields[fieldName] = originalFieldConfig;
46 }
47 else {
48 newFieldConfigMap[fieldName] = originalFieldConfig;
49 }
50 }
51 return correctASTNodes(new GraphQLObjectType({
52 ...config,
53 fields: newFieldConfigMap,
54 }));
55 }
56 },
57 });
58 return [newSchema, removedFields];
59}
60export function selectObjectFields(schema, typeName, testFn) {
61 const selectedFields = {};
62 mapSchema(schema, {
63 [MapperKind.OBJECT_TYPE]: type => {
64 if (type.name === typeName) {
65 const config = type.toConfig();
66 const originalFieldConfigMap = config.fields;
67 for (const fieldName in originalFieldConfigMap) {
68 const originalFieldConfig = originalFieldConfigMap[fieldName];
69 if (testFn(fieldName, originalFieldConfig)) {
70 selectedFields[fieldName] = originalFieldConfig;
71 }
72 }
73 }
74 return undefined;
75 },
76 });
77 return selectedFields;
78}
79export function modifyObjectFields(schema, typeName, testFn, newFields) {
80 const removedFields = {};
81 const newSchema = mapSchema(schema, {
82 [MapperKind.OBJECT_TYPE]: type => {
83 if (type.name === typeName) {
84 const config = type.toConfig();
85 const originalFieldConfigMap = config.fields;
86 const newFieldConfigMap = {};
87 for (const fieldName in originalFieldConfigMap) {
88 const originalFieldConfig = originalFieldConfigMap[fieldName];
89 if (testFn(fieldName, originalFieldConfig)) {
90 removedFields[fieldName] = originalFieldConfig;
91 }
92 else {
93 newFieldConfigMap[fieldName] = originalFieldConfig;
94 }
95 }
96 for (const fieldName in newFields) {
97 const fieldConfig = newFields[fieldName];
98 newFieldConfigMap[fieldName] = fieldConfig;
99 }
100 return correctASTNodes(new GraphQLObjectType({
101 ...config,
102 fields: newFieldConfigMap,
103 }));
104 }
105 },
106 });
107 return [newSchema, removedFields];
108}