Skip to content

Commit bc9fb7d

Browse files
committed
refactor: move out important methods from composeWithMongose to composeMongose module
BREAKING CHANGE: remove default export from package. Use `import { composeMongoose } from 'graphql-compose-mongoose';`
1 parent b62ef6f commit bc9fb7d

File tree

3 files changed

+74
-84
lines changed

3 files changed

+74
-84
lines changed

src/composeMongoose.ts

Lines changed: 72 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
1-
import type { SchemaComposer, Resolver } from 'graphql-compose';
1+
import type { SchemaComposer, Resolver, InputTypeComposer } from 'graphql-compose';
22
import { schemaComposer as globalSchemaComposer, ObjectTypeComposer } from 'graphql-compose';
33
import type { Model, Document } from 'mongoose';
44
import { convertModelToGraphQL } from './fieldsConverter';
55
import { resolverFactory } from './resolvers';
66
import MongoID from './types/MongoID';
7-
import {
8-
prepareFields,
9-
createInputType,
10-
TransformRecordIdFn,
11-
TypeConverterInputTypeOpts,
12-
} from './composeWithMongoose';
7+
8+
export type TypeConverterInputTypeOpts = {
9+
name?: string;
10+
description?: string;
11+
fields?: {
12+
only?: string[];
13+
remove?: string[];
14+
required?: string[];
15+
};
16+
};
1317

1418
export type ComposeMongooseOpts<TContext> = {
1519
schemaComposer?: SchemaComposer<TContext>;
@@ -21,8 +25,6 @@ export type ComposeMongooseOpts<TContext> = {
2125
remove?: string[];
2226
};
2327
inputType?: TypeConverterInputTypeOpts;
24-
/** You may customize `recordId` field in mutation payloads */
25-
transformRecordId?: TransformRecordIdFn<TContext>;
2628
};
2729

2830
export type GenerateResolverType<TDoc extends Document, TContext = any> = {
@@ -124,3 +126,64 @@ function makeFieldsNonNullWithDefaultValues(
124126
tc.setExtension('hasFieldsWithDefaultValue', true);
125127
}
126128
}
129+
130+
export function prepareFields(
131+
tc: ObjectTypeComposer<any, any>,
132+
opts: {
133+
only?: string[];
134+
remove?: string[];
135+
}
136+
): void {
137+
if (Array.isArray(opts.only)) {
138+
const onlyFieldNames: string[] = opts.only;
139+
const removeFields = Object.keys(tc.getFields()).filter(
140+
(fName) => onlyFieldNames.indexOf(fName) === -1
141+
);
142+
tc.removeField(removeFields);
143+
}
144+
if (opts.remove) {
145+
tc.removeField(opts.remove);
146+
}
147+
}
148+
149+
export function createInputType(
150+
tc: ObjectTypeComposer<any, any>,
151+
inputTypeOpts: TypeConverterInputTypeOpts = {}
152+
): void {
153+
const inputTypeComposer = tc.getInputTypeComposer();
154+
155+
if (inputTypeOpts.name) {
156+
inputTypeComposer.setTypeName(inputTypeOpts.name);
157+
}
158+
159+
if (inputTypeOpts.description) {
160+
inputTypeComposer.setDescription(inputTypeOpts.description);
161+
}
162+
163+
if (inputTypeOpts.fields) {
164+
prepareInputFields(inputTypeComposer, inputTypeOpts.fields);
165+
}
166+
}
167+
168+
export function prepareInputFields(
169+
inputTypeComposer: InputTypeComposer<any>,
170+
inputFieldsOpts: {
171+
only?: string[];
172+
remove?: string[];
173+
required?: string[];
174+
}
175+
): void {
176+
if (Array.isArray(inputFieldsOpts.only)) {
177+
const onlyFieldNames: string[] = inputFieldsOpts.only;
178+
const removeFields = Object.keys(inputTypeComposer.getFields()).filter(
179+
(fName) => onlyFieldNames.indexOf(fName) === -1
180+
);
181+
inputTypeComposer.removeField(removeFields);
182+
}
183+
if (inputFieldsOpts.remove) {
184+
inputTypeComposer.removeField(inputFieldsOpts.remove);
185+
}
186+
if (inputFieldsOpts.required) {
187+
inputTypeComposer.makeFieldNonNull(inputFieldsOpts.required);
188+
}
189+
}

src/composeWithMongoose.ts

