fix(core): update

This commit is contained in:
Philipp Kunz 2024-06-22 21:21:52 +02:00
parent 5d2c9e6158
commit 3b4c6bd97f
5 changed files with 72 additions and 13 deletions

View File

@ -15,12 +15,24 @@ tap.test('should create an AIdocs class', async () => {
tap.test('should start AIdocs', async () => {
await aidocs.start();
});
tap.skip.test('should start AIdocs', async () => {
await aidocs.buildReadme('./');
});
tap.test('should start AIdocs', async () => {
await aidocs.start();
tap.skip.test('should start AIdocs', async () => {
await aidocs.buildDescription('./');
});
tap.test('should build commit object', async () => {
const commitObject = await aidocs.buildNextCommitObject('./');
console.log(commitObject);
expect(commitObject).not.toBeUndefined();
expect(commitObject).toHaveProperty('message');
expect(commitObject).toHaveProperty('recommendedNextVersion');
expect(commitObject).toHaveProperty('recommendedNextVersionLevel');
})
tap.start();

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@git.zone/tsdoc',
version: '1.1.32',
version: '1.1.33',
description: 'An advanced TypeScript documentation tool using AI to generate and enhance documentation for TypeScript projects.'
}

View File

@ -2,6 +2,13 @@ import * as plugins from '../plugins.js';
import { AiDoc } from '../classes.aidoc.js';
import { ProjectContext } from './projectcontext.js';
export interface INextCommitObject {
recommendedNextVersionLevel: 'patch' | 'minor' | 'major'; // the recommended next version level of the project
recommendedNextVersion: string; // the recommended next version of the project
message: string; // the commit message. use conventional commits format
changelog?: string; // the changelog
}
export class Commit {
private aiDocsRef: AiDoc;
private projectDir: string;
@ -11,9 +18,20 @@ export class Commit {
this.projectDir = projectDirArg;
}
public async build() {
public async buildNextCommitObject(): Promise<INextCommitObject> {
const smartgitInstance = new plugins.smartgit.Smartgit();
await smartgitInstance.init();
const gitRepo = await plugins.smartgit.GitRepo.fromOpeningRepoDir(smartgitInstance, this.projectDir);
const diffString = await gitRepo.getUncommittedDiff();
console.log(diffString);
const projectContext = new ProjectContext(this.projectDir);
const contextString = await projectContext.update();
let contextString = await projectContext.update();
contextString = `
${contextString}
Here is the diff:
${diffString}
`
let result = await this.aiDocsRef.openaiInstance.chat({
systemMessage: `
@ -41,15 +59,40 @@ Also you are given a diff
userMessage: contextString,
});
console.log(result.message);
const resultObject = JSON.parse(result.message.replace('```json', '').replace('```', ''));
// console.log(result.message);
const resultObject: INextCommitObject = JSON.parse(result.message.replace('```json', '').replace('```', ''));
const npmextraJson = (await projectContext.gatherFiles()).smartfilesNpmextraJSON;
const npmextraJsonContent = JSON.parse(npmextraJson.contents.toString());
// lets build the changelog based on that
const commitMessages = await gitRepo.getAllCommitMessages();
const previousChangelogPath = plugins.path.join(this.projectDir, 'changelog.md');
let previousChangelog: plugins.smartfile.SmartFile;
if (await plugins.smartfile.fs.fileExists(previousChangelogPath)) {
previousChangelog = await plugins.smartfile.SmartFile.fromFilePath(previousChangelogPath);
}
let result2 = await this.aiDocsRef.openaiInstance.chat({
messageHistory: [],
systemMessage: `
You are building a changelog file for the projext.
Omit commits and versions that lack relevant changes.
npmextraJsonContent.gitzone.module.commit = resultObject.message;
You are given
* the previous changelog file (if available)
* the commit messages of the project
npmextraJson.contents = Buffer.from(JSON.stringify(npmextraJsonContent, null, 2));
await npmextraJson.write();
Only return the changelog file, so it can be written directly to changelog.md
For the latest version, that is not yet part of the commit messages, use {{nextVersion}} and {{nextDescription}} placeholders.
`,
userMessage: `
The previous changelog file is:
${(!previousChangelog) ? 'No previous changelog file found' : previousChangelog.contents.toString()}
Here are the commit messages so far:
${commitMessages.join('\n\n')}
`
})
resultObject.changelog = result2.message;
return resultObject;
}
}

View File

@ -1,3 +1,4 @@
export * from './commit.js';
export * from './description.js';
export * from './projectcontext.js';
export * from './readme.js';

View File

@ -85,7 +85,10 @@ export class AiDoc {
return await descriptionInstance.build();
}
public async buildNextCommit(projectDirArg: string) {}
public async buildNextCommitObject(projectDirArg: string) {
const commitInstance = new aiDocsClasses.Commit(this, projectDirArg);
return await commitInstance.buildNextCommitObject();
}
public async getProjectContext(projectDirArg: string) {
const projectContextInstance = new aiDocsClasses.ProjectContext(projectDirArg);