diff --git a/src/cli.ts b/src/cli.ts index 5c8aa2e..5bc56e5 100755 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node import { cli } from 'cleye'; -import packageJSON from '../package.json'; +import packageJSON from '../package.json' assert { type: 'json' }; import { configCommand } from './commands/config'; import { hookCommand, isHookCalled } from './commands/githook.js'; diff --git a/src/generateCommitMessageFromGitDiff.ts b/src/generateCommitMessageFromGitDiff.ts index bd94625..6c09479 100644 --- a/src/generateCommitMessageFromGitDiff.ts +++ b/src/generateCommitMessageFromGitDiff.ts @@ -81,34 +81,30 @@ const INIT_MESSAGES_PROMPT_LENGTH = INIT_MESSAGES_PROMPT.map( (msg) => msg.content ).join('').length; +const MAX_REQ_TOKENS = 3900 - INIT_MESSAGES_PROMPT_LENGTH; + export const generateCommitMessageWithChatCompletion = async ( diff: string ): Promise => { try { - const MAX_REQ_TOKENS = 3900; - - if (INIT_MESSAGES_PROMPT_LENGTH + diff.length >= MAX_REQ_TOKENS) { + if (diff.length >= MAX_REQ_TOKENS) { const separator = 'diff --git '; const diffByFiles = diff.split(separator).slice(1); - const commitMessages = []; - - for (const diffFile of diffByFiles) { - if (INIT_MESSAGES_PROMPT_LENGTH + diffFile.length >= MAX_REQ_TOKENS) - continue; + const commitMessagePromises = diffByFiles.map((fileDiff) => { + // TODO: split by files + if (INIT_MESSAGES_PROMPT_LENGTH + fileDiff.length >= MAX_REQ_TOKENS) + return null; const messages = generateCommitMessageChatCompletionPrompt( - separator + diffFile + separator + fileDiff ); - const commitMessage = await api.generateCommitMessage(messages); + return api.generateCommitMessage(messages); + }); - // TODO: handle this edge case - if (!commitMessage?.content) continue; - - commitMessages.push(commitMessage?.content); - } + const commitMessages = await Promise.all(commitMessagePromises); return commitMessages.join('\n\n'); } diff --git a/tsconfig.json b/tsconfig.json index 487dd70..6dedf1a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,9 @@ { "compilerOptions": { - "target": "ES2020", - "lib": ["ES5"], + "target": "ESNext", + "lib": ["ES5", "ES6"], - "module": "CommonJS", + "module": "ESNext", // "rootDir": "./src", "moduleResolution": "node", "resolveJsonModule": true,