@machina.ai/openapi-contract-tester 2.1.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/.env.example +91 -0
- package/README.md +472 -0
- package/dist/ai-engine/assertion-generator.d.ts +48 -0
- package/dist/ai-engine/assertion-generator.d.ts.map +1 -0
- package/dist/ai-engine/assertion-generator.js +166 -0
- package/dist/ai-engine/assertion-generator.js.map +1 -0
- package/dist/ai-engine/context-data-generator.d.ts +38 -0
- package/dist/ai-engine/context-data-generator.d.ts.map +1 -0
- package/dist/ai-engine/context-data-generator.js +146 -0
- package/dist/ai-engine/context-data-generator.js.map +1 -0
- package/dist/ai-engine/dataflow-detector.d.ts +53 -0
- package/dist/ai-engine/dataflow-detector.d.ts.map +1 -0
- package/dist/ai-engine/dataflow-detector.js +217 -0
- package/dist/ai-engine/dataflow-detector.js.map +1 -0
- package/dist/ai-engine/dependency-detector.d.ts +52 -0
- package/dist/ai-engine/dependency-detector.d.ts.map +1 -0
- package/dist/ai-engine/dependency-detector.js +241 -0
- package/dist/ai-engine/dependency-detector.js.map +1 -0
- package/dist/ai-engine/edge-case-suggester.d.ts +63 -0
- package/dist/ai-engine/edge-case-suggester.d.ts.map +1 -0
- package/dist/ai-engine/edge-case-suggester.js +177 -0
- package/dist/ai-engine/edge-case-suggester.js.map +1 -0
- package/dist/ai-engine/index.d.ts +13 -0
- package/dist/ai-engine/index.d.ts.map +1 -0
- package/dist/ai-engine/index.js +13 -0
- package/dist/ai-engine/index.js.map +1 -0
- package/dist/analyzers/ai-failure-analyzer.d.ts +41 -0
- package/dist/analyzers/ai-failure-analyzer.d.ts.map +1 -0
- package/dist/analyzers/ai-failure-analyzer.js +220 -0
- package/dist/analyzers/ai-failure-analyzer.js.map +1 -0
- package/dist/analyzers/comparison-utils.d.ts +31 -0
- package/dist/analyzers/comparison-utils.d.ts.map +1 -0
- package/dist/analyzers/comparison-utils.js +85 -0
- package/dist/analyzers/comparison-utils.js.map +1 -0
- package/dist/analyzers/context-analyzer.d.ts +49 -0
- package/dist/analyzers/context-analyzer.d.ts.map +1 -0
- package/dist/analyzers/context-analyzer.js +292 -0
- package/dist/analyzers/context-analyzer.js.map +1 -0
- package/dist/analyzers/dependency-analyzer.d.ts +44 -0
- package/dist/analyzers/dependency-analyzer.d.ts.map +1 -0
- package/dist/analyzers/dependency-analyzer.js +313 -0
- package/dist/analyzers/dependency-analyzer.js.map +1 -0
- package/dist/analyzers/failure-analyzer.d.ts +122 -0
- package/dist/analyzers/failure-analyzer.d.ts.map +1 -0
- package/dist/analyzers/failure-analyzer.js +140 -0
- package/dist/analyzers/failure-analyzer.js.map +1 -0
- package/dist/analyzers/failure-detectors/index.d.ts +33 -0
- package/dist/analyzers/failure-detectors/index.d.ts.map +1 -0
- package/dist/analyzers/failure-detectors/index.js +164 -0
- package/dist/analyzers/failure-detectors/index.js.map +1 -0
- package/dist/analyzers/failure-discrepancy-correlator.d.ts +111 -0
- package/dist/analyzers/failure-discrepancy-correlator.d.ts.map +1 -0
- package/dist/analyzers/failure-discrepancy-correlator.js +202 -0
- package/dist/analyzers/failure-discrepancy-correlator.js.map +1 -0
- package/dist/analyzers/index.d.ts +10 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +10 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/semantic-matcher.d.ts +123 -0
- package/dist/analyzers/semantic-matcher.d.ts.map +1 -0
- package/dist/analyzers/semantic-matcher.js +297 -0
- package/dist/analyzers/semantic-matcher.js.map +1 -0
- package/dist/analyzers/source-comparator.d.ts +177 -0
- package/dist/analyzers/source-comparator.d.ts.map +1 -0
- package/dist/analyzers/source-comparator.js +225 -0
- package/dist/analyzers/source-comparator.js.map +1 -0
- package/dist/business-rules/business-rules-analyzer.d.ts +44 -0
- package/dist/business-rules/business-rules-analyzer.d.ts.map +1 -0
- package/dist/business-rules/business-rules-analyzer.js +363 -0
- package/dist/business-rules/business-rules-analyzer.js.map +1 -0
- package/dist/business-rules/business-rules-generator.d.ts +78 -0
- package/dist/business-rules/business-rules-generator.d.ts.map +1 -0
- package/dist/business-rules/business-rules-generator.js +357 -0
- package/dist/business-rules/business-rules-generator.js.map +1 -0
- package/dist/business-rules/extractors/rule-extractors.d.ts +50 -0
- package/dist/business-rules/extractors/rule-extractors.d.ts.map +1 -0
- package/dist/business-rules/extractors/rule-extractors.js +189 -0
- package/dist/business-rules/extractors/rule-extractors.js.map +1 -0
- package/dist/business-rules/value-generators.d.ts +70 -0
- package/dist/business-rules/value-generators.d.ts.map +1 -0
- package/dist/business-rules/value-generators.js +142 -0
- package/dist/business-rules/value-generators.js.map +1 -0
- package/dist/executor/auth-providers/auth-header-builder.d.ts +16 -0
- package/dist/executor/auth-providers/auth-header-builder.d.ts.map +1 -0
- package/dist/executor/auth-providers/auth-header-builder.js +47 -0
- package/dist/executor/auth-providers/auth-header-builder.js.map +1 -0
- package/dist/executor/auth-providers/oauth2-provider.d.ts +19 -0
- package/dist/executor/auth-providers/oauth2-provider.d.ts.map +1 -0
- package/dist/executor/auth-providers/oauth2-provider.js +114 -0
- package/dist/executor/auth-providers/oauth2-provider.js.map +1 -0
- package/dist/executor/http-client.d.ts +133 -0
- package/dist/executor/http-client.d.ts.map +1 -0
- package/dist/executor/http-client.js +172 -0
- package/dist/executor/http-client.js.map +1 -0
- package/dist/executor/http-request-builder.d.ts +69 -0
- package/dist/executor/http-request-builder.d.ts.map +1 -0
- package/dist/executor/http-request-builder.js +140 -0
- package/dist/executor/http-request-builder.js.map +1 -0
- package/dist/executor/http-response-parser.d.ts +28 -0
- package/dist/executor/http-response-parser.d.ts.map +1 -0
- package/dist/executor/http-response-parser.js +74 -0
- package/dist/executor/http-response-parser.js.map +1 -0
- package/dist/executor/response-handler.d.ts +66 -0
- package/dist/executor/response-handler.d.ts.map +1 -0
- package/dist/executor/response-handler.js +135 -0
- package/dist/executor/response-handler.js.map +1 -0
- package/dist/executor/result-processor.d.ts +27 -0
- package/dist/executor/result-processor.d.ts.map +1 -0
- package/dist/executor/result-processor.js +140 -0
- package/dist/executor/result-processor.js.map +1 -0
- package/dist/executor/result-utils.d.ts +21 -0
- package/dist/executor/result-utils.d.ts.map +1 -0
- package/dist/executor/result-utils.js +29 -0
- package/dist/executor/result-utils.js.map +1 -0
- package/dist/executor/test-executor.d.ts +49 -0
- package/dist/executor/test-executor.d.ts.map +1 -0
- package/dist/executor/test-executor.js +226 -0
- package/dist/executor/test-executor.js.map +1 -0
- package/dist/executor/test-runner.d.ts +85 -0
- package/dist/executor/test-runner.d.ts.map +1 -0
- package/dist/executor/test-runner.js +177 -0
- package/dist/executor/test-runner.js.map +1 -0
- package/dist/executor/token-detector/index.d.ts +7 -0
- package/dist/executor/token-detector/index.d.ts.map +1 -0
- package/dist/executor/token-detector/index.js +7 -0
- package/dist/executor/token-detector/index.js.map +1 -0
- package/dist/executor/token-detector/token-detector.d.ts +64 -0
- package/dist/executor/token-detector/token-detector.d.ts.map +1 -0
- package/dist/executor/token-detector/token-detector.js +140 -0
- package/dist/executor/token-detector/token-detector.js.map +1 -0
- package/dist/generators/business-rule-from-stories-generator.d.ts +30 -0
- package/dist/generators/business-rule-from-stories-generator.d.ts.map +1 -0
- package/dist/generators/business-rule-from-stories-generator.js +227 -0
- package/dist/generators/business-rule-from-stories-generator.js.map +1 -0
- package/dist/generators/data/ai-data-generator.d.ts +23 -0
- package/dist/generators/data/ai-data-generator.d.ts.map +1 -0
- package/dist/generators/data/ai-data-generator.js +41 -0
- package/dist/generators/data/ai-data-generator.js.map +1 -0
- package/dist/generators/data/base-generator.d.ts +121 -0
- package/dist/generators/data/base-generator.d.ts.map +1 -0
- package/dist/generators/data/base-generator.js +200 -0
- package/dist/generators/data/base-generator.js.map +1 -0
- package/dist/generators/data/heuristic-data-generator.d.ts +28 -0
- package/dist/generators/data/heuristic-data-generator.d.ts.map +1 -0
- package/dist/generators/data/heuristic-data-generator.js +49 -0
- package/dist/generators/data/heuristic-data-generator.js.map +1 -0
- package/dist/generators/data/index.d.ts +48 -0
- package/dist/generators/data/index.d.ts.map +1 -0
- package/dist/generators/data/index.js +201 -0
- package/dist/generators/data/index.js.map +1 -0
- package/dist/generators/data/schema-walker.d.ts +45 -0
- package/dist/generators/data/schema-walker.d.ts.map +1 -0
- package/dist/generators/data/schema-walker.js +103 -0
- package/dist/generators/data/schema-walker.js.map +1 -0
- package/dist/generators/data/type-strategies.d.ts +79 -0
- package/dist/generators/data/type-strategies.d.ts.map +1 -0
- package/dist/generators/data/type-strategies.js +394 -0
- package/dist/generators/data/type-strategies.js.map +1 -0
- package/dist/generators/data-generator.d.ts +11 -0
- package/dist/generators/data-generator.d.ts.map +1 -0
- package/dist/generators/data-generator.js +11 -0
- package/dist/generators/data-generator.js.map +1 -0
- package/dist/generators/edge-case-generator.d.ts +55 -0
- package/dist/generators/edge-case-generator.d.ts.map +1 -0
- package/dist/generators/edge-case-generator.js +327 -0
- package/dist/generators/edge-case-generator.js.map +1 -0
- package/dist/generators/edge-cases/boundary-analyzer.d.ts +26 -0
- package/dist/generators/edge-cases/boundary-analyzer.d.ts.map +1 -0
- package/dist/generators/edge-cases/boundary-analyzer.js +95 -0
- package/dist/generators/edge-cases/boundary-analyzer.js.map +1 -0
- package/dist/generators/error-case-generator.d.ts +11 -0
- package/dist/generators/error-case-generator.d.ts.map +1 -0
- package/dist/generators/error-case-generator.js +11 -0
- package/dist/generators/error-case-generator.js.map +1 -0
- package/dist/generators/errors/auth-error-strategy.d.ts +36 -0
- package/dist/generators/errors/auth-error-strategy.d.ts.map +1 -0
- package/dist/generators/errors/auth-error-strategy.js +118 -0
- package/dist/generators/errors/auth-error-strategy.js.map +1 -0
- package/dist/generators/errors/business-error-strategy.d.ts +44 -0
- package/dist/generators/errors/business-error-strategy.d.ts.map +1 -0
- package/dist/generators/errors/business-error-strategy.js +152 -0
- package/dist/generators/errors/business-error-strategy.js.map +1 -0
- package/dist/generators/errors/error-strategy-factory.d.ts +27 -0
- package/dist/generators/errors/error-strategy-factory.d.ts.map +1 -0
- package/dist/generators/errors/error-strategy-factory.js +47 -0
- package/dist/generators/errors/error-strategy-factory.js.map +1 -0
- package/dist/generators/errors/error-strategy.d.ts +62 -0
- package/dist/generators/errors/error-strategy.d.ts.map +1 -0
- package/dist/generators/errors/error-strategy.js +69 -0
- package/dist/generators/errors/error-strategy.js.map +1 -0
- package/dist/generators/errors/index.d.ts +23 -0
- package/dist/generators/errors/index.d.ts.map +1 -0
- package/dist/generators/errors/index.js +73 -0
- package/dist/generators/errors/index.js.map +1 -0
- package/dist/generators/errors/validation-error-strategy.d.ts +25 -0
- package/dist/generators/errors/validation-error-strategy.d.ts.map +1 -0
- package/dist/generators/errors/validation-error-strategy.js +214 -0
- package/dist/generators/errors/validation-error-strategy.js.map +1 -0
- package/dist/generators/happy-path-generator.d.ts +93 -0
- package/dist/generators/happy-path-generator.d.ts.map +1 -0
- package/dist/generators/happy-path-generator.js +275 -0
- package/dist/generators/happy-path-generator.js.map +1 -0
- package/dist/generators/test-enricher.d.ts +44 -0
- package/dist/generators/test-enricher.d.ts.map +1 -0
- package/dist/generators/test-enricher.js +109 -0
- package/dist/generators/test-enricher.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/ai-cache.d.ts +123 -0
- package/dist/llm/ai-cache.d.ts.map +1 -0
- package/dist/llm/ai-cache.js +220 -0
- package/dist/llm/ai-cache.js.map +1 -0
- package/dist/llm/ai-client.d.ts +92 -0
- package/dist/llm/ai-client.d.ts.map +1 -0
- package/dist/llm/ai-client.js +386 -0
- package/dist/llm/ai-client.js.map +1 -0
- package/dist/llm/data-generator-ai.d.ts +84 -0
- package/dist/llm/data-generator-ai.d.ts.map +1 -0
- package/dist/llm/data-generator-ai.js +284 -0
- package/dist/llm/data-generator-ai.js.map +1 -0
- package/dist/llm/index.d.ts +7 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +7 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/mcp/handlers/base-handler.d.ts +72 -0
- package/dist/mcp/handlers/base-handler.d.ts.map +1 -0
- package/dist/mcp/handlers/base-handler.js +86 -0
- package/dist/mcp/handlers/base-handler.js.map +1 -0
- package/dist/mcp/handlers/compare-sources.d.ts +91 -0
- package/dist/mcp/handlers/compare-sources.d.ts.map +1 -0
- package/dist/mcp/handlers/compare-sources.js +182 -0
- package/dist/mcp/handlers/compare-sources.js.map +1 -0
- package/dist/mcp/handlers/export-results.d.ts +53 -0
- package/dist/mcp/handlers/export-results.d.ts.map +1 -0
- package/dist/mcp/handlers/export-results.js +132 -0
- package/dist/mcp/handlers/export-results.js.map +1 -0
- package/dist/mcp/handlers/export-to-postman.d.ts +65 -0
- package/dist/mcp/handlers/export-to-postman.d.ts.map +1 -0
- package/dist/mcp/handlers/export-to-postman.js +128 -0
- package/dist/mcp/handlers/export-to-postman.js.map +1 -0
- package/dist/mcp/handlers/generate-tests.d.ts +74 -0
- package/dist/mcp/handlers/generate-tests.d.ts.map +1 -0
- package/dist/mcp/handlers/generate-tests.js +519 -0
- package/dist/mcp/handlers/generate-tests.js.map +1 -0
- package/dist/mcp/handlers/index.d.ts +13 -0
- package/dist/mcp/handlers/index.d.ts.map +1 -0
- package/dist/mcp/handlers/index.js +12 -0
- package/dist/mcp/handlers/index.js.map +1 -0
- package/dist/mcp/handlers/run-tests.d.ts +89 -0
- package/dist/mcp/handlers/run-tests.d.ts.map +1 -0
- package/dist/mcp/handlers/run-tests.js +233 -0
- package/dist/mcp/handlers/run-tests.js.map +1 -0
- package/dist/mcp/handlers/types.d.ts +61 -0
- package/dist/mcp/handlers/types.d.ts.map +1 -0
- package/dist/mcp/handlers/types.js +9 -0
- package/dist/mcp/handlers/types.js.map +1 -0
- package/dist/mcp/server.d.ts +64 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +200 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/services/file-service.d.ts +66 -0
- package/dist/mcp/services/file-service.d.ts.map +1 -0
- package/dist/mcp/services/file-service.js +143 -0
- package/dist/mcp/services/file-service.js.map +1 -0
- package/dist/mcp/services/llm-service.d.ts +70 -0
- package/dist/mcp/services/llm-service.d.ts.map +1 -0
- package/dist/mcp/services/llm-service.js +189 -0
- package/dist/mcp/services/llm-service.js.map +1 -0
- package/dist/mcp/services/postman-service.d.ts +128 -0
- package/dist/mcp/services/postman-service.d.ts.map +1 -0
- package/dist/mcp/services/postman-service.js +266 -0
- package/dist/mcp/services/postman-service.js.map +1 -0
- package/dist/mcp/services/report-service.d.ts +81 -0
- package/dist/mcp/services/report-service.d.ts.map +1 -0
- package/dist/mcp/services/report-service.js +210 -0
- package/dist/mcp/services/report-service.js.map +1 -0
- package/dist/mcp/services/spec-service.d.ts +58 -0
- package/dist/mcp/services/spec-service.d.ts.map +1 -0
- package/dist/mcp/services/spec-service.js +140 -0
- package/dist/mcp/services/spec-service.js.map +1 -0
- package/dist/parsers/endpoint-extractor.d.ts +32 -0
- package/dist/parsers/endpoint-extractor.d.ts.map +1 -0
- package/dist/parsers/endpoint-extractor.js +160 -0
- package/dist/parsers/endpoint-extractor.js.map +1 -0
- package/dist/parsers/openapi-parser.d.ts +120 -0
- package/dist/parsers/openapi-parser.d.ts.map +1 -0
- package/dist/parsers/openapi-parser.js +257 -0
- package/dist/parsers/openapi-parser.js.map +1 -0
- package/dist/parsers/visitors/auth-visitor.d.ts +28 -0
- package/dist/parsers/visitors/auth-visitor.d.ts.map +1 -0
- package/dist/parsers/visitors/auth-visitor.js +116 -0
- package/dist/parsers/visitors/auth-visitor.js.map +1 -0
- package/dist/prd/index.d.ts +10 -0
- package/dist/prd/index.d.ts.map +1 -0
- package/dist/prd/index.js +10 -0
- package/dist/prd/index.js.map +1 -0
- package/dist/prd/prd-reader.d.ts +124 -0
- package/dist/prd/prd-reader.d.ts.map +1 -0
- package/dist/prd/prd-reader.js +308 -0
- package/dist/prd/prd-reader.js.map +1 -0
- package/dist/prd/prd-storage.d.ts +232 -0
- package/dist/prd/prd-storage.d.ts.map +1 -0
- package/dist/prd/prd-storage.js +129 -0
- package/dist/prd/prd-storage.js.map +1 -0
- package/dist/repairers/test-auto-repairer.d.ts +61 -0
- package/dist/repairers/test-auto-repairer.d.ts.map +1 -0
- package/dist/repairers/test-auto-repairer.js +213 -0
- package/dist/repairers/test-auto-repairer.js.map +1 -0
- package/dist/reporters/comparison-report-generator.d.ts +58 -0
- package/dist/reporters/comparison-report-generator.d.ts.map +1 -0
- package/dist/reporters/comparison-report-generator.js +369 -0
- package/dist/reporters/comparison-report-generator.js.map +1 -0
- package/dist/reporters/gherkin-formatter.d.ts +34 -0
- package/dist/reporters/gherkin-formatter.d.ts.map +1 -0
- package/dist/reporters/gherkin-formatter.js +231 -0
- package/dist/reporters/gherkin-formatter.js.map +1 -0
- package/dist/reporters/html-report-generator.d.ts +174 -0
- package/dist/reporters/html-report-generator.d.ts.map +1 -0
- package/dist/reporters/html-report-generator.js +194 -0
- package/dist/reporters/html-report-generator.js.map +1 -0
- package/dist/reporters/report-charts.d.ts +23 -0
- package/dist/reporters/report-charts.d.ts.map +1 -0
- package/dist/reporters/report-charts.js +182 -0
- package/dist/reporters/report-charts.js.map +1 -0
- package/dist/reporters/report-sections.d.ts +34 -0
- package/dist/reporters/report-sections.d.ts.map +1 -0
- package/dist/reporters/report-sections.js +481 -0
- package/dist/reporters/report-sections.js.map +1 -0
- package/dist/reporters/report-styles.d.ts +12 -0
- package/dist/reporters/report-styles.d.ts.map +1 -0
- package/dist/reporters/report-styles.js +412 -0
- package/dist/reporters/report-styles.js.map +1 -0
- package/dist/reporters/report-test-details.d.ts +56 -0
- package/dist/reporters/report-test-details.d.ts.map +1 -0
- package/dist/reporters/report-test-details.js +328 -0
- package/dist/reporters/report-test-details.js.map +1 -0
- package/dist/reporters/report-utils.d.ts +40 -0
- package/dist/reporters/report-utils.d.ts.map +1 -0
- package/dist/reporters/report-utils.js +163 -0
- package/dist/reporters/report-utils.js.map +1 -0
- package/dist/types/ai-config.d.ts +63 -0
- package/dist/types/ai-config.d.ts.map +1 -0
- package/dist/types/ai-config.js +79 -0
- package/dist/types/ai-config.js.map +1 -0
- package/dist/types/business-rules.d.ts +235 -0
- package/dist/types/business-rules.d.ts.map +1 -0
- package/dist/types/business-rules.js +6 -0
- package/dist/types/business-rules.js.map +1 -0
- package/dist/types/config.d.ts +106 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/core.d.ts +72 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +6 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/openapi.d.ts +139 -0
- package/dist/types/openapi.d.ts.map +1 -0
- package/dist/types/openapi.js +6 -0
- package/dist/types/openapi.js.map +1 -0
- package/dist/types/pact.d.ts +101 -0
- package/dist/types/pact.d.ts.map +1 -0
- package/dist/types/pact.js +6 -0
- package/dist/types/pact.js.map +1 -0
- package/dist/types/reporting.d.ts +93 -0
- package/dist/types/reporting.d.ts.map +1 -0
- package/dist/types/reporting.js +6 -0
- package/dist/types/reporting.js.map +1 -0
- package/dist/types/test-case.d.ts +233 -0
- package/dist/types/test-case.d.ts.map +1 -0
- package/dist/types/test-case.js +6 -0
- package/dist/types/test-case.js.map +1 -0
- package/dist/types/test-execution.d.ts +80 -0
- package/dist/types/test-execution.d.ts.map +1 -0
- package/dist/types/test-execution.js +6 -0
- package/dist/types/test-execution.js.map +1 -0
- package/dist/utils/auth-generator.d.ts +30 -0
- package/dist/utils/auth-generator.d.ts.map +1 -0
- package/dist/utils/auth-generator.js +68 -0
- package/dist/utils/auth-generator.js.map +1 -0
- package/dist/utils/config.d.ts +181 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +141 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/coverage-calculator.d.ts +81 -0
- package/dist/utils/coverage-calculator.d.ts.map +1 -0
- package/dist/utils/coverage-calculator.js +134 -0
- package/dist/utils/coverage-calculator.js.map +1 -0
- package/dist/utils/data-loader.d.ts +52 -0
- package/dist/utils/data-loader.d.ts.map +1 -0
- package/dist/utils/data-loader.js +192 -0
- package/dist/utils/data-loader.js.map +1 -0
- package/dist/utils/errors.d.ts +167 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +257 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +220 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +325 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/openapi-discovery.d.ts +31 -0
- package/dist/utils/openapi-discovery.d.ts.map +1 -0
- package/dist/utils/openapi-discovery.js +322 -0
- package/dist/utils/openapi-discovery.js.map +1 -0
- package/dist/utils/path-resolver.d.ts +101 -0
- package/dist/utils/path-resolver.d.ts.map +1 -0
- package/dist/utils/path-resolver.js +167 -0
- package/dist/utils/path-resolver.js.map +1 -0
- package/dist/utils/resilience.d.ts +181 -0
- package/dist/utils/resilience.d.ts.map +1 -0
- package/dist/utils/resilience.js +269 -0
- package/dist/utils/resilience.js.map +1 -0
- package/dist/validators/openapi-validator.d.ts +198 -0
- package/dist/validators/openapi-validator.d.ts.map +1 -0
- package/dist/validators/openapi-validator.js +349 -0
- package/dist/validators/openapi-validator.js.map +1 -0
- package/dist/validators/response-matcher.d.ts +84 -0
- package/dist/validators/response-matcher.d.ts.map +1 -0
- package/dist/validators/response-matcher.js +234 -0
- package/dist/validators/response-matcher.js.map +1 -0
- package/dist/validators/schema-validator.d.ts +174 -0
- package/dist/validators/schema-validator.d.ts.map +1 -0
- package/dist/validators/schema-validator.js +340 -0
- package/dist/validators/schema-validator.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Error Strategies - 401 and 403 scenarios
|
|
3
|
+
*
|
|
4
|
+
* @module generators/errors/auth-error-strategy
|
|
5
|
+
*/
|
|
6
|
+
import { generateAuthHeaders } from '../../utils/auth-generator.js';
|
|
7
|
+
import { BaseErrorStrategy } from './error-strategy.js';
|
|
8
|
+
/**
|
|
9
|
+
* Strategy for 401 Unauthorized tests
|
|
10
|
+
* Generates: no-auth and invalid-token scenarios
|
|
11
|
+
*/
|
|
12
|
+
export class UnauthorizedErrorStrategy extends BaseErrorStrategy {
|
|
13
|
+
statusCodes = [401];
|
|
14
|
+
isApplicable(endpoint, spec) {
|
|
15
|
+
return this.isAuthRequired(endpoint, spec);
|
|
16
|
+
}
|
|
17
|
+
generate(endpoint, _spec, options) {
|
|
18
|
+
const body = endpoint.requestBody
|
|
19
|
+
? this.generateBody(endpoint.requestBody, options)
|
|
20
|
+
: undefined;
|
|
21
|
+
const pathParams = this.generatePathParams(endpoint);
|
|
22
|
+
return [
|
|
23
|
+
{
|
|
24
|
+
id: this.buildId(endpoint, '401-no-auth'),
|
|
25
|
+
name: `${endpoint.method} ${endpoint.path} - No authentication`,
|
|
26
|
+
description: 'Request without authentication should return 401',
|
|
27
|
+
category: 'error-case',
|
|
28
|
+
method: endpoint.method,
|
|
29
|
+
path: endpoint.path,
|
|
30
|
+
pathParams,
|
|
31
|
+
body,
|
|
32
|
+
contentType: endpoint.requestContentType,
|
|
33
|
+
headers: {},
|
|
34
|
+
expectedStatus: 401,
|
|
35
|
+
requiresAuth: endpoint.requiresAuth,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: this.buildId(endpoint, '401-invalid-token'),
|
|
39
|
+
name: `${endpoint.method} ${endpoint.path} - Invalid token`,
|
|
40
|
+
description: 'Request with invalid token should return 401',
|
|
41
|
+
category: 'error-case',
|
|
42
|
+
method: endpoint.method,
|
|
43
|
+
path: endpoint.path,
|
|
44
|
+
pathParams,
|
|
45
|
+
body,
|
|
46
|
+
contentType: endpoint.requestContentType,
|
|
47
|
+
headers: { Authorization: 'Bearer invalid-token-12345' },
|
|
48
|
+
expectedStatus: 401,
|
|
49
|
+
requiresAuth: endpoint.requiresAuth,
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Strategy for 403 Forbidden tests
|
|
56
|
+
* Generates: valid auth but insufficient permissions
|
|
57
|
+
*/
|
|
58
|
+
export class ForbiddenErrorStrategy extends BaseErrorStrategy {
|
|
59
|
+
statusCodes = [403];
|
|
60
|
+
isApplicable(_endpoint, _spec) {
|
|
61
|
+
return true; // 403 can happen on any endpoint
|
|
62
|
+
}
|
|
63
|
+
generate(endpoint, _spec, options) {
|
|
64
|
+
const body = endpoint.requestBody
|
|
65
|
+
? this.generateBody(endpoint.requestBody, options)
|
|
66
|
+
: undefined;
|
|
67
|
+
return [{
|
|
68
|
+
id: this.buildId(endpoint, '403-forbidden'),
|
|
69
|
+
name: `${endpoint.method} ${endpoint.path} - Forbidden (insufficient permissions)`,
|
|
70
|
+
description: 'Request with valid auth but insufficient permissions should return 403',
|
|
71
|
+
category: 'error-case',
|
|
72
|
+
method: endpoint.method,
|
|
73
|
+
path: endpoint.path,
|
|
74
|
+
pathParams: this.generatePathParams(endpoint),
|
|
75
|
+
body,
|
|
76
|
+
contentType: endpoint.requestContentType,
|
|
77
|
+
headers: { Authorization: 'Bearer {{LIMITED_PERMISSIONS_TOKEN}}' },
|
|
78
|
+
expectedStatus: 403,
|
|
79
|
+
requiresAuth: endpoint.requiresAuth,
|
|
80
|
+
}];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Strategy for heuristic 401 tests (when spec doesn't define 401 explicitly)
|
|
85
|
+
* Used in the heuristic fallback path
|
|
86
|
+
*/
|
|
87
|
+
export class HeuristicAuthErrorStrategy extends BaseErrorStrategy {
|
|
88
|
+
statusCodes = [401];
|
|
89
|
+
isApplicable(endpoint, _spec) {
|
|
90
|
+
return endpoint.requiresAuth !== false;
|
|
91
|
+
}
|
|
92
|
+
generate(endpoint, spec, options) {
|
|
93
|
+
if (!this.isAuthRequired(endpoint, spec))
|
|
94
|
+
return [];
|
|
95
|
+
const body = endpoint.requestBody
|
|
96
|
+
? this.generateBody(endpoint.requestBody, options)
|
|
97
|
+
: undefined;
|
|
98
|
+
const pathParams = this.generatePathParams(endpoint);
|
|
99
|
+
const authHeaders = generateAuthHeaders(endpoint.securitySchemes || []);
|
|
100
|
+
return [
|
|
101
|
+
{
|
|
102
|
+
id: this.buildId(endpoint, '401-no-auth'),
|
|
103
|
+
name: `${endpoint.method} ${endpoint.path} - No authentication`,
|
|
104
|
+
description: 'Request without authentication should return 401',
|
|
105
|
+
category: 'error-case',
|
|
106
|
+
method: endpoint.method,
|
|
107
|
+
path: endpoint.path,
|
|
108
|
+
pathParams,
|
|
109
|
+
body,
|
|
110
|
+
contentType: endpoint.requestContentType,
|
|
111
|
+
headers: authHeaders,
|
|
112
|
+
expectedStatus: 401,
|
|
113
|
+
requiresAuth: endpoint.requiresAuth,
|
|
114
|
+
},
|
|
115
|
+
];
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=auth-error-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-error-strategy.js","sourceRoot":"","sources":["../../../src/generators/errors/auth-error-strategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Business Error Strategies - 404, 409, 422 and generic error scenarios
|
|
3
|
+
*
|
|
4
|
+
* @module generators/errors/business-error-strategy
|
|
5
|
+
*/
|
|
6
|
+
import type { OpenAPIV3 } from 'openapi-types';
|
|
7
|
+
import type { TestCase, ParsedEndpoint } from '../../types/index.js';
|
|
8
|
+
import { BaseErrorStrategy, type ErrorCaseOptions } from './error-strategy.js';
|
|
9
|
+
/**
|
|
10
|
+
* Strategy for 404 Not Found tests
|
|
11
|
+
*/
|
|
12
|
+
export declare class NotFoundErrorStrategy extends BaseErrorStrategy {
|
|
13
|
+
readonly statusCodes: number[];
|
|
14
|
+
isApplicable(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document): boolean;
|
|
15
|
+
generate(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document, options: ErrorCaseOptions): TestCase[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Strategy for 409 Conflict tests
|
|
19
|
+
*/
|
|
20
|
+
export declare class ConflictErrorStrategy extends BaseErrorStrategy {
|
|
21
|
+
readonly statusCodes: number[];
|
|
22
|
+
isApplicable(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document): boolean;
|
|
23
|
+
generate(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document, options: ErrorCaseOptions): TestCase[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Strategy for 422 Unprocessable Entity tests
|
|
27
|
+
*/
|
|
28
|
+
export declare class UnprocessableEntityErrorStrategy extends BaseErrorStrategy {
|
|
29
|
+
readonly statusCodes: number[];
|
|
30
|
+
isApplicable(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document): boolean;
|
|
31
|
+
generate(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document, options: ErrorCaseOptions): TestCase[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Generic error strategy for 429, 5xx, and other unhandled codes
|
|
35
|
+
*/
|
|
36
|
+
export declare class GenericErrorStrategy extends BaseErrorStrategy {
|
|
37
|
+
private readonly errorCode;
|
|
38
|
+
private static readonly ERROR_DESCRIPTIONS;
|
|
39
|
+
constructor(errorCode: number);
|
|
40
|
+
readonly statusCodes: number[];
|
|
41
|
+
isApplicable(_endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document): boolean;
|
|
42
|
+
generate(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document, options: ErrorCaseOptions): TestCase[];
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=business-error-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"business-error-strategy.d.ts","sourceRoot":"","sources":["../../../src/generators/errors/business-error-strategy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE/E;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,iBAAiB;IAC1D,QAAQ,CAAC,WAAW,WAAS;IAE7B,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO;IAO1E,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,EAAE;CAuCrG;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,iBAAiB;IAC1D,QAAQ,CAAC,WAAW,WAAS;IAE7B,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO;IAI1E,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,EAAE;CAkBrG;AAED;;GAEG;AACH,qBAAa,gCAAiC,SAAQ,iBAAiB;IACrE,QAAQ,CAAC,WAAW,WAAS;IAE7B,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO;IAI1E,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,EAAE;CAkBrG;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,iBAAiB;IAS7C,OAAO,CAAC,QAAQ,CAAC,SAAS;IARtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAMxC;gBAE2B,SAAS,EAAE,MAAM;IAI9C,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAM;IAEpC,YAAY,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO;IAI3E,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,EAAE;CAoBrG"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Business Error Strategies - 404, 409, 422 and generic error scenarios
|
|
3
|
+
*
|
|
4
|
+
* @module generators/errors/business-error-strategy
|
|
5
|
+
*/
|
|
6
|
+
import { generateAuthHeaders } from '../../utils/auth-generator.js';
|
|
7
|
+
import { BaseErrorStrategy } from './error-strategy.js';
|
|
8
|
+
/**
|
|
9
|
+
* Strategy for 404 Not Found tests
|
|
10
|
+
*/
|
|
11
|
+
export class NotFoundErrorStrategy extends BaseErrorStrategy {
|
|
12
|
+
statusCodes = [404];
|
|
13
|
+
isApplicable(endpoint, _spec) {
|
|
14
|
+
return (endpoint.pathParams.length > 0 &&
|
|
15
|
+
['GET', 'PUT', 'PATCH', 'DELETE'].includes(endpoint.method));
|
|
16
|
+
}
|
|
17
|
+
generate(endpoint, _spec, options) {
|
|
18
|
+
if (!this.isApplicable(endpoint, _spec))
|
|
19
|
+
return [];
|
|
20
|
+
const body = endpoint.requestBody
|
|
21
|
+
? this.generateBody(endpoint.requestBody, options)
|
|
22
|
+
: undefined;
|
|
23
|
+
// Use non-existent IDs for path params
|
|
24
|
+
const pathParams = {};
|
|
25
|
+
for (const param of endpoint.pathParams) {
|
|
26
|
+
if (param.schema && !('$ref' in param.schema)) {
|
|
27
|
+
const schema = param.schema;
|
|
28
|
+
if (schema.format === 'uuid') {
|
|
29
|
+
pathParams[param.name] = '00000000-0000-0000-0000-000000000000';
|
|
30
|
+
}
|
|
31
|
+
else if (schema.type === 'integer') {
|
|
32
|
+
pathParams[param.name] = 99999999;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
pathParams[param.name] = 'non-existent-id';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
pathParams[param.name] = 'non-existent-id';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return [{
|
|
43
|
+
id: this.buildId(endpoint, '404-not-found'),
|
|
44
|
+
name: `${endpoint.method} ${endpoint.path} - Resource not found`,
|
|
45
|
+
description: 'Request for non-existent resource should return 404',
|
|
46
|
+
category: 'error-case',
|
|
47
|
+
method: endpoint.method,
|
|
48
|
+
path: endpoint.path,
|
|
49
|
+
pathParams,
|
|
50
|
+
headers: generateAuthHeaders(endpoint.securitySchemes || []),
|
|
51
|
+
body,
|
|
52
|
+
contentType: endpoint.requestContentType,
|
|
53
|
+
expectedStatus: 404,
|
|
54
|
+
requiresAuth: endpoint.requiresAuth,
|
|
55
|
+
}];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Strategy for 409 Conflict tests
|
|
60
|
+
*/
|
|
61
|
+
export class ConflictErrorStrategy extends BaseErrorStrategy {
|
|
62
|
+
statusCodes = [409];
|
|
63
|
+
isApplicable(endpoint, _spec) {
|
|
64
|
+
return ['POST', 'PUT'].includes(endpoint.method) && !!endpoint.requestBody;
|
|
65
|
+
}
|
|
66
|
+
generate(endpoint, _spec, options) {
|
|
67
|
+
if (!endpoint.requestBody)
|
|
68
|
+
return [];
|
|
69
|
+
return [{
|
|
70
|
+
id: this.buildId(endpoint, '409-conflict'),
|
|
71
|
+
name: `${endpoint.method} ${endpoint.path} - Conflict (duplicate resource)`,
|
|
72
|
+
description: 'Request that creates a duplicate resource should return 409',
|
|
73
|
+
category: 'error-case',
|
|
74
|
+
method: endpoint.method,
|
|
75
|
+
path: endpoint.path,
|
|
76
|
+
pathParams: this.generatePathParams(endpoint),
|
|
77
|
+
headers: generateAuthHeaders(endpoint.securitySchemes || []),
|
|
78
|
+
body: this.generateBody(endpoint.requestBody, options),
|
|
79
|
+
contentType: endpoint.requestContentType,
|
|
80
|
+
expectedStatus: 409,
|
|
81
|
+
requiresAuth: endpoint.requiresAuth,
|
|
82
|
+
}];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Strategy for 422 Unprocessable Entity tests
|
|
87
|
+
*/
|
|
88
|
+
export class UnprocessableEntityErrorStrategy extends BaseErrorStrategy {
|
|
89
|
+
statusCodes = [422];
|
|
90
|
+
isApplicable(endpoint, _spec) {
|
|
91
|
+
return !!endpoint.requestBody;
|
|
92
|
+
}
|
|
93
|
+
generate(endpoint, _spec, options) {
|
|
94
|
+
if (!endpoint.requestBody)
|
|
95
|
+
return [];
|
|
96
|
+
return [{
|
|
97
|
+
id: this.buildId(endpoint, '422-unprocessable'),
|
|
98
|
+
name: `${endpoint.method} ${endpoint.path} - Unprocessable Entity (business rule violation)`,
|
|
99
|
+
description: 'Request that violates business rules should return 422',
|
|
100
|
+
category: 'error-case',
|
|
101
|
+
method: endpoint.method,
|
|
102
|
+
path: endpoint.path,
|
|
103
|
+
pathParams: this.generatePathParams(endpoint),
|
|
104
|
+
headers: generateAuthHeaders(endpoint.securitySchemes || []),
|
|
105
|
+
body: this.generateBody(endpoint.requestBody, options),
|
|
106
|
+
contentType: endpoint.requestContentType,
|
|
107
|
+
expectedStatus: 422,
|
|
108
|
+
requiresAuth: endpoint.requiresAuth,
|
|
109
|
+
}];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Generic error strategy for 429, 5xx, and other unhandled codes
|
|
114
|
+
*/
|
|
115
|
+
export class GenericErrorStrategy extends BaseErrorStrategy {
|
|
116
|
+
errorCode;
|
|
117
|
+
static ERROR_DESCRIPTIONS = {
|
|
118
|
+
429: 'Too Many Requests (rate limited)',
|
|
119
|
+
500: 'Internal Server Error',
|
|
120
|
+
502: 'Bad Gateway',
|
|
121
|
+
503: 'Service Unavailable',
|
|
122
|
+
504: 'Gateway Timeout',
|
|
123
|
+
};
|
|
124
|
+
constructor(errorCode) {
|
|
125
|
+
super();
|
|
126
|
+
this.errorCode = errorCode;
|
|
127
|
+
}
|
|
128
|
+
statusCodes = [];
|
|
129
|
+
isApplicable(_endpoint, _spec) {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
generate(endpoint, _spec, options) {
|
|
133
|
+
const description = GenericErrorStrategy.ERROR_DESCRIPTIONS[this.errorCode] || `Error ${this.errorCode}`;
|
|
134
|
+
const body = endpoint.requestBody
|
|
135
|
+
? this.generateBody(endpoint.requestBody, options)
|
|
136
|
+
: undefined;
|
|
137
|
+
return [{
|
|
138
|
+
id: this.buildId(endpoint, `${this.errorCode}`),
|
|
139
|
+
name: `${endpoint.method} ${endpoint.path} - ${description}`,
|
|
140
|
+
description: `Endpoint should handle ${this.errorCode} responses correctly`,
|
|
141
|
+
category: 'error-case',
|
|
142
|
+
method: endpoint.method,
|
|
143
|
+
path: endpoint.path,
|
|
144
|
+
pathParams: this.generatePathParams(endpoint),
|
|
145
|
+
headers: generateAuthHeaders(endpoint.securitySchemes || []),
|
|
146
|
+
body,
|
|
147
|
+
contentType: endpoint.requestContentType,
|
|
148
|
+
expectedStatus: this.errorCode,
|
|
149
|
+
}];
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=business-error-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"business-error-strategy.js","sourceRoot":"","sources":["../../../src/generators/errors/business-error-strategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Strategy Factory
|
|
3
|
+
*
|
|
4
|
+
* Creates appropriate error strategy instances for a given HTTP status code.
|
|
5
|
+
* Centralizes strategy instantiation and selection logic.
|
|
6
|
+
*
|
|
7
|
+
* @module generators/errors/error-strategy-factory
|
|
8
|
+
*/
|
|
9
|
+
import type { ErrorStrategy } from './error-strategy.js';
|
|
10
|
+
/**
|
|
11
|
+
* Factory that creates appropriate error strategies for HTTP status codes
|
|
12
|
+
*/
|
|
13
|
+
export declare class ErrorStrategyFactory {
|
|
14
|
+
/**
|
|
15
|
+
* Create the appropriate strategy for a given HTTP error code
|
|
16
|
+
*/
|
|
17
|
+
static createForCode(errorCode: number): ErrorStrategy;
|
|
18
|
+
/**
|
|
19
|
+
* Create all heuristic strategies (used when spec doesn't define error codes)
|
|
20
|
+
*/
|
|
21
|
+
static createHeuristicStrategies(): ErrorStrategy[];
|
|
22
|
+
/**
|
|
23
|
+
* Create strategies for all provided error codes
|
|
24
|
+
*/
|
|
25
|
+
static createForCodes(errorCodes: number[]): ErrorStrategy[];
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=error-strategy-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-strategy-factory.d.ts","sourceRoot":"","sources":["../../../src/generators/errors/error-strategy-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAUzD;;GAEG;AACH,qBAAa,oBAAoB;IAC/B;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa;IAYtD;;OAEG;IACH,MAAM,CAAC,yBAAyB,IAAI,aAAa,EAAE;IAQnD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE;CAG7D"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Strategy Factory
|
|
3
|
+
*
|
|
4
|
+
* Creates appropriate error strategy instances for a given HTTP status code.
|
|
5
|
+
* Centralizes strategy instantiation and selection logic.
|
|
6
|
+
*
|
|
7
|
+
* @module generators/errors/error-strategy-factory
|
|
8
|
+
*/
|
|
9
|
+
import { UnauthorizedErrorStrategy, ForbiddenErrorStrategy } from './auth-error-strategy.js';
|
|
10
|
+
import { BadRequestErrorStrategy } from './validation-error-strategy.js';
|
|
11
|
+
import { NotFoundErrorStrategy, ConflictErrorStrategy, UnprocessableEntityErrorStrategy, GenericErrorStrategy, } from './business-error-strategy.js';
|
|
12
|
+
/**
|
|
13
|
+
* Factory that creates appropriate error strategies for HTTP status codes
|
|
14
|
+
*/
|
|
15
|
+
export class ErrorStrategyFactory {
|
|
16
|
+
/**
|
|
17
|
+
* Create the appropriate strategy for a given HTTP error code
|
|
18
|
+
*/
|
|
19
|
+
static createForCode(errorCode) {
|
|
20
|
+
switch (errorCode) {
|
|
21
|
+
case 400: return new BadRequestErrorStrategy();
|
|
22
|
+
case 401: return new UnauthorizedErrorStrategy();
|
|
23
|
+
case 403: return new ForbiddenErrorStrategy();
|
|
24
|
+
case 404: return new NotFoundErrorStrategy();
|
|
25
|
+
case 409: return new ConflictErrorStrategy();
|
|
26
|
+
case 422: return new UnprocessableEntityErrorStrategy();
|
|
27
|
+
default: return new GenericErrorStrategy(errorCode);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Create all heuristic strategies (used when spec doesn't define error codes)
|
|
32
|
+
*/
|
|
33
|
+
static createHeuristicStrategies() {
|
|
34
|
+
return [
|
|
35
|
+
new BadRequestErrorStrategy(), // 400
|
|
36
|
+
new UnauthorizedErrorStrategy(), // 401
|
|
37
|
+
new NotFoundErrorStrategy(), // 404
|
|
38
|
+
];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create strategies for all provided error codes
|
|
42
|
+
*/
|
|
43
|
+
static createForCodes(errorCodes) {
|
|
44
|
+
return errorCodes.map(code => this.createForCode(code));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=error-strategy-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-strategy-factory.js","sourceRoot":"","sources":["../../../src/generators/errors/error-strategy-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AAEtC;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAC/B;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,SAAiB;QACpC,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,uBAAuB,EAAE,CAAC;YAC/C,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,yBAAyB,EAAE,CAAC;YACjD,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,sBAAsB,EAAE,CAAC;YAC9C,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,qBAAqB,EAAE,CAAC;YAC7C,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,qBAAqB,EAAE,CAAC;YAC7C,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,gCAAgC,EAAE,CAAC;YACxD,OAAO,CAAC,CAAE,OAAO,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,yBAAyB;QAC9B,OAAO;YACL,IAAI,uBAAuB,EAAE,EAAQ,MAAM;YAC3C,IAAI,yBAAyB,EAAE,EAAM,MAAM;YAC3C,IAAI,qBAAqB,EAAE,EAAU,MAAM;SAC5C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,UAAoB;QACxC,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;CACF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Strategy - Base Strategy Interface
|
|
3
|
+
*
|
|
4
|
+
* Defines the contract for all error test case generators.
|
|
5
|
+
* Each HTTP error code family has its own strategy implementation.
|
|
6
|
+
*
|
|
7
|
+
* @module generators/errors/error-strategy
|
|
8
|
+
*/
|
|
9
|
+
import type { OpenAPIV3 } from 'openapi-types';
|
|
10
|
+
import type { TestCase, ParsedEndpoint } from '../../types/index.js';
|
|
11
|
+
import type { AILevel } from '../../types/ai-config.js';
|
|
12
|
+
import type { APIContext } from '../../llm/data-generator-ai.js';
|
|
13
|
+
/**
|
|
14
|
+
* Options passed to each error strategy
|
|
15
|
+
*/
|
|
16
|
+
export interface ErrorCaseOptions {
|
|
17
|
+
seed?: number;
|
|
18
|
+
aiLevel?: AILevel;
|
|
19
|
+
apiContext?: APIContext;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Base Strategy interface for error test generation
|
|
23
|
+
*/
|
|
24
|
+
export interface ErrorStrategy {
|
|
25
|
+
/**
|
|
26
|
+
* The HTTP status code(s) this strategy handles
|
|
27
|
+
*/
|
|
28
|
+
readonly statusCodes: number[];
|
|
29
|
+
/**
|
|
30
|
+
* Whether this strategy applies to the given endpoint
|
|
31
|
+
*/
|
|
32
|
+
isApplicable(endpoint: ParsedEndpoint, spec: OpenAPIV3.Document): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Generate test cases for the given endpoint
|
|
35
|
+
*/
|
|
36
|
+
generate(endpoint: ParsedEndpoint, spec: OpenAPIV3.Document, options: ErrorCaseOptions): TestCase[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Abstract base class with shared helpers for all error strategies
|
|
40
|
+
*/
|
|
41
|
+
export declare abstract class BaseErrorStrategy implements ErrorStrategy {
|
|
42
|
+
abstract readonly statusCodes: number[];
|
|
43
|
+
abstract isApplicable(endpoint: ParsedEndpoint, spec: OpenAPIV3.Document): boolean;
|
|
44
|
+
abstract generate(endpoint: ParsedEndpoint, spec: OpenAPIV3.Document, options: ErrorCaseOptions): TestCase[];
|
|
45
|
+
/**
|
|
46
|
+
* Generate body data using current options
|
|
47
|
+
*/
|
|
48
|
+
protected generateBody(schema: OpenAPIV3.SchemaObject, options: ErrorCaseOptions, includeOptional?: boolean): unknown;
|
|
49
|
+
/**
|
|
50
|
+
* Generate standard path parameters for an endpoint
|
|
51
|
+
*/
|
|
52
|
+
protected generatePathParams(endpoint: ParsedEndpoint): Record<string, string | number>;
|
|
53
|
+
/**
|
|
54
|
+
* Build a unique test case ID
|
|
55
|
+
*/
|
|
56
|
+
protected buildId(endpoint: ParsedEndpoint, suffix: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* Check if global or operation-level auth is required
|
|
59
|
+
*/
|
|
60
|
+
protected isAuthRequired(endpoint: ParsedEndpoint, spec: OpenAPIV3.Document): boolean;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=error-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-strategy.d.ts","sourceRoot":"","sources":["../../../src/generators/errors/error-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAE/B;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC;IAE1E;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,EAAE,CAAC;CACrG;AAED;;GAEG;AACH,8BAAsB,iBAAkB,YAAW,aAAa;IAC9D,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO;IAClF,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,EAAE;IAE5G;;OAEG;IACH,SAAS,CAAC,YAAY,CACpB,MAAM,EAAE,SAAS,CAAC,YAAY,EAC9B,OAAO,EAAE,gBAAgB,EACzB,eAAe,UAAQ,GACtB,OAAO;IAWV;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAqBvF;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAKnE;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO;CAKtF"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Strategy - Base Strategy Interface
|
|
3
|
+
*
|
|
4
|
+
* Defines the contract for all error test case generators.
|
|
5
|
+
* Each HTTP error code family has its own strategy implementation.
|
|
6
|
+
*
|
|
7
|
+
* @module generators/errors/error-strategy
|
|
8
|
+
*/
|
|
9
|
+
import { faker } from '@faker-js/faker';
|
|
10
|
+
import { generateDataFromSchemaSync, aiLevelToMode } from '../data-generator.js';
|
|
11
|
+
/**
|
|
12
|
+
* Abstract base class with shared helpers for all error strategies
|
|
13
|
+
*/
|
|
14
|
+
export class BaseErrorStrategy {
|
|
15
|
+
/**
|
|
16
|
+
* Generate body data using current options
|
|
17
|
+
*/
|
|
18
|
+
generateBody(schema, options, includeOptional = false) {
|
|
19
|
+
const { aiLevel, apiContext } = options;
|
|
20
|
+
const effectiveAiMode = aiLevelToMode(aiLevel);
|
|
21
|
+
return generateDataFromSchemaSync(schema, {
|
|
22
|
+
includeOptional,
|
|
23
|
+
aiMode: effectiveAiMode || 'faker',
|
|
24
|
+
apiContext
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Generate standard path parameters for an endpoint
|
|
29
|
+
*/
|
|
30
|
+
generatePathParams(endpoint) {
|
|
31
|
+
const params = {};
|
|
32
|
+
for (const param of endpoint.pathParams) {
|
|
33
|
+
if (param.schema && !('$ref' in param.schema)) {
|
|
34
|
+
const schema = param.schema;
|
|
35
|
+
if (schema.type === 'integer') {
|
|
36
|
+
params[param.name] = 1;
|
|
37
|
+
}
|
|
38
|
+
else if (schema.format === 'uuid') {
|
|
39
|
+
params[param.name] = faker.string.uuid();
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
params[param.name] = faker.string.alphanumeric(10);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
params[param.name] = faker.string.uuid();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return params;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Build a unique test case ID
|
|
53
|
+
*/
|
|
54
|
+
buildId(endpoint, suffix) {
|
|
55
|
+
const safePath = endpoint.path.replace(/[^a-zA-Z0-9]/g, '-');
|
|
56
|
+
return `error-${endpoint.method.toLowerCase()}-${safePath}-${suffix}`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Check if global or operation-level auth is required
|
|
60
|
+
*/
|
|
61
|
+
isAuthRequired(endpoint, spec) {
|
|
62
|
+
if (endpoint.security && endpoint.security.length > 0)
|
|
63
|
+
return true;
|
|
64
|
+
if (spec.security && spec.security.length > 0)
|
|
65
|
+
return true;
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=error-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-strategy.js","sourceRoot":"","sources":["../../../src/generators/errors/error-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAiCjF;;GAEG;AACH,MAAM,OAAgB,iBAAiB;IAKrC;;OAEG;IACO,YAAY,CACpB,MAA8B,EAC9B,OAAyB,EACzB,eAAe,GAAG,KAAK;QAEvB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QACxC,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAE/C,OAAO,0BAA0B,CAAC,MAAM,EAAE;YACxC,eAAe;YACf,MAAM,EAAE,eAAe,IAAI,OAAO;YAClC,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACO,kBAAkB,CAAC,QAAwB;QACnD,MAAM,MAAM,GAAoC,EAAE,CAAC;QAEnD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAgC,CAAC;gBACtD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;qBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBACpC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACO,OAAO,CAAC,QAAwB,EAAE,MAAc;QACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QAC7D,OAAO,SAAS,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;IACxE,CAAC;IAED;;OAEG;IACO,cAAc,CAAC,QAAwB,EAAE,IAAwB;QACzE,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACnE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Generators - Public API
|
|
3
|
+
*
|
|
4
|
+
* @module generators/errors
|
|
5
|
+
*/
|
|
6
|
+
export { type ErrorStrategy, type ErrorCaseOptions, BaseErrorStrategy } from './error-strategy.js';
|
|
7
|
+
export { UnauthorizedErrorStrategy, ForbiddenErrorStrategy, HeuristicAuthErrorStrategy } from './auth-error-strategy.js';
|
|
8
|
+
export { BadRequestErrorStrategy } from './validation-error-strategy.js';
|
|
9
|
+
export { NotFoundErrorStrategy, ConflictErrorStrategy, UnprocessableEntityErrorStrategy, GenericErrorStrategy, } from './business-error-strategy.js';
|
|
10
|
+
export { ErrorStrategyFactory } from './error-strategy-factory.js';
|
|
11
|
+
import type { OpenAPIV3 } from 'openapi-types';
|
|
12
|
+
import type { TestCase, ParsedEndpoint } from '../../types/index.js';
|
|
13
|
+
import type { ErrorCaseOptions } from './error-strategy.js';
|
|
14
|
+
/**
|
|
15
|
+
* Main entry point: generate error case test cases for all endpoints
|
|
16
|
+
*
|
|
17
|
+
* @param endpoints - Array of parsed endpoints
|
|
18
|
+
* @param spec - Full OpenAPI spec
|
|
19
|
+
* @param options - Generation options
|
|
20
|
+
* @returns Array of error case test cases
|
|
21
|
+
*/
|
|
22
|
+
export declare function generateErrorCaseTests(endpoints: ParsedEndpoint[], spec: OpenAPIV3.Document, options?: ErrorCaseOptions): TestCase[];
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/errors/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACzH,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAkB5D;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,cAAc,EAAE,EAC3B,IAAI,EAAE,SAAS,CAAC,QAAQ,EACxB,OAAO,GAAE,gBAAqB,GAC7B,QAAQ,EAAE,CA2CZ"}
|