@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,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🔍 CategoryDetector - Detector Automático de Categorias
|
|
3
|
+
* @silasfmartins/testhub - Auto Documentation System
|
|
4
|
+
*/
|
|
5
|
+
export interface DetectedCategory {
|
|
6
|
+
type: 'api' | 'ssh' | 'db' | 'ui' | 'mobile' | 'mixed';
|
|
7
|
+
confidence: number;
|
|
8
|
+
indicators: string[];
|
|
9
|
+
suggestedTitle: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class CategoryDetector {
|
|
12
|
+
private static readonly API_INDICATORS;
|
|
13
|
+
private static readonly SSH_INDICATORS;
|
|
14
|
+
private static readonly DB_INDICATORS;
|
|
15
|
+
private static readonly UI_INDICATORS;
|
|
16
|
+
private static readonly MOBILE_INDICATORS;
|
|
17
|
+
/**
|
|
18
|
+
* 🎯 Detectar categoria principal do arquivo de teste
|
|
19
|
+
*/
|
|
20
|
+
static detectFromFile(filePath: string): DetectedCategory;
|
|
21
|
+
/**
|
|
22
|
+
* 🔍 Detectar categoria pelo conteúdo
|
|
23
|
+
*/
|
|
24
|
+
static detectFromContent(content: string, fileName?: string): DetectedCategory;
|
|
25
|
+
/**
|
|
26
|
+
* 📁 Detectar categoria pelo nome do arquivo
|
|
27
|
+
*/
|
|
28
|
+
static detectFromFileName(fileName: string): DetectedCategory;
|
|
29
|
+
/**
|
|
30
|
+
* 📊 Detectar múltiplas categorias em um projeto
|
|
31
|
+
*/
|
|
32
|
+
static detectFromProject(projectPath: string): {
|
|
33
|
+
[category: string]: string[];
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* 🔬 Análise principal do conteúdo
|
|
37
|
+
*/
|
|
38
|
+
private static analyzeContent;
|
|
39
|
+
/**
|
|
40
|
+
* 🎯 Calcular pontuação para indicadores
|
|
41
|
+
*/
|
|
42
|
+
private static calculateScore;
|
|
43
|
+
/**
|
|
44
|
+
* 🔍 Encontrar indicadores que fizeram match
|
|
45
|
+
*/
|
|
46
|
+
private static getMatchedIndicators;
|
|
47
|
+
/**
|
|
48
|
+
* 🏷️ Obter indicadores para tipo
|
|
49
|
+
*/
|
|
50
|
+
private static getIndicatorsForType;
|
|
51
|
+
/**
|
|
52
|
+
* 📝 Obter título para tipo
|
|
53
|
+
*/
|
|
54
|
+
private static getTitleForType;
|
|
55
|
+
/**
|
|
56
|
+
* 📁 Encontrar arquivos de teste
|
|
57
|
+
*/
|
|
58
|
+
private static findTestFiles;
|
|
59
|
+
/**
|
|
60
|
+
* 🚫 Verificar se deve pular diretório
|
|
61
|
+
*/
|
|
62
|
+
private static shouldSkipDirectory;
|
|
63
|
+
/**
|
|
64
|
+
* ✅ Verificar se é arquivo de teste
|
|
65
|
+
*/
|
|
66
|
+
private static isTestFile;
|
|
67
|
+
/**
|
|
68
|
+
* 🎯 Criar categoria padrão
|
|
69
|
+
*/
|
|
70
|
+
private static createDefaultCategory;
|
|
71
|
+
/**
|
|
72
|
+
* 📊 Obter estatísticas de detecção
|
|
73
|
+
*/
|
|
74
|
+
static getDetectionStats(projectPath: string): {
|
|
75
|
+
totalFiles: number;
|
|
76
|
+
categorized: {
|
|
77
|
+
[category: string]: number;
|
|
78
|
+
};
|
|
79
|
+
confidence: {
|
|
80
|
+
[category: string]: number;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
}
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🔍 CategoryDetector - Detector Automático de Categorias
|
|
3
|
+
* @silasfmartins/testhub - Auto Documentation System
|
|
4
|
+
*/
|
|
5
|
+
import fs from 'node:fs';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { Logger } from '../utils/Logger.js';
|
|
8
|
+
export class CategoryDetector {
|
|
9
|
+
static API_INDICATORS = [
|
|
10
|
+
'fetch',
|
|
11
|
+
'axios',
|
|
12
|
+
'request',
|
|
13
|
+
'post',
|
|
14
|
+
'get',
|
|
15
|
+
'put',
|
|
16
|
+
'delete',
|
|
17
|
+
'patch',
|
|
18
|
+
'RestAssured',
|
|
19
|
+
'given()',
|
|
20
|
+
'when()',
|
|
21
|
+
'then()',
|
|
22
|
+
'ApiActions',
|
|
23
|
+
'JsonResponse',
|
|
24
|
+
'REST',
|
|
25
|
+
'endpoint',
|
|
26
|
+
'statusCode',
|
|
27
|
+
'response',
|
|
28
|
+
'payload',
|
|
29
|
+
'headers',
|
|
30
|
+
];
|
|
31
|
+
static SSH_INDICATORS = [
|
|
32
|
+
'ssh',
|
|
33
|
+
'SSHActions',
|
|
34
|
+
'SSHClient',
|
|
35
|
+
'executeCommand',
|
|
36
|
+
'shell',
|
|
37
|
+
'terminal',
|
|
38
|
+
'remote',
|
|
39
|
+
'host',
|
|
40
|
+
'server',
|
|
41
|
+
'linux',
|
|
42
|
+
'unix',
|
|
43
|
+
'bash',
|
|
44
|
+
'sudo',
|
|
45
|
+
'exec',
|
|
46
|
+
];
|
|
47
|
+
static DB_INDICATORS = [
|
|
48
|
+
'SELECT',
|
|
49
|
+
'INSERT',
|
|
50
|
+
'UPDATE',
|
|
51
|
+
'DELETE',
|
|
52
|
+
'CREATE',
|
|
53
|
+
'DROP',
|
|
54
|
+
'database',
|
|
55
|
+
'query',
|
|
56
|
+
'sql',
|
|
57
|
+
'BancoActions',
|
|
58
|
+
'BancoHelper',
|
|
59
|
+
'connection',
|
|
60
|
+
'execute',
|
|
61
|
+
'prepare',
|
|
62
|
+
'transaction',
|
|
63
|
+
'mysql',
|
|
64
|
+
'postgres',
|
|
65
|
+
'oracle',
|
|
66
|
+
'sqlserver',
|
|
67
|
+
'mongodb',
|
|
68
|
+
];
|
|
69
|
+
static UI_INDICATORS = [
|
|
70
|
+
'page.',
|
|
71
|
+
'click',
|
|
72
|
+
'fill',
|
|
73
|
+
'select',
|
|
74
|
+
'hover',
|
|
75
|
+
'navigate',
|
|
76
|
+
'playwright',
|
|
77
|
+
'selenium',
|
|
78
|
+
'WebActions',
|
|
79
|
+
'element',
|
|
80
|
+
'locator',
|
|
81
|
+
'waitFor',
|
|
82
|
+
'screenshot',
|
|
83
|
+
'browser',
|
|
84
|
+
'input',
|
|
85
|
+
'button',
|
|
86
|
+
'form',
|
|
87
|
+
'dialog',
|
|
88
|
+
];
|
|
89
|
+
static MOBILE_INDICATORS = [
|
|
90
|
+
'appium',
|
|
91
|
+
'MobileActions',
|
|
92
|
+
'MobileConnection',
|
|
93
|
+
'device',
|
|
94
|
+
'android',
|
|
95
|
+
'ios',
|
|
96
|
+
'mobile',
|
|
97
|
+
'app',
|
|
98
|
+
'touch',
|
|
99
|
+
'swipe',
|
|
100
|
+
'driver',
|
|
101
|
+
'capabilities',
|
|
102
|
+
'platform',
|
|
103
|
+
'simulator',
|
|
104
|
+
'emulator',
|
|
105
|
+
'tap',
|
|
106
|
+
'scroll',
|
|
107
|
+
];
|
|
108
|
+
/**
|
|
109
|
+
* 🎯 Detectar categoria principal do arquivo de teste
|
|
110
|
+
*/
|
|
111
|
+
static detectFromFile(filePath) {
|
|
112
|
+
try {
|
|
113
|
+
if (!fs.existsSync(filePath)) {
|
|
114
|
+
return CategoryDetector.createDefaultCategory();
|
|
115
|
+
}
|
|
116
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
117
|
+
const fileName = path.basename(filePath);
|
|
118
|
+
return CategoryDetector.analyzeContent(content, fileName);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
Logger.warning(`⚠️ Erro ao detectar categoria do arquivo ${filePath}: ${error}`);
|
|
122
|
+
return CategoryDetector.createDefaultCategory();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* 🔍 Detectar categoria pelo conteúdo
|
|
127
|
+
*/
|
|
128
|
+
static detectFromContent(content, fileName) {
|
|
129
|
+
return CategoryDetector.analyzeContent(content, fileName || 'unknown.ts');
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* 📁 Detectar categoria pelo nome do arquivo
|
|
133
|
+
*/
|
|
134
|
+
static detectFromFileName(fileName) {
|
|
135
|
+
const name = fileName.toLowerCase();
|
|
136
|
+
// Indicadores diretos no nome do arquivo
|
|
137
|
+
if (name.includes('api') ||
|
|
138
|
+
name.includes('rest') ||
|
|
139
|
+
name.includes('endpoint')) {
|
|
140
|
+
return {
|
|
141
|
+
type: 'api',
|
|
142
|
+
confidence: 0.8,
|
|
143
|
+
indicators: ['filename contains api/rest/endpoint'],
|
|
144
|
+
suggestedTitle: 'API Tests',
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
if (name.includes('ssh') ||
|
|
148
|
+
name.includes('remote') ||
|
|
149
|
+
name.includes('server')) {
|
|
150
|
+
return {
|
|
151
|
+
type: 'ssh',
|
|
152
|
+
confidence: 0.8,
|
|
153
|
+
indicators: ['filename contains ssh/remote/server'],
|
|
154
|
+
suggestedTitle: 'SSH Tests',
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
if (name.includes('db') ||
|
|
158
|
+
name.includes('database') ||
|
|
159
|
+
name.includes('sql') ||
|
|
160
|
+
name.includes('banco')) {
|
|
161
|
+
return {
|
|
162
|
+
type: 'db',
|
|
163
|
+
confidence: 0.8,
|
|
164
|
+
indicators: ['filename contains db/database/sql/banco'],
|
|
165
|
+
suggestedTitle: 'Database Tests',
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
if (name.includes('ui') ||
|
|
169
|
+
name.includes('web') ||
|
|
170
|
+
name.includes('page') ||
|
|
171
|
+
name.includes('browser')) {
|
|
172
|
+
return {
|
|
173
|
+
type: 'ui',
|
|
174
|
+
confidence: 0.8,
|
|
175
|
+
indicators: ['filename contains ui/web/page/browser'],
|
|
176
|
+
suggestedTitle: 'UI Tests',
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
if (name.includes('mobile') ||
|
|
180
|
+
name.includes('app') ||
|
|
181
|
+
name.includes('android') ||
|
|
182
|
+
name.includes('ios')) {
|
|
183
|
+
return {
|
|
184
|
+
type: 'mobile',
|
|
185
|
+
confidence: 0.8,
|
|
186
|
+
indicators: ['filename contains mobile/app/android/ios'],
|
|
187
|
+
suggestedTitle: 'Mobile Tests',
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
return CategoryDetector.createDefaultCategory();
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* 📊 Detectar múltiplas categorias em um projeto
|
|
194
|
+
*/
|
|
195
|
+
static detectFromProject(projectPath) {
|
|
196
|
+
const categories = {
|
|
197
|
+
api: [],
|
|
198
|
+
ssh: [],
|
|
199
|
+
db: [],
|
|
200
|
+
ui: [],
|
|
201
|
+
mobile: [],
|
|
202
|
+
mixed: [],
|
|
203
|
+
};
|
|
204
|
+
try {
|
|
205
|
+
const testFiles = CategoryDetector.findTestFiles(projectPath);
|
|
206
|
+
for (const file of testFiles) {
|
|
207
|
+
const detection = CategoryDetector.detectFromFile(file);
|
|
208
|
+
categories[detection.type].push(file);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
Logger.warning(`⚠️ Erro ao detectar categorias do projeto: ${error}`);
|
|
213
|
+
}
|
|
214
|
+
return categories;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* 🔬 Análise principal do conteúdo
|
|
218
|
+
*/
|
|
219
|
+
static analyzeContent(content, fileName) {
|
|
220
|
+
const scores = {
|
|
221
|
+
api: CategoryDetector.calculateScore(content, CategoryDetector.API_INDICATORS),
|
|
222
|
+
ssh: CategoryDetector.calculateScore(content, CategoryDetector.SSH_INDICATORS),
|
|
223
|
+
db: CategoryDetector.calculateScore(content, CategoryDetector.DB_INDICATORS),
|
|
224
|
+
ui: CategoryDetector.calculateScore(content, CategoryDetector.UI_INDICATORS),
|
|
225
|
+
mobile: CategoryDetector.calculateScore(content, CategoryDetector.MOBILE_INDICATORS),
|
|
226
|
+
};
|
|
227
|
+
// Adicionar peso baseado no nome do arquivo
|
|
228
|
+
const fileDetection = CategoryDetector.detectFromFileName(fileName);
|
|
229
|
+
if (fileDetection.confidence > 0.5 && fileDetection.type !== 'mixed') {
|
|
230
|
+
scores[fileDetection.type] += 20;
|
|
231
|
+
}
|
|
232
|
+
// Encontrar categoria dominante
|
|
233
|
+
const topCategory = Object.entries(scores).reduce((max, [category, score]) => score > max.score ? { category: category, score } : max, { category: 'mixed', score: 0 });
|
|
234
|
+
// Verificar se há múltiplas categorias significativas
|
|
235
|
+
const significantCategories = Object.entries(scores).filter(([_, score]) => score > 10);
|
|
236
|
+
if (significantCategories.length > 1) {
|
|
237
|
+
return {
|
|
238
|
+
type: 'mixed',
|
|
239
|
+
confidence: 0.7,
|
|
240
|
+
indicators: significantCategories.map(([cat, score]) => `${cat}: ${score} points`),
|
|
241
|
+
suggestedTitle: 'Mixed Tests',
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
if (topCategory.score < 5) {
|
|
245
|
+
return CategoryDetector.createDefaultCategory();
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
type: topCategory.category,
|
|
249
|
+
confidence: Math.min(topCategory.score / 50, 1),
|
|
250
|
+
indicators: CategoryDetector.getMatchedIndicators(content, CategoryDetector.getIndicatorsForType(topCategory.category)),
|
|
251
|
+
suggestedTitle: CategoryDetector.getTitleForType(topCategory.category),
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* 🎯 Calcular pontuação para indicadores
|
|
256
|
+
*/
|
|
257
|
+
static calculateScore(content, indicators) {
|
|
258
|
+
let score = 0;
|
|
259
|
+
const contentLower = content.toLowerCase();
|
|
260
|
+
for (const indicator of indicators) {
|
|
261
|
+
const regex = new RegExp(indicator.toLowerCase().replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g');
|
|
262
|
+
const matches = contentLower.match(regex);
|
|
263
|
+
if (matches) {
|
|
264
|
+
// Pontuação baseada na frequência, com peso decrescente
|
|
265
|
+
score += Math.min(matches.length * 2, 10);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return score;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* 🔍 Encontrar indicadores que fizeram match
|
|
272
|
+
*/
|
|
273
|
+
static getMatchedIndicators(content, indicators) {
|
|
274
|
+
const contentLower = content.toLowerCase();
|
|
275
|
+
return indicators
|
|
276
|
+
.filter((indicator) => contentLower.includes(indicator.toLowerCase()))
|
|
277
|
+
.slice(0, 5); // Limitar a 5 indicadores
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* 🏷️ Obter indicadores para tipo
|
|
281
|
+
*/
|
|
282
|
+
static getIndicatorsForType(type) {
|
|
283
|
+
switch (type) {
|
|
284
|
+
case 'api':
|
|
285
|
+
return CategoryDetector.API_INDICATORS;
|
|
286
|
+
case 'ssh':
|
|
287
|
+
return CategoryDetector.SSH_INDICATORS;
|
|
288
|
+
case 'db':
|
|
289
|
+
return CategoryDetector.DB_INDICATORS;
|
|
290
|
+
case 'ui':
|
|
291
|
+
return CategoryDetector.UI_INDICATORS;
|
|
292
|
+
case 'mobile':
|
|
293
|
+
return CategoryDetector.MOBILE_INDICATORS;
|
|
294
|
+
default:
|
|
295
|
+
return [];
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* 📝 Obter título para tipo
|
|
300
|
+
*/
|
|
301
|
+
static getTitleForType(type) {
|
|
302
|
+
const titles = {
|
|
303
|
+
api: 'API Tests',
|
|
304
|
+
ssh: 'SSH Commands',
|
|
305
|
+
db: 'Database Operations',
|
|
306
|
+
ui: 'UI Interactions',
|
|
307
|
+
mobile: 'Mobile Actions',
|
|
308
|
+
};
|
|
309
|
+
return titles[type] || 'Test Suite';
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* 📁 Encontrar arquivos de teste
|
|
313
|
+
*/
|
|
314
|
+
static findTestFiles(projectPath) {
|
|
315
|
+
const testFiles = [];
|
|
316
|
+
const searchInDir = (dir) => {
|
|
317
|
+
try {
|
|
318
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
319
|
+
for (const entry of entries) {
|
|
320
|
+
const fullPath = path.join(dir, entry.name);
|
|
321
|
+
if (entry.isDirectory() &&
|
|
322
|
+
!CategoryDetector.shouldSkipDirectory(entry.name)) {
|
|
323
|
+
searchInDir(fullPath);
|
|
324
|
+
}
|
|
325
|
+
else if (entry.isFile() &&
|
|
326
|
+
CategoryDetector.isTestFile(entry.name)) {
|
|
327
|
+
testFiles.push(fullPath);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
catch (error) {
|
|
332
|
+
// Ignorar diretórios inacessíveis
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
searchInDir(projectPath);
|
|
336
|
+
return testFiles;
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* 🚫 Verificar se deve pular diretório
|
|
340
|
+
*/
|
|
341
|
+
static shouldSkipDirectory(dirName) {
|
|
342
|
+
const skipDirs = [
|
|
343
|
+
'node_modules',
|
|
344
|
+
'.git',
|
|
345
|
+
'dist',
|
|
346
|
+
'build',
|
|
347
|
+
'coverage',
|
|
348
|
+
'.next',
|
|
349
|
+
'.nuxt',
|
|
350
|
+
'vendor',
|
|
351
|
+
'__pycache__',
|
|
352
|
+
'.pytest_cache',
|
|
353
|
+
];
|
|
354
|
+
return skipDirs.includes(dirName) || dirName.startsWith('.');
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* ✅ Verificar se é arquivo de teste
|
|
358
|
+
*/
|
|
359
|
+
static isTestFile(fileName) {
|
|
360
|
+
const testPatterns = [
|
|
361
|
+
/\.test\.(ts|js|tsx|jsx)$/,
|
|
362
|
+
/\.spec\.(ts|js|tsx|jsx)$/,
|
|
363
|
+
/test.*\.(ts|js|tsx|jsx)$/,
|
|
364
|
+
/spec.*\.(ts|js|tsx|jsx)$/,
|
|
365
|
+
];
|
|
366
|
+
return testPatterns.some((pattern) => pattern.test(fileName));
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* 🎯 Criar categoria padrão
|
|
370
|
+
*/
|
|
371
|
+
static createDefaultCategory() {
|
|
372
|
+
return {
|
|
373
|
+
type: 'mixed',
|
|
374
|
+
confidence: 0.1,
|
|
375
|
+
indicators: ['no clear indicators found'],
|
|
376
|
+
suggestedTitle: 'General Tests',
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* 📊 Obter estatísticas de detecção
|
|
381
|
+
*/
|
|
382
|
+
static getDetectionStats(projectPath) {
|
|
383
|
+
const categories = CategoryDetector.detectFromProject(projectPath);
|
|
384
|
+
const stats = {
|
|
385
|
+
totalFiles: 0,
|
|
386
|
+
categorized: {},
|
|
387
|
+
confidence: {},
|
|
388
|
+
};
|
|
389
|
+
Object.entries(categories).forEach(([category, files]) => {
|
|
390
|
+
stats.categorized[category] = files.length;
|
|
391
|
+
stats.totalFiles += files.length;
|
|
392
|
+
// Calcular confiança média para a categoria
|
|
393
|
+
if (files.length > 0) {
|
|
394
|
+
const confidences = files.map((file) => CategoryDetector.detectFromFile(file).confidence);
|
|
395
|
+
stats.confidence[category] =
|
|
396
|
+
confidences.reduce((sum, conf) => sum + conf, 0) / confidences.length;
|
|
397
|
+
}
|
|
398
|
+
});
|
|
399
|
+
return stats;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🎯 SISTEMA DIRETO DE INTERCEPTAÇÃO V2
|
|
3
|
+
*
|
|
4
|
+
* Sistema simplificado que intercepta DIRETAMENTE as classes Statement do usuário
|
|
5
|
+
* Foca apenas no que funciona, sem complexidade desnecessária
|
|
6
|
+
*/
|
|
7
|
+
declare class DirectStatementInterceptor {
|
|
8
|
+
private static initialized;
|
|
9
|
+
private static interceptedClasses;
|
|
10
|
+
/**
|
|
11
|
+
* 🚀 Inicializar interceptação direta
|
|
12
|
+
*/
|
|
13
|
+
static initialize(): void;
|
|
14
|
+
/**
|
|
15
|
+
* 🆕 INTERCEPTAR INSTANCIAÇÕES DINÂMICAS - VERSÃO SIMPLIFICADA
|
|
16
|
+
*/
|
|
17
|
+
private static setupNewInterceptor;
|
|
18
|
+
/**
|
|
19
|
+
* 🔍 Scan agressivo por classes Statement (mais frequente)
|
|
20
|
+
*/
|
|
21
|
+
private static aggressiveScanForStatements;
|
|
22
|
+
/**
|
|
23
|
+
* 🔍 Escanear módulos carregados
|
|
24
|
+
*/
|
|
25
|
+
private static scanLoadedModules;
|
|
26
|
+
/**
|
|
27
|
+
* 🔍 Interceptar classes globais existentes
|
|
28
|
+
*/
|
|
29
|
+
private static interceptGlobalClasses;
|
|
30
|
+
/**
|
|
31
|
+
* 🏗️ Setup de hooks simplificado
|
|
32
|
+
*/
|
|
33
|
+
private static setupConstructorHooks;
|
|
34
|
+
/**
|
|
35
|
+
* 🔄 Scanner contínuo para novas classes
|
|
36
|
+
*/
|
|
37
|
+
private static setupContinuousScanner;
|
|
38
|
+
/**
|
|
39
|
+
* 🔍 Escanear por novas classes
|
|
40
|
+
*/
|
|
41
|
+
private static scanForNewClasses;
|
|
42
|
+
/**
|
|
43
|
+
* 🎯 Interceptar uma classe específica
|
|
44
|
+
*/
|
|
45
|
+
private static interceptClass;
|
|
46
|
+
/**
|
|
47
|
+
* 📊 Status do interceptor
|
|
48
|
+
*/
|
|
49
|
+
static getStatus(): {
|
|
50
|
+
initialized: boolean;
|
|
51
|
+
interceptedClasses: string[];
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export { DirectStatementInterceptor };
|