ai-commit-report-generator-cli
Version:
An AI-powered CLI tool that generates weekly reports from your Git activity
50 lines (49 loc) • 2.63 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateReportUseCase = generateReportUseCase;
const json_store_factory_1 = require("../json-store.factory");
const date_fns_1 = require("date-fns");
const reportAIGenerator_1 = require("../reportAIGenerator");
const progress_service_1 = require("../services/progress.service");
const utils_1 = require("../utils");
function generateReportUseCase(commitsWithSummaries_1) {
return __awaiter(this, arguments, void 0, function* (commitsWithSummaries, repoPath = ".") {
const storeFactory = json_store_factory_1.JsonStoreFactory.getInstance();
const cacheStore = yield storeFactory.createOrGetStore((0, utils_1.slugify)(repoPath));
// generate report
const groupedByDate = commitsWithSummaries.reduce((acc, { commit, statistics, summary }) => {
const date = (0, date_fns_1.format)(new Date(commit.date), 'yyyy-MM-dd');
if (!acc[date]) {
acc[date] = [];
}
acc[date].push({ commit, statistics, summary });
return acc;
}, {});
const dates = Object.keys(groupedByDate);
const progressBar = progress_service_1.ProgressService.createProgressBar('Generating daily reports');
progressBar.start(dates.length);
const dailyReportAIGenerator = new reportAIGenerator_1.DailyReportAIGenerator();
for (const date of dates) {
const commitsEntries = groupedByDate[date];
const reportKey = `reports:${date}`;
const cachedReport = cacheStore.get(reportKey);
if (cachedReport) {
progressBar.increment();
continue;
}
const report = yield dailyReportAIGenerator.generateReport(commitsEntries);
cacheStore.set(reportKey, report);
progressBar.increment();
}
progressBar.stop();
});
}