• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

nguyenhuuit / adventofcode-runner / #4

10 Jun 2025 04:49PM UTC coverage: 9.492%. Remained the same
#4

push

nguyenhuuit
ci: publish coverage

20 of 137 branches covered (14.6%)

Branch coverage included in aggregate %.

36 of 453 relevant lines covered (7.95%)

0.2 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/hooks/useSolutionFile.ts
1
import fs from 'fs';
2
import { useStore } from 'zustand';
3

4
import { useCallback, useEffect, useState } from 'react';
5

6
import { TEMPLATES } from '@utils/languages';
7

8
import { useExecuteAsStream } from '@hooks/useExecuteAsStream';
9
import { ExecutionStoreInstance } from '@hooks/useExecutionStore';
10
import { useVsCode } from '@hooks/useVsCode';
11
import { useWatcher } from '@hooks/useWatcher';
12

13
export const useSolutionFile = (executionStore: ExecutionStoreInstance): AppFile => {
×
14
  const { year, day, part, language, getRelativeDir, getSolutionFile } = useStore(executionStore);
×
15
  const [name, setName] = useState<string>('');
×
16
  const [size, setSize] = useState<number>(0);
×
17
  const { openFile } = useVsCode();
×
18
  const relativeDir = getRelativeDir();
×
19
  const solutionFileName = getSolutionFile();
×
20

21
  const executeSolution = useExecuteAsStream(executionStore);
×
22

23
  const handleFileChange = useCallback(() => {
×
24
    executeSolution();
×
25
  }, [executeSolution]);
26

27
  useWatcher({ filePath: name, onChange: handleFileChange });
×
28

29
  useEffect(() => {
×
30
    if (!fs.existsSync(relativeDir)) {
×
31
      fs.mkdirSync(relativeDir, { recursive: true });
×
32
    }
33
    if (!fs.existsSync(solutionFileName)) {
×
34
      const template = TEMPLATES[language];
×
35
      if (template) {
×
36
        if (typeof template === 'function') {
×
37
          fs.writeFileSync(solutionFileName, template({ year, day, part }), { flag: 'as+' });
×
38
        } else {
39
          fs.writeFileSync(solutionFileName, template, { flag: 'as+' });
×
40
        }
41
      }
42
    }
43
    const stats = fs.statSync(solutionFileName);
×
44
    setName(solutionFileName);
×
45
    setSize(stats.size);
×
46
    openFile(solutionFileName);
×
47
  }, [relativeDir, solutionFileName, openFile]);
48

49
  return { name, size };
×
50
};
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc