Skip to content

Commit 8a4f709

Browse files
committed
fix(typing): expose type defs ComposeWithMongooseOpts and others
1 parent c3ef0ce commit 8a4f709

17 files changed

+139
-74
lines changed

src/composeWithMongoose.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
} from './resolvers/helpers';
1414
import { PaginationResolverOpts } from './resolvers/pagination';
1515

16-
export type TypeConverterOpts<TContext = any> = {
16+
export type ComposeWithMongooseOpts<TContext = any> = {
1717
schemaComposer?: SchemaComposer<TContext>;
1818
name?: string;
1919
description?: string;
@@ -116,7 +116,7 @@ export function composeWithMongoose<
116116
TContext = any
117117
>(
118118
model: Model<TModel>,
119-
opts?: TypeConverterOpts<TContext>,
119+
opts?: ComposeWithMongooseOpts<TContext>,
120120
): ObjectTypeComposer<TModel, TContext>;
121121

122122
export function prepareFields(

src/composeWithMongoose.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import MongoID from './types/mongoid';
1616
import type { PaginationResolverOpts } from './resolvers/pagination';
1717
import type { ConnectionSortMapOpts } from './resolvers/connection';
1818

19-
export type TypeConverterOpts<TContext> = {|
19+
export type ComposeWithMongooseOpts<TContext> = {|
2020
schemaComposer?: SchemaComposer<TContext>,
2121
name?: string,
2222
description?: string,
@@ -117,7 +117,7 @@ export type TypeConverterResolversOpts = {
117117

118118
export function composeWithMongoose<TSource, TContext>(
119119
model: Class<TSource>, // === MongooseModel,
120-
opts: TypeConverterOpts<TContext> = ({}: any)
120+
opts: ComposeWithMongooseOpts<TContext> = ({}: any)
121121
): ObjectTypeComposer<TSource, TContext> {
122122
const m: MongooseModel = (model: any);
123123
const name: string = (opts && opts.name) || m.modelName;
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import { Document, Model } from 'mongoose';
22
import {
3-
DiscriminatorOptions,
3+
ComposeWithMongooseDiscriminatorsOpts,
44
DiscriminatorTypeComposer,
55
} from './discriminators';
66

7+
export * from './discriminators';
8+
79
export function composeWithMongooseDiscriminators<
810
TBaseModel extends Document = any,
911
TContext = any
1012
>(
1113
baseModel: Model<TBaseModel>,
12-
opts?: DiscriminatorOptions<TContext>,
14+
opts?: ComposeWithMongooseDiscriminatorsOpts<TContext>,
1315
): DiscriminatorTypeComposer<TBaseModel, TContext>;

src/composeWithMongooseDiscriminators.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,16 @@
22

33
import { schemaComposer as globalSchemaComposer } from 'graphql-compose';
44
import type { MongooseModel } from 'mongoose';
5-
import { type DiscriminatorOptions, DiscriminatorTypeComposer } from './discriminators';
5+
import {
6+
type ComposeWithMongooseDiscriminatorsOpts,
7+
DiscriminatorTypeComposer,
8+
} from './discriminators';
9+
10+
export * from './discriminators';
611

712
export function composeWithMongooseDiscriminators<TSource, TContext>(
813
baseModel: Class<TSource>, // === MongooseModel,
9-
opts?: DiscriminatorOptions<TContext>
14+
opts?: ComposeWithMongooseDiscriminatorsOpts<TContext>
1015
): DiscriminatorTypeComposer<TSource, TContext> {
1116
const m: MongooseModel = (baseModel: any);
1217
const sc = (opts ? opts.schemaComposer : null) || globalSchemaComposer;

src/discriminators/DiscriminatorTypeComposer.d.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ import {
99
ObjectTypeComposer,
1010
} from 'graphql-compose';
1111
import { Document, Model } from 'mongoose';
12-
import { TypeConverterOpts } from '../composeWithMongoose';
12+
import { ComposeWithMongooseOpts } from '../composeWithMongoose';
1313

14-
export type DiscriminatorOptions<TContext = any> = TypeConverterOpts<
15-
TContext
16-
> & {
14+
export type ComposeWithMongooseDiscriminatorsOpts<
15+
TContext = any
16+
> = ComposeWithMongooseOpts<TContext> & {
1717
reorderFields?: boolean | string[]; // true order: _id, DKey, DInterfaceFields, DiscriminatorFields
1818
};
1919

@@ -27,15 +27,15 @@ export class DiscriminatorTypeComposer<
2727

2828
private DKeyETC: EnumTypeComposer;
2929

30-
private opts: DiscriminatorOptions<TContext>;
30+
private opts: ComposeWithMongooseDiscriminatorsOpts<TContext>;
3131

3232
private DInterface: InterfaceTypeComposer<any>;
3333

3434
private childTCs: Array<ObjectTypeComposer<any>>;
3535

3636
public static createFromModel<TBModel extends Document, TCtx>(
3737
baseModel: Model<TBModel>,
38-
opts?: DiscriminatorOptions<TCtx>,
38+
opts?: ComposeWithMongooseDiscriminatorsOpts<TCtx>,
3939
): DiscriminatorTypeComposer<TBModel, TCtx>;
4040

4141
// ------------------------------------------------
@@ -51,7 +51,7 @@ export class DiscriminatorTypeComposer<
5151

5252
public discriminator<TChildModel extends TBaseModel>(
5353
childModel: Model<TChildModel>,
54-
opts?: TypeConverterOpts<TContext>,
54+
opts?: ComposeWithMongooseOpts<TContext>,
5555
): ObjectTypeComposer<TChildModel, TContext>;
5656

5757
// ------------------------------------------------
@@ -69,9 +69,7 @@ export class DiscriminatorTypeComposer<
6969

7070
public setFields(fields: ComposeFieldConfigMap<TBaseModel, TContext>): this;
7171

72-
public setFields(
73-
fields: ComposeFieldConfigMap<TBaseModel, TContext>,
74-
): this;
72+
public setFields(fields: ComposeFieldConfigMap<TBaseModel, TContext>): this;
7573

7674
// discriminators must have all interface fields
7775
public addFields(

src/discriminators/DiscriminatorTypeComposer.js

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@ import {
1313
} from 'graphql-compose';
1414
import type { ComposeFieldConfigAsObject } from 'graphql-compose/lib/ObjectTypeComposer';
1515
import type { Model } from 'mongoose';
16-
import { composeWithMongoose, type TypeConverterOpts } from '../composeWithMongoose';
16+
import { composeWithMongoose, type ComposeWithMongooseOpts } from '../composeWithMongoose';
1717
import { composeChildTC } from './composeChildTC';
1818
import { mergeCustomizationOptions } from './utils/mergeCustomizationOptions';
1919
import { prepareBaseResolvers } from './prepareBaseResolvers';
2020
import { reorderFields } from './utils/reorderFields';
2121

22-
export type DiscriminatorOptions<TContext> = {|
22+
export type ComposeWithMongooseDiscriminatorsOpts<TContext> = {|
2323
reorderFields?: boolean | string[], // true order: _id, DKey, DInterfaceFields, DiscriminatorFields
24-
...TypeConverterOpts<TContext>,
24+
...ComposeWithMongooseOpts<TContext>,
2525
|};
2626

2727
type Discriminators = {
@@ -75,7 +75,7 @@ export class DiscriminatorTypeComposer<TSource, TContext> extends ObjectTypeComp
7575

7676
DKeyETC: EnumTypeComposer<TContext>;
7777

78-
opts: DiscriminatorOptions<TContext>;
78+
opts: ComposeWithMongooseDiscriminatorsOpts<TContext>;
7979

8080
DInterface: InterfaceTypeComposer<TSource, TContext>;
8181

@@ -190,6 +190,23 @@ export class DiscriminatorTypeComposer<TSource, TContext> extends ObjectTypeComp
190190
return !!this.childTCs.find(ch => ch.getTypeName() === DName);
191191
}
192192

193+
/* eslint no-use-before-define: 0 */
194+
discriminator<TSrc: Model>(
195+
childModel: Class<TSrc>,
196+
opts?: ComposeWithMongooseOpts<TContext>
197+
): ObjectTypeComposer<TSrc, TContext> {
198+
const customizationOpts = mergeCustomizationOptions((this.opts: any), opts);
199+
200+
let childTC = composeWithMongoose(childModel, customizationOpts);
201+
202+
childTC = composeChildTC(this, childTC, this.opts);
203+
204+
this.schemaComposer.addSchemaMustHaveType(childTC);
205+
this.childTCs.push(childTC);
206+
207+
return childTC;
208+
}
209+
193210
setFields(fields: ComposeFieldConfigMap<any, any>): DiscriminatorTypeComposer<TSource, TContext> {
194211
const oldFieldNames = super.getFieldNames();
195212
super.setFields(fields);
@@ -358,21 +375,4 @@ export class DiscriminatorTypeComposer<TSource, TContext> extends ObjectTypeComp
358375

359376
return this;
360377
}
361-
362-
/* eslint no-use-before-define: 0 */
363-
discriminator<TSrc: Model>(
364-
childModel: Class<TSrc>,
365-
opts?: TypeConverterOpts<TContext>
366-
): ObjectTypeComposer<TSrc, TContext> {
367-
const customizationOpts = mergeCustomizationOptions((this.opts: any), opts);
368-
369-
let childTC = composeWithMongoose(childModel, customizationOpts);
370-
371-
childTC = composeChildTC(this, childTC, this.opts);
372-
373-
this.schemaComposer.addSchemaMustHaveType(childTC);
374-
this.childTCs.push(childTC);
375-
376-
return childTC;
377-
}
378378
}

src/discriminators/composeChildTC.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
/* @flow */
22

33
import { ObjectTypeComposer } from 'graphql-compose';
4-
import type { DiscriminatorTypeComposer, DiscriminatorOptions } from './DiscriminatorTypeComposer';
4+
import type {
5+
DiscriminatorTypeComposer,
6+
ComposeWithMongooseDiscriminatorsOpts,
7+
} from './DiscriminatorTypeComposer';
58
import { prepareChildResolvers } from './prepareChildResolvers';
69
import { reorderFields } from './utils/reorderFields';
710

@@ -32,7 +35,7 @@ function copyBaseTCFieldsToChildTC(
3235
export function composeChildTC<TSource, TContext>(
3336
baseDTC: DiscriminatorTypeComposer<any, TContext>,
3437
childTC: ObjectTypeComposer<TSource, TContext>,
35-
opts: DiscriminatorOptions<TContext>
38+
opts: ComposeWithMongooseDiscriminatorsOpts<TContext>
3639
): ObjectTypeComposer<TSource, TContext> {
3740
const composedChildTC = copyBaseTCFieldsToChildTC(baseDTC, childTC);
3841

src/discriminators/index.d.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
1-
import { TypeConverterOpts } from '../composeWithMongoose';
2-
31
export {
42
DiscriminatorTypeComposer,
5-
DiscriminatorOptions,
3+
ComposeWithMongooseDiscriminatorsOpts,
64
} from './DiscriminatorTypeComposer';
75

8-
export function mergeCustomizationOptions(
9-
baseCOptions: TypeConverterOpts,
10-
childCOptions?: TypeConverterOpts,
11-
): TypeConverterOpts | void;
6+
export { mergeCustomizationOptions } from './utils/mergeCustomizationOptions';

src/discriminators/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
/* @flow */
22

3-
export { DiscriminatorTypeComposer, DiscriminatorOptions } from './DiscriminatorTypeComposer';
3+
export { DiscriminatorTypeComposer } from './DiscriminatorTypeComposer';
4+
export type { ComposeWithMongooseDiscriminatorsOpts } from './DiscriminatorTypeComposer';
5+
46
export { mergeCustomizationOptions } from './utils/mergeCustomizationOptions';

src/discriminators/prepareChildResolvers.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
import type { ResolveParams } from 'graphql-compose';
44
import { Resolver, ObjectTypeComposer } from 'graphql-compose';
5-
import { type DiscriminatorOptions, DiscriminatorTypeComposer } from './DiscriminatorTypeComposer';
5+
import {
6+
type ComposeWithMongooseDiscriminatorsOpts,
7+
DiscriminatorTypeComposer,
8+
} from './DiscriminatorTypeComposer';
69
import { EMCResolvers } from '../resolvers';
710

811
// set the DKey as a query on filter, also project it
@@ -134,7 +137,7 @@ function reorderFieldsRecordFilter<TSource, TContext>(
134137
export function prepareChildResolvers<TSource, TContext>(
135138
baseDTC: DiscriminatorTypeComposer<TSource, TContext>,
136139
childTC: ObjectTypeComposer<TSource, TContext>,
137-
opts: DiscriminatorOptions<TContext>
140+
opts: ComposeWithMongooseDiscriminatorsOpts<TContext>
138141
) {
139142
for (const resolverName in EMCResolvers) {
140143
if (EMCResolvers.hasOwnProperty(resolverName) && childTC.hasResolver(resolverName)) {

src/discriminators/utils/__tests__/mergeCustomizationOptions-test.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* @flow */
22

33
import { SchemaComposer } from 'graphql-compose';
4-
import type { TypeConverterOpts } from '../../../composeWithMongoose';
4+
import type { ComposeWithMongooseOpts } from '../../../composeWithMongoose';
55
import {
66
mergeCustomizationOptions,
77
mergeFieldMaps,
@@ -134,7 +134,7 @@ describe('mergeFieldMaps()', () => {
134134
});
135135

136136
describe('mergeCustomizationOptions()', () => {
137-
const baseCustomOptions: TypeConverterOpts<any> = {
137+
const baseCustomOptions: ComposeWithMongooseOpts<any> = {
138138
fields: baseFields,
139139
inputType: {
140140
name: 'BaseInput',
@@ -170,7 +170,7 @@ describe('mergeCustomizationOptions()', () => {
170170
},
171171
};
172172

173-
const childCustomOptions: TypeConverterOpts<any> = {
173+
const childCustomOptions: ComposeWithMongooseOpts<any> = {
174174
fields: childFields,
175175
inputType: {
176176
name: 'ChildInputs',
@@ -205,7 +205,7 @@ describe('mergeCustomizationOptions()', () => {
205205
},
206206
};
207207

208-
const expected: TypeConverterOpts<any> = {
208+
const expected: ComposeWithMongooseOpts<any> = {
209209
fields: expectedFields,
210210
inputType: {
211211
name: 'ChildInputs',
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/* @flow */
2+
3+
import { ComposeWithMongooseOpts } from '../../composeWithMongoose';
4+
import { mergeTypeConverterResolverOpts } from './mergeTypeConverterResolversOpts';
5+
6+
type FieldMap = {
7+
[fieldName: string]: string[] | void;
8+
};
9+
10+
export function mergeStringAndStringArraysFields(
11+
baseField?: string[] | string,
12+
childField?: string[] | string,
13+
argOptsTypes?: string[] | string,
14+
): string[] | void;
15+
16+
export function mergeFieldMaps(
17+
baseFieldMap?: FieldMap,
18+
childFieldMap?: FieldMap,
19+
): FieldMap | void;
20+
21+
export function mergeCustomizationOptions<TContext>(
22+
baseCOptions: ComposeWithMongooseOpts<TContext>,
23+
childCOptions?: ComposeWithMongooseOpts<TContext>,
24+
): ComposeWithMongooseOpts<TContext> | void;

src/discriminators/utils/mergeCustomizationOptions.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* @flow */
22

3-
import type { TypeConverterOpts } from '../../composeWithMongoose';
3+
import type { ComposeWithMongooseOpts } from '../../composeWithMongoose';
44
import { mergeTypeConverterResolverOpts } from './mergeTypeConverterResolversOpts';
55

66
type FieldMap = {
@@ -10,7 +10,7 @@ type FieldMap = {
1010
export function mergeStringAndStringArraysFields(
1111
baseField?: string[] | string,
1212
childField?: string[] | string,
13-
argOptsTypes: string[] | string
13+
argOptsTypes?: string[] | string
1414
): string[] | typeof undefined {
1515
if (Array.isArray(argOptsTypes)) {
1616
if (argOptsTypes.find(v => v === 'string' || v === 'string[]')) {
@@ -79,14 +79,14 @@ export function mergeFieldMaps(
7979
}
8080

8181
export function mergeCustomizationOptions<TContext>(
82-
baseCOptions: TypeConverterOpts<TContext>,
83-
childCOptions?: TypeConverterOpts<TContext>
84-
): TypeConverterOpts<TContext> | void {
82+
baseCOptions: ComposeWithMongooseOpts<TContext>,
83+
childCOptions?: ComposeWithMongooseOpts<TContext>
84+
): ComposeWithMongooseOpts<TContext> | void {
8585
if (!baseCOptions) {
8686
return childCOptions;
8787
}
8888

89-
const mergedOptions: TypeConverterOpts<TContext> = childCOptions || ({}: any);
89+
const mergedOptions: ComposeWithMongooseOpts<TContext> = childCOptions || ({}: any);
9090

9191
if (
9292
baseCOptions.schemaComposer !== mergedOptions.schemaComposer &&
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/* @flow */
2+
3+
import { TypeConverterResolversOpts } from '../../composeWithMongoose';
4+
import { MergeAbleHelperArgsOpts } from '../../resolvers/helpers';
5+
import { mergeStringAndStringArraysFields } from './mergeCustomizationOptions';
6+
7+
type TypeFieldMap = {
8+
[fieldName: string]: any;
9+
};
10+
11+
export function mergePrimitiveTypeFields(
12+
baseField?: any,
13+
childField?: any,
14+
argOptsTypes?: string[] | string,
15+
): any;
16+
17+
export function mergeFilterOperatorsOptsMap(
18+
baseFilterOperatorField: TypeFieldMap,
19+
childFilterOperatorField?: TypeFieldMap,
20+
): TypeFieldMap;
21+
22+
export function mergeArraysTypeFields(
23+
baseField: any,
24+
childField: any,
25+
argOptsType: TypeFieldMap,
26+
): {};
27+
28+
export function mergeMapTypeFields(
29+
baseField: any,
30+
childField: any,
31+
argOptsTypes: TypeFieldMap,
32+
): {};
33+
34+
export function mergeTypeConverterResolverOpts(
35+
baseTypeConverterResolverOpts?: TypeConverterResolversOpts | false,
36+
childTypeConverterResolverOpts?: TypeConverterResolversOpts | false,
37+
): TypeConverterResolversOpts | false | void;

0 commit comments

Comments
 (0)