package Ġcom . ap ol log raph ql . apollo . compiler . ast . builder Ċ Ċ import Ġcom . ap ol log raph ql . apollo . compiler . ast . FieldType Ċ import Ġcom . ap ol log raph ql . apollo . compiler . ast . ObjectType Ċ import Ġcom . ap ol log raph ql . apollo . compiler . escape Kotlin Reserved Word Ċ import Ġcom . ap ol log raph ql . apollo . compiler . ir . Condition Ċ import Ġcom . ap ol log raph ql . apollo . compiler . ir . Field Ċ Ċ internal Ġfun ĠField . ast ( context : ĠContext ): ĠObjectType . Field Ġ{ ĊĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠ Ġis ArrayType Field Ġ-> Ġarray ( context ) ĊĠĠĠ Ġis ObjectType Field Ġ-> Ġ` object `( context ) ĊĠĠĠ Ġelse Ġ-> Ġscalar ( context ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠField . scalar ( context : ĠContext ): ĠObjectType . Field Ġ{ ĊĠ Ġreturn ĠObjectType . Field ( ĊĠĠĠĠĠ Ġname Ġ= Ġresponse Name . de capitalize (). escape Kotlin Reserved Word (), ĊĠĠĠĠĠ Ġresponse Name Ġ= Ġresponse Name , ĊĠĠĠĠĠ Ġschema Name Ġ= ĠfieldName , ĊĠĠĠĠĠ Ġtype Ġ= Ġresolve FieldType ( ĊĠĠĠĠĠĠĠĠĠ Ġgraph QL Type Ġ= Ġtype , ĊĠĠĠĠĠĠĠĠĠ Ġenums Ġ= Ġcontext . enums , ĊĠĠĠĠĠĠĠĠĠ Ġcustom TypeMap Ġ= Ġcontext . custom TypeMap , ĊĠĠĠĠĠĠĠĠĠ Ġtypes PackageName Ġ= Ġcontext . types PackageName ĊĠĠĠĠĠ Ġ), ĊĠĠĠĠĠ Ġdescription Ġ= Ġdescription , ĊĠĠĠĠĠ Ġis Optional Ġ= Ġ! type . endsWith (" !") Ġ|| Ġis Conditional , ĊĠĠĠĠĠ Ġdeprecation Reason Ġ= Ġdeprecation Reason , ĊĠĠĠĠĠ Ġarguments Ġ= Ġargs . associate Ġ{ Ġit . name Ġto Ġit . value Ġ}, ĊĠĠĠĠĠ Ġconditions Ġ= Ġnormalized Conditions ĊĠ Ġ) Ċ } Ċ Ċ private Ġfun ĠField . array ( context : ĠContext ): ĠObjectType . Field Ġ{ ĊĠ Ġval ĠfieldType Ġ= Ġif Ġ( fields . isNotEmpty ()) Ġ{ ĊĠĠĠ Ġval Ġobject Type Ġ= ĠFieldType . Object ( ĊĠĠĠĠĠĠĠ Ġcontext . register ObjectType ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġresponse Name . replace ("[ ", Ġ""). replace (" ]", Ġ""). replace (" !", Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġschema TypeName Ġ= Ġtype . replace ("[ ", Ġ""). replace (" ]", Ġ""). replace (" !", Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġtype Description , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Refs Ġ= Ġfragment Refs , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinline Fragments Ġ= Ġinline Fragments , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfields Ġ= Ġfields , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkind Ġ= ĠObjectType . Kind . Object ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ ĠRegex (" ! ]| ]") ĊĠĠĠĠĠĠĠ Ġ. findAll ( type ) ĊĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . group Values Ġ} ĊĠĠĠĠĠĠĠ Ġ. fold < String , ĠFieldType . Array ? >( null ) Ġ{ Ġarray Field , Ġarray Termin ator Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( array Field Ġ== Ġnull ) ĠFieldType . Array ( raw Type Ġ= Ġobject Type , Ġis Optional Ġ= Ġarray Termin ator Ġ== Ġ"] ") ĊĠĠĠĠĠĠĠĠĠ Ġelse ĠFieldType . Array ( raw Type Ġ= Ġarray Field , Ġis Optional Ġ= Ġarray Termin ator Ġ== Ġ"] ") ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠFieldType . Array ( raw Type Ġ= Ġobject Type , Ġis Optional Ġ= Ġtrue ) ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġresolve FieldType ( ĊĠĠĠĠĠĠĠ Ġgraph QL Type Ġ= Ġtype , ĊĠĠĠĠĠĠĠ Ġenums Ġ= Ġcontext . enums , ĊĠĠĠĠĠĠĠ Ġcustom TypeMap Ġ= Ġcontext . custom TypeMap , ĊĠĠĠĠĠĠĠ Ġtypes PackageName Ġ= Ġcontext . types PackageName ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĠ Ġreturn ĠObjectType . Field ( ĊĠĠĠĠĠ Ġname Ġ= Ġresponse Name . de capitalize (). escape Kotlin Reserved Word (), ĊĠĠĠĠĠ Ġresponse Name Ġ= Ġresponse Name , ĊĠĠĠĠĠ Ġschema Name Ġ= ĠfieldName , ĊĠĠĠĠĠ Ġtype Ġ= ĠfieldType , ĊĠĠĠĠĠ Ġdescription Ġ= Ġdescription , ĊĠĠĠĠĠ Ġis Optional Ġ= Ġ! type . endsWith (" !") Ġ|| Ġis Conditional , ĊĠĠĠĠĠ Ġdeprecation Reason Ġ= Ġdeprecation Reason , ĊĠĠĠĠĠ Ġarguments Ġ= Ġargs . associate Ġ{ Ġit . name Ġto Ġit . value Ġ}, ĊĠĠĠĠĠ Ġconditions Ġ= Ġnormalized Conditions ĊĠ Ġ) Ċ } Ċ Ċ private Ġfun ĠField .` object `( context : ĠContext ): ĠObjectType . Field Ġ{ ĊĠ Ġval Ġtype Ref Ġ= Ġcontext . register ObjectType ( ĊĠĠĠĠĠ Ġname Ġ= Ġresponse Name . replace ("[ ", Ġ""). replace ("[ ", Ġ""). replace (" !", Ġ""), ĊĠĠĠĠĠ Ġschema TypeName Ġ= Ġtype . replace ("[ ", Ġ""). replace ("[ ", Ġ""). replace (" !", Ġ""), ĊĠĠĠĠĠ Ġdescription Ġ= Ġtype Description , ĊĠĠĠĠĠ Ġfragment Refs Ġ= Ġfragment Refs , ĊĠĠĠĠĠ Ġinline Fragments Ġ= Ġinline Fragments , ĊĠĠĠĠĠ Ġfields Ġ= Ġfields , ĊĠĠĠĠĠ Ġsingular ize Ġ= Ġfalse , ĊĠĠĠĠĠ Ġkind Ġ= ĠObjectType . Kind . Object ĊĠ Ġ) ĊĠ Ġreturn ĠObjectType . Field ( ĊĠĠĠĠĠ Ġname Ġ= Ġresponse Name . de capitalize (). escape Kotlin Reserved Word (), ĊĠĠĠĠĠ Ġresponse Name Ġ= Ġresponse Name , ĊĠĠĠĠĠ Ġschema Name Ġ= ĠfieldName , ĊĠĠĠĠĠ Ġtype Ġ= ĠFieldType . Object ( type Ref ), ĊĠĠĠĠĠ Ġdescription Ġ= Ġdescription , ĊĠĠĠĠĠ Ġis Optional Ġ= Ġ! type . endsWith (" !") Ġ|| Ġis Conditional , ĊĠĠĠĠĠ Ġdeprecation Reason Ġ= Ġdeprecation Reason , ĊĠĠĠĠĠ Ġarguments Ġ= Ġargs . associate Ġ{ Ġit . name Ġto Ġit . value Ġ}, ĊĠĠĠĠĠ Ġconditions Ġ= Ġnormalized Conditions ĊĠ Ġ) Ċ } Ċ Ċ private Ġval ĠField . is ObjectType Field : ĠBoolean ĊĠ Ġget () Ġ= Ġis Non Scalar () Ċ Ċ private Ġval ĠField . isArray Type Field : ĠBoolean ĊĠ Ġget () Ġ= Ġtype . remove Suffix (" ! "). let Ġ{ Ġit . startsWith ('[ ') Ġ&& Ġit . endsWith (' ]') Ġ} Ċ Ċ private Ġval ĠField . normalized Conditions : ĠList < ObjectType . Field . Condition > ĊĠ Ġget () Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( is Conditional ) Ġ{ ĊĠĠĠĠĠ Ġconditions . filter Ġ{ Ġit . kind Ġ== ĠCondition . Kind . BOOLEAN . raw Value Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠ ĠObjectType . Field . Condition . Directive ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariable Name Ġ= Ġit . variable Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinverted Ġ= Ġit . inverted ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġempty List () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