UNPKG

debt-collector

Version:

a nodejs tool to identify, track and mesure technical debt

112 lines (111 loc) 4.86 kB
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, }; };