orcommit 1.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 +318 -0
- package/dist/cli.d.ts +70 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +391 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/api.d.ts +48 -0
- package/dist/modules/api.d.ts.map +1 -0
- package/dist/modules/api.js +286 -0
- package/dist/modules/api.js.map +1 -0
- package/dist/modules/cache.d.ts +74 -0
- package/dist/modules/cache.d.ts.map +1 -0
- package/dist/modules/cache.js +284 -0
- package/dist/modules/cache.js.map +1 -0
- package/dist/modules/config.d.ts +53 -0
- package/dist/modules/config.d.ts.map +1 -0
- package/dist/modules/config.js +180 -0
- package/dist/modules/config.js.map +1 -0
- package/dist/modules/core.d.ts +54 -0
- package/dist/modules/core.d.ts.map +1 -0
- package/dist/modules/core.js +474 -0
- package/dist/modules/core.js.map +1 -0
- package/dist/modules/diff-filter.d.ts +71 -0
- package/dist/modules/diff-filter.d.ts.map +1 -0
- package/dist/modules/diff-filter.js +332 -0
- package/dist/modules/diff-filter.js.map +1 -0
- package/dist/modules/git.d.ts +61 -0
- package/dist/modules/git.d.ts.map +1 -0
- package/dist/modules/git.js +362 -0
- package/dist/modules/git.js.map +1 -0
- package/dist/modules/logger.d.ts +67 -0
- package/dist/modules/logger.d.ts.map +1 -0
- package/dist/modules/logger.js +212 -0
- package/dist/modules/logger.js.map +1 -0
- package/dist/modules/tokenizer.d.ts +43 -0
- package/dist/modules/tokenizer.d.ts.map +1 -0
- package/dist/modules/tokenizer.js +200 -0
- package/dist/modules/tokenizer.js.map +1 -0
- package/dist/types/index.d.ts +141 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +70 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +64 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +154 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
import { GitError, CHUNK_LIMITS } from '../types/index.js';
|
|
4
|
+
import { logger } from './logger.js';
|
|
5
|
+
const execAsync = promisify(exec);
|
|
6
|
+
export class GitManager {
|
|
7
|
+
/**
|
|
8
|
+
* Check if current directory is a git repository
|
|
9
|
+
*/
|
|
10
|
+
async isGitRepository() {
|
|
11
|
+
try {
|
|
12
|
+
await execAsync('git rev-parse --git-dir');
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get staged changes as a structured diff
|
|
21
|
+
*/
|
|
22
|
+
async getStagedDiff(options) {
|
|
23
|
+
const mergedOptions = this.mergeChunkOptions(options);
|
|
24
|
+
try {
|
|
25
|
+
// Check if there are staged changes
|
|
26
|
+
const { stdout: statusOutput } = await execAsync('git diff --cached --name-status');
|
|
27
|
+
if (!statusOutput.trim()) {
|
|
28
|
+
return { files: [], totalLines: 0, totalSize: 0 };
|
|
29
|
+
}
|
|
30
|
+
// Get the raw diff with optimized flags
|
|
31
|
+
const { stdout: diffOutput } = await execAsync('git diff --cached --ignore-space-change --ignore-blank-lines --no-color --no-prefix');
|
|
32
|
+
return this.parseDiff(diffOutput, mergedOptions);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
throw new GitError(`Failed to get staged diff: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get list of staged files with their status
|
|
40
|
+
*/
|
|
41
|
+
async getStagedFiles() {
|
|
42
|
+
try {
|
|
43
|
+
const { stdout } = await execAsync('git diff --cached --name-status');
|
|
44
|
+
return stdout
|
|
45
|
+
.trim()
|
|
46
|
+
.split('\n')
|
|
47
|
+
.filter(line => line.trim().length > 0)
|
|
48
|
+
.map(line => {
|
|
49
|
+
const parts = line.split('\t');
|
|
50
|
+
const status = this.parseFileStatus(parts[0] || '');
|
|
51
|
+
const path = parts[1] || '';
|
|
52
|
+
return { path, status };
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
throw new GitError(`Failed to get staged files: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create a commit with the given message
|
|
61
|
+
*/
|
|
62
|
+
async createCommit(message) {
|
|
63
|
+
try {
|
|
64
|
+
const { stdout } = await execAsync(`git commit -m "${message.replace(/"/g, '\\"')}"`);
|
|
65
|
+
logger.debug('Commit created successfully', { output: stdout });
|
|
66
|
+
return stdout;
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
throw new GitError(`Failed to create commit: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if there are any uncommitted changes
|
|
74
|
+
*/
|
|
75
|
+
async hasUncommittedChanges() {
|
|
76
|
+
try {
|
|
77
|
+
const { stdout } = await execAsync('git status --porcelain');
|
|
78
|
+
return stdout.trim().length > 0;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
throw new GitError(`Failed to check git status: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get the current branch name
|
|
86
|
+
*/
|
|
87
|
+
async getCurrentBranch() {
|
|
88
|
+
try {
|
|
89
|
+
const { stdout } = await execAsync('git branch --show-current');
|
|
90
|
+
return stdout.trim();
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
throw new GitError(`Failed to get current branch: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get repository root directory
|
|
98
|
+
*/
|
|
99
|
+
async getRepositoryRoot() {
|
|
100
|
+
try {
|
|
101
|
+
const { stdout } = await execAsync('git rev-parse --show-toplevel');
|
|
102
|
+
return stdout.trim();
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
throw new GitError(`Failed to get repository root: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Private methods
|
|
109
|
+
parseDiff(diffOutput, options) {
|
|
110
|
+
const files = [];
|
|
111
|
+
let totalLines = 0;
|
|
112
|
+
let totalSize = 0;
|
|
113
|
+
// Split diff into file sections
|
|
114
|
+
const fileSections = this.splitDiffIntoFiles(diffOutput);
|
|
115
|
+
for (const section of fileSections) {
|
|
116
|
+
const file = this.parseFileSection(section, options);
|
|
117
|
+
if (file) {
|
|
118
|
+
files.push(file);
|
|
119
|
+
totalLines += file.chunks.reduce((sum, chunk) => sum + chunk.lines.length, 0);
|
|
120
|
+
totalSize += section.length;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return { files, totalLines, totalSize };
|
|
124
|
+
}
|
|
125
|
+
splitDiffIntoFiles(diffOutput) {
|
|
126
|
+
const sections = [];
|
|
127
|
+
const lines = diffOutput.split('\n');
|
|
128
|
+
let currentSection = [];
|
|
129
|
+
for (const line of lines) {
|
|
130
|
+
if (line.startsWith('diff --git')) {
|
|
131
|
+
if (currentSection.length > 0) {
|
|
132
|
+
sections.push(currentSection.join('\n'));
|
|
133
|
+
currentSection = [];
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
currentSection.push(line);
|
|
137
|
+
}
|
|
138
|
+
if (currentSection.length > 0) {
|
|
139
|
+
sections.push(currentSection.join('\n'));
|
|
140
|
+
}
|
|
141
|
+
return sections;
|
|
142
|
+
}
|
|
143
|
+
parseFileSection(section, options) {
|
|
144
|
+
const lines = section.split('\n');
|
|
145
|
+
// Extract file path and status
|
|
146
|
+
const diffLine = lines.find(line => line.startsWith('diff --git'));
|
|
147
|
+
if (!diffLine)
|
|
148
|
+
return null;
|
|
149
|
+
const path = this.extractFilePath(diffLine);
|
|
150
|
+
const status = this.determineFileStatus(lines);
|
|
151
|
+
const isBinary = lines.some(line => line.includes('Binary files'));
|
|
152
|
+
if (isBinary) {
|
|
153
|
+
return {
|
|
154
|
+
path,
|
|
155
|
+
status,
|
|
156
|
+
chunks: [],
|
|
157
|
+
isBinary: true,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
const chunks = this.parseChunks(lines, options);
|
|
161
|
+
return {
|
|
162
|
+
path,
|
|
163
|
+
status,
|
|
164
|
+
chunks,
|
|
165
|
+
isBinary: false,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
extractFilePath(diffLine) {
|
|
169
|
+
// Extract path from "diff --git a/path b/path" format
|
|
170
|
+
const match = diffLine.match(/diff --git (?:a\/)?(.+) (?:b\/)?(.+)/);
|
|
171
|
+
return match ? (match[2] || match[1] || '') : '';
|
|
172
|
+
}
|
|
173
|
+
determineFileStatus(lines) {
|
|
174
|
+
const newFileMode = lines.some(line => line.startsWith('new file mode'));
|
|
175
|
+
const deletedFileMode = lines.some(line => line.startsWith('deleted file mode'));
|
|
176
|
+
const renamedFrom = lines.some(line => line.startsWith('rename from'));
|
|
177
|
+
const copiedFrom = lines.some(line => line.startsWith('copy from'));
|
|
178
|
+
if (newFileMode)
|
|
179
|
+
return 'added';
|
|
180
|
+
if (deletedFileMode)
|
|
181
|
+
return 'deleted';
|
|
182
|
+
if (renamedFrom)
|
|
183
|
+
return 'renamed';
|
|
184
|
+
if (copiedFrom)
|
|
185
|
+
return 'copied';
|
|
186
|
+
return 'modified';
|
|
187
|
+
}
|
|
188
|
+
parseChunks(lines, options) {
|
|
189
|
+
const chunks = [];
|
|
190
|
+
let currentChunk = null;
|
|
191
|
+
let chunkLines = [];
|
|
192
|
+
for (const line of lines) {
|
|
193
|
+
if (line.startsWith('@@')) {
|
|
194
|
+
// Save previous chunk if exists
|
|
195
|
+
if (currentChunk && chunkLines.length > 0) {
|
|
196
|
+
chunks.push({
|
|
197
|
+
...currentChunk,
|
|
198
|
+
lines: chunkLines,
|
|
199
|
+
context: this.generateChunkContext(chunkLines),
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
// Start new chunk
|
|
203
|
+
const chunkHeader = this.parseChunkHeader(line);
|
|
204
|
+
if (chunkHeader) {
|
|
205
|
+
currentChunk = chunkHeader;
|
|
206
|
+
chunkLines = [];
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
else if (currentChunk && (line.startsWith(' ') || line.startsWith('+') || line.startsWith('-'))) {
|
|
210
|
+
chunkLines.push(this.parseGitLine(line));
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Add final chunk
|
|
214
|
+
if (currentChunk && chunkLines.length > 0) {
|
|
215
|
+
chunks.push({
|
|
216
|
+
...currentChunk,
|
|
217
|
+
lines: chunkLines,
|
|
218
|
+
context: this.generateChunkContext(chunkLines),
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
// Split large chunks if necessary
|
|
222
|
+
return this.splitLargeChunks(chunks, options);
|
|
223
|
+
}
|
|
224
|
+
parseChunkHeader(headerLine) {
|
|
225
|
+
// Parse "@@ -start,count +start,count @@" format
|
|
226
|
+
const match = headerLine.match(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/);
|
|
227
|
+
if (!match)
|
|
228
|
+
return null;
|
|
229
|
+
return {
|
|
230
|
+
header: headerLine,
|
|
231
|
+
oldStart: parseInt(match[1] || '0', 10),
|
|
232
|
+
oldLines: parseInt(match[2] || '1', 10),
|
|
233
|
+
newStart: parseInt(match[3] || '0', 10),
|
|
234
|
+
newLines: parseInt(match[4] || '1', 10),
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
parseGitLine(line) {
|
|
238
|
+
const type = line.startsWith('+') ? 'added' :
|
|
239
|
+
line.startsWith('-') ? 'removed' : 'context';
|
|
240
|
+
const content = line.slice(1); // Remove the prefix character
|
|
241
|
+
return { type, content };
|
|
242
|
+
}
|
|
243
|
+
generateChunkContext(lines) {
|
|
244
|
+
// Get context from surrounding lines and function/class definitions
|
|
245
|
+
const contextLines = lines
|
|
246
|
+
.filter(line => line.type === 'context' || line.type === 'added')
|
|
247
|
+
.slice(0, 3)
|
|
248
|
+
.map(line => line.content.trim())
|
|
249
|
+
.filter(content => content.length > 0);
|
|
250
|
+
return contextLines.join(' | ');
|
|
251
|
+
}
|
|
252
|
+
splitLargeChunks(chunks, options) {
|
|
253
|
+
const result = [];
|
|
254
|
+
for (const chunk of chunks) {
|
|
255
|
+
const chunkSize = chunk.lines.reduce((sum, line) => sum + line.content.length, 0);
|
|
256
|
+
if (chunkSize <= options.maxChunkSize) {
|
|
257
|
+
result.push(chunk);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
result.push(...this.splitSingleChunk(chunk, options));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return result;
|
|
264
|
+
}
|
|
265
|
+
splitSingleChunk(chunk, options) {
|
|
266
|
+
const subChunks = [];
|
|
267
|
+
const lines = chunk.lines;
|
|
268
|
+
let currentLines = [];
|
|
269
|
+
let currentSize = 0;
|
|
270
|
+
for (const line of lines) {
|
|
271
|
+
const lineSize = line.content.length;
|
|
272
|
+
if (currentSize + lineSize > options.maxChunkSize && currentLines.length > 0) {
|
|
273
|
+
// Create sub-chunk
|
|
274
|
+
subChunks.push({
|
|
275
|
+
...chunk,
|
|
276
|
+
lines: [...currentLines],
|
|
277
|
+
context: this.generateChunkContext(currentLines),
|
|
278
|
+
});
|
|
279
|
+
currentLines = [];
|
|
280
|
+
currentSize = 0;
|
|
281
|
+
}
|
|
282
|
+
currentLines.push(line);
|
|
283
|
+
currentSize += lineSize;
|
|
284
|
+
}
|
|
285
|
+
// Add remaining lines
|
|
286
|
+
if (currentLines.length > 0) {
|
|
287
|
+
subChunks.push({
|
|
288
|
+
...chunk,
|
|
289
|
+
lines: currentLines,
|
|
290
|
+
context: this.generateChunkContext(currentLines),
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
return subChunks.length > 0 ? subChunks : [chunk];
|
|
294
|
+
}
|
|
295
|
+
parseFileStatus(statusChar) {
|
|
296
|
+
switch (statusChar.charAt(0)) {
|
|
297
|
+
case 'A': return 'added';
|
|
298
|
+
case 'M': return 'modified';
|
|
299
|
+
case 'D': return 'deleted';
|
|
300
|
+
case 'R': return 'renamed';
|
|
301
|
+
case 'C': return 'copied';
|
|
302
|
+
default: return 'modified';
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
mergeChunkOptions(options) {
|
|
306
|
+
return {
|
|
307
|
+
maxChunkSize: options?.maxChunkSize ?? CHUNK_LIMITS.MAX_CHUNK_SIZE,
|
|
308
|
+
preserveContext: options?.preserveContext ?? true,
|
|
309
|
+
maxConcurrency: options?.maxConcurrency ?? CHUNK_LIMITS.MAX_CONCURRENT_REQUESTS,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Check if there is an upstream branch configured
|
|
314
|
+
*/
|
|
315
|
+
async hasUpstream() {
|
|
316
|
+
try {
|
|
317
|
+
const { stdout } = await execAsync('git rev-parse --abbrev-ref --symbolic-full-name @{u}');
|
|
318
|
+
return stdout.trim().length > 0;
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
return false;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Push commits to remote repository
|
|
326
|
+
*/
|
|
327
|
+
async pushToRemote(setUpstream = false) {
|
|
328
|
+
try {
|
|
329
|
+
const hasUpstreamBranch = await this.hasUpstream();
|
|
330
|
+
if (!hasUpstreamBranch && setUpstream) {
|
|
331
|
+
const currentBranch = await this.getCurrentBranch();
|
|
332
|
+
await execAsync(`git push --set-upstream origin ${currentBranch}`);
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
await execAsync('git push');
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
catch (error) {
|
|
339
|
+
throw new GitError('Failed to push to remote repository', error);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Check if there are unpushed commits
|
|
344
|
+
*/
|
|
345
|
+
async hasUnpushedCommits() {
|
|
346
|
+
try {
|
|
347
|
+
const hasUpstreamBranch = await this.hasUpstream();
|
|
348
|
+
if (!hasUpstreamBranch) {
|
|
349
|
+
// If no upstream, consider commits as unpushed
|
|
350
|
+
return true;
|
|
351
|
+
}
|
|
352
|
+
const { stdout } = await execAsync('git rev-list --count @{u}..HEAD');
|
|
353
|
+
return parseInt(stdout.trim()) > 0;
|
|
354
|
+
}
|
|
355
|
+
catch {
|
|
356
|
+
return false;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
// Singleton instance
|
|
361
|
+
export const gitManager = new GitManager();
|
|
362
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/modules/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'success';
|
|
2
|
+
export interface LoggerOptions {
|
|
3
|
+
verbose?: boolean;
|
|
4
|
+
silent?: boolean;
|
|
5
|
+
prefix?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class Logger {
|
|
8
|
+
private readonly options;
|
|
9
|
+
constructor(options?: LoggerOptions);
|
|
10
|
+
/**
|
|
11
|
+
* Log debug information (only in verbose mode)
|
|
12
|
+
*/
|
|
13
|
+
debug(message: string, data?: unknown): void;
|
|
14
|
+
/**
|
|
15
|
+
* Log general information
|
|
16
|
+
*/
|
|
17
|
+
info(message: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* Log warning messages
|
|
20
|
+
*/
|
|
21
|
+
warn(message: string): void;
|
|
22
|
+
/**
|
|
23
|
+
* Log error messages
|
|
24
|
+
*/
|
|
25
|
+
error(message: string, error?: Error): void;
|
|
26
|
+
/**
|
|
27
|
+
* Log success messages
|
|
28
|
+
*/
|
|
29
|
+
success(message: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* Start a progress indicator
|
|
32
|
+
*/
|
|
33
|
+
startProgress(message: string): ProgressIndicator;
|
|
34
|
+
/**
|
|
35
|
+
* Log a table of data
|
|
36
|
+
*/
|
|
37
|
+
table(data: Record<string, string | number | boolean>): void;
|
|
38
|
+
/**
|
|
39
|
+
* Create a new logger with modified options
|
|
40
|
+
*/
|
|
41
|
+
withOptions(options: Partial<LoggerOptions>): Logger;
|
|
42
|
+
private formatMessage;
|
|
43
|
+
private formatPrefix;
|
|
44
|
+
private getLevelIcon;
|
|
45
|
+
private colorizeMessage;
|
|
46
|
+
}
|
|
47
|
+
export declare class ProgressIndicator {
|
|
48
|
+
private readonly message;
|
|
49
|
+
private readonly silent;
|
|
50
|
+
private interval?;
|
|
51
|
+
private timeoutId?;
|
|
52
|
+
private frame;
|
|
53
|
+
private readonly frames;
|
|
54
|
+
private startTime;
|
|
55
|
+
private readonly minDuration;
|
|
56
|
+
private readonly maxDuration;
|
|
57
|
+
private isActive;
|
|
58
|
+
constructor(message: string, silent: boolean);
|
|
59
|
+
private start;
|
|
60
|
+
stop(finalMessage?: string): void;
|
|
61
|
+
succeed(message?: string): void;
|
|
62
|
+
fail(message?: string): void;
|
|
63
|
+
private cleanup;
|
|
64
|
+
update(message: string): void;
|
|
65
|
+
}
|
|
66
|
+
export declare const logger: Logger;
|
|
67
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/modules/logger.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;gBAEtC,OAAO,GAAE,aAAkB;IAQvC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAW5C;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO3B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO3B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAU3C;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO9B;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB;IAQjD;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI;IAgB5D;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,MAAM;IAOpD,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,eAAe;CAWxB;AAED,qBAAa,iBAAiB;IAW1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAXzB,OAAO,CAAC,QAAQ,CAAC,CAA6B;IAC9C,OAAO,CAAC,SAAS,CAAC,CAA6B;IAC/C,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsD;IAC7E,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAO;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAS;gBAGN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO;IAuBlC,OAAO,CAAC,KAAK;IAcb,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAWjC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAO/B,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAK5B,OAAO,CAAC,OAAO;IAYf,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAM9B;AAGD,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export class Logger {
|
|
3
|
+
options;
|
|
4
|
+
constructor(options = {}) {
|
|
5
|
+
this.options = {
|
|
6
|
+
verbose: options.verbose ?? false,
|
|
7
|
+
silent: options.silent ?? false,
|
|
8
|
+
prefix: options.prefix ?? 'orc',
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Log debug information (only in verbose mode)
|
|
13
|
+
*/
|
|
14
|
+
debug(message, data) {
|
|
15
|
+
if (!this.options.verbose || this.options.silent)
|
|
16
|
+
return;
|
|
17
|
+
const formattedMessage = this.formatMessage('debug', message);
|
|
18
|
+
console.log(formattedMessage);
|
|
19
|
+
if (data !== undefined) {
|
|
20
|
+
console.log(chalk.gray(JSON.stringify(data, null, 2)));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Log general information
|
|
25
|
+
*/
|
|
26
|
+
info(message) {
|
|
27
|
+
if (this.options.silent)
|
|
28
|
+
return;
|
|
29
|
+
const formattedMessage = this.formatMessage('info', message);
|
|
30
|
+
console.log(formattedMessage);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Log warning messages
|
|
34
|
+
*/
|
|
35
|
+
warn(message) {
|
|
36
|
+
if (this.options.silent)
|
|
37
|
+
return;
|
|
38
|
+
const formattedMessage = this.formatMessage('warn', message);
|
|
39
|
+
console.warn(formattedMessage);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Log error messages
|
|
43
|
+
*/
|
|
44
|
+
error(message, error) {
|
|
45
|
+
const formattedMessage = this.formatMessage('error', message);
|
|
46
|
+
console.error(formattedMessage);
|
|
47
|
+
if (error && this.options.verbose) {
|
|
48
|
+
console.error(chalk.red('Error details:'));
|
|
49
|
+
console.error(chalk.red(error.stack || error.message));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Log success messages
|
|
54
|
+
*/
|
|
55
|
+
success(message) {
|
|
56
|
+
if (this.options.silent)
|
|
57
|
+
return;
|
|
58
|
+
const formattedMessage = this.formatMessage('success', message);
|
|
59
|
+
console.log(formattedMessage);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Start a progress indicator
|
|
63
|
+
*/
|
|
64
|
+
startProgress(message) {
|
|
65
|
+
if (this.options.silent) {
|
|
66
|
+
return new ProgressIndicator(message, true);
|
|
67
|
+
}
|
|
68
|
+
return new ProgressIndicator(message, false);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Log a table of data
|
|
72
|
+
*/
|
|
73
|
+
table(data) {
|
|
74
|
+
if (this.options.silent)
|
|
75
|
+
return;
|
|
76
|
+
const maxKeyLength = Math.max(...Object.keys(data).map(key => key.length));
|
|
77
|
+
Object.entries(data).forEach(([key, value]) => {
|
|
78
|
+
const paddedKey = key.padEnd(maxKeyLength);
|
|
79
|
+
const coloredKey = chalk.cyan(paddedKey);
|
|
80
|
+
const coloredValue = typeof value === 'boolean'
|
|
81
|
+
? (value ? chalk.green('✓') : chalk.red('✗'))
|
|
82
|
+
: chalk.white(String(value));
|
|
83
|
+
console.log(`${coloredKey}: ${coloredValue}`);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Create a new logger with modified options
|
|
88
|
+
*/
|
|
89
|
+
withOptions(options) {
|
|
90
|
+
return new Logger({
|
|
91
|
+
...this.options,
|
|
92
|
+
...options,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
formatMessage(level, message) {
|
|
96
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
97
|
+
const prefix = this.formatPrefix();
|
|
98
|
+
const levelIcon = this.getLevelIcon(level);
|
|
99
|
+
const coloredMessage = this.colorizeMessage(level, message);
|
|
100
|
+
if (this.options.verbose) {
|
|
101
|
+
return `${chalk.gray(timestamp)} ${prefix} ${levelIcon} ${coloredMessage}`;
|
|
102
|
+
}
|
|
103
|
+
return `${prefix} ${levelIcon} ${coloredMessage}`;
|
|
104
|
+
}
|
|
105
|
+
formatPrefix() {
|
|
106
|
+
return chalk.blue(`[${this.options.prefix}]`);
|
|
107
|
+
}
|
|
108
|
+
getLevelIcon(level) {
|
|
109
|
+
const icons = {
|
|
110
|
+
debug: chalk.gray('⚡'),
|
|
111
|
+
info: chalk.blue('ℹ'),
|
|
112
|
+
warn: chalk.yellow('⚠'),
|
|
113
|
+
error: chalk.red('✗'),
|
|
114
|
+
success: chalk.green('✓'),
|
|
115
|
+
};
|
|
116
|
+
return icons[level];
|
|
117
|
+
}
|
|
118
|
+
colorizeMessage(level, message) {
|
|
119
|
+
const colors = {
|
|
120
|
+
debug: chalk.gray,
|
|
121
|
+
info: chalk.white,
|
|
122
|
+
warn: chalk.yellow,
|
|
123
|
+
error: chalk.red,
|
|
124
|
+
success: chalk.green,
|
|
125
|
+
};
|
|
126
|
+
return colors[level](message);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
export class ProgressIndicator {
|
|
130
|
+
message;
|
|
131
|
+
silent;
|
|
132
|
+
interval;
|
|
133
|
+
timeoutId;
|
|
134
|
+
frame = 0;
|
|
135
|
+
frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
136
|
+
startTime;
|
|
137
|
+
minDuration = 500; // Wait before showing spinner
|
|
138
|
+
maxDuration = 30000; // 30 second timeout
|
|
139
|
+
isActive = false;
|
|
140
|
+
constructor(message, silent) {
|
|
141
|
+
this.message = message;
|
|
142
|
+
this.silent = silent;
|
|
143
|
+
this.startTime = Date.now();
|
|
144
|
+
if (!this.silent) {
|
|
145
|
+
// Show immediate status without spinner for fast operations
|
|
146
|
+
process.stdout.write(`⏳ ${this.message}`);
|
|
147
|
+
// Show spinner only if operation takes longer than minDuration
|
|
148
|
+
this.timeoutId = setTimeout(() => {
|
|
149
|
+
if (!this.isActive) {
|
|
150
|
+
this.start();
|
|
151
|
+
}
|
|
152
|
+
}, this.minDuration);
|
|
153
|
+
// Auto-timeout after maxDuration
|
|
154
|
+
setTimeout(() => {
|
|
155
|
+
if (this.interval) {
|
|
156
|
+
this.fail('Operation timed out');
|
|
157
|
+
}
|
|
158
|
+
}, this.maxDuration);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
start() {
|
|
162
|
+
if (this.interval || this.isActive)
|
|
163
|
+
return;
|
|
164
|
+
this.isActive = true;
|
|
165
|
+
process.stdout.write('\r\x1b[K'); // Clear current line
|
|
166
|
+
process.stdout.write(`${chalk.cyan(this.frames[0])} ${this.message}`);
|
|
167
|
+
this.interval = setInterval(() => {
|
|
168
|
+
process.stdout.write('\r\x1b[K');
|
|
169
|
+
this.frame = (this.frame + 1) % this.frames.length;
|
|
170
|
+
process.stdout.write(`${chalk.cyan(this.frames[this.frame])} ${this.message}`);
|
|
171
|
+
}, 200); // Even slower for elegance
|
|
172
|
+
}
|
|
173
|
+
stop(finalMessage) {
|
|
174
|
+
this.cleanup();
|
|
175
|
+
if (!this.silent) {
|
|
176
|
+
process.stdout.write('\r\x1b[K'); // Clear current line
|
|
177
|
+
if (finalMessage) {
|
|
178
|
+
console.log(finalMessage);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
succeed(message) {
|
|
183
|
+
const duration = Date.now() - this.startTime;
|
|
184
|
+
const durationText = duration > 1000 ? ` (${(duration / 1000).toFixed(1)}s)` : '';
|
|
185
|
+
const finalMessage = message || this.message;
|
|
186
|
+
this.stop(`${chalk.green('✓')} ${finalMessage}${chalk.gray(durationText)}`);
|
|
187
|
+
}
|
|
188
|
+
fail(message) {
|
|
189
|
+
const finalMessage = message || `${this.message} failed`;
|
|
190
|
+
this.stop(`${chalk.red('✗')} ${finalMessage}`);
|
|
191
|
+
}
|
|
192
|
+
cleanup() {
|
|
193
|
+
if (this.interval) {
|
|
194
|
+
clearInterval(this.interval);
|
|
195
|
+
this.interval = undefined;
|
|
196
|
+
}
|
|
197
|
+
if (this.timeoutId) {
|
|
198
|
+
clearTimeout(this.timeoutId);
|
|
199
|
+
this.timeoutId = undefined;
|
|
200
|
+
}
|
|
201
|
+
this.isActive = false;
|
|
202
|
+
}
|
|
203
|
+
update(message) {
|
|
204
|
+
if (!this.silent && this.interval) {
|
|
205
|
+
process.stdout.write('\r\x1b[K'); // Clear current line
|
|
206
|
+
process.stdout.write(`${chalk.cyan(this.frames[this.frame])} ${message}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Default logger instance
|
|
211
|
+
export const logger = new Logger();
|
|
212
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/modules/logger.ts"],"names":[],"mappings":"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"}
|