diffstalker 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/.dependency-cruiser.cjs +67 -0
  2. package/.githooks/pre-commit +2 -0
  3. package/.githooks/pre-push +15 -0
  4. package/README.md +43 -35
  5. package/bun.lock +60 -4
  6. package/dist/App.js +495 -131
  7. package/dist/KeyBindings.js +134 -10
  8. package/dist/MouseHandlers.js +67 -20
  9. package/dist/core/ExplorerStateManager.js +37 -75
  10. package/dist/core/GitStateManager.js +252 -46
  11. package/dist/git/diff.js +99 -18
  12. package/dist/git/status.js +111 -54
  13. package/dist/git/test-helpers.js +67 -0
  14. package/dist/index.js +54 -43
  15. package/dist/ipc/CommandClient.js +6 -7
  16. package/dist/state/UIState.js +22 -0
  17. package/dist/types/remote.js +5 -0
  18. package/dist/ui/PaneRenderers.js +45 -15
  19. package/dist/ui/modals/BranchPicker.js +157 -0
  20. package/dist/ui/modals/CommitActionConfirm.js +66 -0
  21. package/dist/ui/modals/FileFinder.js +45 -75
  22. package/dist/ui/modals/HotkeysModal.js +35 -3
  23. package/dist/ui/modals/SoftResetConfirm.js +68 -0
  24. package/dist/ui/modals/StashListModal.js +98 -0
  25. package/dist/ui/modals/ThemePicker.js +1 -2
  26. package/dist/ui/widgets/CommitPanel.js +113 -7
  27. package/dist/ui/widgets/CompareListView.js +44 -23
  28. package/dist/ui/widgets/DiffView.js +216 -170
  29. package/dist/ui/widgets/ExplorerView.js +50 -54
  30. package/dist/ui/widgets/FileList.js +62 -95
  31. package/dist/ui/widgets/FlatFileList.js +65 -0
  32. package/dist/ui/widgets/Footer.js +25 -15
  33. package/dist/ui/widgets/Header.js +51 -9
  34. package/dist/ui/widgets/fileRowFormatters.js +73 -0
  35. package/dist/utils/ansiTruncate.js +0 -1
  36. package/dist/utils/displayRows.js +101 -21
  37. package/dist/utils/flatFileList.js +67 -0
  38. package/dist/utils/layoutCalculations.js +5 -3
  39. package/eslint.metrics.js +0 -1
  40. package/metrics/v0.2.2.json +229 -0
  41. package/metrics/v0.2.3.json +243 -0
  42. package/package.json +10 -3
