feat(aidocs): Added support for building readmes for sub-modules in aidocs
This commit is contained in:
		| @@ -1,5 +1,11 @@ | ||||
| # Changelog | ||||
|  | ||||
| ## 2024-10-28 - 1.4.0 - feat(aidocs) | ||||
| Added support for building readmes for sub-modules in aidocs | ||||
|  | ||||
| - Updated the `Readme` class to handle monorepo projects by generating readmes for sub-modules. | ||||
| - Integrated `tspublish` to identify sub-modules for readme generation. | ||||
|  | ||||
| ## 2024-06-24 - 1.3.12 - fix(aidocs) | ||||
| Fix changelog generation by handling leading newlines | ||||
|  | ||||
|   | ||||
| @@ -23,9 +23,10 @@ | ||||
|     "@git.zone/tsrun": "^1.2.46", | ||||
|     "@git.zone/tstest": "^1.0.90", | ||||
|     "@push.rocks/tapbundle": "^5.0.23", | ||||
|     "@types/node": "^20.14.8" | ||||
|     "@types/node": "^22.8.1" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@git.zone/tspublish": "^1.5.5", | ||||
|     "@push.rocks/early": "^4.0.3", | ||||
|     "@push.rocks/npmextra": "^5.0.23", | ||||
|     "@push.rocks/qenv": "^6.0.5", | ||||
|   | ||||
							
								
								
									
										8983
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										8983
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -3,6 +3,6 @@ | ||||
|  */ | ||||
| export const commitinfo = { | ||||
|   name: '@git.zone/tsdoc', | ||||
|   version: '1.3.12', | ||||
|   version: '1.4.0', | ||||
|   description: 'An advanced TypeScript documentation tool using AI to generate and enhance documentation for TypeScript projects.' | ||||
| } | ||||
|   | ||||
| @@ -1,6 +1,8 @@ | ||||
| import type { AiDoc } from '../classes.aidoc.js'; | ||||
| import * as plugins from '../plugins.js'; | ||||
| import * as paths from '../paths.js'; | ||||
| import { ProjectContext } from './projectcontext.js'; | ||||
| import { logger } from '../logging.js'; | ||||
|  | ||||
| export class Readme { | ||||
|   // INSTANCE | ||||
| @@ -21,7 +23,7 @@ export class Readme { | ||||
|  | ||||
|     // lets first check legal before introducung any cost | ||||
|     const npmExtraJson = JSON.parse( | ||||
|       (await projectContext.gatherFiles()).smartfilesNpmextraJSON.contents.toString(), | ||||
|       (await projectContext.gatherFiles()).smartfilesNpmextraJSON.contents.toString() | ||||
|     ); | ||||
|     const legalInfo = npmExtraJson?.tsdoc?.legal; | ||||
|     if (!legalInfo) { | ||||
| @@ -79,6 +81,62 @@ The Readme should follow the following template: | ||||
|     readme.contents = Buffer.from(finalReadmeString); | ||||
|     await readme.write(); | ||||
|  | ||||
|     // lets care about monorepo aspects | ||||
|     const tsPublishInstance = new plugins.tspublish.TsPublish(); | ||||
|     const subModules = tsPublishInstance.getModuleSubDirs(paths.cwd); | ||||
|     logger.log('info', `Found ${Object.keys(subModules).length} sub modules`); | ||||
|     for (const subModule of Object.keys(subModules)) { | ||||
|       logger.log('info', `Building readme for ${subModule}`); | ||||
|       const subModuleContextString = await projectContext.update(); | ||||
|       let result = await this.aiDocsRef.openaiInstance.chat({ | ||||
|         systemMessage: ` | ||||
|   You create markdown readmes for npm projects. You only output the markdown readme. | ||||
|  | ||||
|   IMPORTANT: YOU ARE NOW CREATING THE README FOR THE FOLLOWING SUB MODULE: ${subModule} !!!!!!!!!!! | ||||
|   The Sub Module will be published with the following data: | ||||
|   ${JSON.stringify(plugins.smartfile.fs.toStringSync(plugins.path.join(paths.cwd, subModule, 'tspublish.json')), null, 2)} | ||||
|  | ||||
|    | ||||
|   The Readme should follow the following template: | ||||
|    | ||||
|   # Project Name | ||||
|   [ | ||||
|     The name is the module name of package.json | ||||
|     The description is in the description field of package.json | ||||
|   ] | ||||
|    | ||||
|   ## Install | ||||
|   [ | ||||
|     Write a short text on how to install the project | ||||
|   ] | ||||
|    | ||||
|   ## Usage | ||||
|   [  | ||||
|     Give code examples here. | ||||
|     Construct sensible scenarios for the user. | ||||
|     Make sure to show a complete set of features of the module. | ||||
|     Don't omit use cases. | ||||
|     It does not matter how much time you need. | ||||
|     ALWAYS USE ESM SYNTAX AND TYPESCRIPT. | ||||
|     DON'T CHICKEN OUT. Write at least 4000 words. More if necessary. | ||||
|     If there is already a readme, take the Usage section as base. Remove outdated content, and expand and improve upon the valid parts. | ||||
|     Super important: Check for completenes. | ||||
|     Don't include any licensing information. This will be added in a later step. | ||||
|     Avoid "in conclusions". | ||||
|    | ||||
|     Good to know: | ||||
|     * npmextra.json contains overall module information. | ||||
|     * readme.hints.md provides valuable hints about module ideas. | ||||
|   ] | ||||
|               `, | ||||
|         messageHistory: [], | ||||
|         userMessage: subModuleContextString, | ||||
|       }); | ||||
|  | ||||
|       const subModuleReadmeString = result.message + '\n' + legalInfo; | ||||
|       await plugins.smartfile.memory.toFs(subModuleReadmeString, plugins.path.join(paths.cwd, subModule, 'readme.md')); | ||||
|       logger.log('success', `Built readme for ${subModule}`); | ||||
|     } | ||||
|     return result.message; | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -34,6 +34,11 @@ export { | ||||
|   smarttime, | ||||
| }; | ||||
|  | ||||
| // @git.zone scope | ||||
| import * as tspublish from '@git.zone/tspublish'; | ||||
|  | ||||
| export { tspublish }; | ||||
|  | ||||
| // third party scope | ||||
| import * as typedoc from 'typedoc'; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user