ts-openapi-codegen 2.1.0-beta.7 → 2.1.0-beta.9
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/README.md +7 -0
- package/README.rus.md +7 -0
- package/dist/cli/analyzeDiff/__tests__/analyzeDiff.cli.test.js +31 -24
- package/dist/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.d.ts +2 -0
- package/dist/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.d.ts.map +1 -0
- package/dist/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.js +47 -0
- package/dist/cli/analyzeDiff/__tests__/analyzeDiffRenameAndInvalidRegex.test.js +8 -7
- package/dist/cli/analyzeDiff/__tests__/analyzeDiffTypeCoercion.test.js +8 -7
- package/dist/cli/analyzeDiff/analyzeDiff.d.ts +14 -2
- package/dist/cli/analyzeDiff/analyzeDiff.d.ts.map +1 -1
- package/dist/cli/analyzeDiff/analyzeDiff.js +56 -13
- package/dist/cli/analyzeDiff/ciSummary.d.ts +6 -3
- package/dist/cli/analyzeDiff/ciSummary.d.ts.map +1 -1
- package/dist/cli/analyzeDiff/ciSummary.js +10 -6
- package/dist/cli/analyzeDiff/ignoreRules.d.ts +0 -6
- package/dist/cli/analyzeDiff/ignoreRules.d.ts.map +1 -1
- package/dist/cli/analyzeDiff/ignoreRules.js +2 -3
- package/dist/cli/analyzeDiff/report.d.ts +0 -1
- package/dist/cli/analyzeDiff/report.d.ts.map +1 -1
- package/dist/cli/analyzeDiff/report.js +1 -3
- package/dist/cli/analyzeDiff/writeLegacyReport.d.ts +2 -0
- package/dist/cli/analyzeDiff/writeLegacyReport.d.ts.map +1 -1
- package/dist/cli/analyzeDiff/writeLegacyReport.js +2 -0
- package/dist/cli/analyzeUsage/analyzeUsage.d.ts +2 -2
- package/dist/cli/analyzeUsage/analyzeUsage.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/analyzeUsage.js +10 -12
- package/dist/cli/analyzeUsage/core/ProjectContext.d.ts +1 -1
- package/dist/cli/analyzeUsage/core/ProjectContext.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/core/ProjectContext.js +5 -10
- package/dist/cli/analyzeUsage/core/Scanner.d.ts +8 -0
- package/dist/cli/analyzeUsage/core/Scanner.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/core/Scanner.js +10 -0
- package/dist/cli/analyzeUsage/rules/ClientRule.d.ts +10 -2
- package/dist/cli/analyzeUsage/rules/ClientRule.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/rules/ClientRule.js +29 -21
- package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts +2 -2
- package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/rules/CoverageRule.js +16 -24
- package/dist/cli/analyzeUsage/rules/DiagnosticsRule.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/rules/DiagnosticsRule.js +4 -1
- package/dist/cli/analyzeUsage/rules/ImportRule.d.ts +2 -2
- package/dist/cli/analyzeUsage/rules/ImportRule.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/rules/ImportRule.js +9 -11
- package/dist/cli/analyzeUsage/rules/ModelRule.d.ts +2 -2
- package/dist/cli/analyzeUsage/rules/ModelRule.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/rules/ModelRule.js +4 -8
- package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts +2 -2
- package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/rules/SchemaRule.js +8 -10
- package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts +10 -2
- package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/rules/ServiceRule.js +27 -23
- package/dist/cli/analyzeUsage/types.d.ts +4 -4
- package/dist/cli/analyzeUsage/types.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/utils/fuzzy.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/utils/report.d.ts +1 -1
- package/dist/cli/analyzeUsage/utils/report.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/utils/report.js +8 -8
- package/dist/cli/checkAndUpdateConfig/utils/removeDefaultConfigValues.d.ts.map +1 -1
- package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.d.ts.map +1 -1
- package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.js +1 -1
- package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.d.ts +1 -1
- package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.d.ts.map +1 -1
- package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.js +1 -1
- package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts.map +1 -1
- package/dist/cli/generateOpenApiClient/generateOpenApiClient.js +9 -1
- package/dist/cli/index.js +3 -2
- package/dist/cli/initOpenApiConfig/utils/__tests__/buildConfig.test.js +2 -8
- package/dist/cli/initOpenApiConfig/utils/registerHandlebarTemplates.d.ts.map +1 -1
- package/dist/cli/interactive/constants.d.ts +0 -4
- package/dist/cli/interactive/constants.d.ts.map +1 -1
- package/dist/cli/interactive/constants.js +1 -5
- package/dist/cli/previewChanges/previewChanges.d.ts.map +1 -1
- package/dist/cli/previewChanges/utils/formatDiff.d.ts.map +1 -1
- package/dist/cli/previewChanges/utils/updateOutputPaths.d.ts.map +1 -1
- package/dist/cli/previewChanges/utils/updateOutputPaths.js +5 -12
- package/dist/cli/schemas/analyzeUsage.d.ts.map +1 -1
- package/dist/cli/schemas/analyzeUsage.js +4 -1
- package/dist/cli/schemas/generate.d.ts +3 -2
- package/dist/cli/schemas/generate.d.ts.map +1 -1
- package/dist/cli/schemas/generate.js +3 -2
- package/dist/common/Consts.d.ts.map +1 -1
- package/dist/common/Consts.js +1 -2
- package/dist/common/Logger.d.ts.map +1 -1
- package/dist/common/Logger.js +1 -1
- package/dist/common/LoggerMessages.d.ts +15 -3
- package/dist/common/LoggerMessages.d.ts.map +1 -1
- package/dist/common/LoggerMessages.js +18 -7
- package/dist/common/TEslintFixOptions.d.ts +20 -0
- package/dist/common/TEslintFixOptions.d.ts.map +1 -0
- package/dist/common/TEslintFixOptions.js +15 -0
- package/dist/common/TRawOptions.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.js +2 -4
- package/dist/common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas.js +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.js +1 -2
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.js +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.js +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV4.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts +3 -2
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.js +10 -4
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts +4 -4
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.js +7 -1
- package/dist/common/VersionedSchema/CommonSchemas.d.ts.map +1 -1
- package/dist/common/VersionedSchema/CommonSchemas.js +4 -2
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV2.js +1 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.d.ts.map +1 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.js +1 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV4.js +1 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV5.d.ts.map +1 -1
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsMigrationPlans.d.ts.map +1 -1
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV1.d.ts +2 -2
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV1.d.ts.map +1 -1
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV2.d.ts +2 -2
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV3.js +1 -1
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV4.d.ts +1 -1
- package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.js +3 -2
- package/dist/common/VersionedSchema/Utils/__tests__/allUtils.test.js +4 -16
- package/dist/common/VersionedSchema/Utils/buildVersionedSchema.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.d.ts +1 -1
- package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.js +1 -1
- package/dist/common/VersionedSchema/Utils/createTrivialMigration.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/createTrivialMigration.js +1 -1
- package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.js +1 -3
- package/dist/common/VersionedSchema/Utils/getLatestVersionFromMigrationPlans.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.js +1 -3
- package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.js +1 -1
- package/dist/common/VersionedSchema/Utils/validateAndSuggestKeyCorrections.d.ts.map +1 -1
- package/dist/common/VersionedSchema/refinements/dependentOptionsRefinement.d.ts +1 -1
- package/dist/common/VersionedSchema/refinements/dependentOptionsRefinement.d.ts.map +1 -1
- package/dist/common/utils/__tests__/eslintFix.test.js +25 -67
- package/dist/common/utils/__tests__/extractEslintFixOptions.test.d.ts +2 -0
- package/dist/common/utils/__tests__/extractEslintFixOptions.test.d.ts.map +1 -0
- package/dist/common/utils/__tests__/extractEslintFixOptions.test.js +28 -0
- package/dist/common/utils/__tests__/format.test.js +26 -17
- package/dist/common/utils/__tests__/prepareTempTsConfig.test.d.ts +2 -0
- package/dist/common/utils/__tests__/prepareTempTsConfig.test.d.ts.map +1 -0
- package/dist/common/utils/__tests__/prepareTempTsConfig.test.js +78 -0
- package/dist/common/utils/codegenTempDir.d.ts +20 -0
- package/dist/common/utils/codegenTempDir.d.ts.map +1 -0
- package/dist/common/utils/codegenTempDir.js +42 -0
- package/dist/common/utils/convertArrayToObject.d.ts.map +1 -1
- package/dist/common/utils/convertArrayToObject.js +3 -8
- package/dist/common/utils/eslintFix.d.ts +48 -4
- package/dist/common/utils/eslintFix.d.ts.map +1 -1
- package/dist/common/utils/eslintFix.js +121 -15
- package/dist/common/utils/format.d.ts +1 -1
- package/dist/common/utils/format.d.ts.map +1 -1
- package/dist/common/utils/format.js +23 -11
- package/dist/common/utils/jsonPath.d.ts.map +1 -1
- package/dist/common/utils/prepareTempEslintConfig.d.ts +18 -0
- package/dist/common/utils/prepareTempEslintConfig.d.ts.map +1 -0
- package/dist/common/utils/prepareTempEslintConfig.js +55 -0
- package/dist/common/utils/prepareTempTsConfig.d.ts +23 -0
- package/dist/common/utils/prepareTempTsConfig.d.ts.map +1 -0
- package/dist/common/utils/prepareTempTsConfig.js +105 -0
- package/dist/core/Context.d.ts.map +1 -1
- package/dist/core/Context.js +2 -6
- package/dist/core/OpenApiClient.d.ts +15 -0
- package/dist/core/OpenApiClient.d.ts.map +1 -1
- package/dist/core/OpenApiClient.js +68 -10
- package/dist/core/WriteClient.d.ts +73 -17
- package/dist/core/WriteClient.d.ts.map +1 -1
- package/dist/core/WriteClient.js +72 -18
- package/dist/core/__tests__/WriteClient.test.js +1 -1
- package/dist/core/api/v2/parser/getOperationResponses.d.ts.map +1 -1
- package/dist/core/api/v2/parser/getOperationResponses.js +1 -3
- package/dist/core/api/v2/parser/getServiceName.d.ts +1 -1
- package/dist/core/api/v3/parser/getOperation.d.ts.map +1 -1
- package/dist/core/api/v3/parser/getOperationParameters.d.ts.map +1 -1
- package/dist/core/api/v3/parser/getOperationResponses.d.ts.map +1 -1
- package/dist/core/api/v3/parser/getOperationResponses.js +1 -3
- package/dist/core/api/v3/parser/getServiceName.d.ts +1 -1
- package/dist/core/governance/evaluateGovernanceRules.d.ts.map +1 -1
- package/dist/core/governance/evaluateGovernanceRules.js +1 -3
- package/dist/core/governance/loadGovernanceConfig.d.ts.map +1 -1
- package/dist/core/governance/loadGovernanceConfig.js +2 -4
- package/dist/core/plugins/GeneratorPlugin.model.d.ts.map +1 -1
- package/dist/core/plugins/applySemanticDiffPluginHooks.d.ts.map +1 -1
- package/dist/core/semanticDiff/__tests__/analyzeOpenApiDiff.test.js +79 -21
- package/dist/core/semanticDiff/__tests__/semanticDiffReportSchema.test.js +20 -1
- package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts +58 -6
- package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts.map +1 -1
- package/dist/core/semanticDiff/analyzeOpenApiDiff.js +47 -19
- package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts +9 -1
- package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts.map +1 -1
- package/dist/core/semanticDiff/semanticDiffReportSchema.js +137 -53
- package/dist/core/strict/validateOpenApiStrict.d.ts.map +1 -1
- package/dist/core/types/Consts.js +1 -1
- package/dist/core/types/DiffReport.model.d.ts +101 -0
- package/dist/core/types/DiffReport.model.d.ts.map +1 -0
- package/dist/core/types/DiffReport.model.js +5 -0
- package/dist/core/types/base/ClientArtifacts.model.d.ts +3 -3
- package/dist/core/types/base/ClientArtifacts.model.d.ts.map +1 -1
- package/dist/core/types/base/ExportedModel.model.d.ts +1 -1
- package/dist/core/types/base/ExportedModel.model.d.ts.map +1 -1
- package/dist/core/types/base/ExportedService.model.d.ts.map +1 -1
- package/dist/core/types/base/OutputPaths.model.d.ts.map +1 -1
- package/dist/core/types/base/PrefixArtifacts.model.d.ts.map +1 -1
- package/dist/core/types/base/PropertyGroup.model.d.ts +1 -1
- package/dist/core/types/base/SimpleClientArtifacts.model.d.ts +1 -1
- package/dist/core/types/base/SimpleClientArtifacts.model.d.ts.map +1 -1
- package/dist/core/types/shared/Model.model.d.ts +36 -0
- package/dist/core/types/shared/Model.model.d.ts.map +1 -1
- package/dist/core/utils/__tests__/applyDiffReportToClient.test.js +182 -0
- package/dist/core/utils/__tests__/buildMiraclesFromSemanticChanges.test.d.ts +2 -0
- package/dist/core/utils/__tests__/buildMiraclesFromSemanticChanges.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/buildMiraclesFromSemanticChanges.test.js +77 -0
- package/dist/core/utils/__tests__/expandOpenApiRefsForSemanticDiff.test.d.ts +2 -0
- package/dist/core/utils/__tests__/expandOpenApiRefsForSemanticDiff.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/expandOpenApiRefsForSemanticDiff.test.js +159 -0
- package/dist/core/utils/__tests__/loadDiffReport.test.js +131 -0
- package/dist/core/utils/__tests__/modelHelpers.test.js +27 -9
- package/dist/core/utils/__tests__/postProcessModelImports.test.js +1 -4
- package/dist/core/utils/__tests__/postProcessServiceImports.test.js +1 -4
- package/dist/core/utils/__tests__/prepareDtoModels.test.js +74 -2
- package/dist/core/utils/__tests__/registerHandlebarHelpers.test.js +27 -0
- package/dist/core/utils/__tests__/resolveClassesModeTypes.test.d.ts +2 -0
- package/dist/core/utils/__tests__/resolveClassesModeTypes.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/resolveClassesModeTypes.test.js +111 -0
- package/dist/core/utils/__tests__/semanticChangesToDiffEntries.test.d.ts +2 -0
- package/dist/core/utils/__tests__/semanticChangesToDiffEntries.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/semanticChangesToDiffEntries.test.js +68 -0
- package/dist/core/utils/__tests__/serviceHelpers.test.js +10 -11
- package/dist/core/utils/__tests__/sortByRequiredExtended.test.js +10 -27
- package/dist/core/utils/__tests__/templateRendering.test.js +71 -0
- package/dist/core/utils/adapters/__tests__/semanticToStructural.test.d.ts +2 -0
- package/dist/core/utils/adapters/__tests__/semanticToStructural.test.d.ts.map +1 -0
- package/dist/core/utils/adapters/__tests__/semanticToStructural.test.js +63 -0
- package/dist/core/utils/adapters/extractMiraclesFromSemantic.d.ts +10 -0
- package/dist/core/utils/adapters/extractMiraclesFromSemantic.d.ts.map +1 -0
- package/dist/core/utils/adapters/extractMiraclesFromSemantic.js +13 -0
- package/dist/core/utils/adapters/index.d.ts +4 -0
- package/dist/core/utils/adapters/index.d.ts.map +1 -0
- package/dist/core/utils/adapters/index.js +8 -0
- package/dist/core/utils/adapters/semanticToStructural.d.ts +12 -0
- package/dist/core/utils/adapters/semanticToStructural.d.ts.map +1 -0
- package/dist/core/utils/adapters/semanticToStructural.js +36 -0
- package/dist/core/utils/appendUniqueLinesToFile.js +1 -1
- package/dist/core/utils/applyDiffReportToClient.d.ts +13 -1
- package/dist/core/utils/applyDiffReportToClient.d.ts.map +1 -1
- package/dist/core/utils/applyDiffReportToClient.js +189 -109
- package/dist/core/utils/areEqual.d.ts +1 -1
- package/dist/core/utils/buildMiraclesFromSemanticChanges.d.ts +25 -0
- package/dist/core/utils/buildMiraclesFromSemanticChanges.d.ts.map +1 -0
- package/dist/core/utils/buildMiraclesFromSemanticChanges.js +146 -0
- package/dist/core/utils/expandOpenApiRefsForSemanticDiff.d.ts +23 -0
- package/dist/core/utils/expandOpenApiRefsForSemanticDiff.d.ts.map +1 -0
- package/dist/core/utils/expandOpenApiRefsForSemanticDiff.js +163 -0
- package/dist/core/utils/getOpenApiSpec.d.ts +18 -0
- package/dist/core/utils/getOpenApiSpec.d.ts.map +1 -1
- package/dist/core/utils/getOpenApiSpec.js +35 -0
- package/dist/core/utils/getOperationErrors.d.ts +2 -2
- package/dist/core/utils/getOperationErrors.d.ts.map +1 -1
- package/dist/core/utils/getOperationResults.d.ts +1 -1
- package/dist/core/utils/getPropertyGroupSimple.d.ts.map +1 -1
- package/dist/core/utils/getPropertyGroupSimple.js +1 -3
- package/dist/core/utils/isSubdirectory.d.ts.map +1 -1
- package/dist/core/utils/loadDiffReport.d.ts +11 -30
- package/dist/core/utils/loadDiffReport.d.ts.map +1 -1
- package/dist/core/utils/loadDiffReport.js +69 -3
- package/dist/core/utils/loadSemanticOpenApiSpec.d.ts +15 -0
- package/dist/core/utils/loadSemanticOpenApiSpec.d.ts.map +1 -0
- package/dist/core/utils/loadSemanticOpenApiSpec.js +61 -0
- package/dist/core/utils/modelHelpers.d.ts +13 -5
- package/dist/core/utils/modelHelpers.d.ts.map +1 -1
- package/dist/core/utils/modelHelpers.js +28 -23
- package/dist/core/utils/normalizeString.d.ts.map +1 -1
- package/dist/core/utils/normalizeString.js +1 -5
- package/dist/core/utils/postProcessServiceImports.d.ts.map +1 -1
- package/dist/core/utils/postProcessServiceImports.js +1 -3
- package/dist/core/utils/precompileTemplates.js +1 -0
- package/dist/core/utils/prepareAlias.d.ts +1 -1
- package/dist/core/utils/prepareDtoModels.d.ts +5 -0
- package/dist/core/utils/prepareDtoModels.d.ts.map +1 -1
- package/dist/core/utils/prepareDtoModels.js +56 -13
- package/dist/core/utils/registerHandlebarHelpers.d.ts +1 -0
- package/dist/core/utils/registerHandlebarHelpers.d.ts.map +1 -1
- package/dist/core/utils/registerHandlebarHelpers.js +3 -0
- package/dist/core/utils/registerHandlebarTemplates.d.ts +1 -0
- package/dist/core/utils/registerHandlebarTemplates.d.ts.map +1 -1
- package/dist/core/utils/resolveClassesModeTypes.d.ts +8 -0
- package/dist/core/utils/resolveClassesModeTypes.d.ts.map +1 -0
- package/dist/core/utils/resolveClassesModeTypes.js +77 -0
- package/dist/core/utils/semanticChangesToDiffEntries.d.ts +37 -0
- package/dist/core/utils/semanticChangesToDiffEntries.d.ts.map +1 -0
- package/dist/core/utils/semanticChangesToDiffEntries.js +99 -0
- package/dist/core/utils/semanticPointerToJsonPath.d.ts +7 -0
- package/dist/core/utils/semanticPointerToJsonPath.d.ts.map +1 -0
- package/dist/core/utils/semanticPointerToJsonPath.js +67 -0
- package/dist/core/utils/serviceHelpers.d.ts +6 -7
- package/dist/core/utils/serviceHelpers.d.ts.map +1 -1
- package/dist/core/utils/serviceHelpers.js +8 -25
- package/dist/core/utils/sortModelByName.d.ts +1 -1
- package/dist/core/utils/writeClientExecutor.d.ts +1 -2
- package/dist/core/utils/writeClientExecutor.d.ts.map +1 -1
- package/dist/core/utils/writeClientExecutor.js +2 -6
- package/dist/core/utils/writeClientModels.d.ts +1 -2
- package/dist/core/utils/writeClientModels.d.ts.map +1 -1
- package/dist/core/utils/writeClientModels.js +4 -6
- package/dist/core/utils/writeClientSchemas.d.ts +1 -3
- package/dist/core/utils/writeClientSchemas.d.ts.map +1 -1
- package/dist/core/utils/writeClientSchemas.js +2 -7
- package/dist/core/utils/writeClientServices.d.ts +15 -16
- package/dist/core/utils/writeClientServices.d.ts.map +1 -1
- package/dist/core/utils/writeClientServices.js +6 -13
- package/dist/templatesCompiled/client/exportModels.d.ts +17 -11
- package/dist/templatesCompiled/client/exportModels.d.ts.map +1 -1
- package/dist/templatesCompiled/client/exportModels.js +96 -49
- package/dist/templatesCompiled/client/exportService.d.ts +13 -10
- package/dist/templatesCompiled/client/exportService.d.ts.map +1 -1
- package/dist/templatesCompiled/client/exportService.js +95 -67
- package/dist/templatesCompiled/client/partials/header.d.ts +1 -0
- package/dist/templatesCompiled/client/partials/header.d.ts.map +1 -1
- package/dist/templatesCompiled/client/partials/header.js +11 -2
- package/package.json +130 -136
- package/dist/cli/analyzeDiff/buildLegacyReport.d.ts +0 -17
- package/dist/cli/analyzeDiff/buildLegacyReport.d.ts.map +0 -1
- package/dist/cli/analyzeDiff/buildLegacyReport.js +0 -54
- package/dist/cli/analyzeDiff/diffEngine.d.ts +0 -54
- package/dist/cli/analyzeDiff/diffEngine.d.ts.map +0 -1
- package/dist/cli/analyzeDiff/diffEngine.js +0 -209
|
@@ -17,9 +17,7 @@ function getOperationResponses(openApi, responses, parentRef) {
|
|
|
17
17
|
const response = (responseOrReference.$ref ? this.context.get(responseOrReference.$ref, parentRef) : responseOrReference);
|
|
18
18
|
const responseCode = (0, getOperationResponseCode_1.getOperationResponseCode)(code);
|
|
19
19
|
const normalizedParentRef = (0, path_1.isAbsolute)(parentRef) ? parentRef : (0, pathHelpers_1.resolveHelper)(this.context.root?.dirName || process.cwd(), parentRef);
|
|
20
|
-
const responseParentRef = responseOrReference.$ref
|
|
21
|
-
? (0, parseRef_1.parseRef)((0, normalizeRef_1.normalizeRef)(responseOrReference.$ref, normalizedParentRef)).filePath || normalizedParentRef
|
|
22
|
-
: parentRef;
|
|
20
|
+
const responseParentRef = responseOrReference.$ref ? (0, parseRef_1.parseRef)((0, normalizeRef_1.normalizeRef)(responseOrReference.$ref, normalizedParentRef)).filePath || normalizedParentRef : parentRef;
|
|
23
21
|
if (responseCode) {
|
|
24
22
|
const operationResponse = this.getOperationResponse(openApi, response, responseCode, responseParentRef);
|
|
25
23
|
operationResponses.push(operationResponse);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { OpenApiOperation } from
|
|
1
|
+
import { OpenApiOperation } from '../types/OpenApiOperation.model';
|
|
2
2
|
export declare function getServiceName(op: OpenApiOperation, fileName: string): string;
|
|
3
3
|
//# sourceMappingURL=getServiceName.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluateGovernanceRules.d.ts","sourceRoot":"","sources":["../../../src/core/governance/evaluateGovernanceRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,KAAK,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GAAG,0BAA0B,GAAG,sBAAsB,GAAG,wBAAwB,CAAC;AAE9G,KAAK,iBAAiB,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,UAAU,EAAE,mBAAmB,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,SAAS,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC;CACnE,CAAC;AAEF,KAAK,eAAe,GAAG;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC7C,CAAC;
|
|
1
|
+
{"version":3,"file":"evaluateGovernanceRules.d.ts","sourceRoot":"","sources":["../../../src/core/governance/evaluateGovernanceRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,KAAK,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GAAG,0BAA0B,GAAG,sBAAsB,GAAG,wBAAwB,CAAC;AAE9G,KAAK,iBAAiB,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,UAAU,EAAE,mBAAmB,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,SAAS,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC;CACnE,CAAC;AAEF,KAAK,eAAe,GAAG;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC7C,CAAC;AAiFF;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,CAqEjF"}
|
|
@@ -61,9 +61,7 @@ function getEffectiveRuleConfig(ruleId, governanceConfig) {
|
|
|
61
61
|
function isViolationAllowed(allowList, operation, violationPath) {
|
|
62
62
|
return allowList.some(item => {
|
|
63
63
|
const operationAllowed = typeof item.operation === 'string' && operation ? item.operation === operation : false;
|
|
64
|
-
const pathAllowed = typeof item.path === 'string' && item.path.trim().length > 0
|
|
65
|
-
? violationPath === item.path || violationPath.startsWith(item.path)
|
|
66
|
-
: false;
|
|
64
|
+
const pathAllowed = typeof item.path === 'string' && item.path.trim().length > 0 ? violationPath === item.path || violationPath.startsWith(item.path) : false;
|
|
67
65
|
return operationAllowed || pathAllowed;
|
|
68
66
|
});
|
|
69
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadGovernanceConfig.d.ts","sourceRoot":"","sources":["../../../src/core/governance/loadGovernanceConfig.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"loadGovernanceConfig.d.ts","sourceRoot":"","sources":["../../../src/core/governance/loadGovernanceConfig.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAgCnE;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAyBrH"}
|
|
@@ -27,9 +27,7 @@ function formatGovernanceConfigValidationError(error) {
|
|
|
27
27
|
if (!error.issues.length) {
|
|
28
28
|
return 'Unknown governance config validation error';
|
|
29
29
|
}
|
|
30
|
-
return error.issues
|
|
31
|
-
.map(issue => `${formatGovernanceConfigPath(issue.path)}: ${issue.message}`)
|
|
32
|
-
.join('\n');
|
|
30
|
+
return error.issues.map(issue => `${formatGovernanceConfigPath(issue.path)}: ${issue.message}`).join('\n');
|
|
33
31
|
}
|
|
34
32
|
/**
|
|
35
33
|
* Loads governance policy config JSON from file path.
|
|
@@ -44,7 +42,7 @@ async function loadGovernanceConfig(governanceConfigPath) {
|
|
|
44
42
|
if (!exists) {
|
|
45
43
|
throw new Error(`Governance config file does not exist: ${resolvedPath}`);
|
|
46
44
|
}
|
|
47
|
-
const rawContent = await fileSystemHelpers_1.fileSystemHelpers.readFile(resolvedPath,
|
|
45
|
+
const rawContent = await fileSystemHelpers_1.fileSystemHelpers.readFile(resolvedPath, 'utf8');
|
|
48
46
|
let parsed;
|
|
49
47
|
try {
|
|
50
48
|
parsed = JSON.parse(rawContent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeneratorPlugin.model.d.ts","sourceRoot":"","sources":["../../../src/core/plugins/GeneratorPlugin.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1C,MAAM,MAAM,8BAA8B,GAAG,GAAG,GAAG,GAAG,CAAC;AAEvD,MAAM,WAAW,yBAAyB;IACtC,cAAc,EAAE,eAAe,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,EAAE,yBAAyB,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACtC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE;QACL,aAAa,EAAE,OAAO,CAAC;KAC1B,CAAC;CACL;AAED,MAAM,WAAW,2BAA2B;IACxC,cAAc,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACrD,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACvC,UAAU,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,8BAA8B;IAC3C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,8BAA8B,CAAC;IAC5C,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,MAAM,GAAG,SAAS,CAAC;IACnF,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,yBAAyB,KAAK,kBAAkB,GAAG,IAAI,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACvH,iBAAiB,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"GeneratorPlugin.model.d.ts","sourceRoot":"","sources":["../../../src/core/plugins/GeneratorPlugin.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1C,MAAM,MAAM,8BAA8B,GAAG,GAAG,GAAG,GAAG,CAAC;AAEvD,MAAM,WAAW,yBAAyB;IACtC,cAAc,EAAE,eAAe,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,EAAE,yBAAyB,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACtC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE;QACL,aAAa,EAAE,OAAO,CAAC;KAC1B,CAAC;CACL;AAED,MAAM,WAAW,2BAA2B;IACxC,cAAc,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACrD,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACvC,UAAU,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,8BAA8B;IAC3C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,8BAA8B,CAAC;IAC5C,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,MAAM,GAAG,SAAS,CAAC;IACnF,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,yBAAyB,KAAK,kBAAkB,GAAG,IAAI,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACvH,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,2BAA2B,KAAK,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7J,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,8BAA8B,KAAK;QAAE,MAAM,CAAC,EAAE,kBAAkB,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,OAAO,CAAC;QAAE,MAAM,CAAC,EAAE,kBAAkB,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACnM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applySemanticDiffPluginHooks.d.ts","sourceRoot":"","sources":["../../../src/core/plugins/applySemanticDiffPluginHooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAE7F,MAAM,MAAM,oBAAoB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC5C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAC7D,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC7C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,wBAAsB,4BAA4B,
|
|
1
|
+
{"version":3,"file":"applySemanticDiffPluginHooks.d.ts","sourceRoot":"","sources":["../../../src/core/plugins/applySemanticDiffPluginHooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAE7F,MAAM,MAAM,oBAAoB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC5C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAC7D,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC7C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,iCAAiC,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAmKxI"}
|
|
@@ -44,6 +44,78 @@ const analyzeOpenApiDiff_1 = require("../analyzeOpenApiDiff");
|
|
|
44
44
|
node_assert_1.default.ok(report.changes.some(change => change.type === 'model.removed'));
|
|
45
45
|
node_assert_1.default.ok(report.changes.some(change => change.type === 'operation.removed'));
|
|
46
46
|
});
|
|
47
|
+
(0, node_test_1.test)('includes from/to on property type and enum value changes', () => {
|
|
48
|
+
const oldSpec = {
|
|
49
|
+
openapi: '3.0.0',
|
|
50
|
+
paths: {},
|
|
51
|
+
components: {
|
|
52
|
+
schemas: {
|
|
53
|
+
User: {
|
|
54
|
+
type: 'object',
|
|
55
|
+
properties: {
|
|
56
|
+
age: { type: 'number' },
|
|
57
|
+
role: { enum: ['user', 'admin'] },
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
const newSpec = {
|
|
64
|
+
openapi: '3.0.0',
|
|
65
|
+
paths: {},
|
|
66
|
+
components: {
|
|
67
|
+
schemas: {
|
|
68
|
+
User: {
|
|
69
|
+
type: 'object',
|
|
70
|
+
properties: {
|
|
71
|
+
age: { type: 'integer' },
|
|
72
|
+
role: { enum: ['admin'] },
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
const report = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec);
|
|
79
|
+
const typeChange = report.changes.find(change => change.type === 'model.property.type.changed' && change.path.includes('/age'));
|
|
80
|
+
const roleTypeChange = report.changes.find(change => change.type === 'model.property.type.changed' && change.path.includes('/role'));
|
|
81
|
+
node_assert_1.default.strictEqual(typeChange?.from, 'number');
|
|
82
|
+
node_assert_1.default.strictEqual(typeChange?.to, 'integer');
|
|
83
|
+
node_assert_1.default.strictEqual(roleTypeChange?.from, 'enum(admin|user)');
|
|
84
|
+
node_assert_1.default.strictEqual(roleTypeChange?.to, 'enum(admin)');
|
|
85
|
+
});
|
|
86
|
+
(0, node_test_1.test)('includes operation metadata on operation.removed', () => {
|
|
87
|
+
const oldSpec = {
|
|
88
|
+
openapi: '3.0.0',
|
|
89
|
+
paths: {
|
|
90
|
+
'/pets': {
|
|
91
|
+
get: {
|
|
92
|
+
operationId: 'listPets',
|
|
93
|
+
summary: 'List pets',
|
|
94
|
+
description: 'Returns pets',
|
|
95
|
+
tags: ['pets'],
|
|
96
|
+
responses: {
|
|
97
|
+
'200': { description: 'ok' },
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
components: { schemas: {} },
|
|
103
|
+
};
|
|
104
|
+
const newSpec = {
|
|
105
|
+
openapi: '3.0.0',
|
|
106
|
+
paths: {},
|
|
107
|
+
components: { schemas: {} },
|
|
108
|
+
};
|
|
109
|
+
const report = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec);
|
|
110
|
+
const removed = report.changes.find(change => change.type === 'operation.removed');
|
|
111
|
+
node_assert_1.default.ok(removed);
|
|
112
|
+
node_assert_1.default.deepStrictEqual(removed?.from, {
|
|
113
|
+
operationId: 'listPets',
|
|
114
|
+
summary: 'List pets',
|
|
115
|
+
description: 'Returns pets',
|
|
116
|
+
tags: ['pets'],
|
|
117
|
+
});
|
|
118
|
+
});
|
|
47
119
|
(0, node_test_1.test)('detects property required/type changes and enum changes', () => {
|
|
48
120
|
const oldSpec = {
|
|
49
121
|
openapi: '3.0.0',
|
|
@@ -182,15 +254,9 @@ const analyzeOpenApiDiff_1 = require("../analyzeOpenApiDiff");
|
|
|
182
254
|
},
|
|
183
255
|
};
|
|
184
256
|
const report = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec);
|
|
185
|
-
node_assert_1.default.ok(report.changes.some(change => change.type === 'model.property.type.changed' &&
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
node_assert_1.default.ok(report.changes.some(change => change.type === 'model.property.type.changed' &&
|
|
189
|
-
change.path.includes('/score') &&
|
|
190
|
-
change.severity === 'non-breaking'));
|
|
191
|
-
node_assert_1.default.ok(report.changes.some(change => change.type === 'model.property.type.changed' &&
|
|
192
|
-
change.path.includes('/state') &&
|
|
193
|
-
change.severity === 'breaking'));
|
|
257
|
+
node_assert_1.default.ok(report.changes.some(change => change.type === 'model.property.type.changed' && change.path.includes('/tier') && change.severity === 'non-breaking'));
|
|
258
|
+
node_assert_1.default.ok(report.changes.some(change => change.type === 'model.property.type.changed' && change.path.includes('/score') && change.severity === 'non-breaking'));
|
|
259
|
+
node_assert_1.default.ok(report.changes.some(change => change.type === 'model.property.type.changed' && change.path.includes('/state') && change.severity === 'breaking'));
|
|
194
260
|
});
|
|
195
261
|
(0, node_test_1.test)('treats different refs and narrowing formats as breaking, widening formats as non-breaking', () => {
|
|
196
262
|
const oldSpec = {
|
|
@@ -250,15 +316,9 @@ const analyzeOpenApiDiff_1 = require("../analyzeOpenApiDiff");
|
|
|
250
316
|
},
|
|
251
317
|
};
|
|
252
318
|
const wideningReport = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec);
|
|
253
|
-
node_assert_1.default.ok(wideningReport.changes.some(change => change.type === 'model.property.type.changed' &&
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
node_assert_1.default.ok(wideningReport.changes.some(change => change.type === 'model.property.type.changed' &&
|
|
257
|
-
change.path.includes('/count') &&
|
|
258
|
-
change.severity === 'non-breaking'));
|
|
259
|
-
node_assert_1.default.ok(wideningReport.changes.some(change => change.type === 'model.property.type.changed' &&
|
|
260
|
-
change.path.includes('/ratio') &&
|
|
261
|
-
change.severity === 'non-breaking'));
|
|
319
|
+
node_assert_1.default.ok(wideningReport.changes.some(change => change.type === 'model.property.type.changed' && change.path.includes('/profile') && change.severity === 'breaking'));
|
|
320
|
+
node_assert_1.default.ok(wideningReport.changes.some(change => change.type === 'model.property.type.changed' && change.path.includes('/count') && change.severity === 'non-breaking'));
|
|
321
|
+
node_assert_1.default.ok(wideningReport.changes.some(change => change.type === 'model.property.type.changed' && change.path.includes('/ratio') && change.severity === 'non-breaking'));
|
|
262
322
|
const narrowingReport = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)({
|
|
263
323
|
openapi: '3.0.0',
|
|
264
324
|
paths: {},
|
|
@@ -286,9 +346,7 @@ const analyzeOpenApiDiff_1 = require("../analyzeOpenApiDiff");
|
|
|
286
346
|
},
|
|
287
347
|
},
|
|
288
348
|
});
|
|
289
|
-
node_assert_1.default.ok(narrowingReport.changes.some(change => change.type === 'model.property.type.changed' &&
|
|
290
|
-
change.path.includes('/count') &&
|
|
291
|
-
change.severity === 'breaking'));
|
|
349
|
+
node_assert_1.default.ok(narrowingReport.changes.some(change => change.type === 'model.property.type.changed' && change.path.includes('/count') && change.severity === 'breaking'));
|
|
292
350
|
});
|
|
293
351
|
(0, node_test_1.test)('detects success response payload schema changes', () => {
|
|
294
352
|
const oldSpec = {
|
|
@@ -5,11 +5,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const node_assert_1 = __importDefault(require("node:assert"));
|
|
7
7
|
const node_test_1 = require("node:test");
|
|
8
|
+
const DiffReport_model_1 = require("../../types/DiffReport.model");
|
|
9
|
+
const adapters_1 = require("../../utils/adapters");
|
|
8
10
|
const analyzeOpenApiDiff_1 = require("../analyzeOpenApiDiff");
|
|
9
11
|
const semanticDiffReportSchema_1 = require("../semanticDiffReportSchema");
|
|
10
12
|
(0, node_test_1.describe)('@unit: semanticDiffReportSchema', () => {
|
|
11
13
|
(0, node_test_1.test)('validates report produced by analyzeOpenApiDiff', () => {
|
|
12
|
-
const
|
|
14
|
+
const semanticReport = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)({
|
|
13
15
|
openapi: '3.0.0',
|
|
14
16
|
paths: {
|
|
15
17
|
'/ping': {
|
|
@@ -35,6 +37,23 @@ const semanticDiffReportSchema_1 = require("../semanticDiffReportSchema");
|
|
|
35
37
|
},
|
|
36
38
|
components: { schemas: {} },
|
|
37
39
|
});
|
|
40
|
+
const report = {
|
|
41
|
+
schemaVersion: DiffReport_model_1.UNIFIED_DIFF_REPORT_SCHEMA_VERSION,
|
|
42
|
+
timestamp: '2026-01-01T00:00:00.000Z',
|
|
43
|
+
metadata: {
|
|
44
|
+
base: 'old',
|
|
45
|
+
target: 'new',
|
|
46
|
+
baseHash: 'old-hash',
|
|
47
|
+
targetHash: 'new-hash',
|
|
48
|
+
},
|
|
49
|
+
semantic: {
|
|
50
|
+
changes: semanticReport.changes,
|
|
51
|
+
governance: semanticReport.governance,
|
|
52
|
+
recommendation: semanticReport.recommendation,
|
|
53
|
+
summary: semanticReport.summary,
|
|
54
|
+
},
|
|
55
|
+
structural: (0, adapters_1.adaptSemanticToStructural)(semanticReport),
|
|
56
|
+
};
|
|
38
57
|
const validation = (0, semanticDiffReportSchema_1.validateSemanticDiffReportSchema)(report);
|
|
39
58
|
node_assert_1.default.strictEqual(validation.valid, true, validation.errors.join('\n'));
|
|
40
59
|
});
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import { GovernancePolicyConfig, GovernanceReport } from '../governance/evaluateGovernanceRules';
|
|
2
|
+
import type { UnifiedDiffReport } from '../types/DiffReport.model';
|
|
2
3
|
import { CommonOpenApi } from '../types/shared/CommonOpenApi.model';
|
|
4
|
+
import type { MiracleEntry } from '../types/shared/Miracle.model';
|
|
3
5
|
type ChangeSeverity = 'breaking' | 'non-breaking' | 'informational';
|
|
4
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Сводка семантических изменений по уровню серьёзности.
|
|
8
|
+
* @property breaking количество breaking-изменений
|
|
9
|
+
* @property nonBreaking количество обратно совместимых изменений
|
|
10
|
+
* @property informational количество информационных изменений
|
|
11
|
+
*/
|
|
12
|
+
export type SemanticDiffSummary = {
|
|
5
13
|
breaking: number;
|
|
6
14
|
nonBreaking: number;
|
|
7
15
|
informational: number;
|
|
@@ -9,37 +17,81 @@ type SemanticDiffSummary = {
|
|
|
9
17
|
type SemanticDiffSemverRecommendation = 'major' | 'minor' | 'patch';
|
|
10
18
|
type SemanticDiffConfidence = 'high' | 'medium' | 'low';
|
|
11
19
|
type SemanticDiffRecommendationReason = 'HAS_BREAKING_CHANGES' | 'HAS_BACKWARD_COMPATIBLE_CHANGES' | 'HAS_INFORMATIONAL_ONLY_CHANGES' | 'NO_API_SURFACE_CHANGES';
|
|
12
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Рекомендация по semver-версии на основе семантического diff.
|
|
22
|
+
* @property semver рекомендуемый уровень версии
|
|
23
|
+
* @property confidence уверенность в рекомендации
|
|
24
|
+
* @property reason человекочитаемое объяснение
|
|
25
|
+
* @property reasons машиночитаемые коды причин
|
|
26
|
+
*/
|
|
27
|
+
export type SemanticDiffRecommendation = {
|
|
13
28
|
semver: SemanticDiffSemverRecommendation;
|
|
14
29
|
confidence: SemanticDiffConfidence;
|
|
15
30
|
reason: string;
|
|
16
31
|
reasons: SemanticDiffRecommendationReason[];
|
|
17
32
|
};
|
|
18
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Одно семантическое изменение OpenAPI.
|
|
35
|
+
* @property type тип изменения
|
|
36
|
+
* @property severity уровень серьёзности
|
|
37
|
+
* @property message описание изменения
|
|
38
|
+
* @property path JSON Pointer путь к изменённому элементу
|
|
39
|
+
* @property [from] значение до изменения
|
|
40
|
+
* @property [to] значение после изменения
|
|
41
|
+
* @property [fromRequired] обязательность до изменения
|
|
42
|
+
* @property [toRequired] обязательность после изменения
|
|
43
|
+
* @property [fromNullable] nullable до изменения
|
|
44
|
+
* @property [toNullable] nullable после изменения
|
|
45
|
+
*/
|
|
46
|
+
export type SemanticDiffChange = {
|
|
19
47
|
type: string;
|
|
20
48
|
severity: ChangeSeverity;
|
|
21
49
|
message: string;
|
|
22
50
|
path: string;
|
|
51
|
+
from?: unknown;
|
|
52
|
+
to?: unknown;
|
|
53
|
+
fromRequired?: boolean;
|
|
54
|
+
toRequired?: boolean;
|
|
55
|
+
fromNullable?: boolean;
|
|
56
|
+
toNullable?: boolean;
|
|
23
57
|
};
|
|
58
|
+
/** Версия схемы семантического diff-отчёта. */
|
|
24
59
|
export declare const SEMANTIC_DIFF_REPORT_SCHEMA_VERSION = "1.1.0";
|
|
60
|
+
/**
|
|
61
|
+
* Семантический diff-отчёт OpenAPI.
|
|
62
|
+
* @property schemaVersion версия схемы отчёта
|
|
63
|
+
* @property summary сводка изменений по серьёзности
|
|
64
|
+
* @property recommendation рекомендация по semver
|
|
65
|
+
* @property governance результат проверки governance-правил
|
|
66
|
+
* @property changes список семантических изменений
|
|
67
|
+
* @property [miracles] кандидаты на переименование и приведение типов
|
|
68
|
+
*/
|
|
25
69
|
export type SemanticDiffReport = {
|
|
26
70
|
schemaVersion: string;
|
|
27
71
|
summary: SemanticDiffSummary;
|
|
28
72
|
recommendation: SemanticDiffRecommendation;
|
|
29
73
|
governance: GovernanceReport;
|
|
30
74
|
changes: SemanticDiffChange[];
|
|
75
|
+
miracles?: MiracleEntry[];
|
|
31
76
|
};
|
|
32
77
|
type AnalyzeOpenApiDiffOptions = {
|
|
33
78
|
allowBreaking?: boolean;
|
|
34
79
|
governanceConfig?: GovernancePolicyConfig;
|
|
35
80
|
};
|
|
36
81
|
/**
|
|
37
|
-
*
|
|
82
|
+
* Формирует семантический diff-отчёт между двумя OpenAPI-спецификациями.
|
|
83
|
+
* @param oldSpec базовая спецификация
|
|
84
|
+
* @param newSpec целевая спецификация
|
|
85
|
+
* @param [options] опции анализа, включая governance и разрешение breaking-изменений
|
|
86
|
+
* @returns семантический diff-отчёт
|
|
38
87
|
*/
|
|
39
88
|
export declare function analyzeOpenApiDiff(oldSpec: CommonOpenApi, newSpec: CommonOpenApi, options?: AnalyzeOpenApiDiffOptions): SemanticDiffReport;
|
|
40
89
|
/**
|
|
41
|
-
*
|
|
90
|
+
* Записывает семантический или унифицированный diff-отчёт в JSON-файл.
|
|
91
|
+
* @param report отчёт для сохранения
|
|
92
|
+
* @param reportFilePath путь к файлу отчёта
|
|
93
|
+
* @returns абсолютный путь к сохранённому файлу
|
|
42
94
|
*/
|
|
43
|
-
export declare function writeSemanticDiffReport(report: SemanticDiffReport, reportFilePath: string): Promise<string>;
|
|
95
|
+
export declare function writeSemanticDiffReport(report: SemanticDiffReport | UnifiedDiffReport, reportFilePath: string): Promise<string>;
|
|
44
96
|
export {};
|
|
45
97
|
//# sourceMappingURL=analyzeOpenApiDiff.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzeOpenApiDiff.d.ts","sourceRoot":"","sources":["../../../src/core/semanticDiff/analyzeOpenApiDiff.ts"],"names":[],"mappings":"AAKA,OAAO,
|
|
1
|
+
{"version":3,"file":"analyzeOpenApiDiff.d.ts","sourceRoot":"","sources":["../../../src/core/semanticDiff/analyzeOpenApiDiff.ts"],"names":[],"mappings":"AAKA,OAAO,EAA2B,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAC1H,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,KAAK,cAAc,GAAG,UAAU,GAAG,cAAc,GAAG,eAAe,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,KAAK,gCAAgC,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AACpE,KAAK,sBAAsB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AACxD,KAAK,gCAAgC,GAAG,sBAAsB,GAAG,iCAAiC,GAAG,gCAAgC,GAAG,wBAAwB,CAAC;AAEjK;;;;;;GAMG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACrC,MAAM,EAAE,gCAAgC,CAAC;IACzC,UAAU,EAAE,sBAAsB,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,gCAAgC,EAAE,CAAC;CAC/C,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAIF,+CAA+C;AAC/C,eAAO,MAAM,mCAAmC,UAAU,CAAC;AAE3D;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,cAAc,EAAE,0BAA0B,CAAC;IAC3C,UAAU,EAAE,gBAAgB,CAAC;IAC7B,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC7B,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC7C,CAAC;AA0zBF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,yBAA8B,GAAG,kBAAkB,CA2B9I;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG,iBAAiB,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAarI"}
|
|
@@ -11,6 +11,7 @@ const fileSystemHelpers_1 = require("../../common/utils/fileSystemHelpers");
|
|
|
11
11
|
const format_1 = require("../../common/utils/format");
|
|
12
12
|
const pathHelpers_1 = require("../../common/utils/pathHelpers");
|
|
13
13
|
const evaluateGovernanceRules_1 = require("../governance/evaluateGovernanceRules");
|
|
14
|
+
/** Версия схемы семантического diff-отчёта. */
|
|
14
15
|
exports.SEMANTIC_DIFF_REPORT_SCHEMA_VERSION = '1.1.0';
|
|
15
16
|
const HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'];
|
|
16
17
|
/**
|
|
@@ -373,10 +374,19 @@ function buildCanonicalOperations(spec) {
|
|
|
373
374
|
}
|
|
374
375
|
}
|
|
375
376
|
}
|
|
377
|
+
const operationId = typeof operation.operationId === 'string' ? operation.operationId : undefined;
|
|
378
|
+
const summary = typeof operation.summary === 'string' ? operation.summary : undefined;
|
|
379
|
+
const description = typeof operation.description === 'string' ? operation.description : undefined;
|
|
380
|
+
const tagsRaw = operation.tags;
|
|
381
|
+
const tags = Array.isArray(tagsRaw) ? tagsRaw.map(tag => String(tag)) : undefined;
|
|
376
382
|
operations.set(operationKey, {
|
|
377
383
|
parameters,
|
|
378
384
|
requestBodyRequired,
|
|
379
385
|
successResponses,
|
|
386
|
+
operationId,
|
|
387
|
+
summary,
|
|
388
|
+
description,
|
|
389
|
+
tags,
|
|
380
390
|
});
|
|
381
391
|
}
|
|
382
392
|
}
|
|
@@ -385,8 +395,8 @@ function buildCanonicalOperations(spec) {
|
|
|
385
395
|
/**
|
|
386
396
|
* Pushes change entry to report collection.
|
|
387
397
|
*/
|
|
388
|
-
function pushChange(changes, severity, type, path, message) {
|
|
389
|
-
changes.push({ severity, type, path, message });
|
|
398
|
+
function pushChange(changes, severity, type, path, message, extras) {
|
|
399
|
+
changes.push({ severity, type, path, message, ...extras });
|
|
390
400
|
}
|
|
391
401
|
/**
|
|
392
402
|
* Normalizes, deduplicates and sorts changes for stable CI output.
|
|
@@ -440,13 +450,13 @@ function diffModels(oldModels, newModels, changes) {
|
|
|
440
450
|
}
|
|
441
451
|
for (const oldPropertyName of oldModel.properties.keys()) {
|
|
442
452
|
if (!newModel.properties.has(oldPropertyName)) {
|
|
443
|
-
pushChange(changes, 'breaking', 'model.property.removed', `#/components/schemas/${modelName}/properties/${oldPropertyName}`, `Property "${oldPropertyName}" was removed from model "${modelName}"
|
|
453
|
+
pushChange(changes, 'breaking', 'model.property.removed', `#/components/schemas/${modelName}/properties/${oldPropertyName}`, `Property "${oldPropertyName}" was removed from model "${modelName}".`, { from: { type: oldModel.properties.get(oldPropertyName) } });
|
|
444
454
|
}
|
|
445
455
|
}
|
|
446
|
-
for (const [newPropertyName] of newModel.properties.entries()) {
|
|
456
|
+
for (const [newPropertyName, newPropertyType] of newModel.properties.entries()) {
|
|
447
457
|
if (!oldModel.properties.has(newPropertyName)) {
|
|
448
458
|
const isRequired = newModel.required.has(newPropertyName);
|
|
449
|
-
pushChange(changes, isRequired ? 'breaking' : 'non-breaking', 'model.property.added', `#/components/schemas/${modelName}/properties/${newPropertyName}`, `Property "${newPropertyName}" was added to model "${modelName}"
|
|
459
|
+
pushChange(changes, isRequired ? 'breaking' : 'non-breaking', 'model.property.added', `#/components/schemas/${modelName}/properties/${newPropertyName}`, `Property "${newPropertyName}" was added to model "${modelName}".`, { to: { type: newPropertyType } });
|
|
450
460
|
}
|
|
451
461
|
}
|
|
452
462
|
for (const [propertyName, oldPropertyType] of oldModel.properties.entries()) {
|
|
@@ -456,22 +466,26 @@ function diffModels(oldModels, newModels, changes) {
|
|
|
456
466
|
}
|
|
457
467
|
if (oldPropertyType !== newPropertyType) {
|
|
458
468
|
const severity = classifyTypeTransition(oldPropertyType, newPropertyType);
|
|
459
|
-
pushChange(changes, severity, 'model.property.type.changed', `#/components/schemas/${modelName}/properties/${propertyName}`, `Property "${propertyName}" type changed in model "${modelName}" from "${oldPropertyType}" to "${newPropertyType}"
|
|
469
|
+
pushChange(changes, severity, 'model.property.type.changed', `#/components/schemas/${modelName}/properties/${propertyName}`, `Property "${propertyName}" type changed in model "${modelName}" from "${oldPropertyType}" to "${newPropertyType}".`, { from: oldPropertyType, to: newPropertyType });
|
|
460
470
|
}
|
|
461
471
|
const wasRequired = oldModel.required.has(propertyName);
|
|
462
472
|
const isRequired = newModel.required.has(propertyName);
|
|
463
473
|
if (wasRequired !== isRequired) {
|
|
464
|
-
pushChange(changes, isRequired ? 'breaking' : 'non-breaking', 'model.property.required.changed', `#/components/schemas/${modelName}/required/${propertyName}`, `Property "${propertyName}" required flag changed in model "${modelName}" from "${wasRequired}" to "${isRequired}"
|
|
474
|
+
pushChange(changes, isRequired ? 'breaking' : 'non-breaking', 'model.property.required.changed', `#/components/schemas/${modelName}/required/${propertyName}`, `Property "${propertyName}" required flag changed in model "${modelName}" from "${wasRequired}" to "${isRequired}".`, { fromRequired: wasRequired, toRequired: isRequired });
|
|
465
475
|
}
|
|
466
476
|
}
|
|
467
477
|
for (const oldEnumValue of oldModel.enumValues) {
|
|
468
478
|
if (!newModel.enumValues.has(oldEnumValue)) {
|
|
469
|
-
pushChange(changes, 'breaking', 'model.enum.value.removed', `#/components/schemas/${modelName}/enum`, `Enum value "${oldEnumValue}" was removed from model "${modelName}"
|
|
479
|
+
pushChange(changes, 'breaking', 'model.enum.value.removed', `#/components/schemas/${modelName}/enum`, `Enum value "${oldEnumValue}" was removed from model "${modelName}".`, {
|
|
480
|
+
from: oldEnumValue,
|
|
481
|
+
});
|
|
470
482
|
}
|
|
471
483
|
}
|
|
472
484
|
for (const newEnumValue of newModel.enumValues) {
|
|
473
485
|
if (!oldModel.enumValues.has(newEnumValue)) {
|
|
474
|
-
pushChange(changes, 'non-breaking', 'model.enum.value.added', `#/components/schemas/${modelName}/enum`, `Enum value "${newEnumValue}" was added to model "${modelName}"
|
|
486
|
+
pushChange(changes, 'non-breaking', 'model.enum.value.added', `#/components/schemas/${modelName}/enum`, `Enum value "${newEnumValue}" was added to model "${modelName}".`, {
|
|
487
|
+
to: newEnumValue,
|
|
488
|
+
});
|
|
475
489
|
}
|
|
476
490
|
}
|
|
477
491
|
}
|
|
@@ -480,9 +494,16 @@ function diffModels(oldModels, newModels, changes) {
|
|
|
480
494
|
* Diffs canonical operations and appends semantic changes.
|
|
481
495
|
*/
|
|
482
496
|
function diffOperations(oldOperations, newOperations, changes) {
|
|
483
|
-
for (const oldOperationKey of oldOperations.
|
|
497
|
+
for (const [oldOperationKey, oldOperation] of oldOperations.entries()) {
|
|
484
498
|
if (!newOperations.has(oldOperationKey)) {
|
|
485
|
-
pushChange(changes, 'breaking', 'operation.removed', `#/paths/${oldOperationKey}`, `Operation "${oldOperationKey}" was removed
|
|
499
|
+
pushChange(changes, 'breaking', 'operation.removed', `#/paths/${oldOperationKey}`, `Operation "${oldOperationKey}" was removed.`, {
|
|
500
|
+
from: {
|
|
501
|
+
operationId: oldOperation.operationId,
|
|
502
|
+
summary: oldOperation.summary,
|
|
503
|
+
description: oldOperation.description,
|
|
504
|
+
tags: oldOperation.tags,
|
|
505
|
+
},
|
|
506
|
+
});
|
|
486
507
|
}
|
|
487
508
|
}
|
|
488
509
|
for (const newOperationKey of newOperations.keys()) {
|
|
@@ -497,12 +518,12 @@ function diffOperations(oldOperations, newOperations, changes) {
|
|
|
497
518
|
}
|
|
498
519
|
for (const oldParameterName of oldOperation.parameters.keys()) {
|
|
499
520
|
if (!newOperation.parameters.has(oldParameterName)) {
|
|
500
|
-
pushChange(changes, 'breaking', 'operation.parameter.removed', `#/paths/${operationKey}/parameters/${oldParameterName}`, `Parameter "${oldParameterName}" was removed from operation "${operationKey}"
|
|
521
|
+
pushChange(changes, 'breaking', 'operation.parameter.removed', `#/paths/${operationKey}/parameters/${oldParameterName}`, `Parameter "${oldParameterName}" was removed from operation "${operationKey}".`, { from: { type: oldOperation.parameters.get(oldParameterName)?.type } });
|
|
501
522
|
}
|
|
502
523
|
}
|
|
503
524
|
for (const [newParameterName, newParameter] of newOperation.parameters.entries()) {
|
|
504
525
|
if (!oldOperation.parameters.has(newParameterName)) {
|
|
505
|
-
pushChange(changes, newParameter.required ? 'breaking' : 'non-breaking', 'operation.parameter.added', `#/paths/${operationKey}/parameters/${newParameterName}`, `Parameter "${newParameterName}" was added to operation "${operationKey}"
|
|
526
|
+
pushChange(changes, newParameter.required ? 'breaking' : 'non-breaking', 'operation.parameter.added', `#/paths/${operationKey}/parameters/${newParameterName}`, `Parameter "${newParameterName}" was added to operation "${operationKey}".`, { to: { type: newParameter.type, required: newParameter.required } });
|
|
506
527
|
}
|
|
507
528
|
}
|
|
508
529
|
for (const [parameterName, oldParameter] of oldOperation.parameters.entries()) {
|
|
@@ -511,15 +532,15 @@ function diffOperations(oldOperations, newOperations, changes) {
|
|
|
511
532
|
continue;
|
|
512
533
|
}
|
|
513
534
|
if (oldParameter.required !== newParameter.required) {
|
|
514
|
-
pushChange(changes, newParameter.required ? 'breaking' : 'non-breaking', 'operation.parameter.required.changed', `#/paths/${operationKey}/parameters/${parameterName}/required`, `Required flag for parameter "${parameterName}" changed in operation "${operationKey}"
|
|
535
|
+
pushChange(changes, newParameter.required ? 'breaking' : 'non-breaking', 'operation.parameter.required.changed', `#/paths/${operationKey}/parameters/${parameterName}/required`, `Required flag for parameter "${parameterName}" changed in operation "${operationKey}".`, { fromRequired: oldParameter.required, toRequired: newParameter.required });
|
|
515
536
|
}
|
|
516
537
|
if (oldParameter.type !== newParameter.type) {
|
|
517
538
|
const severity = classifyTypeTransition(oldParameter.type, newParameter.type);
|
|
518
|
-
pushChange(changes, severity, 'operation.parameter.type.changed', `#/paths/${operationKey}/parameters/${parameterName}/schema`, `Type for parameter "${parameterName}" changed in operation "${operationKey}" from "${oldParameter.type}" to "${newParameter.type}"
|
|
539
|
+
pushChange(changes, severity, 'operation.parameter.type.changed', `#/paths/${operationKey}/parameters/${parameterName}/schema`, `Type for parameter "${parameterName}" changed in operation "${operationKey}" from "${oldParameter.type}" to "${newParameter.type}".`, { from: oldParameter.type, to: newParameter.type });
|
|
519
540
|
}
|
|
520
541
|
}
|
|
521
542
|
if (oldOperation.requestBodyRequired !== newOperation.requestBodyRequired) {
|
|
522
|
-
pushChange(changes, newOperation.requestBodyRequired ? 'breaking' : 'non-breaking', 'operation.requestBody.required.changed', `#/paths/${operationKey}/requestBody/required`, `requestBody.required changed in operation "${operationKey}" from "${oldOperation.requestBodyRequired}" to "${newOperation.requestBodyRequired}"
|
|
543
|
+
pushChange(changes, newOperation.requestBodyRequired ? 'breaking' : 'non-breaking', 'operation.requestBody.required.changed', `#/paths/${operationKey}/requestBody/required`, `requestBody.required changed in operation "${operationKey}" from "${oldOperation.requestBodyRequired}" to "${newOperation.requestBodyRequired}".`, { from: oldOperation.requestBodyRequired, to: newOperation.requestBodyRequired });
|
|
523
544
|
}
|
|
524
545
|
for (const oldResponseCode of oldOperation.successResponses.keys()) {
|
|
525
546
|
if (!newOperation.successResponses.has(oldResponseCode)) {
|
|
@@ -537,7 +558,7 @@ function diffOperations(oldOperations, newOperations, changes) {
|
|
|
537
558
|
continue;
|
|
538
559
|
}
|
|
539
560
|
const severity = classifyTypeTransition(oldResponseType, newResponseType);
|
|
540
|
-
pushChange(changes, severity, 'operation.response.success.type.changed', `#/paths/${operationKey}/responses/${responseCode}/content`, `Successful response "${responseCode}" payload type changed in operation "${operationKey}" from "${oldResponseType}" to "${newResponseType}"
|
|
561
|
+
pushChange(changes, severity, 'operation.response.success.type.changed', `#/paths/${operationKey}/responses/${responseCode}/content`, `Successful response "${responseCode}" payload type changed in operation "${operationKey}" from "${oldResponseType}" to "${newResponseType}".`, { from: oldResponseType, to: newResponseType });
|
|
541
562
|
}
|
|
542
563
|
}
|
|
543
564
|
}
|
|
@@ -598,7 +619,11 @@ function buildSemverRecommendation(summary) {
|
|
|
598
619
|
};
|
|
599
620
|
}
|
|
600
621
|
/**
|
|
601
|
-
*
|
|
622
|
+
* Формирует семантический diff-отчёт между двумя OpenAPI-спецификациями.
|
|
623
|
+
* @param oldSpec базовая спецификация
|
|
624
|
+
* @param newSpec целевая спецификация
|
|
625
|
+
* @param [options] опции анализа, включая governance и разрешение breaking-изменений
|
|
626
|
+
* @returns семантический diff-отчёт
|
|
602
627
|
*/
|
|
603
628
|
function analyzeOpenApiDiff(oldSpec, newSpec, options = {}) {
|
|
604
629
|
const oldModels = buildCanonicalModels(oldSpec);
|
|
@@ -625,7 +650,10 @@ function analyzeOpenApiDiff(oldSpec, newSpec, options = {}) {
|
|
|
625
650
|
};
|
|
626
651
|
}
|
|
627
652
|
/**
|
|
628
|
-
*
|
|
653
|
+
* Записывает семантический или унифицированный diff-отчёт в JSON-файл.
|
|
654
|
+
* @param report отчёт для сохранения
|
|
655
|
+
* @param reportFilePath путь к файлу отчёта
|
|
656
|
+
* @returns абсолютный путь к сохранённому файлу
|
|
629
657
|
*/
|
|
630
658
|
async function writeSemanticDiffReport(report, reportFilePath) {
|
|
631
659
|
const resolvedPath = (0, pathHelpers_1.resolveHelper)(process.cwd(), reportFilePath);
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
import { JSONSchema7 } from 'json-schema';
|
|
2
|
+
/**
|
|
3
|
+
* Результат валидации diff-отчёта по JSON Schema.
|
|
4
|
+
* @property valid признак успешной валидации
|
|
5
|
+
* @property errors список ошибок валидации
|
|
6
|
+
*/
|
|
2
7
|
export type SemanticDiffReportSchemaValidationResult = {
|
|
3
8
|
valid: boolean;
|
|
4
9
|
errors: string[];
|
|
5
10
|
};
|
|
11
|
+
/** JSON Schema контракт унифицированного diff-отчёта. */
|
|
6
12
|
export declare const semanticDiffReportJsonSchema: JSONSchema7;
|
|
7
13
|
/**
|
|
8
|
-
*
|
|
14
|
+
* Валидирует payload diff-отчёта по JSON Schema контракту.
|
|
15
|
+
* @param report проверяемый отчёт
|
|
16
|
+
* @returns результат валидации с перечнем ошибок
|
|
9
17
|
*/
|
|
10
18
|
export declare function validateSemanticDiffReportSchema(report: unknown): SemanticDiffReportSchemaValidationResult;
|
|
11
19
|
//# sourceMappingURL=semanticDiffReportSchema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semanticDiffReportSchema.d.ts","sourceRoot":"","sources":["../../../src/core/semanticDiff/semanticDiffReportSchema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1C,MAAM,MAAM,wCAAwC,GAAG;IACnD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,4BAA4B,EAAE,
|
|
1
|
+
{"version":3,"file":"semanticDiffReportSchema.d.ts","sourceRoot":"","sources":["../../../src/core/semanticDiff/semanticDiffReportSchema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1C;;;;GAIG;AACH,MAAM,MAAM,wCAAwC,GAAG;IACnD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,4BAA4B,EAAE,WA8L1C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,OAAO,GAAG,wCAAwC,CAc1G"}
|