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/LICENSE +21 -0
- package/README.md +115 -47
- package/bin/diffwatch.js +30 -0
- package/dist/diffwatch.exe +0 -0
- package/package.json +67 -29
- package/AGENTS.md +0 -201
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -605
- package/dist/index.js.map +0 -1
- package/dist/utils/diff-formatter.d.ts +0 -1
- package/dist/utils/diff-formatter.js +0 -108
- package/dist/utils/diff-formatter.js.map +0 -1
- package/dist/utils/git.d.ts +0 -16
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js +0 -196
- package/dist/utils/git.js.map +0 -1
- package/jest.config.js +0 -11
- package/screenshot.jpg +0 -0
- package/src/index.ts +0 -640
- package/src/utils/diff-formatter.ts +0 -81
- package/src/utils/git.ts +0 -185
- package/tests/git.test.d.ts +0 -2
- package/tests/git.test.d.ts.map +0 -1
- package/tests/git.test.js.map +0 -1
- package/tests/git.test.ts +0 -148
- package/tsconfig.json +0 -16
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.formatDiffWithDiff2Html = formatDiffWithDiff2Html;
|
|
37
|
-
const cheerio = __importStar(require("cheerio"));
|
|
38
|
-
const Diff2Html = require('diff2html');
|
|
39
|
-
function formatDiffWithDiff2Html(diffString, searchTerm) {
|
|
40
|
-
if (!diffString || diffString.trim() === '') {
|
|
41
|
-
return '';
|
|
42
|
-
}
|
|
43
|
-
try {
|
|
44
|
-
const html = Diff2Html.html(diffString, {
|
|
45
|
-
drawFileList: false,
|
|
46
|
-
matching: 'lines',
|
|
47
|
-
outputFormat: 'line-by-line',
|
|
48
|
-
colorScheme: 'dark',
|
|
49
|
-
});
|
|
50
|
-
const $ = cheerio.load(html);
|
|
51
|
-
let blessedText = '';
|
|
52
|
-
$('.d2h-diff-tbody tr').each((_, row) => {
|
|
53
|
-
const $row = $(row);
|
|
54
|
-
if ($row.find('.d2h-code-line').length > 0) {
|
|
55
|
-
const $lineNumberCell = $row.find('td.d2h-code-linenumber');
|
|
56
|
-
const isAdded = $row.find('td.d2h-ins').length > 0;
|
|
57
|
-
const isDeleted = $row.find('td.d2h-del').length > 0;
|
|
58
|
-
const $lineContent = $row.find('.d2h-code-line-ctn');
|
|
59
|
-
const $linePrefix = $row.find('.d2h-code-line-prefix');
|
|
60
|
-
const $lineWrapper = $row.find('.d2h-code-line');
|
|
61
|
-
let prefix = '';
|
|
62
|
-
let content = '';
|
|
63
|
-
let lineNumber = '';
|
|
64
|
-
if ($lineNumberCell.length > 0) {
|
|
65
|
-
lineNumber = $lineNumberCell.text().trim();
|
|
66
|
-
}
|
|
67
|
-
if ($linePrefix.length > 0) {
|
|
68
|
-
prefix = $linePrefix.text();
|
|
69
|
-
}
|
|
70
|
-
if ($lineContent.length > 0) {
|
|
71
|
-
content = $lineContent.text();
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
content = $lineWrapper.text().trim();
|
|
75
|
-
}
|
|
76
|
-
let fullLine = prefix + content;
|
|
77
|
-
// Add line number with proper formatting
|
|
78
|
-
const formattedLineNumber = lineNumber ? `${lineNumber}: ` : ' ';
|
|
79
|
-
// Highlight search term if present
|
|
80
|
-
if (searchTerm && fullLine.toLowerCase().includes(searchTerm.toLowerCase())) {
|
|
81
|
-
const regex = new RegExp(`(${searchTerm.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'gi');
|
|
82
|
-
// We need to know the base color to restore it.
|
|
83
|
-
// Added: 32, Deleted: 31, Normal: 37
|
|
84
|
-
const baseColor = isAdded ? '32' : (isDeleted ? '31' : '37');
|
|
85
|
-
fullLine = fullLine.replace(regex, `\x1b[43m\x1b[30m$1\x1b[0m\x1b[${baseColor}m`);
|
|
86
|
-
}
|
|
87
|
-
if (isAdded) {
|
|
88
|
-
blessedText += `\x1b[90m${formattedLineNumber}\x1b[0m\x1b[32m${fullLine}\x1b[0m\n`;
|
|
89
|
-
}
|
|
90
|
-
else if (isDeleted) {
|
|
91
|
-
blessedText += `\x1b[90m${formattedLineNumber}\x1b[0m\x1b[31m${fullLine}\x1b[0m\n`;
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
blessedText += `\x1b[90m${formattedLineNumber}\x1b[0m\x1b[37m${fullLine}\x1b[0m\n`;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
if ($row.find('.d2h-info').length > 0) {
|
|
98
|
-
const hunkText = $row.find('.d2h-info').text().trim();
|
|
99
|
-
blessedText += `\x1b[36m${hunkText}\x1b[0m\n`;
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
return blessedText.trim();
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
return `Error formatting diff: ${error}`;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
//# sourceMappingURL=diff-formatter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diff-formatter.js","sourceRoot":"","sources":["../../src/utils/diff-formatter.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/git.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export interface FileStatus {
|
|
2
|
-
path: string;
|
|
3
|
-
status: 'modified' | 'added' | 'deleted' | 'unstaged' | 'unknown' | 'unchanged';
|
|
4
|
-
mtime?: Date;
|
|
5
|
-
}
|
|
6
|
-
export declare class GitHandler {
|
|
7
|
-
private git;
|
|
8
|
-
constructor(workingDir?: string);
|
|
9
|
-
isRepo(): Promise<boolean>;
|
|
10
|
-
getBranch(): Promise<string>;
|
|
11
|
-
getStatus(): Promise<FileStatus[]>;
|
|
12
|
-
searchFiles(term: string): Promise<FileStatus[]>;
|
|
13
|
-
getDiff(filePath: string): Promise<string>;
|
|
14
|
-
getFileContent(filePath: string): Promise<string>;
|
|
15
|
-
revertFile(filePath: string): Promise<void>;
|
|
16
|
-
}
|
package/dist/utils/git.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CACnE;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAY;gBAEX,UAAU,GAAE,MAAsB;IAIxC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAQ1B,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA8BlC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAiBjD"}
|
package/dist/utils/git.js
DELETED
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.GitHandler = void 0;
|
|
16
|
-
const simple_git_1 = require("simple-git");
|
|
17
|
-
const promises_1 = __importDefault(require("fs/promises"));
|
|
18
|
-
class GitHandler {
|
|
19
|
-
constructor(workingDir = process.cwd()) {
|
|
20
|
-
this.git = (0, simple_git_1.simpleGit)(workingDir);
|
|
21
|
-
}
|
|
22
|
-
isRepo() {
|
|
23
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
-
try {
|
|
25
|
-
return yield this.git.checkIsRepo();
|
|
26
|
-
}
|
|
27
|
-
catch (_a) {
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
getBranch() {
|
|
33
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
-
try {
|
|
35
|
-
const status = yield this.git.status();
|
|
36
|
-
return status.current || 'HEAD';
|
|
37
|
-
}
|
|
38
|
-
catch (_a) {
|
|
39
|
-
return 'HEAD';
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
getStatus() {
|
|
44
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
-
const status = yield this.git.status();
|
|
46
|
-
const uniqueFiles = new Map();
|
|
47
|
-
// Process each status category and add to map (which prevents duplicates)
|
|
48
|
-
status.modified.forEach(path => {
|
|
49
|
-
uniqueFiles.set(path, { path, status: 'modified' });
|
|
50
|
-
});
|
|
51
|
-
status.deleted.forEach(path => {
|
|
52
|
-
// Only add if not already in the map
|
|
53
|
-
if (!uniqueFiles.has(path)) {
|
|
54
|
-
uniqueFiles.set(path, { path, status: 'deleted' });
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
status.created.forEach(path => {
|
|
58
|
-
// Only add if not already in the map
|
|
59
|
-
if (!uniqueFiles.has(path)) {
|
|
60
|
-
uniqueFiles.set(path, { path, status: 'added' });
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
status.not_added.forEach(path => {
|
|
64
|
-
// Only add if not already in the map
|
|
65
|
-
if (!uniqueFiles.has(path)) {
|
|
66
|
-
uniqueFiles.set(path, { path, status: 'unstaged' });
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
status.renamed.forEach(r => {
|
|
70
|
-
// Only add if not already in the map
|
|
71
|
-
if (!uniqueFiles.has(r.to)) {
|
|
72
|
-
uniqueFiles.set(r.to, { path: r.to, status: 'added' });
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
// Add last modified time for sorting
|
|
76
|
-
const fileArray = Array.from(uniqueFiles.values());
|
|
77
|
-
yield Promise.all(fileArray.map((f) => __awaiter(this, void 0, void 0, function* () {
|
|
78
|
-
try {
|
|
79
|
-
const stat = yield promises_1.default.stat(f.path);
|
|
80
|
-
f.mtime = stat.mtime;
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
// For deleted or inaccessible files, use epoch time
|
|
84
|
-
f.mtime = new Date(0);
|
|
85
|
-
}
|
|
86
|
-
})));
|
|
87
|
-
// Sort by last modified descending, then by filename
|
|
88
|
-
return fileArray.sort((a, b) => {
|
|
89
|
-
const mtimeA = a.mtime || new Date(0);
|
|
90
|
-
const mtimeB = b.mtime || new Date(0);
|
|
91
|
-
const timeDiff = mtimeB.getTime() - mtimeA.getTime();
|
|
92
|
-
if (timeDiff !== 0) {
|
|
93
|
-
return timeDiff;
|
|
94
|
-
}
|
|
95
|
-
return a.path.localeCompare(b.path);
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
searchFiles(term) {
|
|
100
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
101
|
-
if (!term || !term.trim())
|
|
102
|
-
return [];
|
|
103
|
-
try {
|
|
104
|
-
// Use git grep to find files containing the term
|
|
105
|
-
// -i: ignore case
|
|
106
|
-
// -l: list filenames only
|
|
107
|
-
// -F: interpret pattern as a fixed string
|
|
108
|
-
// --untracked: include untracked files
|
|
109
|
-
const result = yield this.git.raw(['grep', '-i', '-l', '-F', '--untracked', term.trim()]);
|
|
110
|
-
const matchedPaths = [...new Set(result.split('\n').map(p => p.trim()).filter(p => p !== ''))];
|
|
111
|
-
if (matchedPaths.length === 0)
|
|
112
|
-
return [];
|
|
113
|
-
// Get current status to identify which matched files are changed
|
|
114
|
-
const changedFiles = yield this.getStatus();
|
|
115
|
-
const changedMap = new Map();
|
|
116
|
-
changedFiles.forEach(f => changedMap.set(f.path, f));
|
|
117
|
-
const finalResults = [];
|
|
118
|
-
for (const path of matchedPaths) {
|
|
119
|
-
if (changedMap.has(path)) {
|
|
120
|
-
finalResults.push(changedMap.get(path));
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
// It's an unchanged file
|
|
124
|
-
let mtime = new Date(0);
|
|
125
|
-
try {
|
|
126
|
-
const stat = yield promises_1.default.stat(path);
|
|
127
|
-
mtime = stat.mtime;
|
|
128
|
-
}
|
|
129
|
-
catch (_a) { }
|
|
130
|
-
finalResults.push({
|
|
131
|
-
path,
|
|
132
|
-
status: 'unchanged',
|
|
133
|
-
mtime
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
// Sort results by mtime descending
|
|
138
|
-
return finalResults.sort((a, b) => {
|
|
139
|
-
const mtimeA = a.mtime || new Date(0);
|
|
140
|
-
const mtimeB = b.mtime || new Date(0);
|
|
141
|
-
const timeDiff = mtimeB.getTime() - mtimeA.getTime();
|
|
142
|
-
if (timeDiff !== 0)
|
|
143
|
-
return timeDiff;
|
|
144
|
-
return a.path.localeCompare(b.path);
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
catch (error) {
|
|
148
|
-
// git grep returns exit code 1 if no matches are found, which simple-git might throw as an error
|
|
149
|
-
if (error.message && (error.message.includes('exit code 1') || error.exitCode === 1)) {
|
|
150
|
-
return [];
|
|
151
|
-
}
|
|
152
|
-
throw error;
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
getDiff(filePath) {
|
|
157
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
158
|
-
try {
|
|
159
|
-
const isUntracked = (yield this.git.status()).not_added.includes(filePath);
|
|
160
|
-
if (isUntracked) {
|
|
161
|
-
return yield this.git.raw(['diff', '--no-index', '--', '/dev/null', filePath]).catch(() => {
|
|
162
|
-
return `New file: ${filePath}`;
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
const diff = yield this.git.diff(['HEAD', '--', filePath]);
|
|
166
|
-
return diff || '';
|
|
167
|
-
}
|
|
168
|
-
catch (error) {
|
|
169
|
-
return `Error getting diff: ${error}`;
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
getFileContent(filePath) {
|
|
174
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
175
|
-
try {
|
|
176
|
-
return yield promises_1.default.readFile(filePath, 'utf8');
|
|
177
|
-
}
|
|
178
|
-
catch (error) {
|
|
179
|
-
return `Error reading file: ${error}`;
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
revertFile(filePath) {
|
|
184
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
185
|
-
try {
|
|
186
|
-
// Restore the specific file to HEAD version
|
|
187
|
-
yield this.git.raw(['restore', filePath]);
|
|
188
|
-
}
|
|
189
|
-
catch (error) {
|
|
190
|
-
throw new Error(`Could not revert file: ${error}`);
|
|
191
|
-
}
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
exports.GitHandler = GitHandler;
|
|
196
|
-
//# sourceMappingURL=git.js.map
|
package/dist/utils/git.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"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"}
|
package/jest.config.js
DELETED
package/screenshot.jpg
DELETED
|
Binary file
|