@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,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 📖 SwaggerGenerator - Gerador de Documentação OpenAPI
|
|
3
|
+
* @silasfmartins/testhub - Auto Documentation System
|
|
4
|
+
*/
|
|
5
|
+
import type { ExecutionData } from './types.js';
|
|
6
|
+
export declare class SwaggerGenerator {
|
|
7
|
+
private static readonly SWAGGER_VERSION;
|
|
8
|
+
/**
|
|
9
|
+
* 🔄 Gerar especificação OpenAPI completa
|
|
10
|
+
*/
|
|
11
|
+
static generateSwagger(data: ExecutionData): any;
|
|
12
|
+
/**
|
|
13
|
+
* 🌐 Extrair servidores únicos
|
|
14
|
+
*/
|
|
15
|
+
private static extractServers;
|
|
16
|
+
/**
|
|
17
|
+
* 🛣️ Gerar paths da API
|
|
18
|
+
*/
|
|
19
|
+
private static generatePaths;
|
|
20
|
+
/**
|
|
21
|
+
* 🎯 Gerar operação individual
|
|
22
|
+
*/
|
|
23
|
+
private static generateOperation;
|
|
24
|
+
/**
|
|
25
|
+
* 📝 Gerar resumo da operação
|
|
26
|
+
*/
|
|
27
|
+
private static generateSummary;
|
|
28
|
+
/**
|
|
29
|
+
* 📋 Gerar descrição detalhada
|
|
30
|
+
*/
|
|
31
|
+
private static generateDescription;
|
|
32
|
+
/**
|
|
33
|
+
* 🏷️ Extrair tags
|
|
34
|
+
*/
|
|
35
|
+
private static extractTags;
|
|
36
|
+
/**
|
|
37
|
+
* 📊 Gerar parâmetros
|
|
38
|
+
*/
|
|
39
|
+
private static generateParameters;
|
|
40
|
+
/**
|
|
41
|
+
* 📤 Gerar request body
|
|
42
|
+
*/
|
|
43
|
+
private static generateRequestBody;
|
|
44
|
+
/**
|
|
45
|
+
* 📥 Gerar responses
|
|
46
|
+
*/
|
|
47
|
+
private static generateResponses;
|
|
48
|
+
/**
|
|
49
|
+
* 🔧 Métodos auxiliares
|
|
50
|
+
*/
|
|
51
|
+
private static groupApisByEndpoint;
|
|
52
|
+
private static groupByMethod;
|
|
53
|
+
private static generateSchemas;
|
|
54
|
+
private static generateSecuritySchemes;
|
|
55
|
+
private static generateTags;
|
|
56
|
+
private static generateSchemaFromObject;
|
|
57
|
+
private static calculateAvgResponseTime;
|
|
58
|
+
private static getStatusDescription;
|
|
59
|
+
}
|
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 📖 SwaggerGenerator - Gerador de Documentação OpenAPI
|
|
3
|
+
* @silasfmartins/testhub - Auto Documentation System
|
|
4
|
+
*/
|
|
5
|
+
export class SwaggerGenerator {
|
|
6
|
+
static SWAGGER_VERSION = '3.0.3';
|
|
7
|
+
/**
|
|
8
|
+
* 🔄 Gerar especificação OpenAPI completa
|
|
9
|
+
*/
|
|
10
|
+
static generateSwagger(data) {
|
|
11
|
+
const swagger = {
|
|
12
|
+
openapi: SwaggerGenerator.SWAGGER_VERSION,
|
|
13
|
+
info: {
|
|
14
|
+
title: `${data.metadata.projectName} - API Documentation`,
|
|
15
|
+
version: data.metadata.version,
|
|
16
|
+
description: `Documentação automática gerada pelo @silasfmartins/testhub\n\nGerada em: ${new Date().toLocaleString()}\nTipo do projeto: ${data.metadata.projectType}\nAmbiente: ${data.metadata.environment}`,
|
|
17
|
+
contact: {
|
|
18
|
+
name: 'AutoCore Website System',
|
|
19
|
+
url: 'http://brtlvlty0559pl:3002/',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
servers: SwaggerGenerator.extractServers(data.apis),
|
|
23
|
+
paths: SwaggerGenerator.generatePaths(data.apis),
|
|
24
|
+
components: {
|
|
25
|
+
schemas: SwaggerGenerator.generateSchemas(data.apis),
|
|
26
|
+
securitySchemes: SwaggerGenerator.generateSecuritySchemes(data.apis),
|
|
27
|
+
},
|
|
28
|
+
tags: SwaggerGenerator.generateTags(data.apis),
|
|
29
|
+
};
|
|
30
|
+
return swagger;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 🌐 Extrair servidores únicos
|
|
34
|
+
*/
|
|
35
|
+
static extractServers(apis) {
|
|
36
|
+
const serverSet = new Set();
|
|
37
|
+
apis.forEach((api) => {
|
|
38
|
+
try {
|
|
39
|
+
const url = new URL(api.url);
|
|
40
|
+
const baseUrl = `${url.protocol}//${url.host}`;
|
|
41
|
+
serverSet.add(baseUrl);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
// Ignorar URLs inválidas
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
return Array.from(serverSet).map((url) => ({
|
|
48
|
+
url,
|
|
49
|
+
description: 'Servidor extraído automaticamente',
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 🛣️ Gerar paths da API
|
|
54
|
+
*/
|
|
55
|
+
static generatePaths(apis) {
|
|
56
|
+
const paths = {};
|
|
57
|
+
// Agrupar APIs por endpoint
|
|
58
|
+
const groupedApis = SwaggerGenerator.groupApisByEndpoint(apis);
|
|
59
|
+
Object.entries(groupedApis).forEach(([endpoint, calls]) => {
|
|
60
|
+
paths[endpoint] = {};
|
|
61
|
+
// Agrupar por método HTTP
|
|
62
|
+
const methodGroups = SwaggerGenerator.groupByMethod(calls);
|
|
63
|
+
Object.entries(methodGroups).forEach(([method, methodCalls]) => {
|
|
64
|
+
paths[endpoint][method.toLowerCase()] =
|
|
65
|
+
SwaggerGenerator.generateOperation(methodCalls);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
return paths;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 🎯 Gerar operação individual
|
|
72
|
+
*/
|
|
73
|
+
static generateOperation(calls) {
|
|
74
|
+
const firstCall = calls[0];
|
|
75
|
+
const successfulCalls = calls.filter((c) => c.success);
|
|
76
|
+
const failedCalls = calls.filter((c) => !c.success);
|
|
77
|
+
return {
|
|
78
|
+
summary: SwaggerGenerator.generateSummary(firstCall),
|
|
79
|
+
description: SwaggerGenerator.generateDescription(calls),
|
|
80
|
+
tags: SwaggerGenerator.extractTags(firstCall),
|
|
81
|
+
parameters: SwaggerGenerator.generateParameters(calls),
|
|
82
|
+
requestBody: SwaggerGenerator.generateRequestBody(calls),
|
|
83
|
+
responses: SwaggerGenerator.generateResponses(successfulCalls, failedCalls),
|
|
84
|
+
'x-autocore-stats': {
|
|
85
|
+
totalCalls: calls.length,
|
|
86
|
+
successRate: `${((successfulCalls.length / calls.length) * 100).toFixed(1)}%`,
|
|
87
|
+
avgResponseTime: SwaggerGenerator.calculateAvgResponseTime(calls),
|
|
88
|
+
lastExecuted: Math.max(...calls.map((c) => new Date(c.timestamp).getTime())),
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 📝 Gerar resumo da operação
|
|
94
|
+
*/
|
|
95
|
+
static generateSummary(call) {
|
|
96
|
+
const pathParts = new URL(call.url).pathname.split('/').filter(Boolean);
|
|
97
|
+
const lastPart = pathParts[pathParts.length - 1] || 'root';
|
|
98
|
+
const actionVerbs = {
|
|
99
|
+
GET: 'Obter',
|
|
100
|
+
POST: 'Criar',
|
|
101
|
+
PUT: 'Atualizar',
|
|
102
|
+
DELETE: 'Remover',
|
|
103
|
+
PATCH: 'Modificar',
|
|
104
|
+
};
|
|
105
|
+
return `${actionVerbs[call.method] || call.method} ${lastPart}`;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 📋 Gerar descrição detalhada
|
|
109
|
+
*/
|
|
110
|
+
static generateDescription(calls) {
|
|
111
|
+
const contexts = [
|
|
112
|
+
...new Set(calls.map((c) => c.testContext).filter(Boolean)),
|
|
113
|
+
];
|
|
114
|
+
const files = [...new Set(calls.map((c) => c.testFile).filter(Boolean))];
|
|
115
|
+
let description = 'Esta operação foi capturada automaticamente durante a execução dos testes.\n\n';
|
|
116
|
+
if (contexts.length > 0) {
|
|
117
|
+
description += `**Contextos de teste:** ${contexts.join(', ')}\n\n`;
|
|
118
|
+
}
|
|
119
|
+
if (files.length > 0) {
|
|
120
|
+
description += `**Arquivos de teste:** ${files.join(', ')}\n\n`;
|
|
121
|
+
}
|
|
122
|
+
description += `**Execuções registradas:** ${calls.length}`;
|
|
123
|
+
return description;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* 🏷️ Extrair tags
|
|
127
|
+
*/
|
|
128
|
+
static extractTags(call) {
|
|
129
|
+
const tags = [];
|
|
130
|
+
// Tag baseada no caminho
|
|
131
|
+
try {
|
|
132
|
+
const pathParts = new URL(call.url).pathname.split('/').filter(Boolean);
|
|
133
|
+
if (pathParts.length > 0) {
|
|
134
|
+
tags.push(pathParts[0]);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
// Ignorar
|
|
139
|
+
}
|
|
140
|
+
// Tag baseada no arquivo de teste
|
|
141
|
+
if (call.testFile) {
|
|
142
|
+
const fileName = call.testFile
|
|
143
|
+
.split('/')
|
|
144
|
+
.pop()
|
|
145
|
+
?.replace('.test.ts', '')
|
|
146
|
+
.replace('.spec.ts', '');
|
|
147
|
+
if (fileName) {
|
|
148
|
+
tags.push(fileName);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return tags.length > 0 ? tags : ['default'];
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* 📊 Gerar parâmetros
|
|
155
|
+
*/
|
|
156
|
+
static generateParameters(calls) {
|
|
157
|
+
const parameters = [];
|
|
158
|
+
// Extrair parâmetros de query únicos
|
|
159
|
+
const queryParams = new Set();
|
|
160
|
+
calls.forEach((call) => {
|
|
161
|
+
try {
|
|
162
|
+
const url = new URL(call.url);
|
|
163
|
+
url.searchParams.forEach((value, key) => {
|
|
164
|
+
queryParams.add(key);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
// Ignorar
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
queryParams.forEach((param) => {
|
|
172
|
+
parameters.push({
|
|
173
|
+
name: param,
|
|
174
|
+
in: 'query',
|
|
175
|
+
description: 'Parâmetro extraído automaticamente',
|
|
176
|
+
required: false,
|
|
177
|
+
schema: { type: 'string' },
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
// Extrair parâmetros de path
|
|
181
|
+
const firstCall = calls[0];
|
|
182
|
+
try {
|
|
183
|
+
const pathParams = new URL(firstCall.url).pathname.match(/{([^}]+)}/g);
|
|
184
|
+
if (pathParams) {
|
|
185
|
+
pathParams.forEach((param) => {
|
|
186
|
+
const paramName = param.slice(1, -1);
|
|
187
|
+
parameters.push({
|
|
188
|
+
name: paramName,
|
|
189
|
+
in: 'path',
|
|
190
|
+
description: 'Parâmetro de caminho',
|
|
191
|
+
required: true,
|
|
192
|
+
schema: { type: 'string' },
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
// Ignorar
|
|
199
|
+
}
|
|
200
|
+
return parameters;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* 📤 Gerar request body
|
|
204
|
+
*/
|
|
205
|
+
static generateRequestBody(calls) {
|
|
206
|
+
const callsWithPayload = calls.filter((c) => c.payload);
|
|
207
|
+
if (callsWithPayload.length === 0)
|
|
208
|
+
return;
|
|
209
|
+
const firstPayload = callsWithPayload[0].payload;
|
|
210
|
+
return {
|
|
211
|
+
description: 'Request body extraído automaticamente',
|
|
212
|
+
required: true,
|
|
213
|
+
content: {
|
|
214
|
+
'application/json': {
|
|
215
|
+
schema: SwaggerGenerator.generateSchemaFromObject(firstPayload),
|
|
216
|
+
example: firstPayload,
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* 📥 Gerar responses
|
|
223
|
+
*/
|
|
224
|
+
static generateResponses(successCalls, failedCalls) {
|
|
225
|
+
const responses = {};
|
|
226
|
+
// Responses de sucesso
|
|
227
|
+
if (successCalls.length > 0) {
|
|
228
|
+
const statusCodes = [
|
|
229
|
+
...new Set(successCalls
|
|
230
|
+
.map((c) => c.statusCode)
|
|
231
|
+
.filter((code) => code !== undefined)),
|
|
232
|
+
];
|
|
233
|
+
statusCodes.forEach((statusCode) => {
|
|
234
|
+
const callsWithStatus = successCalls.filter((c) => c.statusCode === statusCode);
|
|
235
|
+
const firstResponse = callsWithStatus.find((c) => c.response)?.response;
|
|
236
|
+
responses[statusCode.toString()] = {
|
|
237
|
+
description: SwaggerGenerator.getStatusDescription(statusCode),
|
|
238
|
+
content: firstResponse
|
|
239
|
+
? {
|
|
240
|
+
'application/json': {
|
|
241
|
+
schema: SwaggerGenerator.generateSchemaFromObject(firstResponse),
|
|
242
|
+
example: firstResponse,
|
|
243
|
+
},
|
|
244
|
+
}
|
|
245
|
+
: undefined,
|
|
246
|
+
};
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
// Responses de erro
|
|
250
|
+
if (failedCalls.length > 0) {
|
|
251
|
+
const errorCodes = [
|
|
252
|
+
...new Set(failedCalls
|
|
253
|
+
.map((c) => c.statusCode)
|
|
254
|
+
.filter((code) => code !== undefined)),
|
|
255
|
+
];
|
|
256
|
+
errorCodes.forEach((statusCode) => {
|
|
257
|
+
const callsWithStatus = failedCalls.filter((c) => c.statusCode === statusCode);
|
|
258
|
+
const firstError = callsWithStatus.find((c) => c.error)?.error;
|
|
259
|
+
responses[statusCode.toString()] = {
|
|
260
|
+
description: SwaggerGenerator.getStatusDescription(statusCode),
|
|
261
|
+
content: firstError
|
|
262
|
+
? {
|
|
263
|
+
'application/json': {
|
|
264
|
+
schema: SwaggerGenerator.generateSchemaFromObject(firstError),
|
|
265
|
+
example: firstError,
|
|
266
|
+
},
|
|
267
|
+
}
|
|
268
|
+
: undefined,
|
|
269
|
+
};
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
// Response padrão se não houver nenhum
|
|
273
|
+
if (Object.keys(responses).length === 0) {
|
|
274
|
+
responses['200'] = {
|
|
275
|
+
description: 'Resposta bem-sucedida',
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
return responses;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* 🔧 Métodos auxiliares
|
|
282
|
+
*/
|
|
283
|
+
static groupApisByEndpoint(apis) {
|
|
284
|
+
const groups = {};
|
|
285
|
+
apis.forEach((api) => {
|
|
286
|
+
try {
|
|
287
|
+
let path = new URL(api.url).pathname;
|
|
288
|
+
// Garantir que o path sempre comece com "/"
|
|
289
|
+
if (!path || path === '') {
|
|
290
|
+
path = '/root';
|
|
291
|
+
}
|
|
292
|
+
else if (!path.startsWith('/')) {
|
|
293
|
+
path = '/' + path;
|
|
294
|
+
}
|
|
295
|
+
// Limpar caracteres inválidos e normalizar
|
|
296
|
+
path = path.replace(/[^a-zA-Z0-9\-._~:/?#[\]@!$&'()*+,;=%]/g, '_');
|
|
297
|
+
if (!groups[path])
|
|
298
|
+
groups[path] = [];
|
|
299
|
+
groups[path].push(api);
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
// Gerar um path válido baseado na URL
|
|
303
|
+
const safePath = '/generated_' +
|
|
304
|
+
Buffer.from(api.url)
|
|
305
|
+
.toString('base64')
|
|
306
|
+
.substring(0, 20)
|
|
307
|
+
.replace(/[^a-zA-Z0-9]/g, '_');
|
|
308
|
+
if (!groups[safePath])
|
|
309
|
+
groups[safePath] = [];
|
|
310
|
+
groups[safePath].push(api);
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
return groups;
|
|
314
|
+
}
|
|
315
|
+
static groupByMethod(calls) {
|
|
316
|
+
const groups = {};
|
|
317
|
+
calls.forEach((call) => {
|
|
318
|
+
if (!groups[call.method])
|
|
319
|
+
groups[call.method] = [];
|
|
320
|
+
groups[call.method].push(call);
|
|
321
|
+
});
|
|
322
|
+
return groups;
|
|
323
|
+
}
|
|
324
|
+
static generateSchemas(apis) {
|
|
325
|
+
// Por simplicidade, retornamos um schema básico
|
|
326
|
+
// Em implementação futura, podemos analisar todos os payloads/responses
|
|
327
|
+
return {
|
|
328
|
+
Error: {
|
|
329
|
+
type: 'object',
|
|
330
|
+
properties: {
|
|
331
|
+
message: { type: 'string' },
|
|
332
|
+
code: { type: 'string' },
|
|
333
|
+
details: { type: 'object' },
|
|
334
|
+
},
|
|
335
|
+
},
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
static generateSecuritySchemes(apis) {
|
|
339
|
+
// Detectar esquemas de segurança comuns
|
|
340
|
+
const hasBearer = apis.some((api) => api.headers &&
|
|
341
|
+
Object.keys(api.headers).some((h) => h.toLowerCase() === 'authorization' &&
|
|
342
|
+
typeof api.headers[h] === 'string' &&
|
|
343
|
+
api.headers[h].startsWith('Bearer ')));
|
|
344
|
+
const schemes = {};
|
|
345
|
+
if (hasBearer) {
|
|
346
|
+
schemes.bearerAuth = {
|
|
347
|
+
type: 'http',
|
|
348
|
+
scheme: 'bearer',
|
|
349
|
+
bearerFormat: 'JWT',
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
return schemes;
|
|
353
|
+
}
|
|
354
|
+
static generateTags(apis) {
|
|
355
|
+
const tagSet = new Set();
|
|
356
|
+
apis.forEach((api) => {
|
|
357
|
+
SwaggerGenerator.extractTags(api).forEach((tag) => tagSet.add(tag));
|
|
358
|
+
});
|
|
359
|
+
return Array.from(tagSet).map((name) => ({
|
|
360
|
+
name,
|
|
361
|
+
description: `Operações relacionadas a ${name}`,
|
|
362
|
+
}));
|
|
363
|
+
}
|
|
364
|
+
static generateSchemaFromObject(obj) {
|
|
365
|
+
if (!obj || typeof obj !== 'object') {
|
|
366
|
+
return { type: 'string' };
|
|
367
|
+
}
|
|
368
|
+
if (Array.isArray(obj)) {
|
|
369
|
+
return {
|
|
370
|
+
type: 'array',
|
|
371
|
+
items: obj.length > 0
|
|
372
|
+
? SwaggerGenerator.generateSchemaFromObject(obj[0])
|
|
373
|
+
: { type: 'string' },
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
const properties = {};
|
|
377
|
+
Object.keys(obj).forEach((key) => {
|
|
378
|
+
const value = obj[key];
|
|
379
|
+
properties[key] = SwaggerGenerator.generateSchemaFromObject(value);
|
|
380
|
+
});
|
|
381
|
+
return {
|
|
382
|
+
type: 'object',
|
|
383
|
+
properties,
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
static calculateAvgResponseTime(calls) {
|
|
387
|
+
const timesWithDuration = calls.filter((c) => c.duration !== undefined);
|
|
388
|
+
if (timesWithDuration.length === 0)
|
|
389
|
+
return 0;
|
|
390
|
+
const total = timesWithDuration.reduce((sum, call) => sum + (call.duration || 0), 0);
|
|
391
|
+
return Math.round(total / timesWithDuration.length);
|
|
392
|
+
}
|
|
393
|
+
static getStatusDescription(statusCode) {
|
|
394
|
+
const descriptions = {
|
|
395
|
+
200: 'Sucesso',
|
|
396
|
+
201: 'Criado com sucesso',
|
|
397
|
+
400: 'Requisição inválida',
|
|
398
|
+
401: 'Não autorizado',
|
|
399
|
+
403: 'Acesso negado',
|
|
400
|
+
404: 'Não encontrado',
|
|
401
|
+
500: 'Erro interno do servidor',
|
|
402
|
+
};
|
|
403
|
+
return descriptions[statusCode] || `Status ${statusCode}`;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 📚 Auto Documentation System - Main Export
|
|
3
|
+
* @silasfmartins/testhub - Comprehensive Documentation Generation
|
|
4
|
+
*/
|
|
5
|
+
export { CategoryDetector } from './CategoryDetector.js';
|
|
6
|
+
export { ExecutionTracker, ExecutionTracker as Tracker, } from './ExecutionTracker.js';
|
|
7
|
+
export { AutoDocs, AutoDocs as Docs } from './HubDocs.js';
|
|
8
|
+
export { SwaggerGenerator } from './SwaggerGenerator.js';
|
|
9
|
+
export type { APICall, DBQuery, DocsConfig, ExecutionData, ExecutionMetadata, MobileAction, SSHCommand, TestCategory, UIAction, } from './types.js';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 📚 Auto Documentation System - Main Export
|
|
3
|
+
* @silasfmartins/testhub - Comprehensive Documentation Generation
|
|
4
|
+
*/
|
|
5
|
+
export { CategoryDetector } from './CategoryDetector.js';
|
|
6
|
+
export { ExecutionTracker, ExecutionTracker as Tracker, } from './ExecutionTracker.js';
|
|
7
|
+
// Convenience re-exports for common usage
|
|
8
|
+
export { AutoDocs, AutoDocs as Docs } from './HubDocs.js';
|
|
9
|
+
export { SwaggerGenerator } from './SwaggerGenerator.js';
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 📚 Types para o sistema de documentação automática
|
|
3
|
+
* @silasfmartins/testhub - Auto Documentation System
|
|
4
|
+
*/
|
|
5
|
+
export interface ExecutionData {
|
|
6
|
+
apis: APICall[];
|
|
7
|
+
ssh: SSHCommand[];
|
|
8
|
+
db: DBQuery[];
|
|
9
|
+
ui: UIAction[];
|
|
10
|
+
mobile: MobileAction[];
|
|
11
|
+
metadata: ExecutionMetadata;
|
|
12
|
+
}
|
|
13
|
+
export interface APICall {
|
|
14
|
+
id: string;
|
|
15
|
+
method: string;
|
|
16
|
+
url: string;
|
|
17
|
+
payload?: any;
|
|
18
|
+
response?: any;
|
|
19
|
+
statusCode?: number;
|
|
20
|
+
timestamp: string;
|
|
21
|
+
testName: string;
|
|
22
|
+
environment: string;
|
|
23
|
+
headers?: Record<string, string | string[]>;
|
|
24
|
+
duration?: number;
|
|
25
|
+
success: boolean;
|
|
26
|
+
error?: any;
|
|
27
|
+
testFile?: string;
|
|
28
|
+
testContext?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface SSHCommand {
|
|
31
|
+
command: string;
|
|
32
|
+
output: string;
|
|
33
|
+
host: string;
|
|
34
|
+
timestamp: string;
|
|
35
|
+
testName: string;
|
|
36
|
+
exitCode?: number;
|
|
37
|
+
duration: number;
|
|
38
|
+
user?: string;
|
|
39
|
+
success?: boolean;
|
|
40
|
+
error?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface DBQuery {
|
|
43
|
+
query: string;
|
|
44
|
+
params: any[];
|
|
45
|
+
result?: any;
|
|
46
|
+
duration: number;
|
|
47
|
+
timestamp: string;
|
|
48
|
+
testName: string;
|
|
49
|
+
database: string;
|
|
50
|
+
type: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'DDL' | 'OTHER';
|
|
51
|
+
rowCount?: number;
|
|
52
|
+
description?: string;
|
|
53
|
+
serviceName?: string;
|
|
54
|
+
success?: boolean;
|
|
55
|
+
error?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface UIAction {
|
|
58
|
+
action: string;
|
|
59
|
+
element: string;
|
|
60
|
+
value?: string;
|
|
61
|
+
page: string;
|
|
62
|
+
timestamp: string;
|
|
63
|
+
testName: string;
|
|
64
|
+
screenshot?: string;
|
|
65
|
+
selector: string;
|
|
66
|
+
success?: boolean;
|
|
67
|
+
duration?: number;
|
|
68
|
+
error?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface MobileAction {
|
|
71
|
+
action: string;
|
|
72
|
+
element?: string;
|
|
73
|
+
device: string;
|
|
74
|
+
platform: 'iOS' | 'Android' | 'Web';
|
|
75
|
+
timestamp: string;
|
|
76
|
+
testName: string;
|
|
77
|
+
value?: string;
|
|
78
|
+
coordinates?: {
|
|
79
|
+
x: number;
|
|
80
|
+
y: number;
|
|
81
|
+
};
|
|
82
|
+
screenshot?: string;
|
|
83
|
+
}
|
|
84
|
+
export interface ExecutionMetadata {
|
|
85
|
+
startTime: string;
|
|
86
|
+
endTime: string;
|
|
87
|
+
environment: string;
|
|
88
|
+
totalTests: number;
|
|
89
|
+
passedTests: number;
|
|
90
|
+
failedTests: number;
|
|
91
|
+
framework: string;
|
|
92
|
+
version: string;
|
|
93
|
+
projectName: string;
|
|
94
|
+
projectType: string;
|
|
95
|
+
duration: number;
|
|
96
|
+
}
|
|
97
|
+
export interface TestCategory {
|
|
98
|
+
name: string;
|
|
99
|
+
icon: string;
|
|
100
|
+
count: number;
|
|
101
|
+
description: string;
|
|
102
|
+
hasData: boolean;
|
|
103
|
+
}
|
|
104
|
+
export interface DocsConfig {
|
|
105
|
+
enabled: boolean;
|
|
106
|
+
categories: string[];
|
|
107
|
+
outputDir: string;
|
|
108
|
+
includeRequestBody: boolean;
|
|
109
|
+
includeResponseBody: boolean;
|
|
110
|
+
generateSwagger: boolean;
|
|
111
|
+
includeScreenshots: boolean;
|
|
112
|
+
maxRequestSize: number;
|
|
113
|
+
maxResponseSize: number;
|
|
114
|
+
}
|