debt-collector
Version:
a nodejs tool to identify, track and mesure technical debt
112 lines (111 loc) • 4.86 kB
JavaScript
import { useState, useEffect } from 'react';
import { useValidatedConfig } from '../../lib/config/index.js';
import { useGitUtils } from '../../lib/git/index.js';
import { useTaskList } from './useTaskList.js';
import { getTagListFromConfig } from '../../lib/config/getTagListFromConfig.js';
import { getCommitResult, formatWalkResults } from './getCommitResult.js';
import { getEndDatesEstimations } from './getEndDatesEstimations.js';
import buildWalkReport from '../../lib/reporters/buildWalkReport.js';
import buildWalkEntries from '../../lib/reporters/buildWalkEntries.js';
import { useDevLogger } from '../hooks/useDevLogger.js';
export const useWalkState = (walkOptions) => {
const { config, openReport } = walkOptions;
const logger = useDevLogger();
const [results, setResults] = useState(null);
const [currentCommit, setCurrentCommit] = useState({ commit: '', index: 0 });
const [isReady, setIsReady] = useState(false);
const [tags, setTags] = useState({});
const [isFinished, setIsFinished] = useState(false);
const { isConfigValid, sanitizedConfig, userConfig } = useValidatedConfig(config);
const { isGitReady, walkCommits, checkoutTo, currentBranch, revList, isHistoryDirty, } = useGitUtils(sanitizedConfig);
const revlength = isConfigValid && sanitizedConfig?.walkConfig?.limit
? sanitizedConfig.walkConfig.limit
: '?';
const tasks = useTaskList({
isConfigValid,
isReady,
isHistoryDirty,
isFinished,
revlength: Number(revlength),
currentCommit,
isGitReady,
});
useEffect(() => {
;
(async () => {
if (isConfigValid && isGitReady && isHistoryDirty === false) {
setTags(getTagListFromConfig(sanitizedConfig));
const walkResults = await walkCommits(revList?.reverse() ?? [], {
onCommitChange: async ({ rev, index, previousResult }) => {
setCurrentCommit({ commit: rev.name, index: index || 0 + 1 });
const results = await getCommitResult({
previousResult: previousResult?.results ?? null,
sanitizedConfig,
include: sanitizedConfig?.include ?? null,
previousHash: previousResult?.rev?.hash,
});
logger.info(`${rev.name} - ${Object.keys(results).length} files`, results);
return results;
},
onError: (error) => {
console.log(error);
},
onEnd: async (results) => {
await checkoutTo(currentBranch ?? '');
return results;
},
});
setResults(walkResults);
setIsReady(true);
}
})();
}, [isConfigValid, isGitReady, isHistoryDirty]);
useEffect(() => {
;
(async () => {
if (isReady) {
const hasPackagesConfig = isConfigValid && !!sanitizedConfig?.walkConfig?.report?.packages;
const reports = hasPackagesConfig
? (sanitizedConfig?.walkConfig?.report?.packages ?? {})
: { global: sanitizedConfig?.include ?? [] };
const reportsLinks = Object.keys(reports).map((report) => ({
name: report,
link: `./report-${report}.html`,
}));
Object.keys(reports).forEach((reportName) => {
const formatedResult = formatWalkResults({
config: sanitizedConfig,
results: results,
globFilter: reports[reportName],
hasPackagesConfig: hasPackagesConfig ?? false,
});
// console.log('formatedResult', userConfig)
const endDateEstimations = getEndDatesEstimations({
config: sanitizedConfig,
results: formatedResult,
});
buildWalkReport({
userConfig: userConfig,
tags,
results: formatedResult,
endDateEstimations,
reportName,
reportsLinks,
});
});
buildWalkEntries(reportsLinks, openReport);
setIsFinished(true);
}
})();
}, [isReady]);
return {
tasks,
results,
currentCommit,
isHistoryDirty,
isReady,
tags,
logs: logger.logs,
isFinished,
};
};