@@ -106,13 +106,14 @@ export default class SchemaCodeGenerator {
106
106
107
107
generateDerivedLoaders ( ) {
108
108
const fields = this . schema . ast . definitions
109
- . filter ( ( def ) => this . _isEntityTypeDefinition ( def ) )
109
+ . filter ( def => this . _isEntityTypeDefinition ( def ) )
110
110
. flatMap ( ( def : any ) => def . fields )
111
111
. filter ( ( def : any ) => this . _isDerivedField ( def ) )
112
112
. map ( ( def : FieldDefinitionNode ) => this . _getTypeNameForField ( def . type ) ) ;
113
113
114
114
return [ ...new Set ( fields ) ] . map ( ( typeName : any ) => {
115
- return this . _generateDerivedLoader ( typeName ) } ) ;
115
+ return this . _generateDerivedLoader ( typeName ) ;
116
+ } ) ;
116
117
}
117
118
118
119
_isEntityTypeDefinition ( def : DefinitionNode ) : def is ObjectTypeDefinitionNode {
@@ -122,11 +123,11 @@ export default class SchemaCodeGenerator {
122
123
) ;
123
124
}
124
125
125
-
126
126
_isDerivedField ( field : any ) : boolean {
127
- return field . directives ?. find (
128
- ( directive : any ) => directive . name . value === 'derivedFrom'
129
- ) !== undefined
127
+ return (
128
+ field . directives ?. find ( ( directive : any ) => directive . name . value === 'derivedFrom' ) !==
129
+ undefined
130
+ ) ;
130
131
}
131
132
_isInterfaceDefinition ( def : DefinitionNode ) : def is InterfaceTypeDefinitionNode {
132
133
return def . kind === 'InterfaceTypeDefinition' ;
@@ -155,43 +156,61 @@ export default class SchemaCodeGenerator {
155
156
return klass ;
156
157
}
157
158
158
-
159
159
_generateDerivedLoader ( typeName : string ) : any {
160
160
// <field>Loader
161
161
const klass = tsCodegen . klass ( `${ typeName } Loader` , { export : true , extends : 'Entity' } ) ;
162
162
163
- klass . addMember ( tsCodegen . klassMember ( " _entity" , " string" ) )
164
- klass . addMember ( tsCodegen . klassMember ( " _field" , " string" ) )
165
- klass . addMember ( tsCodegen . klassMember ( " _id" , " string" ) )
163
+ klass . addMember ( tsCodegen . klassMember ( ' _entity' , ' string' ) ) ;
164
+ klass . addMember ( tsCodegen . klassMember ( ' _field' , ' string' ) ) ;
165
+ klass . addMember ( tsCodegen . klassMember ( ' _id' , ' string' ) ) ;
166
166
// Generate and add a constructor
167
- klass . addMethod ( tsCodegen . method ( 'constructor' , [ tsCodegen . param ( 'entity' , 'string' ) , tsCodegen . param ( 'id' , 'string' ) , tsCodegen . param ( 'field' , 'string' ) ] , undefined , `
167
+ klass . addMethod (
168
+ tsCodegen . method (
169
+ 'constructor' ,
170
+ [
171
+ tsCodegen . param ( 'entity' , 'string' ) ,
172
+ tsCodegen . param ( 'id' , 'string' ) ,
173
+ tsCodegen . param ( 'field' , 'string' ) ,
174
+ ] ,
175
+ undefined ,
176
+ `
168
177
super();
169
178
this._entity = entity;
170
179
this._id = id;
171
180
this._field = field;
172
- ` ) ) ;
181
+ ` ,
182
+ ) ,
183
+ ) ;
173
184
174
185
// Generate load() method for the Loader
175
- klass . addMethod ( tsCodegen . method ( 'load' , [ ] , `${ typeName } []` , `
186
+ klass . addMethod (
187
+ tsCodegen . method (
188
+ 'load' ,
189
+ [ ] ,
190
+ `${ typeName } []` ,
191
+ `
176
192
let value = store.loadRelated(this._entity, this._id, this._field);
177
193
return changetype<${ typeName } []>(value);
178
- ` ) )
194
+ ` ,
195
+ ) ,
196
+ ) ;
179
197
180
198
return klass ;
181
199
}
182
-
183
- _getTypeNameForField ( gqlType : TypeNode ) : string {
184
200
185
- if ( gqlType . kind === 'NonNullType' ) {
186
- return this . _getTypeNameForField ( gqlType . type ) ;
187
- } if ( gqlType . kind === 'ListType' ) {
188
- return this . _getTypeNameForField ( gqlType . type ) ;
189
- } if ( gqlType . kind === 'NamedType' ) {
190
- return ( gqlType as NamedTypeNode ) . name . value ;
191
- }
201
+ _getTypeNameForField ( gqlType : TypeNode ) : string {
202
+ if ( gqlType . kind === 'NonNullType' ) {
203
+ return this . _getTypeNameForField ( gqlType . type ) ;
204
+ }
205
+ if ( gqlType . kind === 'ListType' ) {
206
+ return this . _getTypeNameForField ( gqlType . type ) ;
207
+ }
208
+ if ( gqlType . kind === 'NamedType' ) {
209
+ return ( gqlType as NamedTypeNode ) . name . value ;
210
+ }
192
211
193
- throw new Error ( `Unknown type kind: ${ gqlType } ` ) ;
194
- }
212
+ throw new Error ( `Unknown type kind: ${ gqlType } ` ) ;
213
+ }
195
214
_generateConstructor ( _entityName : string , fields : readonly FieldDefinitionNode [ ] | undefined ) {
196
215
const idField = IdField . fromFields ( fields ) ;
197
216
return tsCodegen . method (
@@ -260,7 +279,6 @@ _getTypeNameForField(gqlType: TypeNode): string {
260
279
) ;
261
280
}
262
281
263
-
264
282
_generateEntityFieldGetter ( _entityDef : ObjectTypeDefinitionNode , fieldDef : FieldDefinitionNode ) {
265
283
const name = fieldDef . name . value ;
266
284
const gqlType = fieldDef . type ;
@@ -299,28 +317,24 @@ _getTypeNameForField(gqlType: TypeNode): string {
299
317
let entityName = entityDef . name . value ;
300
318
let name = fieldDef . name . value ;
301
319
let gqlType = fieldDef . type ;
302
- let returnType = this . _returnTypeForDervied ( gqlType )
320
+ let returnType = this . _returnTypeForDervied ( gqlType ) ;
303
321
return tsCodegen . method (
304
322
`get ${ name } ` ,
305
323
[ ] ,
306
324
returnType ,
307
325
`
308
326
return new ${ returnType } ('${ entityName } ', this.get('id')!.toString(), '${ name } ')
309
327
` ,
310
- )
328
+ ) ;
311
329
}
312
330
313
-
314
331
_returnTypeForDervied ( gqlType : any ) : any {
315
332
if ( gqlType . kind === 'NonNullType' ) {
316
- return this . _returnTypeForDervied ( gqlType . type )
333
+ return this . _returnTypeForDervied ( gqlType . type ) ;
317
334
} else if ( gqlType . kind === 'ListType' ) {
318
- return this . _returnTypeForDervied ( gqlType . type )
335
+ return this . _returnTypeForDervied ( gqlType . type ) ;
319
336
} else {
320
-
321
- const type = tsCodegen . namedType (
322
- gqlType . name . value + 'Loader'
323
- ) ;
337
+ const type = tsCodegen . namedType ( gqlType . name . value + 'Loader' ) ;
324
338
return type ;
325
339
}
326
340
}
@@ -457,4 +471,3 @@ Suggestion: add an '!' to the member type of the List, change from '[${baseType}
457
471
return nullable && ! type . isPrimitive ( ) ? tsCodegen . nullableType ( type ) : type ;
458
472
}
459
473
}
460
-
0 commit comments