archicore 0.1.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/README.md +530 -0
- package/dist/analyzers/dead-code.d.ts +95 -0
- package/dist/analyzers/dead-code.js +327 -0
- package/dist/analyzers/duplication.d.ts +90 -0
- package/dist/analyzers/duplication.js +344 -0
- package/dist/analyzers/security.d.ts +79 -0
- package/dist/analyzers/security.js +484 -0
- package/dist/architecture/index.d.ts +35 -0
- package/dist/architecture/index.js +249 -0
- package/dist/cli/commands/analyzers.d.ts +6 -0
- package/dist/cli/commands/analyzers.js +431 -0
- package/dist/cli/commands/export.d.ts +6 -0
- package/dist/cli/commands/export.js +78 -0
- package/dist/cli/commands/index.d.ts +8 -0
- package/dist/cli/commands/index.js +8 -0
- package/dist/cli/commands/init.d.ts +26 -0
- package/dist/cli/commands/init.js +140 -0
- package/dist/cli/commands/interactive.d.ts +7 -0
- package/dist/cli/commands/interactive.js +522 -0
- package/dist/cli/commands/projects.d.ts +6 -0
- package/dist/cli/commands/projects.js +249 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.js +7 -0
- package/dist/cli/ui/box.d.ts +17 -0
- package/dist/cli/ui/box.js +62 -0
- package/dist/cli/ui/colors.d.ts +49 -0
- package/dist/cli/ui/colors.js +86 -0
- package/dist/cli/ui/index.d.ts +9 -0
- package/dist/cli/ui/index.js +9 -0
- package/dist/cli/ui/prompt.d.ts +34 -0
- package/dist/cli/ui/prompt.js +122 -0
- package/dist/cli/ui/spinner.d.ts +29 -0
- package/dist/cli/ui/spinner.js +80 -0
- package/dist/cli/ui/table.d.ts +33 -0
- package/dist/cli/ui/table.js +84 -0
- package/dist/cli/utils/config.d.ts +23 -0
- package/dist/cli/utils/config.js +73 -0
- package/dist/cli/utils/index.d.ts +6 -0
- package/dist/cli/utils/index.js +6 -0
- package/dist/cli/utils/session.d.ts +27 -0
- package/dist/cli/utils/session.js +117 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.js +295 -0
- package/dist/code-index/ast-parser.d.ts +16 -0
- package/dist/code-index/ast-parser.js +330 -0
- package/dist/code-index/dependency-graph.d.ts +16 -0
- package/dist/code-index/dependency-graph.js +161 -0
- package/dist/code-index/index.d.ts +44 -0
- package/dist/code-index/index.js +124 -0
- package/dist/code-index/symbol-extractor.d.ts +13 -0
- package/dist/code-index/symbol-extractor.js +150 -0
- package/dist/export/index.d.ts +92 -0
- package/dist/export/index.js +676 -0
- package/dist/github/github-service.d.ts +146 -0
- package/dist/github/github-service.js +609 -0
- package/dist/impact-engine/index.d.ts +25 -0
- package/dist/impact-engine/index.js +284 -0
- package/dist/index.d.ts +60 -0
- package/dist/index.js +149 -0
- package/dist/metrics/index.d.ts +136 -0
- package/dist/metrics/index.js +525 -0
- package/dist/orchestrator/deepseek-optimizer.d.ts +67 -0
- package/dist/orchestrator/deepseek-optimizer.js +320 -0
- package/dist/orchestrator/index.d.ts +34 -0
- package/dist/orchestrator/index.js +305 -0
- package/dist/pr-guardian/index.d.ts +143 -0
- package/dist/pr-guardian/index.js +553 -0
- package/dist/refactoring/index.d.ts +108 -0
- package/dist/refactoring/index.js +580 -0
- package/dist/rules-engine/index.d.ts +129 -0
- package/dist/rules-engine/index.js +482 -0
- package/dist/semantic-memory/embedding-service.d.ts +24 -0
- package/dist/semantic-memory/embedding-service.js +120 -0
- package/dist/semantic-memory/index.d.ts +45 -0
- package/dist/semantic-memory/index.js +206 -0
- package/dist/semantic-memory/vector-store.d.ts +27 -0
- package/dist/semantic-memory/vector-store.js +166 -0
- package/dist/server/index.d.ts +28 -0
- package/dist/server/index.js +141 -0
- package/dist/server/middleware/api-auth.d.ts +43 -0
- package/dist/server/middleware/api-auth.js +256 -0
- package/dist/server/routes/admin.d.ts +5 -0
- package/dist/server/routes/admin.js +123 -0
- package/dist/server/routes/api.d.ts +7 -0
- package/dist/server/routes/api.js +362 -0
- package/dist/server/routes/auth.d.ts +16 -0
- package/dist/server/routes/auth.js +191 -0
- package/dist/server/routes/developer.d.ts +8 -0
- package/dist/server/routes/developer.js +439 -0
- package/dist/server/routes/github.d.ts +7 -0
- package/dist/server/routes/github.js +495 -0
- package/dist/server/routes/upload.d.ts +7 -0
- package/dist/server/routes/upload.js +196 -0
- package/dist/server/services/api-key-service.d.ts +81 -0
- package/dist/server/services/api-key-service.js +281 -0
- package/dist/server/services/auth-service.d.ts +40 -0
- package/dist/server/services/auth-service.js +315 -0
- package/dist/server/services/project-service.d.ts +123 -0
- package/dist/server/services/project-service.js +533 -0
- package/dist/server/services/token-service.d.ts +107 -0
- package/dist/server/services/token-service.js +416 -0
- package/dist/server/services/upload-service.d.ts +93 -0
- package/dist/server/services/upload-service.js +464 -0
- package/dist/types/api.d.ts +188 -0
- package/dist/types/api.js +86 -0
- package/dist/types/github.d.ts +335 -0
- package/dist/types/github.js +5 -0
- package/dist/types/index.d.ts +265 -0
- package/dist/types/index.js +32 -0
- package/dist/types/user.d.ts +69 -0
- package/dist/types/user.js +42 -0
- package/dist/utils/file-utils.d.ts +20 -0
- package/dist/utils/file-utils.js +163 -0
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.js +41 -0
- package/dist/watcher/index.d.ts +125 -0
- package/dist/watcher/index.js +397 -0
- package/package.json +71 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Основные типы системы ИИ-архитектор
|
|
3
|
+
*/
|
|
4
|
+
export var SymbolKind;
|
|
5
|
+
(function (SymbolKind) {
|
|
6
|
+
SymbolKind["Function"] = "function";
|
|
7
|
+
SymbolKind["Class"] = "class";
|
|
8
|
+
SymbolKind["Interface"] = "interface";
|
|
9
|
+
SymbolKind["Variable"] = "variable";
|
|
10
|
+
SymbolKind["Constant"] = "constant";
|
|
11
|
+
SymbolKind["Type"] = "type";
|
|
12
|
+
SymbolKind["Module"] = "module";
|
|
13
|
+
SymbolKind["Namespace"] = "namespace";
|
|
14
|
+
})(SymbolKind || (SymbolKind = {}));
|
|
15
|
+
export var EdgeType;
|
|
16
|
+
(function (EdgeType) {
|
|
17
|
+
EdgeType["Import"] = "import";
|
|
18
|
+
EdgeType["Call"] = "call";
|
|
19
|
+
EdgeType["Inheritance"] = "inheritance";
|
|
20
|
+
EdgeType["Composition"] = "composition";
|
|
21
|
+
EdgeType["DataFlow"] = "data_flow";
|
|
22
|
+
})(EdgeType || (EdgeType = {}));
|
|
23
|
+
export var RefactoringType;
|
|
24
|
+
(function (RefactoringType) {
|
|
25
|
+
RefactoringType["ExtractFunction"] = "extract_function";
|
|
26
|
+
RefactoringType["RenameSymbol"] = "rename_symbol";
|
|
27
|
+
RefactoringType["MoveFile"] = "move_file";
|
|
28
|
+
RefactoringType["InlineVariable"] = "inline_variable";
|
|
29
|
+
RefactoringType["ExtractInterface"] = "extract_interface";
|
|
30
|
+
RefactoringType["OptimizeImports"] = "optimize_imports";
|
|
31
|
+
})(RefactoringType || (RefactoringType = {}));
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User and Subscription Types for ArchiCore
|
|
3
|
+
*/
|
|
4
|
+
export type SubscriptionTier = 'free' | 'mid' | 'pro' | 'admin';
|
|
5
|
+
export interface TierLimits {
|
|
6
|
+
requestsPerDay: number;
|
|
7
|
+
fullAnalysisPerDay: number;
|
|
8
|
+
projectsPerDay: number;
|
|
9
|
+
maxFileSizeMB: number;
|
|
10
|
+
retentionDays: number;
|
|
11
|
+
price: number;
|
|
12
|
+
priceYearly: number;
|
|
13
|
+
}
|
|
14
|
+
export declare const TIER_LIMITS: Record<SubscriptionTier, TierLimits>;
|
|
15
|
+
export interface User {
|
|
16
|
+
id: string;
|
|
17
|
+
email: string;
|
|
18
|
+
username: string;
|
|
19
|
+
passwordHash?: string;
|
|
20
|
+
avatar?: string;
|
|
21
|
+
tier: SubscriptionTier;
|
|
22
|
+
provider: 'email' | 'github' | 'google';
|
|
23
|
+
providerId?: string;
|
|
24
|
+
createdAt: Date;
|
|
25
|
+
lastLoginAt: Date;
|
|
26
|
+
usage: UserUsage;
|
|
27
|
+
subscription?: Subscription;
|
|
28
|
+
}
|
|
29
|
+
export interface UserUsage {
|
|
30
|
+
requestsToday: number;
|
|
31
|
+
fullAnalysisToday: number;
|
|
32
|
+
projectsToday: number;
|
|
33
|
+
lastResetDate: string;
|
|
34
|
+
}
|
|
35
|
+
export interface Subscription {
|
|
36
|
+
id: string;
|
|
37
|
+
tier: SubscriptionTier;
|
|
38
|
+
status: 'active' | 'cancelled' | 'expired' | 'trial';
|
|
39
|
+
startDate: Date;
|
|
40
|
+
endDate: Date;
|
|
41
|
+
autoRenew: boolean;
|
|
42
|
+
paymentMethod?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface AuthSession {
|
|
45
|
+
token: string;
|
|
46
|
+
userId: string;
|
|
47
|
+
expiresAt: Date;
|
|
48
|
+
}
|
|
49
|
+
export interface LoginRequest {
|
|
50
|
+
email: string;
|
|
51
|
+
password: string;
|
|
52
|
+
}
|
|
53
|
+
export interface RegisterRequest {
|
|
54
|
+
email: string;
|
|
55
|
+
username: string;
|
|
56
|
+
password: string;
|
|
57
|
+
}
|
|
58
|
+
export interface OAuthRequest {
|
|
59
|
+
provider: 'github' | 'google';
|
|
60
|
+
code: string;
|
|
61
|
+
redirectUri: string;
|
|
62
|
+
}
|
|
63
|
+
export interface AuthResponse {
|
|
64
|
+
success: boolean;
|
|
65
|
+
token?: string;
|
|
66
|
+
user?: Omit<User, 'passwordHash'>;
|
|
67
|
+
error?: string;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=user.d.ts.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User and Subscription Types for ArchiCore
|
|
3
|
+
*/
|
|
4
|
+
export const TIER_LIMITS = {
|
|
5
|
+
free: {
|
|
6
|
+
requestsPerDay: 10,
|
|
7
|
+
fullAnalysisPerDay: 1,
|
|
8
|
+
projectsPerDay: 3,
|
|
9
|
+
maxFileSizeMB: 10,
|
|
10
|
+
retentionDays: 7,
|
|
11
|
+
price: 0,
|
|
12
|
+
priceYearly: 0
|
|
13
|
+
},
|
|
14
|
+
mid: {
|
|
15
|
+
requestsPerDay: 50,
|
|
16
|
+
fullAnalysisPerDay: 5,
|
|
17
|
+
projectsPerDay: 10,
|
|
18
|
+
maxFileSizeMB: 30,
|
|
19
|
+
retentionDays: 14,
|
|
20
|
+
price: 39,
|
|
21
|
+
priceYearly: 390 // ~2 months free
|
|
22
|
+
},
|
|
23
|
+
pro: {
|
|
24
|
+
requestsPerDay: 150,
|
|
25
|
+
fullAnalysisPerDay: 15,
|
|
26
|
+
projectsPerDay: 20,
|
|
27
|
+
maxFileSizeMB: 60,
|
|
28
|
+
retentionDays: 30,
|
|
29
|
+
price: 99,
|
|
30
|
+
priceYearly: 990 // ~2 months free
|
|
31
|
+
},
|
|
32
|
+
admin: {
|
|
33
|
+
requestsPerDay: Infinity,
|
|
34
|
+
fullAnalysisPerDay: Infinity,
|
|
35
|
+
projectsPerDay: Infinity,
|
|
36
|
+
maxFileSizeMB: 500,
|
|
37
|
+
retentionDays: 365,
|
|
38
|
+
price: 0,
|
|
39
|
+
priceYearly: 0
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=user.js.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare class FileUtils {
|
|
2
|
+
static readFileContent(filePath: string): Promise<string>;
|
|
3
|
+
static getFileSize(filePath: string): Promise<number>;
|
|
4
|
+
static getAllFiles(rootDir: string, patterns?: string[]): Promise<string[]>;
|
|
5
|
+
static getLanguageFromExtension(filePath: string): string;
|
|
6
|
+
static getProjectStructure(rootDir: string): Promise<ProjectStructure>;
|
|
7
|
+
}
|
|
8
|
+
export interface ProjectStructure {
|
|
9
|
+
rootDir: string;
|
|
10
|
+
files: FileInfo[];
|
|
11
|
+
directories: Set<string>;
|
|
12
|
+
}
|
|
13
|
+
export interface FileInfo {
|
|
14
|
+
path: string;
|
|
15
|
+
relativePath: string;
|
|
16
|
+
language: string;
|
|
17
|
+
size: number;
|
|
18
|
+
lastModified: Date;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=file-utils.d.ts.map
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { readFile, stat } from 'fs/promises';
|
|
2
|
+
import { join, relative, extname } from 'path';
|
|
3
|
+
import { glob } from 'glob';
|
|
4
|
+
const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB max file size for parsing
|
|
5
|
+
export class FileUtils {
|
|
6
|
+
static async readFileContent(filePath) {
|
|
7
|
+
return await readFile(filePath, 'utf-8');
|
|
8
|
+
}
|
|
9
|
+
static async getFileSize(filePath) {
|
|
10
|
+
const stats = await stat(filePath);
|
|
11
|
+
return stats.size;
|
|
12
|
+
}
|
|
13
|
+
static async getAllFiles(rootDir, patterns = [
|
|
14
|
+
'**/*.ts', '**/*.js', '**/*.tsx', '**/*.jsx', // JS/TS
|
|
15
|
+
'**/*.vue', // Vue
|
|
16
|
+
'**/*.py', // Python
|
|
17
|
+
'**/*.go', // Go
|
|
18
|
+
'**/*.rs', // Rust
|
|
19
|
+
'**/*.java', // Java
|
|
20
|
+
'**/*.php', // PHP
|
|
21
|
+
'**/*.rb', // Ruby
|
|
22
|
+
'**/*.cs', // C#
|
|
23
|
+
'**/*.cpp', '**/*.c', '**/*.h', '**/*.hpp' // C/C++
|
|
24
|
+
]) {
|
|
25
|
+
const files = [];
|
|
26
|
+
for (const pattern of patterns) {
|
|
27
|
+
const matches = await glob(pattern, {
|
|
28
|
+
cwd: rootDir,
|
|
29
|
+
nodir: true, // Exclude directories that match file patterns (e.g., "404.php/")
|
|
30
|
+
dot: true, // Include files in hidden directories (e.g., ".default/")
|
|
31
|
+
ignore: [
|
|
32
|
+
// Package managers (always third-party, never user code)
|
|
33
|
+
'node_modules/**',
|
|
34
|
+
'**/node_modules/**',
|
|
35
|
+
'bower_components/**',
|
|
36
|
+
'**/bower_components/**',
|
|
37
|
+
'jspm_packages/**',
|
|
38
|
+
// Build/Generated output
|
|
39
|
+
'dist/**',
|
|
40
|
+
'**/dist/**',
|
|
41
|
+
'.next/**',
|
|
42
|
+
'.nuxt/**',
|
|
43
|
+
'.output/**',
|
|
44
|
+
// Version control
|
|
45
|
+
'.git/**',
|
|
46
|
+
'.svn/**',
|
|
47
|
+
'.hg/**',
|
|
48
|
+
// IDE/Editor
|
|
49
|
+
'.idea/**',
|
|
50
|
+
'.vscode/**',
|
|
51
|
+
// Test coverage (generated reports)
|
|
52
|
+
'coverage/**',
|
|
53
|
+
'.nyc_output/**',
|
|
54
|
+
'htmlcov/**',
|
|
55
|
+
// Python virtual environments
|
|
56
|
+
'venv/**',
|
|
57
|
+
'.venv/**',
|
|
58
|
+
'**/site-packages/**',
|
|
59
|
+
'**/__pycache__/**',
|
|
60
|
+
'**/*.pyc',
|
|
61
|
+
'*.egg-info/**',
|
|
62
|
+
'.eggs/**',
|
|
63
|
+
'.tox/**',
|
|
64
|
+
// Minified/bundled files (generated, not source)
|
|
65
|
+
'**/*.min.js',
|
|
66
|
+
'**/*.min.css',
|
|
67
|
+
'**/*.bundle.js',
|
|
68
|
+
'**/*.chunk.js',
|
|
69
|
+
'**/*-min.js',
|
|
70
|
+
'**/*.packed.js',
|
|
71
|
+
// Rich text editors (always third-party)
|
|
72
|
+
'**/tinymce/**',
|
|
73
|
+
'**/ckeditor/**',
|
|
74
|
+
'**/ckeditor5/**',
|
|
75
|
+
'**/codemirror/**',
|
|
76
|
+
'**/ace-builds/**',
|
|
77
|
+
'**/monaco-editor/**',
|
|
78
|
+
'**/quill/**',
|
|
79
|
+
'**/froala-editor/**',
|
|
80
|
+
// Lock files (generated, not code)
|
|
81
|
+
'package-lock.json',
|
|
82
|
+
'yarn.lock',
|
|
83
|
+
'pnpm-lock.yaml',
|
|
84
|
+
'composer.lock',
|
|
85
|
+
'Gemfile.lock',
|
|
86
|
+
'poetry.lock',
|
|
87
|
+
'Pipfile.lock',
|
|
88
|
+
'Cargo.lock',
|
|
89
|
+
// Cache directories
|
|
90
|
+
'.cache/**',
|
|
91
|
+
'**/.cache/**',
|
|
92
|
+
'.parcel-cache/**',
|
|
93
|
+
'.turbo/**'
|
|
94
|
+
],
|
|
95
|
+
absolute: true
|
|
96
|
+
});
|
|
97
|
+
files.push(...matches);
|
|
98
|
+
}
|
|
99
|
+
// Filter out large files and directories
|
|
100
|
+
const filteredFiles = [];
|
|
101
|
+
for (const file of [...new Set(files)]) {
|
|
102
|
+
try {
|
|
103
|
+
const stats = await stat(file);
|
|
104
|
+
// Skip directories (e.g., folders named "404.php")
|
|
105
|
+
if (!stats.isFile()) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (stats.size <= MAX_FILE_SIZE) {
|
|
109
|
+
filteredFiles.push(file);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// Skip files we can't stat
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return filteredFiles;
|
|
117
|
+
}
|
|
118
|
+
static getLanguageFromExtension(filePath) {
|
|
119
|
+
const ext = extname(filePath);
|
|
120
|
+
const map = {
|
|
121
|
+
'.ts': 'typescript',
|
|
122
|
+
'.tsx': 'typescript',
|
|
123
|
+
'.js': 'javascript',
|
|
124
|
+
'.jsx': 'javascript',
|
|
125
|
+
'.vue': 'vue',
|
|
126
|
+
'.py': 'python',
|
|
127
|
+
'.go': 'go',
|
|
128
|
+
'.rs': 'rust',
|
|
129
|
+
'.java': 'java',
|
|
130
|
+
'.php': 'php',
|
|
131
|
+
'.rb': 'ruby',
|
|
132
|
+
'.cs': 'csharp',
|
|
133
|
+
'.cpp': 'cpp',
|
|
134
|
+
'.c': 'c',
|
|
135
|
+
'.h': 'c',
|
|
136
|
+
'.hpp': 'cpp'
|
|
137
|
+
};
|
|
138
|
+
return map[ext] || 'unknown';
|
|
139
|
+
}
|
|
140
|
+
static async getProjectStructure(rootDir) {
|
|
141
|
+
const files = await this.getAllFiles(rootDir);
|
|
142
|
+
const structure = {
|
|
143
|
+
rootDir,
|
|
144
|
+
files: [],
|
|
145
|
+
directories: new Set()
|
|
146
|
+
};
|
|
147
|
+
for (const file of files) {
|
|
148
|
+
const rel = relative(rootDir, file);
|
|
149
|
+
const stats = await stat(file);
|
|
150
|
+
structure.files.push({
|
|
151
|
+
path: file,
|
|
152
|
+
relativePath: rel,
|
|
153
|
+
language: this.getLanguageFromExtension(file),
|
|
154
|
+
size: stats.size,
|
|
155
|
+
lastModified: stats.mtime
|
|
156
|
+
});
|
|
157
|
+
const dirPath = join(rootDir, rel.split('/').slice(0, -1).join('/'));
|
|
158
|
+
structure.directories.add(dirPath);
|
|
159
|
+
}
|
|
160
|
+
return structure;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=file-utils.js.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare enum LogLevel {
|
|
2
|
+
DEBUG = 0,
|
|
3
|
+
INFO = 1,
|
|
4
|
+
WARN = 2,
|
|
5
|
+
ERROR = 3
|
|
6
|
+
}
|
|
7
|
+
export declare class Logger {
|
|
8
|
+
private static level;
|
|
9
|
+
static setLevel(level: LogLevel): void;
|
|
10
|
+
static debug(message: string, data?: unknown): void;
|
|
11
|
+
static info(message: string, data?: unknown): void;
|
|
12
|
+
static warn(message: string, data?: unknown): void;
|
|
13
|
+
static error(message: string, error?: unknown): void;
|
|
14
|
+
static success(message: string): void;
|
|
15
|
+
static progress(message: string): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export var LogLevel;
|
|
3
|
+
(function (LogLevel) {
|
|
4
|
+
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
|
|
5
|
+
LogLevel[LogLevel["INFO"] = 1] = "INFO";
|
|
6
|
+
LogLevel[LogLevel["WARN"] = 2] = "WARN";
|
|
7
|
+
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
|
|
8
|
+
})(LogLevel || (LogLevel = {}));
|
|
9
|
+
export class Logger {
|
|
10
|
+
static level = LogLevel.INFO;
|
|
11
|
+
static setLevel(level) {
|
|
12
|
+
this.level = level;
|
|
13
|
+
}
|
|
14
|
+
static debug(message, data) {
|
|
15
|
+
if (this.level <= LogLevel.DEBUG) {
|
|
16
|
+
console.log(chalk.gray(`[DEBUG] ${message}`), data || '');
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
static info(message, data) {
|
|
20
|
+
if (this.level <= LogLevel.INFO) {
|
|
21
|
+
console.log(chalk.blue(`[INFO] ${message}`), data || '');
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
static warn(message, data) {
|
|
25
|
+
if (this.level <= LogLevel.WARN) {
|
|
26
|
+
console.warn(chalk.yellow(`[WARN] ${message}`), data || '');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
static error(message, error) {
|
|
30
|
+
if (this.level <= LogLevel.ERROR) {
|
|
31
|
+
console.error(chalk.red(`[ERROR] ${message}`), error || '');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
static success(message) {
|
|
35
|
+
console.log(chalk.green(`✓ ${message}`));
|
|
36
|
+
}
|
|
37
|
+
static progress(message) {
|
|
38
|
+
console.log(chalk.cyan(`⟳ ${message}`));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Real-time File Watcher
|
|
3
|
+
*
|
|
4
|
+
* Мониторинг изменений файлов:
|
|
5
|
+
* - Автоматическая переиндексация при изменениях
|
|
6
|
+
* - Debounce для избежания лишних обновлений
|
|
7
|
+
* - Поддержка .gitignore паттернов
|
|
8
|
+
* - События для уведомления о изменениях
|
|
9
|
+
*/
|
|
10
|
+
import { EventEmitter } from 'events';
|
|
11
|
+
export interface WatcherConfig {
|
|
12
|
+
debounceMs: number;
|
|
13
|
+
ignorePatterns: string[];
|
|
14
|
+
watchExtensions: string[];
|
|
15
|
+
recursive: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface FileChangeEvent {
|
|
18
|
+
type: 'add' | 'change' | 'delete';
|
|
19
|
+
path: string;
|
|
20
|
+
timestamp: Date;
|
|
21
|
+
}
|
|
22
|
+
export interface WatcherStats {
|
|
23
|
+
watchedFiles: number;
|
|
24
|
+
watchedDirectories: number;
|
|
25
|
+
totalChanges: number;
|
|
26
|
+
lastChangeTime?: Date;
|
|
27
|
+
isWatching: boolean;
|
|
28
|
+
}
|
|
29
|
+
export declare class FileWatcher extends EventEmitter {
|
|
30
|
+
private config;
|
|
31
|
+
private watchers;
|
|
32
|
+
private pendingChanges;
|
|
33
|
+
private debounceTimers;
|
|
34
|
+
private stats;
|
|
35
|
+
private rootPath;
|
|
36
|
+
constructor(config?: Partial<WatcherConfig>);
|
|
37
|
+
/**
|
|
38
|
+
* Начать мониторинг директории
|
|
39
|
+
*/
|
|
40
|
+
watch(dirPath: string): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Остановить мониторинг
|
|
43
|
+
*/
|
|
44
|
+
stop(): void;
|
|
45
|
+
/**
|
|
46
|
+
* Получить статистику
|
|
47
|
+
*/
|
|
48
|
+
getStats(): WatcherStats;
|
|
49
|
+
/**
|
|
50
|
+
* Загрузка паттернов из .gitignore
|
|
51
|
+
*/
|
|
52
|
+
private loadGitignore;
|
|
53
|
+
/**
|
|
54
|
+
* Установка watchers рекурсивно
|
|
55
|
+
*/
|
|
56
|
+
private setupWatchers;
|
|
57
|
+
/**
|
|
58
|
+
* Создание watcher для директории
|
|
59
|
+
*/
|
|
60
|
+
private createDirectoryWatcher;
|
|
61
|
+
/**
|
|
62
|
+
* Обработка события файла
|
|
63
|
+
*/
|
|
64
|
+
private handleFileEvent;
|
|
65
|
+
/**
|
|
66
|
+
* Debounce обработки события
|
|
67
|
+
*/
|
|
68
|
+
private debounceEvent;
|
|
69
|
+
/**
|
|
70
|
+
* Обработка отложенного изменения
|
|
71
|
+
*/
|
|
72
|
+
private processPendingChange;
|
|
73
|
+
/**
|
|
74
|
+
* Проверка, нужно ли игнорировать путь
|
|
75
|
+
*/
|
|
76
|
+
private shouldIgnore;
|
|
77
|
+
/**
|
|
78
|
+
* Проверка, нужно ли отслеживать файл
|
|
79
|
+
*/
|
|
80
|
+
private shouldWatchFile;
|
|
81
|
+
/**
|
|
82
|
+
* Добавить паттерн для игнорирования
|
|
83
|
+
*/
|
|
84
|
+
addIgnorePattern(pattern: string): void;
|
|
85
|
+
/**
|
|
86
|
+
* Удалить паттерн игнорирования
|
|
87
|
+
*/
|
|
88
|
+
removeIgnorePattern(pattern: string): void;
|
|
89
|
+
/**
|
|
90
|
+
* Получить все отслеживаемые файлы
|
|
91
|
+
*/
|
|
92
|
+
getWatchedFiles(): string[];
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Менеджер автоматической переиндексации
|
|
96
|
+
*/
|
|
97
|
+
export declare class AutoReindexManager {
|
|
98
|
+
private watcher;
|
|
99
|
+
private reindexCallback?;
|
|
100
|
+
private batchTimeout?;
|
|
101
|
+
private pendingReindex;
|
|
102
|
+
private batchDelayMs;
|
|
103
|
+
constructor(batchDelayMs?: number);
|
|
104
|
+
/**
|
|
105
|
+
* Запуск мониторинга с callback для переиндексации
|
|
106
|
+
*/
|
|
107
|
+
start(dirPath: string, reindexCallback: () => Promise<void>): Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* Остановка мониторинга
|
|
110
|
+
*/
|
|
111
|
+
stop(): void;
|
|
112
|
+
/**
|
|
113
|
+
* Планирование переиндексации (с батчингом)
|
|
114
|
+
*/
|
|
115
|
+
private scheduleReindex;
|
|
116
|
+
/**
|
|
117
|
+
* Получить статистику watcher'а
|
|
118
|
+
*/
|
|
119
|
+
getStats(): WatcherStats;
|
|
120
|
+
/**
|
|
121
|
+
* Получить экземпляр watcher'а
|
|
122
|
+
*/
|
|
123
|
+
getWatcher(): FileWatcher;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=index.d.ts.map
|