@@ -0,0 +1,243 @@
1
+ {
2
+ "timestamp": "2026-02-06T18:38:55.083Z",
3
+ "gitRef": "v0.2.3",
4
+ "gitSha": "11ba9fc",
5
+ "summary": {
6
+ "files": 82,
7
+ "lines": 16165,
8
+ "functions": 1146,
9
+ "avgCyclomaticComplexity": 5.1,
10
+ "maxCyclomaticComplexity": {
11
+ "value": 42,
12
+ "function": "buildDiffDisplayRows",
13
+ "file": "src/utils/displayRows.ts:112"
14
+ },
15
+ "avgCognitiveComplexity": 6.5,
16
+ "maxCognitiveComplexity": {
17
+ "value": 68,
18
+ "function": "buildDiffDisplayRows",
19
+ "file": "src/utils/displayRows.ts:112"
20
+ },
21
+ "smells": 0
22
+ },
23
+ "hotspots": [
24
+ {
25
+ "file": "src/utils/displayRows.ts",
26
+ "lines": 567,
27
+ "cyclomaticMax": 42,
28
+ "cognitiveMax": 68,
29
+ "smells": 0
30
+ },
31
+ {
32
+ "file": "src/ui/widgets/CommitPanel.ts",
33
+ "lines": 217,
34
+ "cyclomaticMax": 34,
35
+ "cognitiveMax": 42,
36
+ "smells": 0
37
+ },
38
+ {
39
+ "file": "src/App.ts",
40
+ "lines": 1548,
41
+ "cyclomaticMax": 31,
42
+ "cognitiveMax": 13,
43
+ "smells": 0
44
+ },
45
+ {
46
+ "file": "src/utils/flatFileList.ts",
47
+ "lines": 100,
48
+ "cyclomaticMax": 29,
49
+ "cognitiveMax": 14,
50
+ "smells": 0
51
+ },
52
+ {
53
+ "file": "src/git/diff.ts",
54
+ "lines": 656,
55
+ "cyclomaticMax": 26,
56
+ "cognitiveMax": 41,
57
+ "smells": 0
58
+ },
59
+ {
60
+ "file": "src/git/status.ts",
61
+ "lines": 392,
62
+ "cyclomaticMax": 22,
63
+ "cognitiveMax": 25,
64
+ "smells": 0
65
+ },
66
+ {
67
+ "file": "src/ui/PaneRenderers.ts",
68
+ "lines": 249,
69
+ "cyclomaticMax": 20,
70
+ "cognitiveMax": 8,
71
+ "smells": 0
72
+ },
73
+ {
74
+ "file": "src/ui/widgets/ExplorerContent.ts",
75
+ "lines": 130,
76
+ "cyclomaticMax": 20,
77
+ "cognitiveMax": 24,
78
+ "smells": 0
79
+ },
80
+ {
81
+ "file": "src/ui/widgets/Header.ts",
82
+ "lines": 134,
83
+ "cyclomaticMax": 18,
84
+ "cognitiveMax": 22,
85
+ "smells": 0
86
+ },
87
+ {
88
+ "file": "src/MouseHandlers.ts",
89
+ "lines": 268,
90
+ "cyclomaticMax": 17,
91
+ "cognitiveMax": 15,
92
+ "smells": 0
93
+ },
94
+ {
95
+ "file": "src/ipc/CommandServer.ts",
96
+ "lines": 266,
97
+ "cyclomaticMax": 17,
98
+ "cognitiveMax": 6,
99
+ "smells": 0
100
+ },
101
+ {
102
+ "file": "src/index.ts",
103
+ "lines": 178,
104
+ "cyclomaticMax": 16,
105
+ "cognitiveMax": 17,
106
+ "smells": 0
107
+ },
108
+ {
109
+ "file": "src/ui/widgets/ExplorerView.ts",
110
+ "lines": 245,
111
+ "cyclomaticMax": 16,
112
+ "cognitiveMax": 21,
113
+ "smells": 0
114
+ },
115
+ {
116
+ "file": "src/utils/ansiTruncate.ts",
117
+ "lines": 123,
118
+ "cyclomaticMax": 16,
119
+ "cognitiveMax": 24,
120
+ "smells": 0
121
+ },
122
+ {
123
+ "file": "src/ui/widgets/DiffView.ts",
124
+ "lines": 511,
125
+ "cyclomaticMax": 15,
126
+ "cognitiveMax": 12,
127
+ "smells": 0
128
+ },
129
+ {
130
+ "file": "src/ui/widgets/CompareListView.ts",
131
+ "lines": 383,
132
+ "cyclomaticMax": 14,
133
+ "cognitiveMax": 16,
134
+ "smells": 0
135
+ },
136
+ {
137
+ "file": "src/utils/diffRowCalculations.ts",
138
+ "lines": 136,
139
+ "cyclomaticMax": 13,
140
+ "cognitiveMax": 24,
141
+ "smells": 0
142
+ },
143
+ {
144
+ "file": "src/core/ExplorerStateManager.ts",
145
+ "lines": 727,
146
+ "cyclomaticMax": 12,
147
+ "cognitiveMax": 15,
148
+ "smells": 0
149
+ },
150
+ {
151
+ "file": "src/ui/widgets/FileList.ts",
152
+ "lines": 215,
153
+ "cyclomaticMax": 12,
154
+ "cognitiveMax": 12,
155
+ "smells": 0
156
+ },
157
+ {
158
+ "file": "src/utils/lineBreaking.ts",
159
+ "lines": 114,
160
+ "cyclomaticMax": 12,
161
+ "cognitiveMax": 17,
162
+ "smells": 0
163
+ },
164
+ {
165
+ "file": "src/ui/modals/BranchPicker.ts",
166
+ "lines": 185,
167
+ "cyclomaticMax": 11,
168
+ "cognitiveMax": 17,
169
+ "smells": 0
170
+ },
171
+ {
172
+ "file": "src/config.ts",
173
+ "lines": 107,
174
+ "cyclomaticMax": 10,
175
+ "cognitiveMax": 13,
176
+ "smells": 0
177
+ },
178
+ {
179
+ "file": "src/state/UIState.ts",
180
+ "lines": 307,
181
+ "cyclomaticMax": 10,
182
+ "cognitiveMax": 12,
183
+ "smells": 0
184
+ },
185
+ {
186
+ "file": "src/KeyBindings.ts",
187
+ "lines": 373,
188
+ "cyclomaticMax": 9,
189
+ "cognitiveMax": 15,
190
+ "smells": 0
191
+ },
192
+ {
193
+ "file": "src/core/GitStateManager.ts",
194
+ "lines": 989,
195
+ "cyclomaticMax": 9,
196
+ "cognitiveMax": 12,
197
+ "smells": 0
198
+ },
199
+ {
200
+ "file": "src/ui/widgets/HistoryView.ts",
201
+ "lines": 97,
202
+ "cyclomaticMax": 9,
203
+ "cognitiveMax": 12,
204
+ "smells": 0
205
+ },
206
+ {
207
+ "file": "src/utils/formatPath.ts",
208
+ "lines": 72,
209
+ "cyclomaticMax": 9,
210
+ "cognitiveMax": 11,
211
+ "smells": 0
212
+ },
213
+ {
214
+ "file": "src/utils/explorerDisplayRows.ts",
215
+ "lines": 206,
216
+ "cyclomaticMax": 8,
217
+ "cognitiveMax": 15,
218
+ "smells": 0
219
+ },
220
+ {
221
+ "file": "src/ui/modals/FileFinder.ts",
222
+ "lines": 238,
223
+ "cyclomaticMax": 7,
224
+ "cognitiveMax": 13,
225
+ "smells": 0
226
+ },
227
+ {
228
+ "file": "src/ui/modals/BaseBranchPicker.ts",
229
+ "lines": 134,
230
+ "cyclomaticMax": 6,
231
+ "cognitiveMax": 13,
232
+ "smells": 0
233
+ },
234
+ {
235
+ "file": "src/ui/modals/StashListModal.ts",
236
+ "lines": 122,
237
+ "cyclomaticMax": 5,
238
+ "cognitiveMax": 11,
239
+ "smells": 0
240
+ }
241
+ ],
242
+ "smellsByRule": {}
243
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "diffstalker",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Terminal application that displays git diff/status for directories",
5
5
  "author": "yogh-io",
6
6
  "license": "MIT",
@@ -19,6 +19,7 @@
19
19
  },
