84 lines
2.5 KiB
TypeScript
84 lines
2.5 KiB
TypeScript
|
import type { AiDoc } from '../classes.aidoc.js';
|
||
|
import * as plugins from '../plugins.js';
|
||
|
import { ProjectContext } from './projectcontext.js';
|
||
|
|
||
|
export class Readme {
|
||
|
|
||
|
// INSTANCE
|
||
|
private aiDocsRef: AiDoc;
|
||
|
private projectDir: string;
|
||
|
|
||
|
constructor(aiDocsRef: AiDoc, projectDirArg: string) {
|
||
|
this.aiDocsRef = aiDocsRef;
|
||
|
this.projectDir = projectDirArg;
|
||
|
}
|
||
|
|
||
|
public async build() {
|
||
|
let finalReadmeString = ``;
|
||
|
|
||
|
// we can now assemble the directory structure.
|
||
|
const projectContext = new ProjectContext(this.projectDir);
|
||
|
const contextString = await projectContext.update();
|
||
|
|
||
|
// lets first check legal before introducung any cost
|
||
|
const npmExtraJson = JSON.parse(((await projectContext.gatherFiles()).smartfilesNpmextraJSON).contents.toString());
|
||
|
const legalInfo = npmExtraJson?.tsdoc?.legal
|
||
|
if (!legalInfo) {
|
||
|
const error = new Error(`No legal information found in npmextra.json`);
|
||
|
console.log(error);
|
||
|
}
|
||
|
|
||
|
let result = await this.aiDocsRef.openaiInstance.chat(
|
||
|
`
|
||
|
You create markdown readmes for npm projects. You only output the markdown readme.
|
||
|
|
||
|
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".
|
||
|
|
||
|
npmextra.json has a tsdocs section that provides valuable information about module ideas.
|
||
|
]
|
||
|
`,
|
||
|
contextString,
|
||
|
[]
|
||
|
);
|
||
|
|
||
|
|
||
|
finalReadmeString += result.message.content + '\n' + legalInfo;
|
||
|
|
||
|
|
||
|
|
||
|
console.log(`\n======================\n`);
|
||
|
console.log(result.message.content);
|
||
|
console.log(`\n======================\n`);
|
||
|
|
||
|
const readme = (await projectContext.gatherFiles()).smartfilesReadme;
|
||
|
readme.contents = Buffer.from(finalReadmeString);
|
||
|
await readme.write();
|
||
|
|
||
|
return result.message.content;
|
||
|
}
|
||
|
}
|