@@ -21,6 +21,8 @@ package com.netflix.graphql.dgs.codegen
21
21
import com.netflix.graphql.dgs.codegen.generators.java.*
22
22
import com.netflix.graphql.dgs.codegen.generators.kotlin.*
23
23
import com.netflix.graphql.dgs.codegen.generators.kotlin2.*
24
+ import com.netflix.graphql.dgs.codegen.generators.shared.DocFileSpec
25
+ import com.netflix.graphql.dgs.codegen.generators.shared.DocGenerator
24
26
import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.findEnumExtensions
25
27
import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.findInputExtensions
26
28
import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.findInterfaceExtensions
@@ -94,6 +96,7 @@ class CodeGen(private val config: CodeGenConfig) {
94
96
codeGenResult.kotlinDataFetchers.forEach { it.writeTo(config.examplesOutputDir) }
95
97
codeGenResult.kotlinConstants.forEach { it.writeTo(config.outputDir) }
96
98
codeGenResult.kotlinClientTypes.forEach { it.writeTo(config.outputDir) }
99
+ codeGenResult.docFiles.forEach { it.writeTo(config.generatedDocsFolder) }
97
100
}
98
101
99
102
return codeGenResult
@@ -180,6 +183,7 @@ class CodeGen(private val config: CodeGenConfig) {
180
183
// Data Fetchers
181
184
val dataFetchersResult = generateJavaDataFetchers(definitions)
182
185
val generatedAnnotation = generateJavaGeneratedAnnotation(config)
186
+ var docFiles = generateDocFiles(definitions)
183
187
184
188
return dataTypesResult
185
189
.merge(dataFetchersResult)
@@ -192,6 +196,7 @@ class CodeGen(private val config: CodeGenConfig) {
192
196
.merge(entitiesRepresentationsTypes)
193
197
.merge(constantsClass)
194
198
.merge(generatedAnnotation)
199
+ .merge(docFiles)
195
200
}
196
201
197
202
private fun generateJavaEnums (definitions : Collection <Definition <* >>): CodeGenResult {
@@ -456,6 +461,18 @@ class CodeGen(private val config: CodeGenConfig) {
456
461
}
457
462
.fold(CodeGenResult ()) { t: CodeGenResult , u: CodeGenResult -> t.merge(u) }
458
463
}
464
+
465
+ private fun generateDocFiles (definitions : Collection <Definition <* >>): CodeGenResult {
466
+ if (! config.generateDocs) {
467
+ return CodeGenResult ()
468
+ }
469
+
470
+ return definitions.asSequence()
471
+ .map {
472
+ DocGenerator (config, document).generate(it)
473
+ }
474
+ .fold(CodeGenResult ()) { t: CodeGenResult , u: CodeGenResult -> t.merge(u) }
475
+ }
459
476
}
460
477
461
478
class CodeGenConfig (
@@ -469,6 +486,7 @@ class CodeGenConfig(
469
486
private val subPackageNameClient : String = " client" ,
470
487
private val subPackageNameDatafetchers : String = " datafetchers" ,
471
488
private val subPackageNameTypes : String = " types" ,
489
+ private val subPackageNameDocs : String = " docs" ,
472
490
var language : Language = Language .JAVA ,
473
491
var generateBoxedTypes : Boolean = false ,
474
492
var generateClientApi : Boolean = false ,
@@ -490,6 +508,8 @@ class CodeGenConfig(
490
508
var snakeCaseConstantNames : Boolean = false ,
491
509
var generateInterfaceSetters : Boolean = true ,
492
510
var generateInterfaceMethodsForInterfaceFields : Boolean = false ,
511
+ var generateDocs : Boolean = false ,
512
+ var generatedDocsFolder : Path = Paths .get("generated-docs"),
493
513
var includeImports : Map <String , String > = emptyMap(),
494
514
var includeEnumImports : Map <String , Map <String , String >> = emptyMap(),
495
515
var includeClassImports : Map <String , Map <String , String >> = emptyMap(),
@@ -504,6 +524,7 @@ class CodeGenConfig(
504
524
val packageNameDatafetchers: String = " $packageName .$subPackageNameDatafetchers "
505
525
506
526
val packageNameTypes: String = " $packageName .$subPackageNameTypes "
527
+ val packageNameDocs: String = " $packageName .$subPackageNameDocs "
507
528
508
529
override fun toString (): String {
509
530
return """
@@ -512,6 +533,7 @@ class CodeGenConfig(
512
533
--sub-package-name-client=$subPackageNameClient
513
534
--sub-package-name-datafetchers=$subPackageNameDatafetchers
514
535
--sub-package-name-types=$subPackageNameTypes
536
+ --sub-package-name-docs=$subPackageNameDocs
515
537
${if (generateBoxedTypes) " --generate-boxed-types" else " " }
516
538
${if (writeToFiles) " --write-to-disk" else " " }
517
539
--language=$language
@@ -547,7 +569,8 @@ data class CodeGenResult(
547
569
val kotlinEnumTypes : List <FileSpec > = listOf(),
548
570
val kotlinDataFetchers : List <FileSpec > = listOf(),
549
571
val kotlinConstants : List <FileSpec > = listOf(),
550
- val kotlinClientTypes : List <FileSpec > = listOf()
572
+ val kotlinClientTypes : List <FileSpec > = listOf(),
573
+ val docFiles : List <DocFileSpec > = listOf()
551
574
) {
552
575
fun merge (current : CodeGenResult ): CodeGenResult {
553
576
val javaDataTypes = this .javaDataTypes.plus(current.javaDataTypes)
@@ -564,6 +587,7 @@ data class CodeGenResult(
564
587
val kotlinDataFetchers = this .kotlinDataFetchers.plus(current.kotlinDataFetchers)
565
588
val kotlinConstants = this .kotlinConstants.plus(current.kotlinConstants)
566
589
val kotlinClientTypes = this .kotlinClientTypes.plus(current.kotlinClientTypes)
590
+ val docFiles = this .docFiles.plus(current.docFiles)
567
591
568
592
return CodeGenResult (
569
593
javaDataTypes = javaDataTypes,
@@ -579,7 +603,8 @@ data class CodeGenResult(
579
603
kotlinEnumTypes = kotlinEnumTypes,
580
604
kotlinDataFetchers = kotlinDataFetchers,
581
605
kotlinConstants = kotlinConstants,
582
- kotlinClientTypes = kotlinClientTypes
606
+ kotlinClientTypes = kotlinClientTypes,
607
+ docFiles = docFiles
583
608
)
584
609
}
585
610
0 commit comments