@silasfmartins/testhub 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/.github/copilot-instructions.md +520 -0
- package/biome.json +37 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.js +169 -0
- package/dist/scripts/consumer-postinstall.d.ts +15 -0
- package/dist/scripts/consumer-postinstall.js +785 -0
- package/dist/scripts/generate-docs.d.ts +16 -0
- package/dist/scripts/generate-docs.js +1363 -0
- package/dist/scripts/generate-index.d.ts +2 -0
- package/dist/scripts/generate-index.js +314 -0
- package/dist/scripts/init-api.d.ts +2 -0
- package/dist/scripts/init-api.js +525 -0
- package/dist/scripts/init-banco.d.ts +2 -0
- package/dist/scripts/init-banco.js +347 -0
- package/dist/scripts/init-frontend.d.ts +2 -0
- package/dist/scripts/init-frontend.js +627 -0
- package/dist/scripts/init-mobile.d.ts +2 -0
- package/dist/scripts/init-mobile.js +481 -0
- package/dist/scripts/init-scenarios.d.ts +2 -0
- package/dist/scripts/init-scenarios.js +846 -0
- package/dist/scripts/init-ssh.d.ts +2 -0
- package/dist/scripts/init-ssh.js +639 -0
- package/dist/scripts/package-versions.d.ts +57 -0
- package/dist/scripts/package-versions.js +768 -0
- package/dist/scripts/postinstall.d.ts +1 -0
- package/dist/scripts/postinstall.js +527 -0
- package/dist/scripts/robust-build.d.ts +7 -0
- package/dist/scripts/robust-build.js +88 -0
- package/dist/scripts/setup-local-packages.d.ts +31 -0
- package/dist/scripts/setup-local-packages.js +237 -0
- package/dist/scripts/smart-override.d.ts +2 -0
- package/dist/scripts/smart-override.js +1360 -0
- package/dist/scripts/sync-configs.d.ts +27 -0
- package/dist/scripts/sync-configs.js +248 -0
- package/dist/scripts/test-biome-parse.d.ts +5 -0
- package/dist/scripts/test-biome-parse.js +84 -0
- package/dist/scripts/ultracite-setup.d.ts +4 -0
- package/dist/scripts/ultracite-setup.js +310 -0
- package/dist/scripts/update-all-init-scripts.d.ts +2 -0
- package/dist/scripts/update-all-init-scripts.js +52 -0
- package/dist/scripts/update-biome-schema.d.ts +15 -0
- package/dist/scripts/update-biome-schema.js +124 -0
- package/dist/src/AutoCoreFacade.d.ts +145 -0
- package/dist/src/AutoCoreFacade.js +217 -0
- package/dist/src/api/ApiActions.d.ts +297 -0
- package/dist/src/api/ApiActions.js +1905 -0
- package/dist/src/api/Certificate.d.ts +60 -0
- package/dist/src/api/Certificate.js +79 -0
- package/dist/src/api/JsonResponse.d.ts +116 -0
- package/dist/src/api/JsonResponse.js +206 -0
- package/dist/src/appium/DeviceFarmViewer.d.ts +79 -0
- package/dist/src/appium/DeviceFarmViewer.js +1083 -0
- package/dist/src/appium/MobileActions.d.ts +347 -0
- package/dist/src/appium/MobileActions.js +1632 -0
- package/dist/src/appium/MobileConnection.d.ts +160 -0
- package/dist/src/appium/MobileConnection.js +772 -0
- package/dist/src/config/envLoader.d.ts +123 -0
- package/dist/src/config/envLoader.js +361 -0
- package/dist/src/config/jest-safe-setup.d.ts +19 -0
- package/dist/src/config/jest-safe-setup.js +369 -0
- package/dist/src/config/timeouts.d.ts +32 -0
- package/dist/src/config/timeouts.js +38 -0
- package/dist/src/desktop/DesktopActions.d.ts +46 -0
- package/dist/src/desktop/DesktopActions.js +398 -0
- package/dist/src/desktop/DesktopConnection.d.ts +32 -0
- package/dist/src/desktop/DesktopConnection.js +84 -0
- package/dist/src/domain/entities/TestExecution.d.ts +117 -0
- package/dist/src/domain/entities/TestExecution.js +150 -0
- package/dist/src/domain/entities/TestReport.d.ts +114 -0
- package/dist/src/domain/entities/TestReport.js +179 -0
- package/dist/src/domain/repositories/ITestRepository.d.ts +196 -0
- package/dist/src/domain/repositories/ITestRepository.js +14 -0
- package/dist/src/domain/schemas/ValidationSchemas.d.ts +159 -0
- package/dist/src/domain/schemas/ValidationSchemas.js +181 -0
- package/dist/src/functions/errors/BaseError.d.ts +78 -0
- package/dist/src/functions/errors/BaseError.js +245 -0
- package/dist/src/functions/errors/ConfigurationError.d.ts +16 -0
- package/dist/src/functions/errors/ConfigurationError.js +48 -0
- package/dist/src/functions/errors/ErrorCatalog.d.ts +148 -0
- package/dist/src/functions/errors/ErrorCatalog.js +157 -0
- package/dist/src/functions/errors/GlobalErrorHandler.d.ts +101 -0
- package/dist/src/functions/errors/GlobalErrorHandler.js +281 -0
- package/dist/src/functions/errors/IntegrationError.d.ts +17 -0
- package/dist/src/functions/errors/IntegrationError.js +51 -0
- package/dist/src/functions/errors/SecurityError.d.ts +14 -0
- package/dist/src/functions/errors/SecurityError.js +42 -0
- package/dist/src/functions/errors/SystemError.d.ts +12 -0
- package/dist/src/functions/errors/SystemError.js +36 -0
- package/dist/src/functions/errors/ValidationError.d.ts +14 -0
- package/dist/src/functions/errors/ValidationError.js +61 -0
- package/dist/src/functions/errors/index.d.ts +12 -0
- package/dist/src/functions/errors/index.js +13 -0
- package/dist/src/global-setup.d.ts +1 -0
- package/dist/src/global-setup.js +1037 -0
- package/dist/src/helpers/BancoActions.d.ts +188 -0
- package/dist/src/helpers/BancoActions.js +581 -0
- package/dist/src/helpers/EnviromentHelper.d.ts +17 -0
- package/dist/src/helpers/EnviromentHelper.js +66 -0
- package/dist/src/helpers/ParallelExecutionHelper.d.ts +183 -0
- package/dist/src/helpers/ParallelExecutionHelper.js +375 -0
- package/dist/src/helpers/SyncSignal.d.ts +15 -0
- package/dist/src/helpers/SyncSignal.js +44 -0
- package/dist/src/hubdocs/CategoryDetector.d.ts +83 -0
- package/dist/src/hubdocs/CategoryDetector.js +401 -0
- package/dist/src/hubdocs/DirectStatementInterceptor.d.ts +54 -0
- package/dist/src/hubdocs/DirectStatementInterceptor.js +243 -0
- package/dist/src/hubdocs/ExecutionTracker.d.ts +107 -0
- package/dist/src/hubdocs/ExecutionTracker.js +702 -0
- package/dist/src/hubdocs/HubDocs.d.ts +395 -0
- package/dist/src/hubdocs/HubDocs.js +3586 -0
- package/dist/src/hubdocs/StatementMethodFilter.d.ts +71 -0
- package/dist/src/hubdocs/StatementMethodFilter.js +618 -0
- package/dist/src/hubdocs/StatementTracker.d.ts +417 -0
- package/dist/src/hubdocs/StatementTracker.js +2419 -0
- package/dist/src/hubdocs/SwaggerGenerator.d.ts +59 -0
- package/dist/src/hubdocs/SwaggerGenerator.js +405 -0
- package/dist/src/hubdocs/index.d.ts +9 -0
- package/dist/src/hubdocs/index.js +9 -0
- package/dist/src/hubdocs/types.d.ts +114 -0
- package/dist/src/hubdocs/types.js +5 -0
- package/dist/src/infrastructure/DependencyContainer.d.ts +142 -0
- package/dist/src/infrastructure/DependencyContainer.js +250 -0
- package/dist/src/infrastructure/adapters/AppiumAdapter.d.ts +168 -0
- package/dist/src/infrastructure/adapters/AppiumAdapter.js +468 -0
- package/dist/src/infrastructure/adapters/OracleAdapter.d.ts +150 -0
- package/dist/src/infrastructure/adapters/OracleAdapter.js +388 -0
- package/dist/src/infrastructure/adapters/PlaywrightAdapter.d.ts +192 -0
- package/dist/src/infrastructure/adapters/PlaywrightAdapter.js +382 -0
- package/dist/src/infrastructure/adapters/SSHAdapter.d.ts +141 -0
- package/dist/src/infrastructure/adapters/SSHAdapter.js +428 -0
- package/dist/src/interfaces.d.ts +501 -0
- package/dist/src/interfaces.js +25 -0
- package/dist/src/internal/fakes/__fake-actions__.d.ts +17 -0
- package/dist/src/internal/fakes/__fake-actions__.js +21 -0
- package/dist/src/internal/fakes/__forbidden__.d.ts +10 -0
- package/dist/src/internal/fakes/__forbidden__.js +18 -0
- package/dist/src/internal/fakes/__honeypot__.d.ts +15 -0
- package/dist/src/internal/fakes/__honeypot__.js +24 -0
- package/dist/src/octane/OctaneReporter.d.ts +13 -0
- package/dist/src/octane/OctaneReporter.js +61 -0
- package/dist/src/playwright/CryptoActions.d.ts +20 -0
- package/dist/src/playwright/CryptoActions.js +75 -0
- package/dist/src/playwright/EnhancedWebActions.d.ts +7 -0
- package/dist/src/playwright/EnhancedWebActions.js +65 -0
- package/dist/src/playwright/WebActions.d.ts +1599 -0
- package/dist/src/playwright/WebActions.js +11788 -0
- package/dist/src/playwright/actions/ActionTimeline.d.ts +36 -0
- package/dist/src/playwright/actions/ActionTimeline.js +101 -0
- package/dist/src/playwright/actions/RecoveryQueue.d.ts +82 -0
- package/dist/src/playwright/actions/RecoveryQueue.js +130 -0
- package/dist/src/playwright/actions/SelectorCache.d.ts +53 -0
- package/dist/src/playwright/actions/SelectorCache.js +96 -0
- package/dist/src/playwright/actions/index.d.ts +13 -0
- package/dist/src/playwright/actions/index.js +14 -0
- package/dist/src/playwright/actions/types.d.ts +147 -0
- package/dist/src/playwright/actions/types.js +5 -0
- package/dist/src/playwright/fixtures.d.ts +112 -0
- package/dist/src/playwright/fixtures.js +718 -0
- package/dist/src/playwright/network-logs-reporter.d.ts +7 -0
- package/dist/src/playwright/network-logs-reporter.js +66 -0
- package/dist/src/playwright/registerRecoveryWrappers.d.ts +1 -0
- package/dist/src/playwright/registerRecoveryWrappers.js +54 -0
- package/dist/src/security/BuildSecurity.d.ts +12 -0
- package/dist/src/security/BuildSecurity.js +138 -0
- package/dist/src/security/EulaProtection.d.ts +70 -0
- package/dist/src/security/EulaProtection.js +155 -0
- package/dist/src/security/HoneypotManager.d.ts +46 -0
- package/dist/src/security/HoneypotManager.js +234 -0
- package/dist/src/security/KeysManager.d.ts +36 -0
- package/dist/src/security/KeysManager.js +158 -0
- package/dist/src/security/ProofOfWorkIntegration.d.ts +64 -0
- package/dist/src/security/ProofOfWorkIntegration.js +206 -0
- package/dist/src/security/SecurityValidation.d.ts +21 -0
- package/dist/src/security/SecurityValidation.js +163 -0
- package/dist/src/security/SourceMapProtection.d.ts +55 -0
- package/dist/src/security/SourceMapProtection.js +220 -0
- package/dist/src/security/protector.d.ts +1 -0
- package/dist/src/security/protector.js +97 -0
- package/dist/src/ssh/SSHActions.d.ts +262 -0
- package/dist/src/ssh/SSHActions.js +790 -0
- package/dist/src/ssh/SSHClient.d.ts +99 -0
- package/dist/src/ssh/SSHClient.js +409 -0
- package/dist/src/statements/BaseStatement.d.ts +38 -0
- package/dist/src/statements/BaseStatement.js +78 -0
- package/dist/src/testContext/AuthStateManager.d.ts +93 -0
- package/dist/src/testContext/AuthStateManager.js +256 -0
- package/dist/src/testContext/CoverageManager.d.ts +198 -0
- package/dist/src/testContext/CoverageManager.js +917 -0
- package/dist/src/testContext/TestAnnotations.d.ts +476 -0
- package/dist/src/testContext/TestAnnotations.js +2647 -0
- package/dist/src/testContext/TestContext.d.ts +138 -0
- package/dist/src/testContext/TestContext.js +369 -0
- package/dist/src/testContext/UnifiedHtmlGenerator.d.ts +7 -0
- package/dist/src/testContext/UnifiedHtmlGenerator.js +264 -0
- package/dist/src/testContext/UnifiedReportManager.d.ts +211 -0
- package/dist/src/testContext/UnifiedReportManager.js +1206 -0
- package/dist/src/testhub/DynamicConfigManager.d.ts +121 -0
- package/dist/src/testhub/DynamicConfigManager.js +320 -0
- package/dist/src/testhub/SystemsManager.d.ts +119 -0
- package/dist/src/testhub/SystemsManager.js +365 -0
- package/dist/src/testhub/TestHubClient.d.ts +335 -0
- package/dist/src/testhub/TestHubClient.js +1215 -0
- package/dist/src/testhub/TestHubReporter.d.ts +62 -0
- package/dist/src/testhub/TestHubReporter.js +576 -0
- package/dist/src/testhub/TestHubVars.d.ts +116 -0
- package/dist/src/testhub/TestHubVars.js +273 -0
- package/dist/src/utils/ActionInterceptor.d.ts +59 -0
- package/dist/src/utils/ActionInterceptor.js +741 -0
- package/dist/src/utils/ArtifactsCompressor.d.ts +43 -0
- package/dist/src/utils/ArtifactsCompressor.js +181 -0
- package/dist/src/utils/AutoLogsFinal.d.ts +47 -0
- package/dist/src/utils/AutoLogsFinal.js +148 -0
- package/dist/src/utils/CodeGenSession.d.ts +114 -0
- package/dist/src/utils/CodeGenSession.js +264 -0
- package/dist/src/utils/ConfigLogger.d.ts +133 -0
- package/dist/src/utils/ConfigLogger.js +611 -0
- package/dist/src/utils/CustomReporter.d.ts +22 -0
- package/dist/src/utils/CustomReporter.js +352 -0
- package/dist/src/utils/DataStore.d.ts +171 -0
- package/dist/src/utils/DataStore.js +484 -0
- package/dist/src/utils/DatabaseInterceptor.d.ts +19 -0
- package/dist/src/utils/DatabaseInterceptor.js +295 -0
- package/dist/src/utils/DateHelper.d.ts +16 -0
- package/dist/src/utils/DateHelper.js +120 -0
- package/dist/src/utils/DateValidator.d.ts +4 -0
- package/dist/src/utils/DateValidator.js +51 -0
- package/dist/src/utils/DocumentGenerator.d.ts +35 -0
- package/dist/src/utils/DocumentGenerator.js +129 -0
- package/dist/src/utils/EvidenceCapture.d.ts +90 -0
- package/dist/src/utils/EvidenceCapture.js +600 -0
- package/dist/src/utils/EvidenceReportGenerator.d.ts +70 -0
- package/dist/src/utils/EvidenceReportGenerator.js +799 -0
- package/dist/src/utils/FrameManagementUtil.d.ts +42 -0
- package/dist/src/utils/FrameManagementUtil.js +75 -0
- package/dist/src/utils/GlobalStatementsInterceptor.d.ts +1 -0
- package/dist/src/utils/GlobalStatementsInterceptor.js +1 -0
- package/dist/src/utils/HTMLTemplate.d.ts +1 -0
- package/dist/src/utils/HTMLTemplate.js +1034 -0
- package/dist/src/utils/InterceptacaoMagica.d.ts +23 -0
- package/dist/src/utils/InterceptacaoMagica.js +365 -0
- package/dist/src/utils/LogSanitizer.d.ts +35 -0
- package/dist/src/utils/LogSanitizer.js +110 -0
- package/dist/src/utils/Logger.d.ts +65 -0
- package/dist/src/utils/Logger.js +284 -0
- package/dist/src/utils/McpLocalClient.d.ts +141 -0
- package/dist/src/utils/McpLocalClient.js +871 -0
- package/dist/src/utils/PDFEvidenceGenerator.d.ts +20 -0
- package/dist/src/utils/PDFEvidenceGenerator.js +156 -0
- package/dist/src/utils/SpecFileAnalyzer.d.ts +35 -0
- package/dist/src/utils/SpecFileAnalyzer.js +209 -0
- package/dist/src/utils/StatementInterceptor.d.ts +18 -0
- package/dist/src/utils/StatementInterceptor.js +87 -0
- package/dist/src/utils/StatementLogger.d.ts +33 -0
- package/dist/src/utils/StatementLogger.js +113 -0
- package/dist/src/utils/StatementsInterceptor.d.ts +1 -0
- package/dist/src/utils/StatementsInterceptor.js +1 -0
- package/dist/src/utils/TeamsFlushHook.d.ts +17 -0
- package/dist/src/utils/TeamsFlushHook.js +168 -0
- package/dist/src/utils/TerminalLogCapture.d.ts +158 -0
- package/dist/src/utils/TerminalLogCapture.js +531 -0
- package/dist/src/utils/TestMethodLogger.d.ts +70 -0
- package/dist/src/utils/TestMethodLogger.js +95 -0
- package/dist/src/utils/UnifiedTeardown.d.ts +4 -0
- package/dist/src/utils/UnifiedTeardown.js +400 -0
- package/dist/src/utils/XPathCatalog.d.ts +152 -0
- package/dist/src/utils/XPathCatalog.js +350 -0
- package/dist/src/utils/generators.d.ts +90 -0
- package/dist/src/utils/generators.js +167 -0
- package/dist/src/utils/testRecovery/ResilientPlaywright.d.ts +152 -0
- package/dist/src/utils/testRecovery/ResilientPlaywright.js +715 -0
- package/dist/src/utils/testRecovery/TestRecoveryClient.d.ts +801 -0
- package/dist/src/utils/testRecovery/TestRecoveryClient.js +1415 -0
- package/dist/src/utils/testRecovery/autoFixCode.d.ts +65 -0
- package/dist/src/utils/testRecovery/autoFixCode.js +32 -0
- package/dist/vitest.config.d.ts +2 -0
- package/dist/vitest.config.js +59 -0
- package/dist/wdio.conf.d.ts +1 -0
- package/dist/wdio.conf.js +420 -0
- package/package.json +137 -0
- package/protect-loader.mjs +643 -0
- package/scripts/consumer-postinstall.ts +975 -0
- package/scripts/generate-index.ts +343 -0
- package/scripts/init-api.ts +613 -0
- package/scripts/init-banco.ts +437 -0
- package/scripts/init-frontend.ts +727 -0
- package/scripts/init-mobile.ts +558 -0
- package/scripts/init-scenarios.ts +925 -0
- package/scripts/init-ssh.ts +734 -0
- package/scripts/package-versions.ts +978 -0
- package/scripts/postinstall.ts +605 -0
- package/scripts/smart-override.ts +1675 -0
- package/scripts/sync-configs.ts +302 -0
- package/scripts/ultracite-setup.ts +370 -0
- package/src/types/globals.d.ts +48 -0
- package/tsconfig.json +29 -0
- package/types/autocore-sync-signal.d.ts +10 -0
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { AutoDocs } from '../hubdocs/HubDocs.js';
|
|
4
|
+
import { CoverageManager } from '../testContext/CoverageManager.js';
|
|
5
|
+
import { UnifiedReportManager, } from '../testContext/UnifiedReportManager.js';
|
|
6
|
+
import { Logger } from './Logger.js';
|
|
7
|
+
import { UnifiedTeardown } from './UnifiedTeardown.js';
|
|
8
|
+
import { StatementTracker } from '../hubdocs/StatementTracker.js';
|
|
9
|
+
import { ExecutionTracker } from '../hubdocs/ExecutionTracker.js';
|
|
10
|
+
export default class CustomReporter {
|
|
11
|
+
testCount = 0;
|
|
12
|
+
completedTests = 0;
|
|
13
|
+
projectRoot = '';
|
|
14
|
+
// 🔧 NOVO: Rastrear CTs por CN para finalizar apenas quando todos terminarem
|
|
15
|
+
ctsByCN = new Map();
|
|
16
|
+
// 🔧 Cache local do StatementTracker para evitar múltiplas resoluções
|
|
17
|
+
statementTracker;
|
|
18
|
+
onBegin(config, suite) {
|
|
19
|
+
// ✅ CORRIGIDO: Contar testes corretamente
|
|
20
|
+
this.testCount = this.countAllTests(suite);
|
|
21
|
+
console.log(`🎯 Iniciando execução de ${this.testCount} testes`);
|
|
22
|
+
// 📡 NETWORK LOGS: Capturar projectRoot para copiar logs depois
|
|
23
|
+
this.projectRoot = config.rootDir;
|
|
24
|
+
if (this.projectRoot.endsWith('tests') || this.projectRoot.endsWith('tests/') || this.projectRoot.endsWith('tests\\')) {
|
|
25
|
+
this.projectRoot = path.dirname(this.projectRoot);
|
|
26
|
+
}
|
|
27
|
+
// 🔧 NOVO: Mapear CNs e seus CTs
|
|
28
|
+
this.mapCNsAndCTs(suite);
|
|
29
|
+
// ✅ ESSENCIAL: Inicializar o gerenciador unificado
|
|
30
|
+
UnifiedReportManager.registrarInicioExecucao();
|
|
31
|
+
// ✅ CRÍTICO: Inicializar ExecutionTracker para garantir persistência
|
|
32
|
+
// Fazer de forma assíncrona sem bloquear
|
|
33
|
+
import('../hubdocs/ExecutionTracker.js')
|
|
34
|
+
.then(({ ExecutionTracker }) => {
|
|
35
|
+
ExecutionTracker.initialize();
|
|
36
|
+
})
|
|
37
|
+
.catch((error) => {
|
|
38
|
+
console.warn(`⚠️ CustomReporter: Erro ao inicializar ExecutionTracker: ${String(error)}`);
|
|
39
|
+
});
|
|
40
|
+
// ✅ NOVO: Inicializar AutoDocs para documentação automática
|
|
41
|
+
try {
|
|
42
|
+
AutoDocs.initialize({
|
|
43
|
+
projectName: 'TestHUB Project',
|
|
44
|
+
outputDir: './docs',
|
|
45
|
+
config: {
|
|
46
|
+
enabled: true,
|
|
47
|
+
categories: ['api', 'ssh', 'db', 'ui', 'mobile'],
|
|
48
|
+
generateSwagger: true,
|
|
49
|
+
includeScreenshots: true,
|
|
50
|
+
},
|
|
51
|
+
})
|
|
52
|
+
.catch((error) => {
|
|
53
|
+
Logger.warning(`Erro ao inicializar AutoDocs: ${String(error)}`);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
Logger.warning(`Erro ao carregar AutoDocs: ${String(error)}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
countAllTests(suite) {
|
|
61
|
+
let count = 0;
|
|
62
|
+
// Contar testes diretos da suite
|
|
63
|
+
if (suite.tests) {
|
|
64
|
+
count += suite.tests.length;
|
|
65
|
+
}
|
|
66
|
+
// Contar testes das suites filhas (recursivo)
|
|
67
|
+
if (suite.suites) {
|
|
68
|
+
for (const childSuite of suite.suites) {
|
|
69
|
+
count += this.countAllTests(childSuite);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return count;
|
|
73
|
+
}
|
|
74
|
+
// 🔧 NOVO: Mapear CNs (test.describe) e seus CTs (test)
|
|
75
|
+
mapCNsAndCTs(suite) {
|
|
76
|
+
// Se a suite tem suites filhas (test.describe), mapear os CTs dentro
|
|
77
|
+
if (suite.suites && suite.suites.length > 0) {
|
|
78
|
+
for (const childSuite of suite.suites) {
|
|
79
|
+
// childSuite.title = CN (ex: "CN001_Orquestrador FTTH")
|
|
80
|
+
const cnName = childSuite.title;
|
|
81
|
+
const ctCount = childSuite.tests?.length || 0;
|
|
82
|
+
if (ctCount > 0) {
|
|
83
|
+
this.ctsByCN.set(cnName, {
|
|
84
|
+
total: ctCount,
|
|
85
|
+
completed: 0,
|
|
86
|
+
lastStatus: 'passed',
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// Recursivo para test.describe aninhados
|
|
90
|
+
this.mapCNsAndCTs(childSuite);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
detectProjectType(test) {
|
|
95
|
+
if (!test.location?.file) {
|
|
96
|
+
return 'Mixed';
|
|
97
|
+
}
|
|
98
|
+
const fileName = test.location.file.toLowerCase();
|
|
99
|
+
if (fileName.includes('frontend') || fileName.includes('page-object')) {
|
|
100
|
+
return 'Frontend';
|
|
101
|
+
}
|
|
102
|
+
if (fileName.includes('api') || fileName.includes('request')) {
|
|
103
|
+
return 'API';
|
|
104
|
+
}
|
|
105
|
+
if (fileName.includes('mobile')) {
|
|
106
|
+
return 'Mobile';
|
|
107
|
+
}
|
|
108
|
+
if (fileName.includes('ssh')) {
|
|
109
|
+
return 'SSH';
|
|
110
|
+
}
|
|
111
|
+
if (fileName.includes('banco') || fileName.includes('database')) {
|
|
112
|
+
return 'Banco';
|
|
113
|
+
}
|
|
114
|
+
if (fileName.includes('scenarios') || fileName.includes('cenarios')) {
|
|
115
|
+
return 'Scenarios';
|
|
116
|
+
}
|
|
117
|
+
return 'Mixed';
|
|
118
|
+
}
|
|
119
|
+
async getStatementTracker() {
|
|
120
|
+
if (this.statementTracker) {
|
|
121
|
+
return this.statementTracker;
|
|
122
|
+
}
|
|
123
|
+
let tracker = globalThis.statementTracker ||
|
|
124
|
+
globalThis.__SIMPLE_STATEMENT_TRACKER__;
|
|
125
|
+
if (!tracker) {
|
|
126
|
+
try {
|
|
127
|
+
tracker = new StatementTracker();
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
console.log(`⚠️ [CustomReporter] Falha ao carregar StatementTracker dinamicamente: ${String(error)}`);
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (tracker && typeof tracker.finalizarCT === 'function') {
|
|
135
|
+
this.statementTracker = tracker;
|
|
136
|
+
globalThis.statementTracker = tracker;
|
|
137
|
+
return tracker;
|
|
138
|
+
}
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
onTestBegin(test) {
|
|
142
|
+
Logger.info(` ${this.completedTests + 1} ${test.location?.file}:${test.location?.line}:${test.location?.column} › ${test.parent?.title} › ${test.title}`);
|
|
143
|
+
const projectType = this.detectProjectType(test);
|
|
144
|
+
// ✅ CRÍTICO: Usar CN (test.parent.title = test.describe) como identificador
|
|
145
|
+
// test.title = CT (test), test.parent.title = CN (test.describe)
|
|
146
|
+
const cnName = test.parent?.title || test.title;
|
|
147
|
+
UnifiedReportManager.setTestContext(cnName, projectType);
|
|
148
|
+
UnifiedReportManager.registrarTeste(cnName, projectType);
|
|
149
|
+
console.log(`🏷️ Teste registrado: ${cnName} (${projectType})`);
|
|
150
|
+
}
|
|
151
|
+
async onTestEnd(test, result) {
|
|
152
|
+
this.completedTests++;
|
|
153
|
+
// ✅ CRÍTICO: Usar CN (test.parent.title = test.describe) como identificador
|
|
154
|
+
// test.title = CT (test), test.parent.title = CN (test.describe)
|
|
155
|
+
const cnName = test.parent?.title || test.title;
|
|
156
|
+
const ctName = test.title;
|
|
157
|
+
// ✅ CRÍTICO: Registrar resultado do teste (mesmo se falhar)
|
|
158
|
+
let status;
|
|
159
|
+
if (result.status === 'passed') {
|
|
160
|
+
status = 'passed';
|
|
161
|
+
}
|
|
162
|
+
else if (result.status === 'failed') {
|
|
163
|
+
status = 'failed';
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
status = 'skipped';
|
|
167
|
+
}
|
|
168
|
+
console.log(`ℹ️ ${this.completedTests} ${test.location?.file}:${test.location?.line}:${test.location?.column} › ${cnName} › ${ctName}`);
|
|
169
|
+
globalThis.__SIMPLE_STATEMENT_CURRENT_TEST_NAME__ = cnName;
|
|
170
|
+
// ✅ CRÍTICO: Finalizar CT individual IMEDIATAMENTE
|
|
171
|
+
// Isso garante que CT001 seja marcado como PASSED antes de CT002 falhar
|
|
172
|
+
const errorMessage = result.errors && result.errors.length > 0
|
|
173
|
+
? result.errors[0]?.message
|
|
174
|
+
: undefined;
|
|
175
|
+
try {
|
|
176
|
+
const tracker = await this.getStatementTracker();
|
|
177
|
+
if (tracker) {
|
|
178
|
+
// 🆕 CRÍTICO: Forçar carregamento dos dados do arquivo antes de finalizar
|
|
179
|
+
// O Reporter roda em processo separado dos testes, então precisamos
|
|
180
|
+
// garantir que os CTs criados nos testes estejam disponíveis aqui
|
|
181
|
+
if (typeof tracker.forceLoadFromFile === 'function') {
|
|
182
|
+
tracker.forceLoadFromFile();
|
|
183
|
+
}
|
|
184
|
+
tracker.finalizarCT(ctName, status, {
|
|
185
|
+
testName: cnName,
|
|
186
|
+
errorMessage,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
console.log(`⚠️ [CustomReporter] StatementTracker não disponível para finalizar CT "${ctName}"`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
console.log(`⚠️ [CustomReporter] Erro ao finalizar CT individual:`, error);
|
|
195
|
+
}
|
|
196
|
+
finally {
|
|
197
|
+
// Limpar global
|
|
198
|
+
;
|
|
199
|
+
globalThis.__SIMPLE_STATEMENT_CURRENT_TEST_NAME__ = undefined;
|
|
200
|
+
}
|
|
201
|
+
// 🔧 NOVO: Rastrear CTs completados por CN
|
|
202
|
+
const cnData = this.ctsByCN.get(cnName);
|
|
203
|
+
if (cnData) {
|
|
204
|
+
cnData.completed++;
|
|
205
|
+
if (status === 'failed') {
|
|
206
|
+
cnData.lastStatus = 'failed'; // Se qualquer CT falhar, CN falha
|
|
207
|
+
}
|
|
208
|
+
// ✅ SÓ FINALIZAR quando TODOS os CTs do CN terminarem
|
|
209
|
+
if (cnData.completed === cnData.total) {
|
|
210
|
+
// ✅ IMPORTANTE: Finalizar o CN apenas quando todos os CTs terminarem
|
|
211
|
+
await UnifiedReportManager.marcarFimTeste(cnName, cnData.lastStatus);
|
|
212
|
+
// ✅ NOVO: Registrar coverage usando CN
|
|
213
|
+
const projectType = this.detectProjectType(test);
|
|
214
|
+
const coverageType = this.mapToCoverageType(projectType);
|
|
215
|
+
const duration = result.duration || 0;
|
|
216
|
+
try {
|
|
217
|
+
await CoverageManager.registerTestCoverage(cnName, coverageType, undefined, // page não disponível no reporter
|
|
218
|
+
duration);
|
|
219
|
+
console.log(`📊 Coverage registrado para: ${cnName} (${coverageType})`);
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
Logger.warning(`Erro ao registrar coverage: ${String(error)}`);
|
|
223
|
+
}
|
|
224
|
+
// ✅ CONTINUAR COM LÓGICA ORIGINAL usando CN
|
|
225
|
+
UnifiedReportManager.setTestDuration(cnName, result.duration);
|
|
226
|
+
console.log(`📊 Teste ${this.completedTests}/${this.testCount} concluído: ${cnName} [${cnData.lastStatus.toUpperCase()}]`);
|
|
227
|
+
// ✅ IMPORTANTE: Coletar dados mesmo se o teste falhar
|
|
228
|
+
try {
|
|
229
|
+
await UnifiedReportManager.coletarDadosDoTeste();
|
|
230
|
+
await UnifiedReportManager.anexarRelatorioIndividual();
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
Logger.error(`❌ Erro ao processar teste ${cnName}`, error);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
// Teste individual sem test.describe - finalizar imediatamente
|
|
239
|
+
console.log(`ℹ️ [CustomReporter] Teste individual sem CN: "${ctName}"`);
|
|
240
|
+
await UnifiedReportManager.marcarFimTeste(ctName, status);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
mapToCoverageType(projectType) {
|
|
244
|
+
switch (projectType) {
|
|
245
|
+
case 'Frontend':
|
|
246
|
+
return 'Frontend';
|
|
247
|
+
case 'API':
|
|
248
|
+
return 'API';
|
|
249
|
+
case 'Mobile':
|
|
250
|
+
return 'Mobile';
|
|
251
|
+
case 'SSH':
|
|
252
|
+
return 'SSH';
|
|
253
|
+
case 'Banco':
|
|
254
|
+
return 'Banco';
|
|
255
|
+
case 'Scenarios':
|
|
256
|
+
return 'Mixed'; // Scenarios mapeia para Mixed
|
|
257
|
+
case 'Mixed':
|
|
258
|
+
return 'Mixed';
|
|
259
|
+
default:
|
|
260
|
+
return 'Mixed';
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
async onEnd(_result) {
|
|
264
|
+
console.log('🏁 Finalizando execução dos testes...');
|
|
265
|
+
try {
|
|
266
|
+
// ✅ NOVO: Gerar documentação AutoDocs automaticamente ANTES do teardown
|
|
267
|
+
console.log('📚 Gerando documentação automática do projeto...');
|
|
268
|
+
// ✅ CRÍTICO: Garantir que ExecutionTracker FORCE um save final ANTES da geração
|
|
269
|
+
try {
|
|
270
|
+
// ✅ NOVO: Forçar save final dos dados ANTES de gerar documentação
|
|
271
|
+
console.log('📚 CustomReporter: Salvando dados finais...');
|
|
272
|
+
// Atualizar estatísticas finais
|
|
273
|
+
ExecutionTracker.updateTestStats(this.testCount, this.completedTests - (this.testCount - this.completedTests), this.testCount - this.completedTests);
|
|
274
|
+
// Verificar dados na memória antes da finalização
|
|
275
|
+
const memoryData = ExecutionTracker.getData();
|
|
276
|
+
// Finalizar APENAS para atualizar endTime - NÃO deve apagar dados
|
|
277
|
+
ExecutionTracker.finalize();
|
|
278
|
+
// Aguardar um pouco para garantir que o arquivo foi escrito
|
|
279
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
280
|
+
// Verificar dados no arquivo após finalize
|
|
281
|
+
const fileData = ExecutionTracker.loadFromFile();
|
|
282
|
+
if (fileData) {
|
|
283
|
+
//Teste
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
console.log('📊 CustomReporter: ⚠️ ERRO - Nenhum arquivo de dados encontrado após finalize!');
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
console.log(`📊 CustomReporter: Erro ao preparar dados: ${String(error)}`);
|
|
291
|
+
}
|
|
292
|
+
try {
|
|
293
|
+
await AutoDocs.generateDocs();
|
|
294
|
+
console.log('📁 Documentação disponível em: docs/index.html');
|
|
295
|
+
console.log('🌐 Abra o arquivo docs/index.html no browser para visualizar');
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
Logger.warning(`Erro ao gerar documentação AutoDocs: ${String(error)}`);
|
|
299
|
+
}
|
|
300
|
+
// ✅ IMPORTANTE: Chama UnifiedTeardown APÓS gerar documentação
|
|
301
|
+
// UnifiedTeardown será responsável por todos os relatórios finais para evitar duplicação
|
|
302
|
+
await UnifiedTeardown.run();
|
|
303
|
+
// 📡 NETWORK LOGS: Copiar para playwright-report/evidence/network-logs/
|
|
304
|
+
await this.copyNetworkLogsToReport();
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
Logger.error('❌ Erro ao processar relatórios finais', error);
|
|
308
|
+
}
|
|
309
|
+
console.log(`📋 Total: ${this.completedTests} testes processados`);
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* 📡 Copia os network logs de test-results/network-logs/ para playwright-report/evidence/network-logs/
|
|
313
|
+
* Isso acontece APÓS a geração do relatório HTML pelo Playwright
|
|
314
|
+
*/
|
|
315
|
+
async copyNetworkLogsToReport() {
|
|
316
|
+
const sourceDir = path.join(this.projectRoot, 'test-results', 'network-logs');
|
|
317
|
+
const destDir = path.join(this.projectRoot, 'playwright-report', 'evidence', 'network-logs');
|
|
318
|
+
if (!fs.existsSync(sourceDir)) {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
try {
|
|
322
|
+
// Cria pasta destino se não existir
|
|
323
|
+
if (!fs.existsSync(destDir)) {
|
|
324
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
325
|
+
}
|
|
326
|
+
// Lista arquivos na pasta source
|
|
327
|
+
const files = fs.readdirSync(sourceDir);
|
|
328
|
+
if (files.length === 0) {
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
console.log('');
|
|
332
|
+
console.log('═══════════════════════════════════════════════════════════════════');
|
|
333
|
+
console.log('📡 [AutoCore] Copiando Network Logs para playwright-report/');
|
|
334
|
+
console.log('═══════════════════════════════════════════════════════════════════');
|
|
335
|
+
let copiedCount = 0;
|
|
336
|
+
for (const file of files) {
|
|
337
|
+
const sourcePath = path.join(sourceDir, file);
|
|
338
|
+
const destPath = path.join(destDir, file);
|
|
339
|
+
// Copia o arquivo (mantém original em test-results/)
|
|
340
|
+
fs.copyFileSync(sourcePath, destPath);
|
|
341
|
+
copiedCount++;
|
|
342
|
+
}
|
|
343
|
+
console.log(` ✅ ${copiedCount} arquivo(s) copiado(s) para:`);
|
|
344
|
+
console.log(` ${destDir}`);
|
|
345
|
+
console.log('═══════════════════════════════════════════════════════════════════');
|
|
346
|
+
console.log('');
|
|
347
|
+
}
|
|
348
|
+
catch (err) {
|
|
349
|
+
console.error('❌ [AutoCore] Erro ao copiar network logs:', err);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store compartilhado para transferência de dados entre projetos e testes
|
|
3
|
+
*
|
|
4
|
+
* Funcionalidades:
|
|
5
|
+
* - Cache em memória para performance
|
|
6
|
+
* - Persistência em arquivo JSON
|
|
7
|
+
* - Métodos especializados para diferentes tipos de dados
|
|
8
|
+
* - Limpeza automática com TTL
|
|
9
|
+
* - Thread-safe operations
|
|
10
|
+
* - Type-safe getters para evitar erros de null
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // ✅ FORMA CORRETA - Armazenar dados
|
|
15
|
+
* DataStore.set('user_id', '12345')
|
|
16
|
+
* DataStore.set('URL_CLIENTE', 'https://example.com')
|
|
17
|
+
*
|
|
18
|
+
* // ✅ FORMA CORRETA - Recuperar com type safety
|
|
19
|
+
* const userId = DataStore.getString('user_id') // retorna string (nunca null)
|
|
20
|
+
* const url = DataStore.getString('URL_CLIENTE', 'https://default.com') // com fallback
|
|
21
|
+
* const count = DataStore.getNumber('attempts', 0) // retorna number
|
|
22
|
+
* const isActive = DataStore.getBoolean('active') // retorna boolean
|
|
23
|
+
*
|
|
24
|
+
* // ✅ FORMA CORRETA - Quando você TEM CERTEZA que o valor existe
|
|
25
|
+
* const token = DataStore.getOrThrow<string>('ACCESS_TOKEN') // lança erro se null
|
|
26
|
+
*
|
|
27
|
+
* // ❌ EVITE - Pode causar erro TypeScript "Type 'string | null' is not assignable to type 'string'"
|
|
28
|
+
* const url: string = DataStore.get('URL_CLIENTE') // ❌ ERRO!
|
|
29
|
+
* Logger.info(DataStore.get('URL_CLIENTE')) // ❌ ERRO!
|
|
30
|
+
*
|
|
31
|
+
* // ✅ CORRIJA USANDO - Operador de coalescência nula
|
|
32
|
+
* const url: string = DataStore.get('URL_CLIENTE') ?? 'default'
|
|
33
|
+
* Logger.info(DataStore.getString('URL_CLIENTE'))
|
|
34
|
+
*
|
|
35
|
+
* // Armazenar com TTL
|
|
36
|
+
* DataStore.setWithTTL('session_token', 'abc123', 3600) // expira em 1h
|
|
37
|
+
*
|
|
38
|
+
* // Armazenar resultado de query
|
|
39
|
+
* DataStore.storeQueryResult('user_details', userData)
|
|
40
|
+
*
|
|
41
|
+
* // Armazenar screenshot
|
|
42
|
+
* DataStore.storeScreenshot('login_page', screenshotBuffer)
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare class DataStore {
|
|
46
|
+
private static readonly dataFilePath;
|
|
47
|
+
private static readonly persistEnabled;
|
|
48
|
+
private static cache;
|
|
49
|
+
private static initialized;
|
|
50
|
+
private static lastSaveTime;
|
|
51
|
+
private static readonly SAVE_THROTTLE_MS;
|
|
52
|
+
/**
|
|
53
|
+
* Inicializa o DataStore carregando dados existentes
|
|
54
|
+
*/
|
|
55
|
+
private static initialize;
|
|
56
|
+
/**
|
|
57
|
+
* Migra dados do formato antigo para o novo com metadados
|
|
58
|
+
*/
|
|
59
|
+
private static migrateOldFormat;
|
|
60
|
+
/**
|
|
61
|
+
* Determina o tipo do item baseado na chave e valor
|
|
62
|
+
*/
|
|
63
|
+
private static determineItemType;
|
|
64
|
+
/**
|
|
65
|
+
* Remove itens expirados baseado no TTL
|
|
66
|
+
*/
|
|
67
|
+
private static cleanupExpiredItems;
|
|
68
|
+
/**
|
|
69
|
+
* Salva os dados no arquivo com throttling
|
|
70
|
+
*/
|
|
71
|
+
private static save;
|
|
72
|
+
/**
|
|
73
|
+
* Armazena um valor com uma chave específica
|
|
74
|
+
*/
|
|
75
|
+
static set(key: string, value: any): void;
|
|
76
|
+
/**
|
|
77
|
+
* Armazena um valor com TTL (Time To Live)
|
|
78
|
+
*/
|
|
79
|
+
static setWithTTL(key: string, value: any, ttlSeconds: number): void;
|
|
80
|
+
/**
|
|
81
|
+
* Recupera um valor usando sua chave
|
|
82
|
+
*/
|
|
83
|
+
static get<T = any>(key: string, defaultValue?: T | null): T | null;
|
|
84
|
+
/**
|
|
85
|
+
* Recupera um valor ou lança erro se não existir
|
|
86
|
+
* Útil quando você tem certeza que o valor existe
|
|
87
|
+
*/
|
|
88
|
+
static getOrThrow<T = any>(key: string): T;
|
|
89
|
+
/**
|
|
90
|
+
* Recupera um valor string ou retorna string vazia
|
|
91
|
+
* Útil para evitar problemas com null
|
|
92
|
+
*/
|
|
93
|
+
static getString(key: string, defaultValue?: string): string;
|
|
94
|
+
/**
|
|
95
|
+
* Recupera um valor number ou retorna 0
|
|
96
|
+
*/
|
|
97
|
+
static getNumber(key: string, defaultValue?: number): number;
|
|
98
|
+
/**
|
|
99
|
+
* Recupera um valor boolean ou retorna false
|
|
100
|
+
*/
|
|
101
|
+
static getBoolean(key: string, defaultValue?: boolean): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Verifica se uma chave existe e não expirou
|
|
104
|
+
*/
|
|
105
|
+
static has(key: string): boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Remove um valor específico
|
|
108
|
+
*/
|
|
109
|
+
static remove(key: string): boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Limpa todos os valores armazenados
|
|
112
|
+
*/
|
|
113
|
+
static clear(): void;
|
|
114
|
+
/**
|
|
115
|
+
* Limpa apenas itens temporários
|
|
116
|
+
*/
|
|
117
|
+
static clearTempItems(): void;
|
|
118
|
+
/**
|
|
119
|
+
* Retorna todos os dados armazenados com metadados
|
|
120
|
+
*/
|
|
121
|
+
static getAll(): Record<string, any>;
|
|
122
|
+
/**
|
|
123
|
+
* Retorna estatísticas do DataStore
|
|
124
|
+
*/
|
|
125
|
+
static getStats(): {
|
|
126
|
+
totalItems: number;
|
|
127
|
+
itemsByType: Record<string, number>;
|
|
128
|
+
expiredItems: number;
|
|
129
|
+
totalSizeKB: number;
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Armazena resultado de consulta de banco para uso posterior
|
|
133
|
+
*/
|
|
134
|
+
static storeQueryResult(queryName: string, data: any, ttlSeconds?: number): void;
|
|
135
|
+
/**
|
|
136
|
+
* Recupera resultado de consulta de banco
|
|
137
|
+
*/
|
|
138
|
+
static getQueryResult<T = any>(queryName: string): T | null;
|
|
139
|
+
/**
|
|
140
|
+
* Armazena screenshot para evidências
|
|
141
|
+
*/
|
|
142
|
+
static storeScreenshot(name: string, screenshotData: Buffer | string, metadata?: any): void;
|
|
143
|
+
/**
|
|
144
|
+
* Recupera screenshot
|
|
145
|
+
*/
|
|
146
|
+
static getScreenshot(name: string): {
|
|
147
|
+
data: Buffer | string;
|
|
148
|
+
metadata: any;
|
|
149
|
+
timestamp: string;
|
|
150
|
+
} | null;
|
|
151
|
+
/**
|
|
152
|
+
* Armazena dados temporários com TTL curto
|
|
153
|
+
*/
|
|
154
|
+
static setTemp(key: string, value: any, ttlSeconds?: number): void;
|
|
155
|
+
/**
|
|
156
|
+
* Recupera dados temporários
|
|
157
|
+
*/
|
|
158
|
+
static getTemp<T = any>(key: string): T | null;
|
|
159
|
+
/**
|
|
160
|
+
* Força limpeza completa e remove arquivo
|
|
161
|
+
*/
|
|
162
|
+
static cleanup(): void;
|
|
163
|
+
/**
|
|
164
|
+
* Backup dos dados para outro arquivo
|
|
165
|
+
*/
|
|
166
|
+
static backup(backupPath?: string): string;
|
|
167
|
+
/**
|
|
168
|
+
* Restaura dados de um backup
|
|
169
|
+
*/
|
|
170
|
+
static restore(backupPath: string): void;
|
|
171
|
+
}
|