20
20
  "scripts": {
21
21
  "postinstall": "node scripts/patch-neo-blessed.cjs",
22
+ "prepare": "git config core.hooksPath .githooks",
22
23
  "dev": "bun --watch src/index.ts",
23
24
  "build": "tsc",
24
25
  "build:prod": "tsc && bun build dist/index.js --outfile dist/index.js --minify --target node --packages external",
@@ -27,13 +28,17 @@
27
28
  "start:bundle": "bun dist/bundle/index.js",
28
29
  "test": "bun test src/*.test.ts src/**/*.test.ts",
29
30
  "test:watch": "bun test --watch src/*.test.ts src/**/*.test.ts",
30
- "lint": "eslint src/",
31
+ "lint": "eslint src/ && depcruise src/ --config .dependency-cruiser.cjs",
31
32
  "lint:fix": "eslint src/ --fix",
32
33
  "format": "prettier --write src/",
33
34
  "format:check": "prettier --check src/",
35
+ "deps": "depcruise src/ --config .dependency-cruiser.cjs",
34
36
  "metrics": "bun scripts/collect-metrics.ts",
35
37
  "metrics:snapshot": "bun scripts/collect-metrics.ts --save",
36
- "prepublishOnly": "bun run build:prod"
38
+ "prepublishOnly": "bun run build:prod",
39
+ "release": "scripts/release.sh",
40
+ "release:minor": "scripts/release.sh minor",
41
+ "release:major": "scripts/release.sh major"
37
42
  },
38
43
  "keywords": [
39
44
  "git",
@@ -49,6 +54,7 @@
49
54
  "chokidar": "^4.0.3",
50
55
  "emphasize": "^7.0.0",
51
56
  "fast-diff": "^1.3.0",
57
+ "fzf": "^0.5.2",
52
58
  "ignore": "^7.0.5",
53
59
  "neo-blessed": "^0.2.0",
54
60
  "simple-git": "^3.27.0",
@@ -58,6 +64,7 @@
58
64
  "@eslint/js": "^9.39.2",
59
65
  "@types/blessed": "^0.1.27",
60
66
  "@types/node": "^22.10.7",
67
+ "dependency-cruiser": "^17.3.7",
61
68
  "eslint": "^9.39.2",
62
69
  "eslint-config-prettier": "^10.1.8",
63
70
  "eslint-plugin-sonarjs": "^3.0.6",