@@ -12,14 +12,15 @@ import { pipe } from "effect"
1212import * as Array from "effect/Array"
1313import * as Chunk from "effect/Chunk"
1414import * as Effect from "effect/Effect"
15+ import { pipe } from "effect/Function"
1516import * as Stream from "effect/Stream"
1617import * as String from "effect/String"
1718import * as Glob from "glob"
1819import * as Configuration from "./Configuration.js"
19- import type * as Domain from "./Domain.js"
20+ import * as Domain from "./Domain.js"
2021import { DocgenError } from "./Error.js"
2122import * as File from "./File.js"
22- import { printModule } from "./Markdown.js"
23+ import { printModule , printPrintableForAI } from "./Markdown.js"
2324import * as Parser from "./Parser.js"
2425import * as Process from "./Process.js"
2526
@@ -436,7 +437,8 @@ const getMarkdown = (modules: ReadonlyArray<Domain.Module>) =>
436437 const index = yield * _ ( getMarkdownIndex )
437438 const yml = yield * _ ( getMarkdownConfigYML )
438439 const moduleFiles = yield * _ ( getModuleMarkdownFiles ( modules ) )
439- return [ homepage , index , yml , ...moduleFiles ]
440+ const aiFiles = yield * _ ( maybeGetAIMarkdownFiles ( modules ) )
441+ return [ homepage , index , yml , ...moduleFiles , ...aiFiles ]
440442 } )
441443
442444const getMarkdownHomepage = Effect . gen ( function * ( _ ) {
@@ -538,6 +540,14 @@ const getModuleMarkdownOutputPath = (module: Domain.Module) =>
538540 ) )
539541 )
540542
543+ const getAIMarkdownOutputPath = ( module : Domain . Module , printable : Domain . Printable ) =>
544+ Effect . map ( Effect . all ( [ Configuration . Configuration , Path . Path ] ) , ( [ config , path ] ) =>
545+ path . join (
546+ config . outDir ,
547+ "ai" ,
548+ `${ module . path . slice ( 1 ) . join ( "-" ) . replace ( / \. t s $ / , "" ) } -${ printable . name } .md`
549+ ) )
550+
541551const getModuleMarkdownFiles = ( modules : ReadonlyArray < Domain . Module > ) =>
542552 Effect . forEach ( modules , ( module , order ) =>
543553 Effect . gen ( function * ( _ ) {
@@ -546,6 +556,34 @@ const getModuleMarkdownFiles = (modules: ReadonlyArray<Domain.Module>) =>
546556 return File . createFile ( outputPath , content , true )
547557 } ) )
548558
559+ const getAIMarkdownFiles = ( projectName : string , modules : ReadonlyArray < Domain . Module > ) =>
560+ Effect . gen ( function * ( _ ) {
561+ const aiModules = pipe (
562+ modules ,
563+ Array . flatMap ( ( module ) =>
564+ pipe (
565+ Domain . printablesFromModule ( module ) ,
566+ Array . map ( ( printable ) => ( { module, printable } ) )
567+ )
568+ ) ,
569+ Array . filter ( ( { printable } ) => printable . description . _tag === "Some" )
570+ )
571+
572+ return yield * _ ( Effect . forEach ( aiModules , ( { module, printable } ) =>
573+ Effect . gen ( function * ( _ ) {
574+ const outputPath = yield * _ ( getAIMarkdownOutputPath ( module , printable ) )
575+ const content = yield * _ ( printPrintableForAI ( projectName , module , printable ) )
576+ return File . createFile ( outputPath , content , true )
577+ } ) ) )
578+ } )
579+
580+ const maybeGetAIMarkdownFiles = ( modules : ReadonlyArray < Domain . Module > ) =>
581+ Effect . flatMap (
582+ Configuration . Configuration ,
583+ ( config ) =>
584+ config . enableAI ? getAIMarkdownFiles ( config . projectName , modules ) : Effect . succeed ( [ ] )
585+ )
586+
549587const writeMarkdown = ( files : ReadonlyArray < File . File > ) =>
550588 Effect . gen ( function * ( _ ) {
551589 const config = yield * _ ( Configuration . Configuration )
0 commit comments