Skip to content

Commit 1b39922

Browse files
committed
fix(Flowtype): improve flowtype type definitions
* `this` for function return type should be replaced by real classname for proper autocomplete in IDE (with `this` it does not suggest avaliable methods) * also fix TContext generic passthrow to resolver methods
1 parent 17bb1a7 commit 1b39922

File tree

5 files changed

+51
-42
lines changed

5 files changed

+51
-42
lines changed

src/discriminators/DiscriminatorTypeComposer.js

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
graphql,
77
schemaComposer,
88
SchemaComposer,
9-
TypeComposer,
9+
TypeComposerClass,
1010
} from 'graphql-compose';
1111
import type { GraphQLFieldConfigMap } from 'graphql-compose/lib/graphql';
1212
import type {
@@ -50,7 +50,7 @@ function setDKeyETCValues(discriminators: Discriminators): any {
5050

5151
// creates an enum from discriminator names
5252
// then sets this enum type as the discriminator key field type
53-
function createAndSetDKeyETC(dTC: DiscriminatorTypeComposer, discriminators: Discriminators) {
53+
function createAndSetDKeyETC(dTC: DiscriminatorTypeComposer<any>, discriminators: Discriminators) {
5454
const DKeyETC = EnumTypeComposer.create({
5555
name: `EnumDKey${dTC.getTypeName()}${dTC.getDKey()[0].toUpperCase() + dTC.getDKey().substr(1)}`,
5656
values: setDKeyETCValues(discriminators),
@@ -69,7 +69,7 @@ function createAndSetDKeyETC(dTC: DiscriminatorTypeComposer, discriminators: Dis
6969
return DKeyETC;
7070
}
7171

72-
function getBaseTCFieldsWithTypes(baseTC: TypeComposer) {
72+
function getBaseTCFieldsWithTypes(baseTC: TypeComposerClass<any>) {
7373
const baseFields = baseTC.getFieldNames();
7474
const baseFieldsWithTypes: GraphQLFieldConfigMap<any, any> = {};
7575

@@ -80,7 +80,7 @@ function getBaseTCFieldsWithTypes(baseTC: TypeComposer) {
8080
return baseFieldsWithTypes;
8181
}
8282

83-
function createDInterface(baseModelTC: DiscriminatorTypeComposer): GraphQLInterfaceType {
83+
function createDInterface(baseModelTC: DiscriminatorTypeComposer<any>): GraphQLInterfaceType {
8484
return new GraphQLInterfaceType({
8585
name: `${baseModelTC.getTypeName()}Interface`,
8686

@@ -99,7 +99,7 @@ function createDInterface(baseModelTC: DiscriminatorTypeComposer): GraphQLInterf
9999
});
100100
}
101101

102-
export class DiscriminatorTypeComposer extends TypeComposer {
102+
export class DiscriminatorTypeComposer<TContext> extends TypeComposerClass<TContext> {
103103
discriminatorKey: string;
104104

105105
DKeyETC: EnumTypeComposer;
@@ -108,7 +108,8 @@ export class DiscriminatorTypeComposer extends TypeComposer {
108108

109109
DInterface: GraphQLInterfaceType;
110110

111-
childTCs: TypeComposer[];
111+
childTCs: TypeComposerClass<TContext>[];
112+
112113
static _getClassConnectedWithSchemaComposer(
113114
sc?: SchemaComposer<TContext>
114115
): Class<DiscriminatorTypeComposer<TContext>> {
@@ -182,7 +183,7 @@ export class DiscriminatorTypeComposer extends TypeComposer {
182183
return !!this.childTCs.find(ch => ch.getTypeName() === DName);
183184
}
184185

185-
setFields(fields: ComposeFieldConfigMap<any, any>): this {
186+
setFields(fields: ComposeFieldConfigMap<any, any>): DiscriminatorTypeComposer<TContext> {
186187
super.setFields(fields);
187188

188189
for (const childTC of this.childTCs) {
@@ -192,7 +193,10 @@ export class DiscriminatorTypeComposer extends TypeComposer {
192193
return this;
193194
}
194195

195-
setField(fieldName: string, fieldConfig: ComposeFieldConfig<any, any>): this {
196+
setField(
197+
fieldName: string,
198+
fieldConfig: ComposeFieldConfig<any, any>
199+
): DiscriminatorTypeComposer<TContext> {
196200
super.setField(fieldName, fieldConfig);
197201

198202
for (const childTC of this.childTCs) {
@@ -203,7 +207,7 @@ export class DiscriminatorTypeComposer extends TypeComposer {
203207
}
204208

205209
// discriminators must have all interface fields
206-
addFields(newFields: ComposeFieldConfigMap<any, any>): this {
210+
addFields(newFields: ComposeFieldConfigMap<any, any>): DiscriminatorTypeComposer<TContext> {
207211
super.addFields(newFields);
208212

209213
for (const childTC of this.childTCs) {
@@ -213,7 +217,7 @@ export class DiscriminatorTypeComposer extends TypeComposer {
213217
return this;
214218
}
215219

216-
addNestedFields(newFields: ComposeFieldConfigMap<any, any>): this {
220+
addNestedFields(newFields: ComposeFieldConfigMap<any, any>): DiscriminatorTypeComposer<TContext> {
217221
super.addNestedFields(newFields);
218222

219223
for (const childTC of this.childTCs) {
@@ -223,7 +227,7 @@ export class DiscriminatorTypeComposer extends TypeComposer {
223227
return this;
224228
}
225229

226-
removeField(fieldNameOrArray: string | Array<string>): this {
230+
removeField(fieldNameOrArray: string | Array<string>): DiscriminatorTypeComposer<TContext> {
227231
super.removeField(fieldNameOrArray);
228232

229233
for (const childTC of this.childTCs) {
@@ -233,7 +237,7 @@ export class DiscriminatorTypeComposer extends TypeComposer {
233237
return this;
234238
}
235239

236-
removeOtherFields(fieldNameOrArray: string | Array<string>): this {
240+
removeOtherFields(fieldNameOrArray: string | Array<string>): DiscriminatorTypeComposer<TContext> {
237241
super.removeOtherFields(fieldNameOrArray);
238242

239243
for (const childTC of this.childTCs) {
@@ -245,7 +249,7 @@ export class DiscriminatorTypeComposer extends TypeComposer {
245249

246250
extendField(
247251
fieldName: string,
248-
partialFieldConfig: ComposePartialFieldConfigAsObject<any, any>
252+
partialFieldConfig: ComposePartialFieldConfigAsObject<any, TContext>
249253
): this {
250254
super.extendField(fieldName, partialFieldConfig);
251255

@@ -256,7 +260,7 @@ export class DiscriminatorTypeComposer extends TypeComposer {
256260
return this;
257261
}
258262

259-
reorderFields(names: string[]): this {
263+
reorderFields(names: string[]): DiscriminatorTypeComposer<TContext> {
260264
super.reorderFields(names);
261265

262266
for (const childTC of this.childTCs) {
@@ -266,7 +270,7 @@ export class DiscriminatorTypeComposer extends TypeComposer {
266270
return this;
267271
}
268272

269-
makeFieldNonNull(fieldNameOrArray: string | Array<string>): this {
273+
makeFieldNonNull(fieldNameOrArray: string | Array<string>): DiscriminatorTypeComposer<TContext> {
270274
super.makeFieldNonNull(fieldNameOrArray);
271275

272276
for (const childTC of this.childTCs) {
@@ -276,7 +280,7 @@ export class DiscriminatorTypeComposer extends TypeComposer {
276280
return this;
277281
}
278282

279-
makeFieldNullable(fieldNameOrArray: string | Array<string>): this {
283+
makeFieldNullable(fieldNameOrArray: string | Array<string>): DiscriminatorTypeComposer<TContext> {
280284
super.makeFieldNullable(fieldNameOrArray);
281285

282286
for (const childTC of this.childTCs) {
@@ -286,7 +290,9 @@ export class DiscriminatorTypeComposer extends TypeComposer {
286290
return this;
287291
}
288292

289-
deprecateFields(fields: { [fieldName: string]: string } | string[] | string): this {
293+
deprecateFields(
294+
fields: { [fieldName: string]: string } | string[] | string
295+
): DiscriminatorTypeComposer<TContext> {
290296
super.deprecateFields(fields);
291297

292298
for (const childTC of this.childTCs) {
@@ -300,7 +306,10 @@ export class DiscriminatorTypeComposer extends TypeComposer {
300306
// support field args. Well if one wants to have use args, you setType for resolver as this
301307
// this = this DiscriminantTypeComposer
302308
// NOTE, those relations will be propagated to the childTypeComposers and you can use normally.
303-
addRelation(fieldName: string, relationOpts: RelationOpts<any, any>): this {
309+
addRelation(
310+
fieldName: string,
311+
relationOpts: RelationOpts<any, any>
312+
): DiscriminatorTypeComposer<TContext> {
304313
super.addRelation(fieldName, relationOpts);
305314

306315
for (const childTC of this.childTCs) {
@@ -310,7 +319,7 @@ export class DiscriminatorTypeComposer extends TypeComposer {
310319
return this;
311320
}
312321

313-
setRecordIdFn(fn: GetRecordIdFn<any, any>): this {
322+
setRecordIdFn(fn: GetRecordIdFn<any, any>): DiscriminatorTypeComposer<TContext> {
314323
super.setRecordIdFn(fn);
315324

316325
for (const childTC of this.childTCs) {
@@ -321,7 +330,7 @@ export class DiscriminatorTypeComposer extends TypeComposer {
321330
}
322331

323332
/* eslint no-use-before-define: 0 */
324-
discriminator(childModel: Model, opts?: TypeConverterOpts): TypeComposer {
333+
discriminator(childModel: Model, opts?: TypeConverterOpts): TypeComposerClass<TContext> {
325334
const customizationOpts = mergeCustomizationOptions(
326335
(this.opts: any).customizationOptions,
327336
opts

src/discriminators/composeChildTC.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ function copyBaseTCFieldsToChildTC(baseDTC: TypeComposer, childTC: TypeComposer)
2727
}
2828

2929
export function composeChildTC(
30-
baseDTC: DiscriminatorTypeComposer,
30+
baseDTC: DiscriminatorTypeComposer<any>,
3131
childTC: TypeComposer,
3232
opts: Options
3333
): TypeComposer {

src/discriminators/prepare-resolvers/prepareBaseResolvers.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const { GraphQLList, GraphQLNonNull } = graphql;
99
// change type on DKey generated by composeWithMongoose
1010
// set it to created enum TypeComposer for DKey DKeyETC
1111
// only sets on filter and record typeComposers, since they contain our DKey
12-
function setDKeyEnumOnITCArgs(resolver, baseTC: DiscriminatorTypeComposer) {
12+
function setDKeyEnumOnITCArgs(resolver, baseTC: DiscriminatorTypeComposer<any>) {
1313
// setDKeyEnum for filter types, and on record types
1414
if (resolver) {
1515
const argNames = resolver.getArgNames();
@@ -31,7 +31,7 @@ function setDKeyEnumOnITCArgs(resolver, baseTC: DiscriminatorTypeComposer) {
3131
// recomposing sets up the DInterface as the return types for
3232
// Also sets up DKey enum as type for DKey field on composers with filter and/or record args
3333
// composeWithMongoose composers
34-
export function prepareBaseResolvers(baseTC: DiscriminatorTypeComposer) {
34+
export function prepareBaseResolvers(baseTC: DiscriminatorTypeComposer<any>) {
3535
for (const resolverName in EMCResolvers) {
3636
if (baseTC.hasResolver(resolverName)) {
3737
const resolver = baseTC.getResolver(resolverName);

src/discriminators/prepare-resolvers/prepareChildResolvers.js

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

33
import type { ResolveParams } from 'graphql-compose';
4-
import { Resolver, TypeComposer } from 'graphql-compose';
4+
import { ResolverClass, TypeComposerClass } from 'graphql-compose';
55
import { type Options, DiscriminatorTypeComposer } from '../DiscriminatorTypeComposer';
66
import { EMCResolvers } from '../../resolvers';
77

88
// set the DKey as a query on filter, also project it
99
// Also look at it like setting for filters, makes sure to limit
1010
// query to child type
1111
function setQueryDKey<TSource, TContext>(
12-
resolver: Resolver,
13-
childTC: TypeComposer,
12+
resolver: ResolverClass<any, TContext>,
13+
childTC: TypeComposerClass<TContext>,
1414
DKey: string,
1515
fromField: string
1616
) {
@@ -38,9 +38,9 @@ function setQueryDKey<TSource, TContext>(
3838
}
3939

4040
// hide the DKey on the filter or record
41-
function hideDKey(
42-
resolver: Resolver,
43-
childTC: TypeComposer,
41+
function hideDKey<TContext>(
42+
resolver: ResolverClass<any, TContext>,
43+
childTC: TypeComposerClass<TContext>,
4444
DKey: string,
4545
fromField: string[] | string
4646
) {
@@ -62,9 +62,9 @@ function hideDKey(
6262
// makes sure that all input fields are same as that on Interface,
6363
// that is all should be same as base typeComposer types
6464
// only changes for common properties, executed only once, on discriminator creation
65-
function setBaseInputTypesOnChildInputTypes(
66-
resolver: Resolver,
67-
baseDTC: DiscriminatorTypeComposer,
65+
function setBaseInputTypesOnChildInputTypes<TContext>(
66+
resolver: ResolverClass<any, TContext>,
67+
baseDTC: DiscriminatorTypeComposer<TContext>,
6868
fromField: string[] | string
6969
) {
7070
// set sharedField types on input types
@@ -90,9 +90,9 @@ function setBaseInputTypesOnChildInputTypes(
9090
}
9191

9292
// reorder input fields resolvers, based on reorderFields opts
93-
function reorderFieldsRecordFilter(
94-
resolver: Resolver,
95-
baseDTC: DiscriminatorTypeComposer,
93+
function reorderFieldsRecordFilter<TContext>(
94+
resolver: ResolverClass<any, TContext>,
95+
baseDTC: DiscriminatorTypeComposer<TContext>,
9696
order: string[] | boolean | void | null,
9797
fromField: string[] | string
9898
) {
@@ -124,9 +124,9 @@ function reorderFieldsRecordFilter(
124124
}
125125
}
126126

127-
export function prepareChildResolvers(
128-
baseDTC: DiscriminatorTypeComposer,
129-
childTC: TypeComposer,
127+
export function prepareChildResolvers<TContext>(
128+
baseDTC: DiscriminatorTypeComposer<TContext>,
129+
childTC: TypeComposerClass<TContext>,
130130
opts: Options
131131
) {
132132
for (const resolverName in EMCResolvers) {

src/discriminators/utils/reorderFields.js

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

3-
import { TypeComposer } from 'graphql-compose';
3+
import { TypeComposerClass } from 'graphql-compose';
44
import { DiscriminatorTypeComposer } from '../DiscriminatorTypeComposer';
55

6-
export function reorderFields(
7-
modelTC: DiscriminatorTypeComposer | TypeComposer,
6+
export function reorderFields<TContext>(
7+
modelTC: DiscriminatorTypeComposer<TContext> | TypeComposerClass<TContext>,
88
order: string[] | boolean,
99
DKey: string,
1010
commonFieldKeys?: string[]
@@ -16,7 +16,7 @@ export function reorderFields(
1616
const newOrder = [];
1717

1818
// is child discriminator
19-
if (modelTC instanceof TypeComposer && commonFieldKeys) {
19+
if (modelTC instanceof TypeComposerClass && commonFieldKeys) {
2020
newOrder.push(...commonFieldKeys);
2121

2222
newOrder.filter(value => value === '_id' || value === DKey);

0 commit comments

Comments
 (0)