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

nguyenhuuit / adventofcode-runner / #6

11 Jun 2025 07:02AM UTC coverage: 12.757% (+3.3%) from 9.492%
#6

push

nguyenhuuit
feat: integrate telemetry

26 of 167 branches covered (15.57%)

Branch coverage included in aggregate %.

15 of 85 new or added lines in 8 files covered. (17.65%)

5 existing lines in 4 files now uncovered.

61 of 515 relevant lines covered (11.84%)

0.24 hits per line

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

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

3
import { useCallback } from 'react';
4

5
import { type Key, useInput } from 'ink';
6

7
import { TrackingEvent } from '@utils/analytics';
8
import { HELP_MESSAGE, InputMode } from '@utils/constants';
9
import { Executor } from '@utils/executors';
10

11
import { useExecuteAsStream } from '@hooks/useExecuteAsStream';
12
import { ExecutionStoreInstance } from '@hooks/useExecutionStore';
13
import { useSubmit } from '@hooks/useSubmit';
14
import { useTelemetry } from '@hooks/useTelemetry';
15

16
export const useHandleInput = (executionStore: ExecutionStoreInstance) => {
×
17
  const { inputMode, part, loading, setInputMode, setPart, setOutput, appendOutput, clearOutput } =
18
    useStore(executionStore);
×
19

20
  const executeSolution = useExecuteAsStream(executionStore);
×
21

22
  const { submit } = useSubmit(executionStore);
×
NEW
23
  const { track } = useTelemetry(executionStore);
×
24

25
  const handleInput = useCallback(
×
26
    async (input: string, key: Key) => {
27
      // Track the key press
NEW
28
      let payload = {};
×
NEW
29
      if (key.return) {
×
NEW
30
        payload = { key: 'enter' };
×
NEW
31
      } else if (key.upArrow) {
×
NEW
32
        payload = { key: 'up' };
×
NEW
33
      } else if (key.downArrow) {
×
NEW
34
        payload = { key: 'down' };
×
NEW
35
      } else if (input) {
×
NEW
36
        payload = { key: input.toLowerCase() };
×
37
      } else {
NEW
38
        payload = { key: 'unknown' };
×
39
      }
NEW
40
      track(TrackingEvent.KEY_PRESS, payload);
×
41

UNCOV
42
      switch (input.toLowerCase()) {
×
43
        case 'q': {
44
          Executor.terminate();
×
45
          process.exit();
×
46
          break; // Unreachable but satisfies eslint god
×
47
        }
48
        case 'i': {
NEW
49
          setInputMode(InputMode.INPUT);
×
50
          break;
×
51
        }
52
        case 's': {
NEW
53
          setInputMode(InputMode.SAMPLE);
×
54
          break;
×
55
        }
56
        case 'c':
57
          clearOutput();
×
58
          break;
×
59
        case '0':
60
        case '1':
61
        case '2':
62
        case '3':
63
        case '4':
64
        case '5':
65
        case '6':
66
        case '7':
67
        case '8':
68
        case '9': {
69
          setPart(input);
×
70
          break;
×
71
        }
72
        case 'x': {
73
          if (loading) {
×
74
            Executor.terminate();
×
75
            setTimeout(() => setOutput('Terminated!'), 100);
×
76
          }
77
          break;
×
78
        }
79
        case 'h': {
80
          setOutput(HELP_MESSAGE);
×
81
          break;
×
82
        }
83
        case 'u': {
84
          submit();
×
85
          break;
×
86
        }
87
        default: {
NEW
88
          if (key.downArrow) {
×
NEW
89
            setInputMode(InputMode.INPUT);
×
90
          }
NEW
91
          if (key.upArrow) {
×
NEW
92
            setInputMode(InputMode.SAMPLE);
×
93
          }
NEW
94
          if (key.return) {
×
NEW
95
            executeSolution();
×
96
          }
NEW
97
          break;
×
98
        }
99
      }
100
    },
101
    [
102
      part,
103
      inputMode,
104
      loading,
105
      setInputMode,
106
      setPart,
107
      setOutput,
108
      appendOutput,
109
      clearOutput,
110
      executeSolution,
111
      submit,
112
      track,
113
    ]
114
  );
115

116
  useInput(handleInput);
×
117
};
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

© 2026 Coveralls, Inc