@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,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🎯 StatementMethodFilter - Sistema Inteligente de Detecção de Métodos Statement
|
|
3
|
+
*
|
|
4
|
+
* Sistema mais permissivo que detecta métodos CT mesmo com padrões complexos:
|
|
5
|
+
* - Métodos com nomes diversos (executeAction, performTask, runOperation, etc.)
|
|
6
|
+
* - Métodos aninhados em classes complexas
|
|
7
|
+
* - Métodos gerados dinamicamente
|
|
8
|
+
* - Padrões de naming variados
|
|
9
|
+
*/
|
|
10
|
+
interface StatementClass {
|
|
11
|
+
name: string;
|
|
12
|
+
constructor: any;
|
|
13
|
+
methods: string[];
|
|
14
|
+
confidence: number;
|
|
15
|
+
}
|
|
16
|
+
declare class StatementMethodFilter {
|
|
17
|
+
private static initialized;
|
|
18
|
+
private static methodPatterns;
|
|
19
|
+
private static classPatterns;
|
|
20
|
+
private static excludedMethods;
|
|
21
|
+
private static nativeClassBlacklist;
|
|
22
|
+
/**
|
|
23
|
+
* 🚀 Inicializar filtros inteligentes
|
|
24
|
+
*/
|
|
25
|
+
static initialize(): void;
|
|
26
|
+
/**
|
|
27
|
+
* 📊 Calcular score de um método
|
|
28
|
+
*/
|
|
29
|
+
static calculateMethodScore(methodName: string, className?: string): number;
|
|
30
|
+
/**
|
|
31
|
+
* ✅ Verificar se método é provavelmente um CT
|
|
32
|
+
* ✅ REATIVADO - Filtrar baseado no nome da classe e método
|
|
33
|
+
*/
|
|
34
|
+
static isLikelyStatementMethod(methodName: string, className?: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* 🚫 Verificar se classe é nativa e deve ser ignorada
|
|
37
|
+
* ✅ REATIVADO - Bloquear classes nativas para evitar stack overflow e CTs falsos
|
|
38
|
+
*/
|
|
39
|
+
static isNativeClassBlacklisted(className: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* 🛡️ Análise segura de classe (evita ERR_INVALID_THIS)
|
|
42
|
+
*/
|
|
43
|
+
static safeAnalyzeClass(classConstructor: any, className: string): StatementClass;
|
|
44
|
+
/**
|
|
45
|
+
* �🔍 Analisar classe e extrair métodos CT
|
|
46
|
+
*/
|
|
47
|
+
static analyzeClass(classConstructor: any, className: string): StatementClass;
|
|
48
|
+
/**
|
|
49
|
+
* 🎯 Filtro para todos os métodos de uma classe
|
|
50
|
+
* ✅ REATIVADO - Usar filtros para bloquear classes nativas e aprovar apenas CTs reais
|
|
51
|
+
*/
|
|
52
|
+
static filterClassMethods(classConstructor: any, className: string): string[];
|
|
53
|
+
/**
|
|
54
|
+
* 📊 Obter estatísticas dos filtros
|
|
55
|
+
*/
|
|
56
|
+
static getFilterStats(): {
|
|
57
|
+
patterns: number;
|
|
58
|
+
classPatterns: number;
|
|
59
|
+
excludedMethods: number;
|
|
60
|
+
totalPatterns: number;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* 🔧 Adicionar padrão customizado
|
|
64
|
+
*/
|
|
65
|
+
static addCustomPattern(pattern: RegExp, weight: number, description: string): void;
|
|
66
|
+
/**
|
|
67
|
+
* 🎯 Modo debug - mostrar análise detalhada
|
|
68
|
+
*/
|
|
69
|
+
static debugAnalyzeMethod(methodName: string, className?: string): void;
|
|
70
|
+
}
|
|
71
|
+
export { StatementMethodFilter };
|
|
@@ -0,0 +1,618 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🎯 StatementMethodFilter - Sistema Inteligente de Detecção de Métodos Statement
|
|
3
|
+
*
|
|
4
|
+
* Sistema mais permissivo que detecta métodos CT mesmo com padrões complexos:
|
|
5
|
+
* - Métodos com nomes diversos (executeAction, performTask, runOperation, etc.)
|
|
6
|
+
* - Métodos aninhados em classes complexas
|
|
7
|
+
* - Métodos gerados dinamicamente
|
|
8
|
+
* - Padrões de naming variados
|
|
9
|
+
*/
|
|
10
|
+
class StatementMethodFilter {
|
|
11
|
+
static initialized = false;
|
|
12
|
+
// Padrões de métodos que provavelmente são CTs
|
|
13
|
+
static methodPatterns = [
|
|
14
|
+
// 🎯 PADRÕES DO SEU PROJETO - Métodos específicos observados nos logs
|
|
15
|
+
{ pattern: /^getToken$/i, weight: 15, description: 'Token methods' },
|
|
16
|
+
{
|
|
17
|
+
pattern: /^consulta/i,
|
|
18
|
+
weight: 15,
|
|
19
|
+
description: 'Consulta methods (consultaCobertura, consultaEndereco, etc.)',
|
|
20
|
+
},
|
|
21
|
+
{ pattern: /^solicita/i, weight: 15, description: 'Solicita methods' },
|
|
22
|
+
{
|
|
23
|
+
pattern: /^check/i,
|
|
24
|
+
weight: 15,
|
|
25
|
+
description: 'Check methods (checkServiceQualification, etc.)',
|
|
26
|
+
},
|
|
27
|
+
{ pattern: /^reserva/i, weight: 15, description: 'Reserva methods' },
|
|
28
|
+
{ pattern: /^alocar/i, weight: 15, description: 'Alocar methods' },
|
|
29
|
+
{ pattern: /^configurar$/i, weight: 15, description: 'Configurar methods' },
|
|
30
|
+
// 🎯 PADRÕES EXPLÍCITOS - Alta prioridade
|
|
31
|
+
{ pattern: /^execute/i, weight: 10, description: 'Execute methods' },
|
|
32
|
+
{ pattern: /^perform/i, weight: 9, description: 'Perform methods' },
|
|
33
|
+
{ pattern: /^run/i, weight: 8, description: 'Run methods' },
|
|
34
|
+
{ pattern: /^process/i, weight: 8, description: 'Process methods' },
|
|
35
|
+
{ pattern: /^handle/i, weight: 7, description: 'Handle methods' },
|
|
36
|
+
{ pattern: /^do/i, weight: 6, description: 'Do methods' },
|
|
37
|
+
{ pattern: /^make/i, weight: 6, description: 'Make methods' },
|
|
38
|
+
{ pattern: /^create/i, weight: 6, description: 'Create methods' },
|
|
39
|
+
{ pattern: /^send/i, weight: 7, description: 'Send methods' },
|
|
40
|
+
{ pattern: /^get/i, weight: 5, description: 'Get methods' },
|
|
41
|
+
{ pattern: /^post/i, weight: 6, description: 'Post methods' },
|
|
42
|
+
{ pattern: /^put/i, weight: 6, description: 'Put methods' },
|
|
43
|
+
{ pattern: /^delete/i, weight: 6, description: 'Delete methods' },
|
|
44
|
+
// Padrões por tipo de ação
|
|
45
|
+
{
|
|
46
|
+
pattern: /login|auth|signin/i,
|
|
47
|
+
weight: 8,
|
|
48
|
+
description: 'Authentication methods',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
pattern: /request|call|invoke/i,
|
|
52
|
+
weight: 7,
|
|
53
|
+
description: 'Request methods',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
pattern: /query|select|insert|update/i,
|
|
57
|
+
weight: 7,
|
|
58
|
+
description: 'Database methods',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
pattern: /click|type|scroll|nav/i,
|
|
62
|
+
weight: 7,
|
|
63
|
+
description: 'Web interaction methods',
|
|
64
|
+
},
|
|
65
|
+
{ pattern: /ssh|command|shell/i, weight: 7, description: 'SSH methods' },
|
|
66
|
+
{
|
|
67
|
+
pattern: /mobile|touch|swipe|tap/i,
|
|
68
|
+
weight: 7,
|
|
69
|
+
description: 'Mobile methods',
|
|
70
|
+
},
|
|
71
|
+
// Padrões genéricos (menos peso)
|
|
72
|
+
{ pattern: /action/i, weight: 5, description: 'Action methods' },
|
|
73
|
+
{ pattern: /operation/i, weight: 5, description: 'Operation methods' },
|
|
74
|
+
{ pattern: /task/i, weight: 5, description: 'Task methods' },
|
|
75
|
+
{ pattern: /step/i, weight: 4, description: 'Step methods' },
|
|
76
|
+
{ pattern: /method/i, weight: 3, description: 'Method methods' },
|
|
77
|
+
// Qualquer método público (peso baixo mas incluído)
|
|
78
|
+
{ pattern: /^[a-z]/i, weight: 1, description: 'Public methods' },
|
|
79
|
+
];
|
|
80
|
+
// Nomes de classe que provavelmente contêm CTs
|
|
81
|
+
static classPatterns = [
|
|
82
|
+
// 🎯 PADRÕES PRINCIPAIS - Seus projetos TypeScript
|
|
83
|
+
/^Statements/i, // StatementsToken, StatementsConsultaCobertura, etc.
|
|
84
|
+
/^Statement[A-Z]/i, // StatementAlocarConfigurar, etc.
|
|
85
|
+
// 🎯 PADRÕES SECUNDÁRIOS - Outros projetos
|
|
86
|
+
/statement/i,
|
|
87
|
+
/action/i,
|
|
88
|
+
/command/i,
|
|
89
|
+
/operation/i,
|
|
90
|
+
/task/i,
|
|
91
|
+
/service/i,
|
|
92
|
+
/handler/i,
|
|
93
|
+
/controller/i,
|
|
94
|
+
/processor/i,
|
|
95
|
+
/executor/i,
|
|
96
|
+
/manager/i,
|
|
97
|
+
/helper/i,
|
|
98
|
+
/utility/i,
|
|
99
|
+
/client/i,
|
|
100
|
+
/api/i,
|
|
101
|
+
/web/i,
|
|
102
|
+
/mobile/i,
|
|
103
|
+
/ssh/i,
|
|
104
|
+
/database/i,
|
|
105
|
+
/banco/i,
|
|
106
|
+
];
|
|
107
|
+
// Métodos que definitivamente NÃO são CTs
|
|
108
|
+
static excludedMethods = new Set([
|
|
109
|
+
'constructor',
|
|
110
|
+
'toString',
|
|
111
|
+
'valueOf',
|
|
112
|
+
'hasOwnProperty',
|
|
113
|
+
'isPrototypeOf',
|
|
114
|
+
'propertyIsEnumerable',
|
|
115
|
+
'toLocaleString',
|
|
116
|
+
'__defineGetter__',
|
|
117
|
+
'__defineSetter__',
|
|
118
|
+
'__lookupGetter__',
|
|
119
|
+
'__lookupSetter__',
|
|
120
|
+
'bind',
|
|
121
|
+
'call',
|
|
122
|
+
'apply',
|
|
123
|
+
'length',
|
|
124
|
+
'name',
|
|
125
|
+
'prototype',
|
|
126
|
+
'then',
|
|
127
|
+
'catch',
|
|
128
|
+
'finally', // Promise methods
|
|
129
|
+
'on',
|
|
130
|
+
'off',
|
|
131
|
+
'emit',
|
|
132
|
+
'addEventListener',
|
|
133
|
+
'removeEventListener', // Event methods
|
|
134
|
+
]);
|
|
135
|
+
// 🚫 BLACKLIST CRÍTICA: Classes que devem ser SEMPRE bloqueadas (causam stack overflow e CTs falsos)
|
|
136
|
+
static nativeClassBlacklist = new Set([
|
|
137
|
+
// 🚫 OBJETOS FUNDAMENTAIS - NUNCA INTERCEPTAR (causam stack overflow)
|
|
138
|
+
'Object',
|
|
139
|
+
'Date',
|
|
140
|
+
'Array',
|
|
141
|
+
'String',
|
|
142
|
+
'Number',
|
|
143
|
+
'Boolean',
|
|
144
|
+
'Function',
|
|
145
|
+
'RegExp',
|
|
146
|
+
'Math',
|
|
147
|
+
'JSON',
|
|
148
|
+
'Error',
|
|
149
|
+
'Promise',
|
|
150
|
+
'Map',
|
|
151
|
+
'Set',
|
|
152
|
+
'WeakMap',
|
|
153
|
+
'WeakSet',
|
|
154
|
+
'Symbol',
|
|
155
|
+
'Proxy',
|
|
156
|
+
'Reflect',
|
|
157
|
+
'console',
|
|
158
|
+
'BigInt',
|
|
159
|
+
'FinalizationRegistry',
|
|
160
|
+
'WeakRef',
|
|
161
|
+
// 🚫 GLOBAL OBJECTS - NUNCA INTERCEPTAR (são utilities globais)
|
|
162
|
+
'eval',
|
|
163
|
+
'parseInt',
|
|
164
|
+
'parseFloat',
|
|
165
|
+
'isNaN',
|
|
166
|
+
'isFinite',
|
|
167
|
+
'encodeURI',
|
|
168
|
+
'decodeURI',
|
|
169
|
+
'encodeURIComponent',
|
|
170
|
+
'decodeURIComponent',
|
|
171
|
+
'escape',
|
|
172
|
+
'unescape',
|
|
173
|
+
// 🚫 GLOBAL FUNCTIONS - NUNCA INTERCEPTAR
|
|
174
|
+
'clearInterval',
|
|
175
|
+
'clearTimeout',
|
|
176
|
+
'setInterval',
|
|
177
|
+
'setTimeout',
|
|
178
|
+
'queueMicrotask',
|
|
179
|
+
'structuredClone',
|
|
180
|
+
'atob',
|
|
181
|
+
'btoa',
|
|
182
|
+
'fetch',
|
|
183
|
+
// 🚫 NODE.JS INTERNALS - NUNCA INTERCEPTAR (causam erros críticos)
|
|
184
|
+
'process',
|
|
185
|
+
'global',
|
|
186
|
+
'Buffer',
|
|
187
|
+
'URL',
|
|
188
|
+
'URLSearchParams',
|
|
189
|
+
'TextEncoder',
|
|
190
|
+
'TextDecoder',
|
|
191
|
+
'AbortController',
|
|
192
|
+
'AbortSignal',
|
|
193
|
+
'Event',
|
|
194
|
+
'EventTarget',
|
|
195
|
+
'CustomEvent',
|
|
196
|
+
'Navigator',
|
|
197
|
+
// 🚫 WEB STREAMS API - CAUSAM ERR_INVALID_THIS (fonte dos erros atuais!)
|
|
198
|
+
'TransformStream',
|
|
199
|
+
'TransformStreamDefaultController',
|
|
200
|
+
'WritableStream',
|
|
201
|
+
'WritableStreamDefaultController',
|
|
202
|
+
'WritableStreamDefaultWriter',
|
|
203
|
+
'ReadableStream',
|
|
204
|
+
'ReadableStreamDefaultReader',
|
|
205
|
+
'ReadableStreamBYOBReader',
|
|
206
|
+
'ReadableStreamBYOBRequest',
|
|
207
|
+
'ReadableByteStreamController',
|
|
208
|
+
'ReadableStreamDefaultController',
|
|
209
|
+
'ByteLengthQueuingStrategy',
|
|
210
|
+
'CountQueuingStrategy',
|
|
211
|
+
'TextEncoderStream',
|
|
212
|
+
'TextDecoderStream',
|
|
213
|
+
'CompressionStream',
|
|
214
|
+
'DecompressionStream',
|
|
215
|
+
// 🚫 FETCH API - CAUSAM ILLEGAL INVOCATION
|
|
216
|
+
'BroadcastChannel',
|
|
217
|
+
'MessageChannel',
|
|
218
|
+
'MessagePort',
|
|
219
|
+
'MessageEvent',
|
|
220
|
+
'Blob',
|
|
221
|
+
'File',
|
|
222
|
+
'FormData',
|
|
223
|
+
'Headers',
|
|
224
|
+
'Request',
|
|
225
|
+
'Response',
|
|
226
|
+
'WebSocket',
|
|
227
|
+
'URLPattern',
|
|
228
|
+
// 🚫 PERFORMANCE API - CAUSAM ERR_INVALID_ARG_TYPE
|
|
229
|
+
'Performance',
|
|
230
|
+
'PerformanceEntry',
|
|
231
|
+
'PerformanceMark',
|
|
232
|
+
'PerformanceMeasure',
|
|
233
|
+
'PerformanceObserver',
|
|
234
|
+
'PerformanceObserverEntryList',
|
|
235
|
+
'PerformanceResourceTiming',
|
|
236
|
+
// 🚫 CRYPTO API - CAUSAM ERR_INVALID_THIS
|
|
237
|
+
'Crypto',
|
|
238
|
+
'CryptoKey',
|
|
239
|
+
'SubtleCrypto',
|
|
240
|
+
// 🚫 BUFFER E TYPED ARRAYS - CAUSAM INCOMPATIBLE RECEIVER
|
|
241
|
+
'ArrayBuffer',
|
|
242
|
+
'SharedArrayBuffer',
|
|
243
|
+
'DataView',
|
|
244
|
+
'Int8Array',
|
|
245
|
+
'Uint8Array',
|
|
246
|
+
'Uint8ClampedArray',
|
|
247
|
+
'Int16Array',
|
|
248
|
+
'Uint16Array',
|
|
249
|
+
'Int32Array',
|
|
250
|
+
'Uint32Array',
|
|
251
|
+
'Float32Array',
|
|
252
|
+
'Float64Array',
|
|
253
|
+
'BigInt64Array',
|
|
254
|
+
'BigUint64Array',
|
|
255
|
+
// 🚫 ITERATORS - CAUSAM PROBLEMAS RECURSIVOS
|
|
256
|
+
'Iterator',
|
|
257
|
+
'AsyncIterator',
|
|
258
|
+
'Generator',
|
|
259
|
+
'AsyncGenerator',
|
|
260
|
+
// 🚫 AUTOCORE INTERNAL CLASSES - EVITAR AUTO-INTERCEPTAÇÃO
|
|
261
|
+
'ExecutionTracker',
|
|
262
|
+
'GlobalStatementRegistry',
|
|
263
|
+
'StatementTracker',
|
|
264
|
+
'StatementMethodFilter',
|
|
265
|
+
'CTFallbackSystem',
|
|
266
|
+
'ES6ModuleInterceptor',
|
|
267
|
+
'AutoStatementInterceptor',
|
|
268
|
+
'HubDocs',
|
|
269
|
+
'CategoryDetector',
|
|
270
|
+
'SwaggerGenerator',
|
|
271
|
+
'DirectStatementInterceptor',
|
|
272
|
+
'GlobalErrorHandler',
|
|
273
|
+
'TestAnnotations',
|
|
274
|
+
// 🚫 STATEMENT BASE CLASSES - NÃO SÃO CTs INDIVIDUAIS
|
|
275
|
+
'BaseStatement',
|
|
276
|
+
'WebStatement',
|
|
277
|
+
'SSHStatement',
|
|
278
|
+
'ApiStatement',
|
|
279
|
+
'DatabaseStatement',
|
|
280
|
+
'MobileStatement',
|
|
281
|
+
'Statement',
|
|
282
|
+
'TestStatement',
|
|
283
|
+
// 🚫 AUTODOCS CLASSES - EVITAR LOOPS
|
|
284
|
+
'AutoDocs',
|
|
285
|
+
'AutoDocsGenerator',
|
|
286
|
+
'AutoDocsCore',
|
|
287
|
+
// 🚫 PLAYWRIGHT/TESTING INTERNALS
|
|
288
|
+
'Page',
|
|
289
|
+
'Browser',
|
|
290
|
+
'BrowserContext',
|
|
291
|
+
'Playwright',
|
|
292
|
+
'TestInfo',
|
|
293
|
+
'Locator',
|
|
294
|
+
'ElementHandle',
|
|
295
|
+
'Frame',
|
|
296
|
+
'Worker',
|
|
297
|
+
'Dialog',
|
|
298
|
+
'Download',
|
|
299
|
+
'FileChooser',
|
|
300
|
+
'Keyboard',
|
|
301
|
+
'Mouse',
|
|
302
|
+
'Touchscreen',
|
|
303
|
+
'Video',
|
|
304
|
+
'CDPSession',
|
|
305
|
+
// 🚫 NODE.JS MODULES - INTERNALS
|
|
306
|
+
'Module',
|
|
307
|
+
'require',
|
|
308
|
+
'exports',
|
|
309
|
+
'__dirname',
|
|
310
|
+
'__filename',
|
|
311
|
+
'fs',
|
|
312
|
+
'path',
|
|
313
|
+
'os',
|
|
314
|
+
'crypto',
|
|
315
|
+
'http',
|
|
316
|
+
'https',
|
|
317
|
+
'net',
|
|
318
|
+
'dgram',
|
|
319
|
+
'child_process',
|
|
320
|
+
'cluster',
|
|
321
|
+
'stream',
|
|
322
|
+
'util',
|
|
323
|
+
'events',
|
|
324
|
+
// 🚫 JAVASCRIPT ENGINE INTERNALS
|
|
325
|
+
'Intl',
|
|
326
|
+
'JSON',
|
|
327
|
+
'Atomics',
|
|
328
|
+
'SharedArrayBuffer',
|
|
329
|
+
'WebAssembly',
|
|
330
|
+
'AggregateError',
|
|
331
|
+
'ReferenceError',
|
|
332
|
+
'SyntaxError',
|
|
333
|
+
'TypeError',
|
|
334
|
+
'RangeError',
|
|
335
|
+
'URIError',
|
|
336
|
+
'EvalError',
|
|
337
|
+
]);
|
|
338
|
+
/**
|
|
339
|
+
* 🚀 Inicializar filtros inteligentes
|
|
340
|
+
*/
|
|
341
|
+
static initialize() {
|
|
342
|
+
if (StatementMethodFilter.initialized)
|
|
343
|
+
return;
|
|
344
|
+
StatementMethodFilter.initialized = true;
|
|
345
|
+
console.log('🎯 [StatementMethodFilter] Inicializando filtros inteligentes...');
|
|
346
|
+
console.log(`🎯 [StatementMethodFilter] ${StatementMethodFilter.methodPatterns.length} padrões de método carregados`);
|
|
347
|
+
console.log(`🎯 [StatementMethodFilter] ${StatementMethodFilter.classPatterns.length} padrões de classe carregados`);
|
|
348
|
+
console.log(`🎯 [StatementMethodFilter] ${StatementMethodFilter.excludedMethods.size} métodos excluídos`);
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* 📊 Calcular score de um método
|
|
352
|
+
*/
|
|
353
|
+
static calculateMethodScore(methodName, className) {
|
|
354
|
+
if (StatementMethodFilter.excludedMethods.has(methodName)) {
|
|
355
|
+
return 0;
|
|
356
|
+
}
|
|
357
|
+
let totalScore = 0;
|
|
358
|
+
let matchCount = 0;
|
|
359
|
+
// Calcular score baseado nos padrões
|
|
360
|
+
for (const pattern of StatementMethodFilter.methodPatterns) {
|
|
361
|
+
if (pattern.pattern.test(methodName)) {
|
|
362
|
+
totalScore += pattern.weight;
|
|
363
|
+
matchCount++;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
// Bonus se o nome da classe indica Statement/Action
|
|
367
|
+
if (className) {
|
|
368
|
+
const classBonus = StatementMethodFilter.classPatterns.some((pattern) => pattern.test(className))
|
|
369
|
+
? 5
|
|
370
|
+
: 0;
|
|
371
|
+
totalScore += classBonus;
|
|
372
|
+
}
|
|
373
|
+
// Penalty para métodos muito curtos (provavelmente não são CTs)
|
|
374
|
+
if (methodName.length < 3) {
|
|
375
|
+
totalScore -= 3;
|
|
376
|
+
}
|
|
377
|
+
// Bonus para métodos com sufixos típicos
|
|
378
|
+
if (/^(execute|perform|run|process|handle|do).+/i.test(methodName)) {
|
|
379
|
+
totalScore += 3;
|
|
380
|
+
}
|
|
381
|
+
console.log(`🎯 [StatementMethodFilter] ${className || 'Unknown'}.${methodName}: score=${totalScore} (${matchCount} matches)`);
|
|
382
|
+
return Math.max(0, totalScore);
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* ✅ Verificar se método é provavelmente um CT
|
|
386
|
+
* ✅ REATIVADO - Filtrar baseado no nome da classe e método
|
|
387
|
+
*/
|
|
388
|
+
static isLikelyStatementMethod(methodName, className) {
|
|
389
|
+
// Se é classe nativa, sempre rejeitar
|
|
390
|
+
if (className &&
|
|
391
|
+
StatementMethodFilter.isNativeClassBlacklisted(className)) {
|
|
392
|
+
console.log(`🚫 [StatementMethodFilter] MÉTODO REJEITADO: ${className}.${methodName} (classe nativa)`);
|
|
393
|
+
return false;
|
|
394
|
+
}
|
|
395
|
+
// Se o método está na lista de excluídos, rejeitar
|
|
396
|
+
if (StatementMethodFilter.excludedMethods.has(methodName)) {
|
|
397
|
+
console.log(`🚫 [StatementMethodFilter] MÉTODO REJEITADO: ${className || 'Unknown'}.${methodName} (método excluído)`);
|
|
398
|
+
return false;
|
|
399
|
+
}
|
|
400
|
+
// Se o nome da classe indica Statement/Action, aprovar tudo
|
|
401
|
+
if (className &&
|
|
402
|
+
StatementMethodFilter.classPatterns.some((pattern) => pattern.test(className))) {
|
|
403
|
+
console.log(`✅ [StatementMethodFilter] MÉTODO APROVADO: ${className}.${methodName} (classe Statement)`);
|
|
404
|
+
return true;
|
|
405
|
+
}
|
|
406
|
+
// Para outras classes, calcular score
|
|
407
|
+
const score = StatementMethodFilter.calculateMethodScore(methodName, className);
|
|
408
|
+
const approved = score >= 5; // Score mínimo para aprovar
|
|
409
|
+
if (approved) {
|
|
410
|
+
console.log(`✅ [StatementMethodFilter] MÉTODO APROVADO: ${className || 'Unknown'}.${methodName} (score=${score})`);
|
|
411
|
+
}
|
|
412
|
+
else {
|
|
413
|
+
console.log(`🚫 [StatementMethodFilter] MÉTODO REJEITADO: ${className || 'Unknown'}.${methodName} (score=${score})`);
|
|
414
|
+
}
|
|
415
|
+
return approved;
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* 🚫 Verificar se classe é nativa e deve ser ignorada
|
|
419
|
+
* ✅ REATIVADO - Bloquear classes nativas para evitar stack overflow e CTs falsos
|
|
420
|
+
*/
|
|
421
|
+
static isNativeClassBlacklisted(className) {
|
|
422
|
+
const isBlacklisted = StatementMethodFilter.nativeClassBlacklist.has(className);
|
|
423
|
+
if (isBlacklisted) {
|
|
424
|
+
console.log(`🚫 [StatementMethodFilter] CLASSE BLOQUEADA (nativa): ${className}`);
|
|
425
|
+
return true;
|
|
426
|
+
}
|
|
427
|
+
console.log(`✅ [StatementMethodFilter] CLASSE PERMITIDA: ${className} (não é nativa)`);
|
|
428
|
+
return false;
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* 🛡️ Análise segura de classe (evita ERR_INVALID_THIS)
|
|
432
|
+
*/
|
|
433
|
+
static safeAnalyzeClass(classConstructor, className) {
|
|
434
|
+
// Verificar blacklist primeiro
|
|
435
|
+
if (StatementMethodFilter.isNativeClassBlacklisted(className)) {
|
|
436
|
+
return {
|
|
437
|
+
name: className,
|
|
438
|
+
constructor: classConstructor,
|
|
439
|
+
methods: [],
|
|
440
|
+
confidence: 0,
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
// Análise normal para outras classes
|
|
444
|
+
return StatementMethodFilter.analyzeClass(classConstructor, className);
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* �🔍 Analisar classe e extrair métodos CT
|
|
448
|
+
*/
|
|
449
|
+
static analyzeClass(classConstructor, className) {
|
|
450
|
+
const methods = [];
|
|
451
|
+
let totalConfidence = 0;
|
|
452
|
+
try {
|
|
453
|
+
// Analisar métodos static
|
|
454
|
+
const staticMethods = Object.getOwnPropertyNames(classConstructor)
|
|
455
|
+
.filter((name) => {
|
|
456
|
+
try {
|
|
457
|
+
return typeof classConstructor[name] === 'function';
|
|
458
|
+
}
|
|
459
|
+
catch {
|
|
460
|
+
return false; // Ignorar propriedades que causam erro ao acessar
|
|
461
|
+
}
|
|
462
|
+
})
|
|
463
|
+
.filter((name) => !name.startsWith('_'))
|
|
464
|
+
.filter((name) => name !== 'constructor');
|
|
465
|
+
staticMethods.forEach((methodName) => {
|
|
466
|
+
if (StatementMethodFilter.isLikelyStatementMethod(methodName, className)) {
|
|
467
|
+
methods.push(`${methodName} (static)`);
|
|
468
|
+
totalConfidence += StatementMethodFilter.calculateMethodScore(methodName, className);
|
|
469
|
+
}
|
|
470
|
+
});
|
|
471
|
+
// Analisar métodos do prototype com proteção
|
|
472
|
+
if (classConstructor.prototype) {
|
|
473
|
+
const prototypeMethods = Object.getOwnPropertyNames(classConstructor.prototype)
|
|
474
|
+
.filter((name) => {
|
|
475
|
+
try {
|
|
476
|
+
// Verificação segura do tipo
|
|
477
|
+
const descriptor = Object.getOwnPropertyDescriptor(classConstructor.prototype, name);
|
|
478
|
+
if (!descriptor)
|
|
479
|
+
return false;
|
|
480
|
+
// Se é getter/setter que pode causar erro, pular
|
|
481
|
+
if (descriptor.get || descriptor.set) {
|
|
482
|
+
try {
|
|
483
|
+
// Tentar acessar apenas se seguro
|
|
484
|
+
const testValue = classConstructor.prototype[name];
|
|
485
|
+
return typeof testValue === 'function';
|
|
486
|
+
}
|
|
487
|
+
catch (error) {
|
|
488
|
+
console.log(`⚠️ [StatementMethodFilter] Erro ao analisar classe ${className}: ${error.message}`);
|
|
489
|
+
return false;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
return typeof classConstructor.prototype[name] === 'function';
|
|
493
|
+
}
|
|
494
|
+
catch {
|
|
495
|
+
return false;
|
|
496
|
+
}
|
|
497
|
+
})
|
|
498
|
+
.filter((name) => !name.startsWith('_'))
|
|
499
|
+
.filter((name) => name !== 'constructor');
|
|
500
|
+
prototypeMethods.forEach((methodName) => {
|
|
501
|
+
if (StatementMethodFilter.isLikelyStatementMethod(methodName, className)) {
|
|
502
|
+
methods.push(`${methodName} (instance)`);
|
|
503
|
+
totalConfidence += StatementMethodFilter.calculateMethodScore(methodName, className);
|
|
504
|
+
}
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
console.log(`🔍 [StatementMethodFilter] Classe ${className}: ${methods.length} métodos CT encontrados`);
|
|
508
|
+
}
|
|
509
|
+
catch (error) {
|
|
510
|
+
console.log(`⚠️ [StatementMethodFilter] Erro ao analisar classe ${className}:`, error.message);
|
|
511
|
+
}
|
|
512
|
+
return {
|
|
513
|
+
name: className,
|
|
514
|
+
constructor: classConstructor,
|
|
515
|
+
methods,
|
|
516
|
+
confidence: methods.length > 0 ? totalConfidence / methods.length : 0,
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* 🎯 Filtro para todos os métodos de uma classe
|
|
521
|
+
* ✅ REATIVADO - Usar filtros para bloquear classes nativas e aprovar apenas CTs reais
|
|
522
|
+
*/
|
|
523
|
+
static filterClassMethods(classConstructor, className) {
|
|
524
|
+
// Primeiro verificar se é classe nativa (deve ser bloqueada)
|
|
525
|
+
if (StatementMethodFilter.isNativeClassBlacklisted(className)) {
|
|
526
|
+
console.log(`🚫 [StatementMethodFilter] CLASSE BLOQUEADA: ${className} (nativa)`);
|
|
527
|
+
return [];
|
|
528
|
+
}
|
|
529
|
+
console.log(`🔍 [StatementMethodFilter] ANALISANDO CLASSE: ${className}`);
|
|
530
|
+
const methods = [];
|
|
531
|
+
try {
|
|
532
|
+
// Métodos estáticos
|
|
533
|
+
Object.getOwnPropertyNames(classConstructor).forEach((prop) => {
|
|
534
|
+
if (typeof classConstructor[prop] === 'function' &&
|
|
535
|
+
prop !== 'constructor' &&
|
|
536
|
+
prop !== 'name' &&
|
|
537
|
+
prop !== 'length' &&
|
|
538
|
+
StatementMethodFilter.isLikelyStatementMethod(prop, className)) {
|
|
539
|
+
methods.push(prop);
|
|
540
|
+
}
|
|
541
|
+
});
|
|
542
|
+
// Métodos de instância
|
|
543
|
+
if (classConstructor.prototype) {
|
|
544
|
+
Object.getOwnPropertyNames(classConstructor.prototype).forEach((prop) => {
|
|
545
|
+
try {
|
|
546
|
+
if (typeof classConstructor.prototype[prop] === 'function' &&
|
|
547
|
+
prop !== 'constructor' &&
|
|
548
|
+
StatementMethodFilter.isLikelyStatementMethod(prop, className)) {
|
|
549
|
+
methods.push(prop);
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
catch (error) {
|
|
553
|
+
// Ignorar erros ao acessar propriedades de classes problemáticas
|
|
554
|
+
console.log(`⚠️ [StatementMethodFilter] Erro ao analisar ${className}: ${String(error)}`);
|
|
555
|
+
}
|
|
556
|
+
});
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
catch (error) {
|
|
560
|
+
console.log(`⚠️ [StatementMethodFilter] Erro ao analisar ${className}:`, error);
|
|
561
|
+
}
|
|
562
|
+
console.log(`🔍 [StatementMethodFilter] Classe ${className}: ${methods.length} métodos CT encontrados`);
|
|
563
|
+
return methods;
|
|
564
|
+
}
|
|
565
|
+
/**
|
|
566
|
+
* 📊 Obter estatísticas dos filtros
|
|
567
|
+
*/
|
|
568
|
+
static getFilterStats() {
|
|
569
|
+
return {
|
|
570
|
+
patterns: StatementMethodFilter.methodPatterns.length,
|
|
571
|
+
classPatterns: StatementMethodFilter.classPatterns.length,
|
|
572
|
+
excludedMethods: StatementMethodFilter.excludedMethods.size,
|
|
573
|
+
totalPatterns: StatementMethodFilter.methodPatterns.length +
|
|
574
|
+
StatementMethodFilter.classPatterns.length,
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* 🔧 Adicionar padrão customizado
|
|
579
|
+
*/
|
|
580
|
+
static addCustomPattern(pattern, weight, description) {
|
|
581
|
+
StatementMethodFilter.methodPatterns.push({ pattern, weight, description });
|
|
582
|
+
console.log(`🎯 [StatementMethodFilter] Padrão customizado adicionado: ${description}`);
|
|
583
|
+
}
|
|
584
|
+
/**
|
|
585
|
+
* 🎯 Modo debug - mostrar análise detalhada
|
|
586
|
+
*/
|
|
587
|
+
static debugAnalyzeMethod(methodName, className) {
|
|
588
|
+
console.log(`\n🔍 [StatementMethodFilter] ANÁLISE DETALHADA: ${className || 'Unknown'}.${methodName}`);
|
|
589
|
+
if (StatementMethodFilter.excludedMethods.has(methodName)) {
|
|
590
|
+
console.log('❌ Método na lista de exclusão');
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
let totalScore = 0;
|
|
594
|
+
const matches = [];
|
|
595
|
+
StatementMethodFilter.methodPatterns.forEach((pattern) => {
|
|
596
|
+
if (pattern.pattern.test(methodName)) {
|
|
597
|
+
matches.push(`${pattern.description}: +${pattern.weight}`);
|
|
598
|
+
totalScore += pattern.weight;
|
|
599
|
+
}
|
|
600
|
+
});
|
|
601
|
+
if (className) {
|
|
602
|
+
const classBonus = StatementMethodFilter.classPatterns.some((pattern) => pattern.test(className))
|
|
603
|
+
? 5
|
|
604
|
+
: 0;
|
|
605
|
+
if (classBonus > 0) {
|
|
606
|
+
matches.push(`Class bonus: +${classBonus}`);
|
|
607
|
+
totalScore += classBonus;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
console.log('📊 Matches encontrados:');
|
|
611
|
+
matches.forEach((match) => console.log(` ${match}`));
|
|
612
|
+
console.log(`📊 Score total: ${totalScore}`);
|
|
613
|
+
console.log(`📊 Resultado: ${totalScore >= 3 ? '✅ APROVADO' : '❌ REJEITADO'}`);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
// Auto-inicialização
|
|
617
|
+
StatementMethodFilter.initialize();
|
|
618
|
+
export { StatementMethodFilter };
|