11const tsCodegen = require ( './typescript' )
22const typesCodegen = require ( './types' )
33
4-
54class IdField {
65 static BYTES = Symbol ( 'Bytes' )
76 static STRING = Symbol ( 'String' )
87
98 constructor ( idField ) {
10- const typeName = idField . getIn ( [ ' type' , ' type' , ' name' , ' value' ] )
9+ const typeName = idField . type ?. type ?. name ?. value
1110 this . kind = typeName === 'Bytes' ? IdField . BYTES : IdField . STRING
1211 }
1312
@@ -40,12 +39,12 @@ class IdField {
4039 }
4140
4241 static fromFields ( fields ) {
43- const idField = fields . find ( field => field . getIn ( [ ' name' , ' value' ] ) === 'id' )
42+ const idField = fields . find ( field => field . name ?. value === 'id' )
4443 return new IdField ( idField )
4544 }
4645
4746 static fromTypeDef ( def ) {
48- return IdField . fromFields ( def . get ( ' fields' ) )
47+ return IdField . fromFields ( def . fields )
4948 }
5049}
5150
@@ -78,29 +77,26 @@ module.exports = class SchemaCodeGenerator {
7877 }
7978
8079 generateTypes ( ) {
81- return this . schema . ast
82- . get ( 'definitions' )
80+ return this . schema . ast . definitions
8381 . filter ( def => this . _isEntityTypeDefinition ( def ) )
8482 . map ( def => this . _generateEntityType ( def ) )
8583 }
8684
8785 _isEntityTypeDefinition ( def ) {
8886 return (
89- def . get ( 'kind' ) === 'ObjectTypeDefinition' &&
90- def
91- . get ( 'directives' )
92- . find ( directive => directive . getIn ( [ 'name' , 'value' ] ) === 'entity' ) !== undefined
87+ def . kind === 'ObjectTypeDefinition' &&
88+ def . directives . find ( directive => directive . name ?. value === 'entity' ) !== undefined
9389 )
9490 }
9591
9692 _isInterfaceDefinition ( def ) {
97- return def . get ( ' kind' ) === 'InterfaceTypeDefinition'
93+ return def . kind === 'InterfaceTypeDefinition'
9894 }
9995
10096 _generateEntityType ( def ) {
101- let name = def . getIn ( [ ' name' , ' value' ] )
97+ let name = def . name ?. value
10298 let klass = tsCodegen . klass ( name , { export : true , extends : 'Entity' } )
103- const fields = def . get ( ' fields' )
99+ const fields = def . fields
104100 const idField = IdField . fromFields ( fields )
105101
106102 // Generate and add a constructor
@@ -110,8 +106,7 @@ module.exports = class SchemaCodeGenerator {
110106 this . _generateStoreMethods ( name , idField ) . forEach ( method => klass . addMethod ( method ) )
111107
112108 // Generate and add entity field getters and setters
113- def
114- . get ( 'fields' )
109+ def . fields
115110 . reduce (
116111 ( methods , field ) => methods . concat ( this . _generateEntityFieldMethods ( def , field ) ) ,
117112 [ ] ,
@@ -170,8 +165,8 @@ module.exports = class SchemaCodeGenerator {
170165 }
171166
172167 _generateEntityFieldGetter ( entityDef , fieldDef ) {
173- let name = fieldDef . getIn ( [ ' name' , ' value' ] )
174- let gqlType = fieldDef . get ( ' type' )
168+ let name = fieldDef . name ?. value
169+ let gqlType = fieldDef . type
175170 let fieldValueType = this . _valueTypeFromGraphQl ( gqlType )
176171 let returnType = this . _typeFromGraphQl ( gqlType )
177172 let isNullable = returnType instanceof tsCodegen . NullableType
@@ -195,8 +190,8 @@ module.exports = class SchemaCodeGenerator {
195190 }
196191
197192 _generateEntityFieldSetter ( entityDef , fieldDef ) {
198- let name = fieldDef . getIn ( [ ' name' , ' value' ] )
199- let gqlType = fieldDef . get ( ' type' )
193+ let name = fieldDef . name ?. value
194+ let gqlType = fieldDef . type
200195 let fieldValueType = this . _valueTypeFromGraphQl ( gqlType )
201196 let paramType = this . _typeFromGraphQl ( gqlType )
202197 let isNullable = paramType instanceof tsCodegen . NullableType
@@ -235,17 +230,15 @@ Suggestion: add an '!' to the member type of the List, change from '[${baseType}
235230 }
236231
237232 _resolveFieldType ( gqlType ) {
238- let typeName = gqlType . getIn ( [ ' name' , ' value' ] )
233+ let typeName = gqlType . name ?. value
239234
240235 // If this is a reference to another type, the field has the type of
241236 // the referred type's id field
242- const typeDef = this . schema . ast
243- . get ( 'definitions' )
244- . find (
245- def =>
246- ( this . _isEntityTypeDefinition ( def ) || this . _isInterfaceDefinition ( def ) ) &&
247- def . getIn ( [ 'name' , 'value' ] ) === typeName ,
248- )
237+ const typeDef = this . schema . ast . definitions . find (
238+ def =>
239+ ( this . _isEntityTypeDefinition ( def ) || this . _isInterfaceDefinition ( def ) ) &&
240+ def . name ?. value === typeName ,
241+ )
249242 if ( typeDef ) {
250243 return IdField . fromTypeDef ( typeDef ) . typeName ( )
251244 } else {
@@ -258,10 +251,10 @@ Suggestion: add an '!' to the member type of the List, change from '[${baseType}
258251 * other entity types, this is the same as the type of the id of the
259252 * referred type, i.e., `string` or `Bytes`*/
260253 _valueTypeFromGraphQl ( gqlType ) {
261- if ( gqlType . get ( ' kind' ) === 'NonNullType' ) {
262- return this . _valueTypeFromGraphQl ( gqlType . get ( ' type' ) , false )
263- } else if ( gqlType . get ( ' kind' ) === 'ListType' ) {
264- return '[' + this . _valueTypeFromGraphQl ( gqlType . get ( ' type' ) ) + ']'
254+ if ( gqlType . kind === 'NonNullType' ) {
255+ return this . _valueTypeFromGraphQl ( gqlType . type , false )
256+ } else if ( gqlType . kind === 'ListType' ) {
257+ return '[' + this . _valueTypeFromGraphQl ( gqlType . type ) + ']'
265258 } else {
266259 return this . _resolveFieldType ( gqlType )
267260 }
@@ -270,20 +263,20 @@ Suggestion: add an '!' to the member type of the List, change from '[${baseType}
270263 /** Determine the base type of `gqlType` by removing any non-null
271264 * constraints and using the type of elements of lists */
272265 _baseType ( gqlType ) {
273- if ( gqlType . get ( ' kind' ) === 'NonNullType' ) {
274- return this . _baseType ( gqlType . get ( ' type' ) )
275- } else if ( gqlType . get ( ' kind' ) === 'ListType' ) {
276- return this . _baseType ( gqlType . get ( ' type' ) )
266+ if ( gqlType . kind === 'NonNullType' ) {
267+ return this . _baseType ( gqlType . type )
268+ } else if ( gqlType . kind === 'ListType' ) {
269+ return this . _baseType ( gqlType . type )
277270 } else {
278- return gqlType . getIn ( [ ' name' , ' value' ] )
271+ return gqlType . name ?. value
279272 }
280273 }
281274
282275 _typeFromGraphQl ( gqlType , nullable = true ) {
283- if ( gqlType . get ( ' kind' ) === 'NonNullType' ) {
284- return this . _typeFromGraphQl ( gqlType . get ( ' type' ) , false )
285- } else if ( gqlType . get ( ' kind' ) === 'ListType' ) {
286- let type = tsCodegen . arrayType ( this . _typeFromGraphQl ( gqlType . get ( ' type' ) ) )
276+ if ( gqlType . kind === 'NonNullType' ) {
277+ return this . _typeFromGraphQl ( gqlType . type , false )
278+ } else if ( gqlType . kind === 'ListType' ) {
279+ let type = tsCodegen . arrayType ( this . _typeFromGraphQl ( gqlType . type ) )
287280 return nullable ? tsCodegen . nullableType ( type ) : type
288281 } else {
289282 // NamedType
0 commit comments