@archznn/xavva 3.1.3 → 3.2.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 +221 -12
- package/package.json +3 -2
- package/src/commands/AuditCommand.ts +12 -10
- package/src/commands/BuildCommand.ts +9 -7
- package/src/commands/ChangelogCommand.ts +5 -5
- package/src/commands/CleanCommand.ts +242 -0
- package/src/commands/CompletionCommand.ts +7 -7
- package/src/commands/DbCommand.ts +33 -31
- package/src/commands/DeployCommand.ts +252 -229
- package/src/commands/DepsCommand.ts +174 -174
- package/src/commands/DockerCommand.ts +14 -14
- package/src/commands/DoctorCommand.ts +252 -239
- package/src/commands/EncodingCommand.ts +19 -19
- package/src/commands/HealthCommand.ts +7 -7
- package/src/commands/HelpCommand.ts +34 -14
- package/src/commands/HistoryCommand.ts +5 -5
- package/src/commands/HttpCommand.ts +6 -6
- package/src/commands/IdeCommand.ts +313 -0
- package/src/commands/InitCommand.ts +26 -25
- package/src/commands/LogsCommand.ts +8 -6
- package/src/commands/ProfilesCommand.ts +6 -6
- package/src/commands/RedoCommand.ts +2 -2
- package/src/commands/RunCommand.ts +64 -24
- package/src/commands/StartCommand.ts +9 -7
- package/src/commands/TestCommand.ts +4 -4
- package/src/commands/TomcatCommand.ts +219 -100
- package/src/config/versions.ts +111 -9
- package/src/di/container.ts +239 -105
- package/src/errors/ErrorHandler.ts +23 -19
- package/src/errors/errorMessages.ts +235 -0
- package/src/index.ts +11 -3
- package/src/logging/FileLogger.ts +235 -0
- package/src/logging/Logger.ts +545 -0
- package/src/logging/OperationLogger.ts +296 -0
- package/src/logging/ProgressLogger.ts +187 -0
- package/src/logging/TableLogger.ts +246 -0
- package/src/logging/colors.ts +167 -0
- package/src/logging/constants.ts +176 -0
- package/src/logging/formatters.ts +337 -0
- package/src/logging/index.ts +93 -0
- package/src/logging/types.ts +64 -0
- package/src/plugins/PluginManager.ts +325 -0
- package/src/plugins/types.ts +82 -0
- package/src/services/AuditService.ts +5 -3
- package/src/services/BuildService.ts +15 -17
- package/src/services/DashboardService.ts +14 -3
- package/src/services/DbService.ts +35 -34
- package/src/services/DependencyAnalyzerService.ts +18 -18
- package/src/services/DependencyCacheService.ts +303 -0
- package/src/services/DeployWatcher.ts +127 -23
- package/src/services/DockerService.ts +3 -3
- package/src/services/EmbeddedTomcatService.ts +13 -12
- package/src/services/FileWatcher.ts +15 -7
- package/src/services/HttpService.ts +5 -5
- package/src/services/LogAnalyzer.ts +26 -22
- package/src/services/PerformanceProfiler.ts +267 -0
- package/src/services/ProjectService.ts +3 -0
- package/src/services/TestService.ts +3 -3
- package/src/services/TomcatService.ts +46 -25
- package/src/services/tomcat/TomcatBackupManager.ts +330 -0
- package/src/services/tomcat/TomcatChecksumVerifier.ts +211 -0
- package/src/services/tomcat/TomcatCompatibilityChecker.ts +298 -0
- package/src/services/tomcat/TomcatDownloadCache.ts +250 -0
- package/src/services/tomcat/TomcatDownloadService.ts +335 -0
- package/src/services/tomcat/TomcatInstallerService.ts +474 -0
- package/src/services/tomcat/TomcatMirrorManager.ts +181 -0
- package/src/services/tomcat/index.ts +36 -0
- package/src/services/tomcat/types.ts +120 -0
- package/src/types/args.ts +68 -1
- package/src/types/configSchema.ts +174 -0
- package/src/utils/ChangelogGenerator.ts +11 -11
- package/src/utils/LoggerLevel.ts +44 -20
- package/src/utils/ProgressBar.ts +87 -46
- package/src/utils/argsParser.ts +260 -0
- package/src/utils/config.ts +340 -189
- package/src/utils/constants.ts +87 -9
- package/src/utils/dryRun.ts +192 -0
- package/src/utils/processManager.ts +23 -7
- package/src/utils/security.ts +293 -0
- package/src/utils/ui.ts +299 -428
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tipos compartilhados para serviços Tomcat
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/** Configuração de proxy */
|
|
6
|
+
export interface TomcatProxyConfig {
|
|
7
|
+
http?: string;
|
|
8
|
+
https?: string;
|
|
9
|
+
noProxy?: string[];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Informações de mirror */
|
|
13
|
+
export interface TomcatMirror {
|
|
14
|
+
name: string;
|
|
15
|
+
url: string;
|
|
16
|
+
region: string;
|
|
17
|
+
priority: number;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Configuração de download */
|
|
21
|
+
export interface TomcatDownloadConfig {
|
|
22
|
+
/** Versão do Tomcat */
|
|
23
|
+
version: string;
|
|
24
|
+
/** Mirror preferido (ou 'auto' para seleção automática) */
|
|
25
|
+
mirror?: string | "auto";
|
|
26
|
+
/** Timeout em segundos */
|
|
27
|
+
timeout?: number;
|
|
28
|
+
/** Número de retries */
|
|
29
|
+
retries?: number;
|
|
30
|
+
/** Habilitar resume */
|
|
31
|
+
resume?: boolean;
|
|
32
|
+
/** Modo silencioso */
|
|
33
|
+
silent?: boolean;
|
|
34
|
+
/** Configuração de proxy */
|
|
35
|
+
proxy?: TomcatProxyConfig;
|
|
36
|
+
/** Cache de downloads */
|
|
37
|
+
cache?: {
|
|
38
|
+
enabled: boolean;
|
|
39
|
+
dir: string;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Resultado de instalação */
|
|
44
|
+
export interface TomcatInstallResult {
|
|
45
|
+
success: boolean;
|
|
46
|
+
version: string;
|
|
47
|
+
home: string;
|
|
48
|
+
downloaded: boolean;
|
|
49
|
+
cached: boolean;
|
|
50
|
+
resumed: boolean;
|
|
51
|
+
attempts: number;
|
|
52
|
+
duration: number;
|
|
53
|
+
speed: number;
|
|
54
|
+
size: number;
|
|
55
|
+
checksum?: {
|
|
56
|
+
expected: string;
|
|
57
|
+
actual: string;
|
|
58
|
+
valid: boolean;
|
|
59
|
+
};
|
|
60
|
+
error?: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Informações de versão instalada */
|
|
64
|
+
export interface InstalledVersion {
|
|
65
|
+
version: string;
|
|
66
|
+
home: string;
|
|
67
|
+
size: number;
|
|
68
|
+
installedAt: Date;
|
|
69
|
+
lastUsed?: Date;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Resultado de backup */
|
|
73
|
+
export interface BackupResult {
|
|
74
|
+
success: boolean;
|
|
75
|
+
backupPath: string;
|
|
76
|
+
size: number;
|
|
77
|
+
timestamp: Date;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Resultado de restore */
|
|
81
|
+
export interface RestoreResult {
|
|
82
|
+
success: boolean;
|
|
83
|
+
fromVersion: string;
|
|
84
|
+
toVersion: string;
|
|
85
|
+
backupPath: string;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Compatibilidade de versão */
|
|
89
|
+
export interface CompatibilityResult {
|
|
90
|
+
compatible: boolean;
|
|
91
|
+
tomcatVersion: string;
|
|
92
|
+
servletVersion: string;
|
|
93
|
+
jspVersion: string;
|
|
94
|
+
warnings: string[];
|
|
95
|
+
errors: string[];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Estado do cache */
|
|
99
|
+
export interface CacheState {
|
|
100
|
+
enabled: boolean;
|
|
101
|
+
dir: string;
|
|
102
|
+
size: number;
|
|
103
|
+
files: CacheFile[];
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** Arquivo em cache */
|
|
107
|
+
export interface CacheFile {
|
|
108
|
+
name: string;
|
|
109
|
+
size: number;
|
|
110
|
+
modified: Date;
|
|
111
|
+
checksum: string;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** Configuração de backup */
|
|
115
|
+
export interface BackupConfig {
|
|
116
|
+
enabled: boolean;
|
|
117
|
+
dir: string;
|
|
118
|
+
maxBackups: number;
|
|
119
|
+
autoBackup: boolean;
|
|
120
|
+
}
|
package/src/types/args.ts
CHANGED
|
@@ -125,6 +125,65 @@ export interface CompletionArgs extends BaseArgs {
|
|
|
125
125
|
shell?: string;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
+
// ===== Args do Novo Comando Clean =====
|
|
129
|
+
export interface CleanArgs extends BaseArgs {
|
|
130
|
+
all?: boolean;
|
|
131
|
+
cache?: boolean;
|
|
132
|
+
build?: boolean;
|
|
133
|
+
logs?: boolean;
|
|
134
|
+
tomcat?: boolean;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// ===== Args do Comando Test =====
|
|
138
|
+
export interface TestArgs extends BaseArgs {
|
|
139
|
+
watch?: boolean;
|
|
140
|
+
coverage?: boolean;
|
|
141
|
+
"fail-fast"?: boolean;
|
|
142
|
+
parallel?: boolean;
|
|
143
|
+
// Positional: filter
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// ===== Args do Comando DB =====
|
|
147
|
+
export interface DbArgs extends BaseArgs {
|
|
148
|
+
force?: boolean;
|
|
149
|
+
// Positional: action (status, migrate, reset, seed)
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// ===== Args do Comando HTTP =====
|
|
153
|
+
export interface HttpArgs extends BaseArgs {
|
|
154
|
+
"base-url"?: string;
|
|
155
|
+
body?: string;
|
|
156
|
+
file?: string;
|
|
157
|
+
header?: string[];
|
|
158
|
+
"content-type"?: string;
|
|
159
|
+
accept?: string;
|
|
160
|
+
param?: string[];
|
|
161
|
+
timeout?: string;
|
|
162
|
+
// Positional: method, path
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// ===== Args do Comando Docker =====
|
|
166
|
+
export interface DockerArgs extends BaseArgs {
|
|
167
|
+
tag?: string;
|
|
168
|
+
"java-version"?: string;
|
|
169
|
+
detached?: boolean;
|
|
170
|
+
registry?: string;
|
|
171
|
+
namespace?: string;
|
|
172
|
+
// Positional: action (init, build, up, down, run, status)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// ===== Args do Comando Changelog =====
|
|
176
|
+
export interface ChangelogArgs extends BaseArgs {
|
|
177
|
+
output?: string;
|
|
178
|
+
from?: string;
|
|
179
|
+
to?: string;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// ===== Args do Novo Comando IDE =====
|
|
183
|
+
export interface IdeArgs extends BaseArgs {
|
|
184
|
+
ide?: "vscode" | "idea" | "eclipse";
|
|
185
|
+
}
|
|
186
|
+
|
|
128
187
|
// ===== CLIArguments Legado (para compatibilidade) =====
|
|
129
188
|
// Será gradualmente removido
|
|
130
189
|
export interface CLIArguments extends
|
|
@@ -134,7 +193,15 @@ export interface CLIArguments extends
|
|
|
134
193
|
DebugArgs,
|
|
135
194
|
AnalysisArgs,
|
|
136
195
|
EncodingArgs {
|
|
137
|
-
//
|
|
196
|
+
// Propriedades de CleanArgs
|
|
197
|
+
all?: boolean;
|
|
198
|
+
cache?: boolean;
|
|
199
|
+
build?: boolean;
|
|
200
|
+
logs?: boolean;
|
|
201
|
+
tomcat?: boolean;
|
|
202
|
+
// Propriedades extras
|
|
203
|
+
i?: boolean;
|
|
204
|
+
o?: string;
|
|
138
205
|
[key: string]: unknown;
|
|
139
206
|
}
|
|
140
207
|
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schemas de validação Zod para configurações do XAVVA CLI
|
|
3
|
+
* Garante type safety e validação em runtime
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
|
|
8
|
+
// ============================================
|
|
9
|
+
// SCHEMAS BASE
|
|
10
|
+
// ============================================
|
|
11
|
+
|
|
12
|
+
export const TomcatConfigSchema = z.object({
|
|
13
|
+
path: z.string().min(1, "Tomcat path é obrigatório"),
|
|
14
|
+
port: z.number().int().min(1).max(65535).default(8080),
|
|
15
|
+
webapps: z.string().default("webapps"),
|
|
16
|
+
grep: z.string().default(""),
|
|
17
|
+
embedded: z.boolean().default(false),
|
|
18
|
+
version: z.string().regex(/^\d+\.\d+\.\d+$/, "Versão deve seguir formato semver").default("10.1.52"),
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
export const ProjectConfigSchema = z.object({
|
|
22
|
+
appName: z.string().default(""),
|
|
23
|
+
buildTool: z.enum(["maven", "gradle"]).default("maven"),
|
|
24
|
+
profile: z.string().default(""),
|
|
25
|
+
skipBuild: z.boolean().default(false),
|
|
26
|
+
skipScan: z.boolean().default(true),
|
|
27
|
+
clean: z.boolean().default(false),
|
|
28
|
+
cleanLogs: z.boolean().default(true),
|
|
29
|
+
quiet: z.boolean().default(true),
|
|
30
|
+
verbose: z.boolean().default(false),
|
|
31
|
+
debug: z.boolean().default(false),
|
|
32
|
+
debugPort: z.number().int().min(1).max(65535).default(5005),
|
|
33
|
+
grep: z.string().default(""),
|
|
34
|
+
tui: z.boolean().default(false),
|
|
35
|
+
encoding: z.string().default(""),
|
|
36
|
+
war: z.boolean().default(false),
|
|
37
|
+
cache: z.boolean().default(false),
|
|
38
|
+
environment: z.string().default(""),
|
|
39
|
+
environments: z.record(z.any()).optional(),
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
export const AppConfigSchema = z.object({
|
|
43
|
+
tomcat: TomcatConfigSchema,
|
|
44
|
+
project: ProjectConfigSchema,
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// ============================================
|
|
48
|
+
// SCHEMAS DE CLI ARGS
|
|
49
|
+
// ============================================
|
|
50
|
+
|
|
51
|
+
export const BaseArgsSchema = z.object({
|
|
52
|
+
help: z.boolean().optional(),
|
|
53
|
+
version: z.boolean().optional(),
|
|
54
|
+
verbose: z.boolean().optional(),
|
|
55
|
+
quiet: z.boolean().optional(),
|
|
56
|
+
"debug-level": z.enum(["silent", "error", "warn", "info", "verbose", "trace", "silly"]).optional(),
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
export const ProjectArgsSchema = z.object({
|
|
60
|
+
tool: z.enum(["maven", "gradle"]).optional(),
|
|
61
|
+
name: z.string().optional(),
|
|
62
|
+
profile: z.string().optional(),
|
|
63
|
+
encoding: z.string().optional(),
|
|
64
|
+
"no-build": z.boolean().optional(),
|
|
65
|
+
clean: z.boolean().optional(),
|
|
66
|
+
war: z.boolean().optional(),
|
|
67
|
+
cache: z.boolean().optional(),
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
export const TomcatArgsSchema = z.object({
|
|
71
|
+
path: z.string().optional(),
|
|
72
|
+
port: z.string().optional(),
|
|
73
|
+
"tomcat-version": z.string().optional(),
|
|
74
|
+
yes: z.boolean().optional(),
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
export const DebugArgsSchema = z.object({
|
|
78
|
+
debug: z.boolean().optional(),
|
|
79
|
+
watch: z.boolean().optional(),
|
|
80
|
+
tui: z.boolean().optional(),
|
|
81
|
+
dp: z.string().optional(),
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// ============================================
|
|
85
|
+
// TIPOS INFERIDOS
|
|
86
|
+
// ============================================
|
|
87
|
+
|
|
88
|
+
export type ValidatedTomcatConfig = z.infer<typeof TomcatConfigSchema>;
|
|
89
|
+
export type ValidatedProjectConfig = z.infer<typeof ProjectConfigSchema>;
|
|
90
|
+
export type ValidatedAppConfig = z.infer<typeof AppConfigSchema>;
|
|
91
|
+
|
|
92
|
+
// ============================================
|
|
93
|
+
// FUNÇÕES DE VALIDAÇÃO
|
|
94
|
+
// ============================================
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Valida configuração completa do aplicativo
|
|
98
|
+
*/
|
|
99
|
+
export function validateAppConfig(config: unknown): ValidatedAppConfig {
|
|
100
|
+
if (!config || typeof config !== 'object') {
|
|
101
|
+
throw new Error("Configuração deve ser um objeto");
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const result = AppConfigSchema.safeParse(config);
|
|
105
|
+
|
|
106
|
+
if (!result.success) {
|
|
107
|
+
const issues = result.error?.issues || result.error?.errors || [];
|
|
108
|
+
const formattedErrors = issues.map((e: any) =>
|
|
109
|
+
`${e.path?.join('.') || 'root'}: ${e.message}`
|
|
110
|
+
).join('\n');
|
|
111
|
+
|
|
112
|
+
throw new Error(`Configuração inválida:\n${formattedErrors || result.error?.message || 'Erro desconhecido'}`);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return result.data;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Valida config parcial (para merges)
|
|
120
|
+
*/
|
|
121
|
+
export function validatePartialConfig(config: unknown): Partial<ValidatedAppConfig> {
|
|
122
|
+
const result = AppConfigSchema.partial().safeParse(config);
|
|
123
|
+
|
|
124
|
+
if (!result.success) {
|
|
125
|
+
const formattedErrors = result.error.errors.map(e =>
|
|
126
|
+
`${e.path.join('.')}: ${e.message}`
|
|
127
|
+
).join('\n');
|
|
128
|
+
|
|
129
|
+
throw new Error(`Configuração parcial inválida:\n${formattedErrors}`);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return result.data;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Valida porta (helper)
|
|
137
|
+
*/
|
|
138
|
+
export function validatePort(port: string | number): number {
|
|
139
|
+
const num = typeof port === 'string' ? parseInt(port, 10) : port;
|
|
140
|
+
|
|
141
|
+
if (isNaN(num) || num < 1 || num > 65535) {
|
|
142
|
+
throw new Error(`Porta inválida: ${port}. Deve ser entre 1 e 65535.`);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return num;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Valida versão do Tomcat
|
|
150
|
+
*/
|
|
151
|
+
export function validateTomcatVersion(version: string): string {
|
|
152
|
+
const semverRegex = /^\d+\.\d+\.\d+$/;
|
|
153
|
+
|
|
154
|
+
if (!semverRegex.test(version)) {
|
|
155
|
+
throw new Error(`Versão do Tomcat inválida: ${version}. Formato esperado: x.x.x (ex: 10.1.52)`);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return version;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Merge seguro de configurações
|
|
163
|
+
*/
|
|
164
|
+
export function mergeConfigs(
|
|
165
|
+
base: Partial<ValidatedAppConfig>,
|
|
166
|
+
override: Partial<ValidatedAppConfig>
|
|
167
|
+
): ValidatedAppConfig {
|
|
168
|
+
const merged = {
|
|
169
|
+
tomcat: { ...base.tomcat, ...override.tomcat },
|
|
170
|
+
project: { ...base.project, ...override.project },
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
return validateAppConfig(merged);
|
|
174
|
+
}
|
|
@@ -20,17 +20,17 @@ interface Version {
|
|
|
20
20
|
|
|
21
21
|
export class ChangelogGenerator {
|
|
22
22
|
private static readonly TYPES: Record<string, { title: string; emoji: string }> = {
|
|
23
|
-
feat: { title: "Features", emoji: "
|
|
24
|
-
fix: { title: "Bug Fixes", emoji: "
|
|
25
|
-
docs: { title: "Documentation", emoji: "
|
|
26
|
-
style: { title: "Styles", emoji: "
|
|
27
|
-
refactor: { title: "Code Refactoring", emoji: "
|
|
28
|
-
perf: { title: "Performance", emoji: "
|
|
29
|
-
test: { title: "Tests", emoji: "
|
|
30
|
-
build: { title: "Build System", emoji: "
|
|
31
|
-
ci: { title: "CI/CD", emoji: "
|
|
32
|
-
chore: { title: "Chores", emoji: "
|
|
33
|
-
revert: { title: "Reverts", emoji: "
|
|
23
|
+
feat: { title: "Features", emoji: "+" },
|
|
24
|
+
fix: { title: "Bug Fixes", emoji: "!" },
|
|
25
|
+
docs: { title: "Documentation", emoji: "D" },
|
|
26
|
+
style: { title: "Styles", emoji: "S" },
|
|
27
|
+
refactor: { title: "Code Refactoring", emoji: "R" },
|
|
28
|
+
perf: { title: "Performance", emoji: "P" },
|
|
29
|
+
test: { title: "Tests", emoji: "T" },
|
|
30
|
+
build: { title: "Build System", emoji: "B" },
|
|
31
|
+
ci: { title: "CI/CD", emoji: "C" },
|
|
32
|
+
chore: { title: "Chores", emoji: "*" },
|
|
33
|
+
revert: { title: "Reverts", emoji: "-" },
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
static generate(): string {
|
package/src/utils/LoggerLevel.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* LoggerLevel - Adaptador para o novo sistema de logging
|
|
3
|
+
*
|
|
4
|
+
* @deprecated Use o Logger de src/logging/ diretamente
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Logger } from "../logging";
|
|
2
8
|
|
|
3
9
|
export type LogLevel = "silent" | "error" | "warn" | "info" | "verbose" | "trace" | "silly";
|
|
4
10
|
|
|
@@ -8,20 +14,28 @@ interface LogLevelConfig {
|
|
|
8
14
|
prefix: string;
|
|
9
15
|
}
|
|
10
16
|
|
|
17
|
+
/**
|
|
18
|
+
* @deprecated Use Logger de src/logging/
|
|
19
|
+
*
|
|
20
|
+
* LoggerLevel - Adaptador que delega para o novo sistema de logging
|
|
21
|
+
*/
|
|
11
22
|
export class LoggerLevel {
|
|
12
23
|
private static currentLevel: LogLevel = "info";
|
|
24
|
+
private static logger = Logger.getInstance();
|
|
25
|
+
|
|
13
26
|
private static readonly levels: Record<LogLevel, LogLevelConfig> = {
|
|
14
27
|
silent: { value: 0, color: "", prefix: "" },
|
|
15
|
-
error: { value: 1, color: Logger.
|
|
16
|
-
warn: { value: 2, color: Logger.
|
|
17
|
-
info: { value: 3, color: Logger.
|
|
18
|
-
verbose: { value: 4, color: Logger.
|
|
19
|
-
trace: { value: 5, color: Logger.
|
|
20
|
-
silly: { value: 6, color: Logger.
|
|
28
|
+
error: { value: 1, color: Logger.getInstance()['config'].colors ? "\x1b[31m" : "", prefix: "ERR" },
|
|
29
|
+
warn: { value: 2, color: Logger.getInstance()['config'].colors ? "\x1b[33m" : "", prefix: "WRN" },
|
|
30
|
+
info: { value: 3, color: Logger.getInstance()['config'].colors ? "\x1b[34m" : "", prefix: "INF" },
|
|
31
|
+
verbose: { value: 4, color: Logger.getInstance()['config'].colors ? "\x1b[36m" : "", prefix: "VRB" },
|
|
32
|
+
trace: { value: 5, color: Logger.getInstance()['config'].colors ? "\x1b[90m" : "", prefix: "TRC" },
|
|
33
|
+
silly: { value: 6, color: Logger.getInstance()['config'].colors ? "\x1b[38;5;240m" : "", prefix: "SLY" },
|
|
21
34
|
};
|
|
22
35
|
|
|
23
36
|
static setLevel(level: LogLevel): void {
|
|
24
37
|
this.currentLevel = level;
|
|
38
|
+
this.logger.setLevel(level);
|
|
25
39
|
}
|
|
26
40
|
|
|
27
41
|
static getLevel(): LogLevel {
|
|
@@ -35,17 +49,27 @@ export class LoggerLevel {
|
|
|
35
49
|
private static log(level: LogLevel, message: string, ...args: unknown[]): void {
|
|
36
50
|
if (!this.shouldLog(level)) return;
|
|
37
51
|
|
|
38
|
-
const config = this.levels[level];
|
|
39
52
|
const formatted = args.length > 0
|
|
40
53
|
? this.formatMessage(message, args)
|
|
41
54
|
: message;
|
|
42
55
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
56
|
+
switch (level) {
|
|
57
|
+
case "error":
|
|
58
|
+
this.logger.error(formatted);
|
|
59
|
+
break;
|
|
60
|
+
case "warn":
|
|
61
|
+
this.logger.warn(formatted);
|
|
62
|
+
break;
|
|
63
|
+
case "info":
|
|
64
|
+
this.logger.info(formatted);
|
|
65
|
+
break;
|
|
66
|
+
case "verbose":
|
|
67
|
+
this.logger.debug(formatted);
|
|
68
|
+
break;
|
|
69
|
+
case "trace":
|
|
70
|
+
case "silly":
|
|
71
|
+
this.logger.trace(formatted);
|
|
72
|
+
break;
|
|
49
73
|
}
|
|
50
74
|
}
|
|
51
75
|
|
|
@@ -87,13 +111,13 @@ export class LoggerLevel {
|
|
|
87
111
|
// Utility methods for specific debug scenarios
|
|
88
112
|
static debugCommand(command: string, args: string[]): void {
|
|
89
113
|
if (this.shouldLog("verbose")) {
|
|
90
|
-
this.verbose("
|
|
114
|
+
this.verbose("Executando: %1 %2", command, args.join(" "));
|
|
91
115
|
}
|
|
92
116
|
}
|
|
93
117
|
|
|
94
118
|
static debugSpawn(cmd: string, options: Record<string, unknown>): void {
|
|
95
119
|
if (this.shouldLog("trace")) {
|
|
96
|
-
this.trace("Spawn: %1
|
|
120
|
+
this.trace("Spawn: %1 com opções: %2", cmd, options);
|
|
97
121
|
}
|
|
98
122
|
}
|
|
99
123
|
|
|
@@ -106,7 +130,7 @@ export class LoggerLevel {
|
|
|
106
130
|
|
|
107
131
|
static debugFile(operation: string, path: string, details?: unknown): void {
|
|
108
132
|
if (this.shouldLog("trace")) {
|
|
109
|
-
this.trace("
|
|
133
|
+
this.trace("Arquivo %1: %2 %3", operation, path, details || "");
|
|
110
134
|
}
|
|
111
135
|
}
|
|
112
136
|
|
|
@@ -118,7 +142,7 @@ export class LoggerLevel {
|
|
|
118
142
|
|
|
119
143
|
static debugPerformance(operation: string, durationMs: number): void {
|
|
120
144
|
if (this.shouldLog("verbose")) {
|
|
121
|
-
this.verbose("Performance: %1
|
|
145
|
+
this.verbose("Performance: %1 levou %2ms", operation, durationMs);
|
|
122
146
|
}
|
|
123
147
|
}
|
|
124
148
|
|
|
@@ -128,11 +152,11 @@ export class LoggerLevel {
|
|
|
128
152
|
}
|
|
129
153
|
|
|
130
154
|
const start = performance.now();
|
|
131
|
-
this.verbose("Timing
|
|
155
|
+
this.verbose("Timing iniciado: %1", label);
|
|
132
156
|
|
|
133
157
|
return () => {
|
|
134
158
|
const duration = Math.round(performance.now() - start);
|
|
135
|
-
this.verbose("Timing
|
|
159
|
+
this.verbose("Timing finalizado: %1 levou %2ms", label, duration);
|
|
136
160
|
};
|
|
137
161
|
}
|
|
138
162
|
}
|