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