diffwatch 1.1.3 → 2.0.0

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.
package/dist/index.js DELETED
@@ -1,608 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
- return new (P || (P = Promise))(function (resolve, reject) {
6
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
- step((generator = generator.apply(thisArg, _arguments || [])).next());
10
- });
11
- };
12
- var __importDefault = (this && this.__importDefault) || function (mod) {
13
- return (mod && mod.__esModule) ? mod : { "default": mod };
14
- };
15
- Object.defineProperty(exports, "__esModule", { value: true });
16
- const blessed = require('neo-neo-blessed');
17
- const chalk_1 = __importDefault(require("chalk"));
18
- const child_process_1 = require("child_process");
19
- const git_1 = require("./utils/git");
20
- const diff_formatter_1 = require("./utils/diff-formatter");
21
- const fs_1 = require("fs");
22
- const path_1 = require("path");
23
- const packageJson = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)((0, path_1.dirname)(__filename), '..', 'package.json'), 'utf-8'));
24
- function main() {
25
- return __awaiter(this, void 0, void 0, function* () {
26
- const args = process.argv.slice(2);
27
- let repoPath = process.cwd();
28
- const showHelp = () => {
29
- console.log(`
30
- Usage: diffwatch [path]
31
-
32
- Arguments:
33
- path Path to the git repository (default: current directory)
34
-
35
- Options:
36
- -h, --help Show help information
37
- -v, --version Show version information
38
- `);
39
- process.exit(0);
40
- };
41
- const showVersion = () => {
42
- console.log(`diffwatch v${packageJson.version}`);
43
- process.exit(0);
44
- };
45
- const positionalArgs = [];
46
- for (let i = 0; i < args.length; i++) {
47
- if (args[i] === '-h' || args[i] === '--help') {
48
- showHelp();
49
- }
50
- else if (args[i] === '-v' || args[i] === '--version') {
51
- showVersion();
52
- }
53
- else if (args[i].startsWith('-')) {
54
- // Ignore unknown flags or handle them if needed
55
- }
56
- else {
57
- positionalArgs.push(args[i]);
58
- }
59
- }
60
- if (positionalArgs.length > 0) {
61
- repoPath = positionalArgs[0];
62
- }
63
- try {
64
- process.chdir(repoPath);
65
- }
66
- catch (err) {
67
- console.error(`Error: Could not change directory to ${repoPath}`);
68
- process.exit(1);
69
- }
70
- const gitHandler = new git_1.GitHandler(repoPath);
71
- if (!(yield gitHandler.isRepo())) {
72
- console.log(chalk_1.default.red(`Error: ${repoPath} is not a git repository.`));
73
- process.exit(1);
74
- }
75
- // Force xterm-256color to encourage better mouse support on Windows terminals
76
- if (process.platform === 'win32' && !process.env.TERM) {
77
- process.env.TERM = 'xterm-256color';
78
- }
79
- const screen = blessed.screen({
80
- smartCSR: true,
81
- title: 'diffwatch',
82
- mouse: true,
83
- });
84
- // Explicitly enable mouse tracking
85
- screen.program.enableMouse();
86
- let fileList = blessed.list({
87
- top: 0,
88
- left: 0,
89
- width: '30%',
90
- height: '99%',
91
- label: 'Files (0)',
92
- keys: true,
93
- vi: true,
94
- mouse: true,
95
- tags: true,
96
- padding: { left: 0, right: 0 },
97
- scrollbar: {
98
- ch: ' ',
99
- track: { bg: 'white' },
100
- style: { bg: 'blue' },
101
- },
102
- style: {
103
- selected: { fg: 'black', bg: 'white' },
104
- border: { fg: 'white' },
105
- },
106
- border: { type: 'line' },
107
- });
108
- const createFileList = () => {
109
- const newList = blessed.list({
110
- top: 0,
111
- left: 0,
112
- width: '30%',
113
- height: '99%',
114
- label: 'Files (0)',
115
- keys: true,
116
- vi: true,
117
- mouse: true,
118
- tags: true,
119
- padding: { left: 0, right: 0 },
120
- scrollbar: {
121
- ch: ' ',
122
- track: { bg: 'white' },
123
- style: { bg: 'blue' },
124
- },
125
- style: {
126
- selected: { fg: 'black', bg: 'white' },
127
- border: { fg: 'white' },
128
- },
129
- border: { type: 'line' },
130
- });
131
- newList.on('select item', () => {
132
- scheduleDiffUpdate();
133
- });
134
- newList.key(['up', 'down'], () => {
135
- scheduleDiffUpdate();
136
- });
137
- newList.on('wheeldown', () => handleScroll('down'));
138
- newList.on('wheelup', () => handleScroll('up'));
139
- return newList;
140
- };
141
- const diffView = blessed.scrollabletext({
142
- top: 0,
143
- left: '30%',
144
- width: '70%',
145
- height: '99%',
146
- label: ' Diff () ',
147
- keys: true,
148
- vi: true,
149
- mouse: true,
150
- padding: { left: 1, right: 0 },
151
- scrollbar: {
152
- ch: ' ',
153
- track: { bg: 'white' },
154
- style: { bg: 'blue' },
155
- },
156
- style: {
157
- border: { fg: 'white' },
158
- },
159
- border: { type: 'line' },
160
- tags: false,
161
- });
162
- const searchBox = blessed.box({
163
- top: 'center',
164
- left: '40%', // Center of right pane (30% + 70%/2 = 65%)
165
- width: '50%',
166
- height: 3,
167
- label: ' Search ',
168
- border: { type: 'line' },
169
- style: { border: { fg: 'yellow' } },
170
- hidden: true,
171
- });
172
- const searchInput = blessed.textbox({
173
- parent: searchBox,
174
- top: 0,
175
- left: 0,
176
- width: '100%-2',
177
- height: 1,
178
- keys: true,
179
- inputOnFocus: true,
180
- style: { fg: 'white', bg: 'black' },
181
- });
182
- // Confirmation dialog for revert
183
- const confirmDialog = blessed.box({
184
- top: 'center',
185
- left: '45%', // Center of right pane (30% + 70%/2 = 65%)
186
- width: '38%',
187
- label: ' Confirm Revert ',
188
- height: 3,
189
- content: 'Press SPACE key to confirm revert or ESC to cancel.',
190
- border: { type: 'line' },
191
- style: {
192
- fg: 'yellow',
193
- bg: 'black',
194
- border: { fg: 'yellow' }
195
- },
196
- hidden: true,
197
- });
198
- const notificationBox = blessed.box({
199
- top: 'center',
200
- left: '45%', // Center of right pane (30% + 70%/2 = 65%)
201
- width: '38%',
202
- height: 3,
203
- label: ' Notification ',
204
- border: { type: 'line' },
205
- style: {
206
- fg: 'green',
207
- bg: 'black',
208
- border: { fg: 'green' }
209
- },
210
- hidden: true,
211
- });
212
- const showNotification = (message, color = 'green') => {
213
- const previouslyFocused = screen.focused;
214
- notificationBox.setContent(message);
215
- notificationBox.style = {
216
- fg: color,
217
- bg: 'black',
218
- border: { fg: color }
219
- };
220
- notificationBox.show();
221
- notificationBox.setFront();
222
- screen.render();
223
- setTimeout(() => {
224
- notificationBox.hide();
225
- if (previouslyFocused && previouslyFocused !== notificationBox) {
226
- previouslyFocused.focus();
227
- }
228
- else {
229
- fileList.focus();
230
- }
231
- updateBorders();
232
- screen.render();
233
- }, 3000);
234
- };
235
- // Branch display in bottom right
236
- const branchBox = blessed.box({
237
- bottom: 0,
238
- right: 0,
239
- width: 'shrink',
240
- height: 1,
241
- align: 'left',
242
- content: chalk_1.default.cyan('Branch: '),
243
- style: {
244
- fg: 'white',
245
- },
246
- });
247
- // Footer box to show shortcuts - aligned with the panes
248
- const footer = blessed.box({
249
- bottom: 0,
250
- left: 0,
251
- width: '100%',
252
- height: 1,
253
- content: chalk_1.default.green('←→') + ' Switch |' + chalk_1.default.green(' ⏎') + ' Open | ' + chalk_1.default.green('S') + ' Search | ' + chalk_1.default.green('R') + ' Revert | ' + chalk_1.default.green('Q') + ' Quit ',
254
- });
255
- screen.append(fileList);
256
- screen.append(diffView);
257
- screen.append(searchBox);
258
- screen.append(notificationBox);
259
- screen.append(confirmDialog);
260
- screen.append(footer);
261
- screen.append(branchBox);
262
- const updateBorders = () => {
263
- fileList.style.border.fg = screen.focused === fileList ? 'yellow' : 'white';
264
- diffView.style.border.fg = screen.focused === diffView ? 'yellow' : 'white';
265
- screen.render();
266
- };
267
- let currentFiles = [];
268
- let lastSelectedPath = null;
269
- let diffUpdateTimeout = null;
270
- let currentSearchTerm = '';
271
- let currentBranch = '';
272
- let lastFilePaths = [];
273
- let isUpdatingList = false;
274
- const scheduleDiffUpdate = () => {
275
- if (diffUpdateTimeout)
276
- clearTimeout(diffUpdateTimeout);
277
- diffUpdateTimeout = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
278
- yield updateDiff();
279
- }), 150); // 150ms debounce
280
- };
281
- const handleScroll = (direction) => {
282
- const focused = screen.focused;
283
- if (focused === fileList) {
284
- if (direction === 'up') {
285
- focused.up(1);
286
- }
287
- else {
288
- focused.down(1);
289
- }
290
- scheduleDiffUpdate();
291
- screen.render();
292
- }
293
- else if (focused === diffView) {
294
- const scrollAmount = direction === 'up' ? -2 : 2;
295
- diffView.scroll(scrollAmount);
296
- screen.render();
297
- }
298
- };
299
- // Remove default wheel listeners to enforce "scroll focused only" behavior
300
- fileList.removeAllListeners('wheeldown');
301
- fileList.removeAllListeners('wheelup');
302
- diffView.removeAllListeners('wheeldown');
303
- diffView.removeAllListeners('wheelup');
304
- // Attach custom scroll handlers to widgets (captures wheel even if hovering specific widget)
305
- // We use widget-level listeners now that screen.mouse is true.
306
- // We attach to both to ensure the event is caught regardless of where the mouse is.
307
- // We use widget-level listeners now that screen.mouse is true.
308
- // We attach to both to ensure the event is caught regardless of where the mouse is.
309
- // The handleScroll function will then decide WHAT to scroll based on focus.
310
- diffView.on('wheeldown', () => handleScroll('down'));
311
- diffView.on('wheelup', () => handleScroll('up'));
312
- // Also listen on screen for events that might miss the widgets (margins, borders)
313
- screen.on('wheeldown', () => handleScroll('down'));
314
- screen.on('wheelup', () => handleScroll('up'));
315
- const openInEditor = (filePath) => {
316
- try {
317
- if (process.platform === 'win32') {
318
- // On Windows, use 'start' to open with default program
319
- (0, child_process_1.spawn)('cmd', ['/c', 'start', '', filePath], { stdio: 'ignore', detached: true }).unref();
320
- }
321
- else {
322
- // On Unix-like systems, try EDITOR, fallback to xdg-open
323
- const editor = process.env.EDITOR || process.env.VISUAL || 'xdg-open';
324
- (0, child_process_1.spawn)(editor, [filePath], { stdio: 'ignore', detached: true }).unref();
325
- }
326
- }
327
- catch (error) {
328
- console.error(`Failed to open ${filePath}: ${error}`);
329
- }
330
- };
331
- const updateBranch = () => __awaiter(this, void 0, void 0, function* () {
332
- const branch = yield gitHandler.getBranch();
333
- if (branch !== currentBranch) {
334
- currentBranch = branch;
335
- branchBox.setContent(chalk_1.default.cyan('Branch: ') + chalk_1.default.yellow(branch));
336
- screen.render();
337
- }
338
- });
339
- const updateDiff = () => __awaiter(this, void 0, void 0, function* () {
340
- const selectedIndex = fileList.selected;
341
- const selectedFile = currentFiles[selectedIndex];
342
- if (!selectedFile) {
343
- // No valid file selected, clear diff view
344
- diffView.setContent('Select a file to view diff.');
345
- diffView.setLabel(' Diff () ');
346
- lastSelectedPath = null;
347
- screen.render();
348
- return;
349
- }
350
- if (selectedFile) {
351
- let content = '';
352
- let label = ` Diff (${selectedFile.path}) `;
353
- if (selectedFile.status !== 'unchanged' && selectedFile.status !== 'deleted') {
354
- const diff = yield gitHandler.getDiff(selectedFile.path);
355
- content = (0, diff_formatter_1.formatDiffWithDiff2Html)(diff, currentSearchTerm);
356
- }
357
- if (!content && selectedFile.status !== 'deleted') {
358
- content = yield gitHandler.getFileContent(selectedFile.path);
359
- // Highlight search term in full content
360
- if (currentSearchTerm) {
361
- const regex = new RegExp(`(${currentSearchTerm.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'gi');
362
- content = content.replace(regex, `\x1b[43m\x1b[30m$1\x1b[0m`);
363
- }
364
- label = ` File (${selectedFile.path}) `;
365
- }
366
- else if (!content && selectedFile.status === 'deleted') {
367
- content = chalk_1.default.red('File was deleted.');
368
- label = ` Diff (${selectedFile.path}) `;
369
- }
370
- const currentContent = diffView.content;
371
- const currentLabel = diffView.label;
372
- // Only update if content or label changed to reduce flickering
373
- if (content !== currentContent || label !== currentLabel) {
374
- const savedScroll = diffView.scrollTop;
375
- const isNewFile = selectedFile.path !== lastSelectedPath;
376
- diffView.setContent(content);
377
- diffView.setLabel(label);
378
- if (isNewFile) {
379
- diffView.scrollTo(0);
380
- }
381
- else {
382
- diffView.scrollTop = savedScroll;
383
- }
384
- }
385
- lastSelectedPath = selectedFile.path;
386
- }
387
- else {
388
- const newContent = 'Select a file to view diff.';
389
- const newLabel = ' Diff () ';
390
- if (diffView.content !== newContent || diffView.label !== newLabel) {
391
- diffView.setContent(newContent);
392
- diffView.setLabel(newLabel);
393
- diffView.scrollTo(0);
394
- }
395
- lastSelectedPath = null;
396
- }
397
- screen.render();
398
- });
399
- const updateFileList = () => __awaiter(this, void 0, void 0, function* () {
400
- var _a;
401
- if (isUpdatingList)
402
- return;
403
- isUpdatingList = true;
404
- const selectedPath = (_a = currentFiles[fileList.selected]) === null || _a === void 0 ? void 0 : _a.path;
405
- let files;
406
- if (currentSearchTerm) {
407
- files = yield gitHandler.searchFiles(currentSearchTerm);
408
- }
409
- else {
410
- files = yield gitHandler.getStatus();
411
- }
412
- currentFiles = files;
413
- const items = files.map((f) => {
414
- let color = '{white-fg}';
415
- if (f.status === 'added')
416
- color = '{green-fg}';
417
- else if (f.status === 'deleted')
418
- color = '{red-fg}';
419
- else if (f.status === 'modified')
420
- color = '{blue-fg}';
421
- else if (f.status === 'unstaged')
422
- color = '{green-fg}';
423
- else if (f.status === 'unchanged')
424
- color = '{grey-fg}';
425
- let statusSymbol = '';
426
- if (f.status === 'added')
427
- statusSymbol = 'A ';
428
- else if (f.status === 'deleted')
429
- statusSymbol = 'D ';
430
- else if (f.status === 'modified')
431
- statusSymbol = 'M ';
432
- else if (f.status === 'unstaged')
433
- statusSymbol = '+ ';
434
- else if (f.status === 'unchanged')
435
- statusSymbol = ' ';
436
- return `${color}${statusSymbol}${f.path}{/}`;
437
- });
438
- const labelTitle = currentSearchTerm ? `Files (${files.length}) - Searching: "${currentSearchTerm}"` : `Files (${files.length})`;
439
- const newFilePaths = files.map(f => f.path);
440
- const selectedFileStillExists = selectedPath ? newFilePaths.includes(selectedPath) : false;
441
- const listChanged = lastFilePaths.length !== newFilePaths.length ||
442
- lastFilePaths.some(path => !newFilePaths.includes(path)) ||
443
- newFilePaths.some(path => !lastFilePaths.includes(path));
444
- if (items.length > 0) {
445
- const newSelectedIndex = selectedPath ? currentFiles.findIndex(f => f.path === selectedPath) : -1;
446
- const oldFileList = fileList;
447
- const newFileList = createFileList();
448
- newFileList.setLabel(labelTitle);
449
- newFileList.setItems(items);
450
- newFileList.select(newSelectedIndex >= 0 ? newSelectedIndex : 0);
451
- if (!selectedFileStillExists || listChanged) {
452
- lastSelectedPath = null;
453
- }
454
- lastFilePaths = newFilePaths;
455
- if (diffUpdateTimeout) {
456
- clearTimeout(diffUpdateTimeout);
457
- diffUpdateTimeout = null;
458
- }
459
- yield updateDiff();
460
- oldFileList.destroy();
461
- screen.remove(oldFileList);
462
- fileList = newFileList;
463
- screen.append(fileList);
464
- }
465
- else {
466
- const oldFileList = fileList;
467
- const newFileList = createFileList();
468
- newFileList.setLabel(labelTitle);
469
- newFileList.setItems([]);
470
- diffView.setContent(currentSearchTerm ? `No files match "${currentSearchTerm}".` : 'No changes detected.');
471
- diffView.setLabel(' Diff () ');
472
- lastSelectedPath = null;
473
- lastFilePaths = [];
474
- oldFileList.destroy();
475
- screen.remove(oldFileList);
476
- fileList = newFileList;
477
- screen.append(fileList);
478
- }
479
- screen.render();
480
- isUpdatingList = false;
481
- });
482
- screen.key(['s'], () => {
483
- searchBox.show();
484
- searchBox.setFront();
485
- searchInput.setValue(currentSearchTerm);
486
- searchInput.focus();
487
- screen.render();
488
- });
489
- searchInput.on('submit', (value) => __awaiter(this, void 0, void 0, function* () {
490
- currentSearchTerm = (value || '').trim();
491
- searchBox.hide();
492
- fileList.focus();
493
- // Force immediate update
494
- yield updateFileList();
495
- }));
496
- searchInput.on('cancel', () => {
497
- searchBox.hide();
498
- fileList.focus();
499
- screen.render();
500
- });
501
- screen.key(['tab'], () => {
502
- if (screen.focused === fileList) {
503
- diffView.focus();
504
- }
505
- else {
506
- fileList.focus();
507
- }
508
- updateBorders();
509
- });
510
- screen.key(['left'], () => {
511
- if (screen.focused !== fileList) {
512
- fileList.focus();
513
- updateBorders();
514
- }
515
- });
516
- screen.key(['right'], () => {
517
- if (screen.focused !== diffView) {
518
- diffView.focus();
519
- updateBorders();
520
- }
521
- });
522
- screen.key(['enter'], () => {
523
- const selectedIndex = fileList.selected;
524
- const selectedFile = currentFiles[selectedIndex];
525
- if (selectedFile) {
526
- openInEditor(selectedFile.path);
527
- }
528
- });
529
- // Handle revert key press
530
- screen.key(['r'], () => __awaiter(this, void 0, void 0, function* () {
531
- const selectedIndex = fileList.selected;
532
- const selectedFile = currentFiles[selectedIndex];
533
- if (selectedFile) {
534
- confirmDialog.show();
535
- confirmDialog.setFront();
536
- confirmDialog.focus();
537
- screen.render();
538
- }
539
- }));
540
- // Handle dialog keys
541
- confirmDialog.key(['space'], () => __awaiter(this, void 0, void 0, function* () {
542
- const selectedIndex = fileList.selected;
543
- const selectedFile = currentFiles[selectedIndex];
544
- if (selectedFile) {
545
- try {
546
- yield gitHandler.revertFile(selectedFile.path);
547
- showNotification(`File ${selectedFile.path} reverted successfully.`, 'green');
548
- yield updateFileList();
549
- }
550
- catch (error) {
551
- const errorMessage = error instanceof Error ? error.message : String(error);
552
- showNotification(`Error reverting file: ${errorMessage}`, 'red');
553
- }
554
- }
555
- confirmDialog.hide();
556
- fileList.focus();
557
- screen.render();
558
- }));
559
- confirmDialog.key(['escape'], () => {
560
- confirmDialog.hide();
561
- fileList.focus();
562
- screen.render();
563
- });
564
- yield updateBranch();
565
- yield updateFileList();
566
- fileList.focus();
567
- updateBorders();
568
- // Set up periodic updates to detect new git changes
569
- const updateInterval = setInterval(() => __awaiter(this, void 0, void 0, function* () {
570
- const currentlyFocused = screen.focused;
571
- const wasFileListFocused = currentlyFocused === fileList;
572
- yield updateBranch();
573
- yield updateFileList();
574
- // Restore focus to the same pane it was on before the update
575
- if (wasFileListFocused) {
576
- fileList.focus();
577
- }
578
- else if (currentlyFocused === diffView) {
579
- diffView.focus();
580
- }
581
- updateBorders();
582
- }), 2000); // Check for changes every 2 seconds
583
- // Clean up interval on exit
584
- screen.key(['escape', 'q', 'C-c'], () => {
585
- // Don't handle ESC if confirmation dialog has focus or is visible
586
- if (screen.focused === confirmDialog || !confirmDialog.hidden) {
587
- return false;
588
- }
589
- if (!searchBox.hidden) {
590
- searchBox.hide();
591
- screen.render();
592
- fileList.focus();
593
- return false;
594
- }
595
- else {
596
- // Clear interval only when actually exiting
597
- clearInterval(updateInterval);
598
- screen.destroy();
599
- process.exit(0);
600
- }
601
- });
602
- });
603
- }
604
- main().catch(err => {
605
- console.error(err);
606
- process.exit(1);
607
- });
608
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export declare function formatDiffWithDiff2Html(diffString: string, searchTerm?: string): string;