Lines changed: 2 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
/* eslint-disable no-use-before-define, no-param-reassign, global-require */
22

3-
import type { ObjectTypeComposer, InputTypeComposer, SchemaComposer } from 'graphql-compose';
3+
import type { ObjectTypeComposer, SchemaComposer } from 'graphql-compose';
44
import { schemaComposer as globalSchemaComposer } from 'graphql-compose';
55
import type { Model, Document } from 'mongoose';
66
import { convertModelToGraphQL } from './fieldsConverter';
77
import { resolverFactory, AllResolversOpts } from './resolvers';
88
import MongoID from './types/MongoID';
99
import { GraphQLResolveInfo } from 'graphql';
10+
import { TypeConverterInputTypeOpts, prepareFields, createInputType } from './composeMongoose';
1011

1112
export type ComposeWithMongooseOpts<TContext> = {
1213
schemaComposer?: SchemaComposer<TContext>;
@@ -29,16 +30,6 @@ export type TransformRecordIdFn<TContext = any> = (
2930
info: GraphQLResolveInfo
3031
) => any;
3132

32-
export type TypeConverterInputTypeOpts = {
33-
name?: string;
34-
description?: string;
35-
fields?: {
36-
only?: string[];
37-
remove?: string[];
38-
required?: string[];
39-
};
40-
};
41-
4233
export function composeWithMongoose<TDoc extends Document, TContext = any>(
4334
model: Model<TDoc>,
4435
opts: ComposeWithMongooseOpts<TContext> = {}
@@ -81,67 +72,6 @@ export function composeWithMongoose<TDoc extends Document, TContext = any>(
8172
return tc;
8273
}
8374

84-
export function prepareFields(
85-
tc: ObjectTypeComposer<any, any>,
86-
opts: {
87-
only?: string[];
88-
remove?: string[];
89-
}
90-
): void {
91-
if (Array.isArray(opts.only)) {
92-
const onlyFieldNames: string[] = opts.only;
93-
const removeFields = Object.keys(tc.getFields()).filter(
94-
(fName) => onlyFieldNames.indexOf(fName) === -1
95-
);
96-
tc.removeField(removeFields);
97-
}
98-
if (opts.remove) {
99-
tc.removeField(opts.remove);
100-
}
101-
}
102-
103-
export function prepareInputFields(
104-
inputTypeComposer: InputTypeComposer<any>,
105-
inputFieldsOpts: {
106-
only?: string[];
107-
remove?: string[];
108-
required?: string[];
109-
}
110-
): void {
111-
if (Array.isArray(inputFieldsOpts.only)) {
112-
const onlyFieldNames: string[] = inputFieldsOpts.only;
113-
const removeFields = Object.keys(inputTypeComposer.getFields()).filter(
114-
(fName) => onlyFieldNames.indexOf(fName) === -1
115-
);
116-
inputTypeComposer.removeField(removeFields);
117-
}
118-
if (inputFieldsOpts.remove) {
119-
inputTypeComposer.removeField(inputFieldsOpts.remove);
120-
}
121-
if (inputFieldsOpts.required) {
122-
inputTypeComposer.makeFieldNonNull(inputFieldsOpts.required);
123-
}
124-
}
125-
126-
export function createInputType(
127-
tc: ObjectTypeComposer<any, any>,
128-
inputTypeOpts: TypeConverterInputTypeOpts = {}
129-
): void {
130-
const inputTypeComposer = tc.getInputTypeComposer();
131-
132-
if (inputTypeOpts.name) {
133-
inputTypeComposer.setTypeName(inputTypeOpts.name);
134-
}
135-
136-
if (inputTypeOpts.description) {
137-
inputTypeComposer.setDescription(inputTypeOpts.description);
138-
}
139-
140-
if (inputTypeOpts.fields) {
141-
prepareInputFields(inputTypeComposer, inputTypeOpts.fields);
142-
}
143-
}
144-
14575
export function createResolvers(
14676
model: Model<any>,
14777
tc: ObjectTypeComposer<any, any>,

src/index.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
import { composeWithMongoose } from './composeWithMongoose';
21
import GraphQLMongoID from './types/MongoID';
32
import GraphQLBSONDecimal from './types/BSONDecimal';
43

5-
export default composeWithMongoose;
6-
74
export * from './composeWithMongoose';
85
export * from './composeMongoose';
96
export * from './composeWithMongooseDiscriminators';

0 commit comments

Comments
 (0)