ts-openapi-codegen 2.1.0-beta.1 → 2.1.0-beta.10
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 +27 -934
- package/README.rus.md +27 -934
- package/dist/cli/analyzeDiff/__tests__/analyzeDiff.cli.test.js +40 -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 +17 -7
- package/dist/cli/analyzeDiff/__tests__/analyzeDiffTypeCoercion.test.js +17 -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 +58 -15
- 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 -22
- package/dist/cli/analyzeDiff/ignoreRules.d.ts.map +1 -1
- package/dist/cli/analyzeDiff/ignoreRules.js +3 -25
- package/dist/cli/analyzeDiff/miracles.d.ts +0 -54
- package/dist/cli/analyzeDiff/miracles.d.ts.map +1 -1
- package/dist/cli/analyzeDiff/miracles.js +1 -219
- package/dist/cli/analyzeDiff/specParser.d.ts +0 -13
- package/dist/cli/analyzeDiff/specParser.d.ts.map +1 -1
- package/dist/cli/analyzeDiff/specParser.js +2 -23
- package/dist/cli/analyzeDiff/types.d.ts +0 -42
- package/dist/cli/analyzeDiff/types.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/analyzeUsage.d.ts +4 -0
- package/dist/cli/analyzeUsage/analyzeUsage.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/analyzeUsage.js +60 -0
- package/dist/cli/analyzeUsage/core/Analyzer.d.ts +9 -0
- package/dist/cli/analyzeUsage/core/Analyzer.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/core/Analyzer.js +29 -0
- package/dist/cli/analyzeUsage/core/ProjectContext.d.ts +10 -0
- package/dist/cli/analyzeUsage/core/ProjectContext.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/core/ProjectContext.js +58 -0
- package/dist/cli/analyzeUsage/core/Scanner.d.ts +23 -0
- package/dist/cli/analyzeUsage/core/Scanner.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/core/Scanner.js +125 -0
- package/dist/cli/analyzeUsage/rules/ClientRule.d.ts +14 -0
- package/dist/cli/analyzeUsage/rules/ClientRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/ClientRule.js +86 -0
- package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts +7 -0
- package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/CoverageRule.js +55 -0
- package/dist/cli/analyzeUsage/rules/DiagnosticsRule.d.ts +6 -0
- package/dist/cli/analyzeUsage/rules/DiagnosticsRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/DiagnosticsRule.js +63 -0
- package/dist/cli/analyzeUsage/rules/ImportRule.d.ts +6 -0
- package/dist/cli/analyzeUsage/rules/ImportRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/ImportRule.js +50 -0
- package/dist/cli/analyzeUsage/rules/ModelRule.d.ts +6 -0
- package/dist/cli/analyzeUsage/rules/ModelRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/ModelRule.js +34 -0
- package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts +6 -0
- package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/SchemaRule.js +46 -0
- package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts +15 -0
- package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/ServiceRule.js +96 -0
- package/dist/cli/analyzeUsage/types.d.ts +52 -0
- package/dist/cli/analyzeUsage/types.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/types.js +2 -0
- package/dist/cli/analyzeUsage/utils/fuzzy.d.ts +5 -0
- package/dist/cli/analyzeUsage/utils/fuzzy.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/utils/fuzzy.js +38 -0
- package/dist/cli/analyzeUsage/utils/report.d.ts +16 -0
- package/dist/cli/analyzeUsage/utils/report.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/utils/report.js +85 -0
- package/dist/cli/checkAndUpdateConfig/__tests__/checkConfig.test.d.ts +2 -0
- package/dist/cli/checkAndUpdateConfig/__tests__/checkConfig.test.d.ts.map +1 -0
- package/dist/cli/checkAndUpdateConfig/__tests__/checkConfig.test.js +53 -0
- package/dist/cli/checkAndUpdateConfig/__tests__/updateConfig.test.d.ts +2 -0
- package/dist/cli/checkAndUpdateConfig/__tests__/updateConfig.test.d.ts.map +1 -0
- package/dist/cli/checkAndUpdateConfig/__tests__/updateConfig.test.js +52 -0
- package/dist/cli/checkAndUpdateConfig/checkConfig.d.ts +2 -1
- package/dist/cli/checkAndUpdateConfig/checkConfig.d.ts.map +1 -1
- package/dist/cli/checkAndUpdateConfig/checkConfig.js +15 -6
- package/dist/cli/checkAndUpdateConfig/updateConfig.d.ts +2 -1
- package/dist/cli/checkAndUpdateConfig/updateConfig.d.ts.map +1 -1
- package/dist/cli/checkAndUpdateConfig/updateConfig.js +8 -5
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/prepareConfigData.test.d.ts +2 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/prepareConfigData.test.d.ts.map +1 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/prepareConfigData.test.js +20 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/removeDefaultConfigValues.test.d.ts +2 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/removeDefaultConfigValues.test.d.ts.map +1 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/removeDefaultConfigValues.test.js +35 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/validateAndMigrateConfigData.test.d.ts +2 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/validateAndMigrateConfigData.test.d.ts.map +1 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/validateAndMigrateConfigData.test.js +59 -0
- 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 +19 -1
- package/dist/cli/checkAndUpdateConfig/utils/validateExecutorSetup.d.ts +6 -0
- package/dist/cli/checkAndUpdateConfig/utils/validateExecutorSetup.d.ts.map +1 -0
- package/dist/cli/checkAndUpdateConfig/utils/validateExecutorSetup.js +55 -0
- 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/__tests__/generateOpenApiClient.strict.test.js +18 -9
- package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts +2 -5
- package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts.map +1 -1
- package/dist/cli/generateOpenApiClient/generateOpenApiClient.js +24 -20
- package/dist/cli/index.js +45 -9
- package/dist/cli/initOpenApiConfig/Types.d.ts +2 -0
- package/dist/cli/initOpenApiConfig/Types.d.ts.map +1 -1
- package/dist/cli/initOpenApiConfig/__tests__/init.test.d.ts +2 -0
- package/dist/cli/initOpenApiConfig/__tests__/init.test.d.ts.map +1 -0
- package/dist/cli/initOpenApiConfig/__tests__/init.test.js +20 -0
- package/dist/cli/initOpenApiConfig/__tests__/initConfig.test.d.ts +2 -0
- package/dist/cli/initOpenApiConfig/__tests__/initConfig.test.d.ts.map +1 -0
- package/dist/cli/initOpenApiConfig/__tests__/initConfig.test.js +49 -0
- package/dist/cli/initOpenApiConfig/init.d.ts +2 -1
- package/dist/cli/initOpenApiConfig/init.d.ts.map +1 -1
- package/dist/cli/initOpenApiConfig/init.js +52 -20
- package/dist/cli/initOpenApiConfig/initConfig.d.ts +5 -0
- package/dist/cli/initOpenApiConfig/initConfig.d.ts.map +1 -1
- package/dist/cli/initOpenApiConfig/initConfig.js +8 -4
- package/dist/cli/initOpenApiConfig/initCustomRequest.d.ts +3 -2
- package/dist/cli/initOpenApiConfig/initCustomRequest.d.ts.map +1 -1
- package/dist/cli/initOpenApiConfig/initCustomRequest.js +36 -10
- package/dist/cli/initOpenApiConfig/utils/__tests__/buildConfig.test.d.ts +2 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/buildConfig.test.d.ts.map +1 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/buildConfig.test.js +93 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/findSpecFiles.test.d.ts +2 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/findSpecFiles.test.d.ts.map +1 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/findSpecFiles.test.js +45 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/validateSpecFiles.test.d.ts +2 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/validateSpecFiles.test.d.ts.map +1 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/validateSpecFiles.test.js +61 -0
- package/dist/cli/initOpenApiConfig/utils/buildConfig.d.ts +6 -12
- package/dist/cli/initOpenApiConfig/utils/buildConfig.d.ts.map +1 -1
- package/dist/cli/initOpenApiConfig/utils/buildConfig.js +24 -19
- package/dist/cli/initOpenApiConfig/utils/registerHandlebarTemplates.d.ts.map +1 -1
- package/dist/cli/initOpenApiConfig/utils/registerHandlebarTemplates.js +2 -0
- 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 +2 -1
- package/dist/cli/previewChanges/previewChanges.d.ts.map +1 -1
- package/dist/cli/previewChanges/previewChanges.js +8 -8
- package/dist/cli/previewChanges/utils/__tests__/compareFiles.test.d.ts +2 -0
- package/dist/cli/previewChanges/utils/__tests__/compareFiles.test.d.ts.map +1 -0
- package/dist/cli/previewChanges/utils/__tests__/compareFiles.test.js +52 -0
- package/dist/cli/previewChanges/utils/__tests__/isDirectoryEmpty.test.d.ts +2 -0
- package/dist/cli/previewChanges/utils/__tests__/isDirectoryEmpty.test.d.ts.map +1 -0
- package/dist/cli/previewChanges/utils/__tests__/isDirectoryEmpty.test.js +43 -0
- package/dist/cli/previewChanges/utils/__tests__/readDirectoryRecursive.test.d.ts +2 -0
- package/dist/cli/previewChanges/utils/__tests__/readDirectoryRecursive.test.d.ts.map +1 -0
- package/dist/cli/previewChanges/utils/__tests__/readDirectoryRecursive.test.js +32 -0
- package/dist/cli/previewChanges/utils/__tests__/updateOutputPaths.test.d.ts +2 -0
- package/dist/cli/previewChanges/utils/__tests__/updateOutputPaths.test.d.ts.map +1 -0
- package/dist/cli/previewChanges/utils/__tests__/updateOutputPaths.test.js +68 -0
- 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/__tests__/checkConfigAndUpdate.test.d.ts +2 -0
- package/dist/cli/schemas/__tests__/checkConfigAndUpdate.test.d.ts.map +1 -0
- package/dist/cli/schemas/__tests__/checkConfigAndUpdate.test.js +36 -0
- package/dist/cli/schemas/__tests__/generateOptionsSchema.test.d.ts +2 -0
- package/dist/cli/schemas/__tests__/generateOptionsSchema.test.d.ts.map +1 -0
- package/dist/cli/schemas/__tests__/generateOptionsSchema.test.js +59 -0
- package/dist/cli/schemas/__tests__/initOptionsSchema.test.d.ts +2 -0
- package/dist/cli/schemas/__tests__/initOptionsSchema.test.d.ts.map +1 -0
- package/dist/cli/schemas/__tests__/initOptionsSchema.test.js +43 -0
- package/dist/cli/schemas/__tests__/previewChangesSchema.test.d.ts +2 -0
- package/dist/cli/schemas/__tests__/previewChangesSchema.test.d.ts.map +1 -0
- package/dist/cli/schemas/__tests__/previewChangesSchema.test.js +31 -0
- package/dist/cli/schemas/analyzeUsage.d.ts +13 -0
- package/dist/cli/schemas/analyzeUsage.d.ts.map +1 -0
- package/dist/cli/schemas/analyzeUsage.js +41 -0
- package/dist/cli/schemas/generate.d.ts +10 -2
- package/dist/cli/schemas/generate.d.ts.map +1 -1
- package/dist/cli/schemas/generate.js +7 -2
- package/dist/cli/schemas/index.d.ts +2 -2
- package/dist/cli/schemas/index.d.ts.map +1 -1
- package/dist/cli/schemas/index.js +1 -1
- package/dist/cli/schemas/init.d.ts +10 -0
- package/dist/cli/schemas/init.d.ts.map +1 -1
- package/dist/cli/schemas/init.js +3 -1
- package/dist/cli/types.d.ts +6 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/common/Consts.d.ts +1 -0
- package/dist/common/Consts.d.ts.map +1 -1
- package/dist/common/Consts.js +7 -3
- package/dist/common/Logger.d.ts.map +1 -1
- package/dist/common/Logger.js +3 -3
- package/dist/common/LoggerMessages.d.ts +71 -12
- package/dist/common/LoggerMessages.d.ts.map +1 -1
- package/dist/common/LoggerMessages.js +76 -18
- 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 +10 -2
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.js +15 -5
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts +18 -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 +7 -1
- 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 +4 -6
- 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 +6 -8
- 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 +27 -1
- package/dist/core/OpenApiClient.d.ts.map +1 -1
- package/dist/core/OpenApiClient.js +259 -19
- package/dist/core/WriteClient.d.ts +84 -17
- package/dist/core/WriteClient.d.ts.map +1 -1
- package/dist/core/WriteClient.js +96 -22
- package/dist/core/__tests__/WriteClient.test.js +2 -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/plugins/getBuiltinPlugins.d.ts.map +1 -1
- package/dist/core/plugins/loadGeneratorPlugins.d.ts.map +1 -1
- package/dist/core/plugins/loadGeneratorPlugins.js +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 +8 -3
- package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts.map +1 -1
- package/dist/core/semanticDiff/semanticDiffReportSchema.js +139 -56
- 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/base/Templates.model.d.ts +1 -0
- package/dist/core/types/base/Templates.model.d.ts.map +1 -1
- package/dist/core/types/shared/Client.model.d.ts +1 -1
- package/dist/core/types/shared/Client.model.d.ts.map +1 -1
- package/dist/core/types/shared/Model.model.d.ts +37 -1
- package/dist/core/types/shared/Model.model.d.ts.map +1 -1
- package/dist/core/utils/GenerationCache.d.ts +18 -0
- package/dist/core/utils/GenerationCache.d.ts.map +1 -0
- package/dist/core/utils/GenerationCache.js +41 -0
- package/dist/core/utils/__mocks__/templates.d.ts.map +1 -1
- package/dist/core/utils/__mocks__/templates.js +1 -0
- package/dist/core/utils/__tests__/GenerationCache.test.d.ts +2 -0
- package/dist/core/utils/__tests__/GenerationCache.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/GenerationCache.test.js +37 -0
- 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.d.ts +2 -0
- package/dist/core/utils/__tests__/loadDiffReport.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/loadDiffReport.test.js +246 -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 +168 -1
- 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.d.ts +2 -0
- package/dist/core/utils/__tests__/templateRendering.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/templateRendering.test.js +190 -0
- package/dist/core/utils/__tests__/writeFileIfChanged.test.d.ts +2 -0
- package/dist/core/utils/__tests__/writeFileIfChanged.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/writeFileIfChanged.test.js +30 -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 +3 -0
- package/dist/core/utils/adapters/index.d.ts.map +1 -0
- package/dist/core/utils/adapters/index.js +6 -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/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 +6 -0
- package/dist/core/utils/getOpenApiSpec.d.ts.map +1 -1
- package/dist/core/utils/getOpenApiSpec.js +6 -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 +75 -9
- 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 +4 -2
- 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 +57 -20
- 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/registerHandlebarTemplates.js +2 -0
- 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 +28 -0
- package/dist/core/utils/semanticChangesToDiffEntries.d.ts.map +1 -0
- package/dist/core/utils/semanticChangesToDiffEntries.js +98 -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/validateRawOptions.js +2 -2
- package/dist/core/utils/writeClientCore.d.ts +2 -0
- package/dist/core/utils/writeClientCore.d.ts.map +1 -1
- package/dist/core/utils/writeClientCore.js +43 -21
- package/dist/core/utils/writeClientCoreIndex.d.ts.map +1 -1
- package/dist/core/utils/writeClientCoreIndex.js +14 -4
- package/dist/core/utils/writeClientExecutor.d.ts +1 -3
- package/dist/core/utils/writeClientExecutor.d.ts.map +1 -1
- package/dist/core/utils/writeClientExecutor.js +6 -11
- package/dist/core/utils/writeClientFullIndex.js +4 -4
- 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 +14 -16
- package/dist/core/utils/writeClientModelsIndex.d.ts +1 -1
- package/dist/core/utils/writeClientModelsIndex.d.ts.map +1 -1
- package/dist/core/utils/writeClientModelsIndex.js +14 -4
- 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 +9 -14
- package/dist/core/utils/writeClientSchemasIndex.d.ts.map +1 -1
- package/dist/core/utils/writeClientSchemasIndex.js +14 -4
- 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 +12 -19
- package/dist/core/utils/writeClientServicesIndex.d.ts.map +1 -1
- package/dist/core/utils/writeClientServicesIndex.js +14 -4
- package/dist/core/utils/writeClientSimpleIndex.js +4 -4
- package/dist/core/utils/writeFileIfChanged.d.ts +3 -0
- package/dist/core/utils/writeFileIfChanged.d.ts.map +1 -0
- package/dist/core/utils/writeFileIfChanged.js +22 -0
- package/dist/templatesCompiled/cli/customCreateExecutorAdapter.d.ts +8 -0
- package/dist/templatesCompiled/cli/customCreateExecutorAdapter.d.ts.map +1 -0
- package/dist/templatesCompiled/cli/customCreateExecutorAdapter.js +18 -0
- package/dist/templatesCompiled/cli/customRequest.js +7 -7
- package/dist/templatesCompiled/cli/customRequestExecutor.js +7 -7
- package/dist/templatesCompiled/client/core/ApiError.js +1 -1
- package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.d.ts +0 -6
- package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.d.ts.map +1 -1
- package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.js +3 -22
- package/dist/templatesCompiled/client/core/executor/legacyRequestAdapter.d.ts +11 -0
- package/dist/templatesCompiled/client/core/executor/legacyRequestAdapter.d.ts.map +1 -0
- package/dist/templatesCompiled/client/core/executor/legacyRequestAdapter.js +28 -0
- package/dist/templatesCompiled/client/core/executor/requestExecutor.d.ts +2 -0
- package/dist/templatesCompiled/client/core/executor/requestExecutor.d.ts.map +1 -1
- package/dist/templatesCompiled/client/core/executor/requestExecutor.js +8 -2
- package/dist/templatesCompiled/client/core/functions/catchErrors.js +1 -1
- package/dist/templatesCompiled/client/core/interceptors/apiErrorInterceptor.js +1 -1
- package/dist/templatesCompiled/client/core/interceptors/interceptors.js +1 -1
- package/dist/templatesCompiled/client/core/interceptors/withInterceptors.js +1 -1
- package/dist/templatesCompiled/client/exportClient.d.ts +0 -4
- package/dist/templatesCompiled/client/exportClient.d.ts.map +1 -1
- package/dist/templatesCompiled/client/exportClient.js +9 -45
- 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/indexCore.js +4 -4
- package/dist/templatesCompiled/client/indexFull.js +8 -8
- package/dist/templatesCompiled/client/indexSimple.js +2 -2
- 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/dist/test/helpers/silenceLoggers.d.ts +11 -0
- package/dist/test/helpers/silenceLoggers.d.ts.map +1 -0
- package/dist/test/helpers/silenceLoggers.js +88 -0
- package/package.json +132 -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
- package/dist/cli/analyzeDiff/logLegacyReport.d.ts +0 -6
- package/dist/cli/analyzeDiff/logLegacyReport.d.ts.map +0 -1
- package/dist/cli/analyzeDiff/logLegacyReport.js +0 -29
- package/dist/cli/analyzeDiff/report.d.ts +0 -3
- package/dist/cli/analyzeDiff/report.d.ts.map +0 -1
- package/dist/cli/analyzeDiff/report.js +0 -7
- package/dist/cli/analyzeDiff/writeLegacyReport.d.ts +0 -6
- package/dist/cli/analyzeDiff/writeLegacyReport.d.ts.map +0 -1
- package/dist/cli/analyzeDiff/writeLegacyReport.js +0 -21
- package/dist/common/VersionedSchema/refinements/singleOrMultiRefinement.d.ts +0 -4
- package/dist/common/VersionedSchema/refinements/singleOrMultiRefinement.d.ts.map +0 -1
- package/dist/common/VersionedSchema/refinements/singleOrMultiRefinement.js +0 -21
- package/dist/common/utils/normalizeObject.d.ts +0 -2
- package/dist/common/utils/normalizeObject.d.ts.map +0 -1
- package/dist/common/utils/normalizeObject.js +0 -63
- package/dist/core/utils/appendUniqueLinesToFile.d.ts +0 -2
- package/dist/core/utils/appendUniqueLinesToFile.d.ts.map +0 -1
- package/dist/core/utils/appendUniqueLinesToFile.js +0 -24
|
@@ -9,6 +9,7 @@ const node_path_1 = __importDefault(require("node:path"));
|
|
|
9
9
|
const node_test_1 = require("node:test");
|
|
10
10
|
const LoggerMessages_1 = require("../../../common/LoggerMessages");
|
|
11
11
|
const semanticDiffReportSchema_1 = require("../../../core/semanticDiff/semanticDiffReportSchema");
|
|
12
|
+
const silenceLoggers_1 = require("../../../test/helpers/silenceLoggers");
|
|
12
13
|
const analyzeDiff_1 = require("../analyzeDiff");
|
|
13
14
|
const ciSummary_1 = require("../ciSummary");
|
|
14
15
|
const repoRoot = node_path_1.default.join(__dirname, '..', '..', '..', '..');
|
|
@@ -29,6 +30,14 @@ async function runAnalyzeDiffCli(options) {
|
|
|
29
30
|
};
|
|
30
31
|
}
|
|
31
32
|
(0, node_test_1.describe)('@unit: analyzeDiff cli', () => {
|
|
33
|
+
let restoreAppLogger;
|
|
34
|
+
(0, node_test_1.beforeEach)(() => {
|
|
35
|
+
restoreAppLogger = (0, silenceLoggers_1.installSilenceAppLogger)();
|
|
36
|
+
});
|
|
37
|
+
(0, node_test_1.afterEach)(() => {
|
|
38
|
+
restoreAppLogger?.();
|
|
39
|
+
restoreAppLogger = undefined;
|
|
40
|
+
});
|
|
32
41
|
(0, node_test_1.test)('returns exit code 0 and skips when --input has no base source', async (t) => {
|
|
33
42
|
const tempDir = createTempDir(t, 'openapi-cli-analyze-skip-');
|
|
34
43
|
const reportPath = node_path_1.default.join(tempDir, 'report.json');
|
|
@@ -102,12 +111,13 @@ async function runAnalyzeDiffCli(options) {
|
|
|
102
111
|
const report = JSON.parse((0, node_fs_1.readFileSync)(reportPath, 'utf8'));
|
|
103
112
|
const schemaValidation = (0, semanticDiffReportSchema_1.validateSemanticDiffReportSchema)(report);
|
|
104
113
|
node_assert_1.default.strictEqual(schemaValidation.valid, true, schemaValidation.errors.join('\n'));
|
|
105
|
-
node_assert_1.default.strictEqual(report.schemaVersion, '
|
|
106
|
-
node_assert_1.default.strictEqual(report.summary.breaking, 0);
|
|
107
|
-
node_assert_1.default.ok(report.summary.nonBreaking > 0);
|
|
108
|
-
node_assert_1.default.strictEqual(report.recommendation.semver, 'minor');
|
|
109
|
-
node_assert_1.default.ok(report.recommendation.reasons.includes('HAS_BACKWARD_COMPATIBLE_CHANGES'));
|
|
110
|
-
node_assert_1.default.strictEqual(report.governance.summary.errors, 0);
|
|
114
|
+
node_assert_1.default.strictEqual(report.schemaVersion, '2.0.0');
|
|
115
|
+
node_assert_1.default.strictEqual(report.semantic.summary.breaking, 0);
|
|
116
|
+
node_assert_1.default.ok(report.semantic.summary.nonBreaking > 0);
|
|
117
|
+
node_assert_1.default.strictEqual(report.semantic.recommendation.semver, 'minor');
|
|
118
|
+
node_assert_1.default.ok(report.semantic.recommendation.reasons.includes('HAS_BACKWARD_COMPATIBLE_CHANGES'));
|
|
119
|
+
node_assert_1.default.strictEqual(report.semantic.governance.summary.errors, 0);
|
|
120
|
+
node_assert_1.default.strictEqual(report.structural.diff.all.length, report.semantic.changes.length);
|
|
111
121
|
const ciSummary = (0, ciSummary_1.formatCiMarkdownSummary)(report, reportPath);
|
|
112
122
|
node_assert_1.default.ok(ciSummary.includes('### OpenAPI Semantic Diff'));
|
|
113
123
|
node_assert_1.default.ok(ciSummary.includes('HAS_BACKWARD_COMPATIBLE_CHANGES'));
|
|
@@ -145,12 +155,12 @@ async function runAnalyzeDiffCli(options) {
|
|
|
145
155
|
const report = JSON.parse((0, node_fs_1.readFileSync)(reportPath, 'utf8'));
|
|
146
156
|
const schemaValidation = (0, semanticDiffReportSchema_1.validateSemanticDiffReportSchema)(report);
|
|
147
157
|
node_assert_1.default.strictEqual(schemaValidation.valid, true, schemaValidation.errors.join('\n'));
|
|
148
|
-
node_assert_1.default.strictEqual(report.schemaVersion, '
|
|
149
|
-
node_assert_1.default.ok(report.summary.breaking > 0);
|
|
150
|
-
node_assert_1.default.ok(report.changes.some(change => change.severity === 'breaking'));
|
|
151
|
-
node_assert_1.default.strictEqual(report.recommendation.semver, 'major');
|
|
152
|
-
node_assert_1.default.ok(report.recommendation.reasons.includes('HAS_BREAKING_CHANGES'));
|
|
153
|
-
node_assert_1.default.ok(report.governance.violations.some(violation => violation.ruleId === 'NO_BREAKING_WITHOUT_FLAG'));
|
|
158
|
+
node_assert_1.default.strictEqual(report.schemaVersion, '2.0.0');
|
|
159
|
+
node_assert_1.default.ok(report.semantic.summary.breaking > 0);
|
|
160
|
+
node_assert_1.default.ok(report.semantic.changes.some(change => change.severity === 'breaking'));
|
|
161
|
+
node_assert_1.default.strictEqual(report.semantic.recommendation.semver, 'major');
|
|
162
|
+
node_assert_1.default.ok(report.semantic.recommendation.reasons.includes('HAS_BREAKING_CHANGES'));
|
|
163
|
+
node_assert_1.default.ok(report.semantic.governance.violations.some(violation => violation.ruleId === 'NO_BREAKING_WITHOUT_FLAG'));
|
|
154
164
|
const ciSummary = (0, ciSummary_1.formatCiMarkdownSummary)(report, reportPath);
|
|
155
165
|
node_assert_1.default.ok(ciSummary.includes('### OpenAPI Semantic Diff'));
|
|
156
166
|
node_assert_1.default.ok(ciSummary.includes('HAS_BREAKING_CHANGES'));
|
|
@@ -190,9 +200,9 @@ async function runAnalyzeDiffCli(options) {
|
|
|
190
200
|
const report = JSON.parse((0, node_fs_1.readFileSync)(reportPath, 'utf8'));
|
|
191
201
|
const schemaValidation = (0, semanticDiffReportSchema_1.validateSemanticDiffReportSchema)(report);
|
|
192
202
|
node_assert_1.default.strictEqual(schemaValidation.valid, true, schemaValidation.errors.join('\n'));
|
|
193
|
-
node_assert_1.default.strictEqual(report.schemaVersion, '
|
|
194
|
-
node_assert_1.default.ok(report.summary.breaking > 0);
|
|
195
|
-
node_assert_1.default.ok(!report.governance.violations.some(violation => violation.ruleId === 'NO_BREAKING_WITHOUT_FLAG'));
|
|
203
|
+
node_assert_1.default.strictEqual(report.schemaVersion, '2.0.0');
|
|
204
|
+
node_assert_1.default.ok(report.semantic.summary.breaking > 0);
|
|
205
|
+
node_assert_1.default.ok(!report.semantic.governance.violations.some(violation => violation.ruleId === 'NO_BREAKING_WITHOUT_FLAG'));
|
|
196
206
|
node_assert_1.default.ok((0, ciSummary_1.formatCiMarkdownSummary)(report, reportPath).includes('### OpenAPI Semantic Diff'));
|
|
197
207
|
});
|
|
198
208
|
(0, node_test_1.test)('returns exit code 0 for breaking diff in ci mode when governance config disables no-breaking rule', async (t) => {
|
|
@@ -238,9 +248,9 @@ async function runAnalyzeDiffCli(options) {
|
|
|
238
248
|
const report = JSON.parse((0, node_fs_1.readFileSync)(reportPath, 'utf8'));
|
|
239
249
|
const schemaValidation = (0, semanticDiffReportSchema_1.validateSemanticDiffReportSchema)(report);
|
|
240
250
|
node_assert_1.default.strictEqual(schemaValidation.valid, true, schemaValidation.errors.join('\n'));
|
|
241
|
-
node_assert_1.default.strictEqual(report.schemaVersion, '
|
|
242
|
-
node_assert_1.default.ok(report.summary.breaking > 0);
|
|
243
|
-
node_assert_1.default.ok(!report.governance.violations.some(violation => violation.ruleId === 'NO_BREAKING_WITHOUT_FLAG'));
|
|
251
|
+
node_assert_1.default.strictEqual(report.schemaVersion, '2.0.0');
|
|
252
|
+
node_assert_1.default.ok(report.semantic.summary.breaking > 0);
|
|
253
|
+
node_assert_1.default.ok(!report.semantic.governance.violations.some(violation => violation.ruleId === 'NO_BREAKING_WITHOUT_FLAG'));
|
|
244
254
|
node_assert_1.default.ok((0, ciSummary_1.formatCiMarkdownSummary)(report, reportPath).includes('### OpenAPI Semantic Diff'));
|
|
245
255
|
});
|
|
246
256
|
(0, node_test_1.test)('uses --compare-with over --git when both flags are provided', async (t) => {
|
|
@@ -284,8 +294,8 @@ async function runAnalyzeDiffCli(options) {
|
|
|
284
294
|
node_assert_1.default.strictEqual(exitCode, 0);
|
|
285
295
|
node_assert_1.default.strictEqual(result.success, true);
|
|
286
296
|
const report = JSON.parse((0, node_fs_1.readFileSync)(reportPath, 'utf8'));
|
|
287
|
-
node_assert_1.default.strictEqual(report.summary.breaking, 0);
|
|
288
|
-
node_assert_1.default.strictEqual(report.recommendation.semver, 'patch');
|
|
297
|
+
node_assert_1.default.strictEqual(report.semantic.summary.breaking, 0);
|
|
298
|
+
node_assert_1.default.strictEqual(report.semantic.recommendation.semver, 'patch');
|
|
289
299
|
node_assert_1.default.ok(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.COMPARE_WITH_OVERRIDES_GIT('HEAD~9999').includes('Ignoring git ref'));
|
|
290
300
|
});
|
|
291
301
|
(0, node_test_1.test)('filters semantic changes with analyze.ignore and recalculates summary', async (t) => {
|
|
@@ -346,10 +356,10 @@ async function runAnalyzeDiffCli(options) {
|
|
|
346
356
|
node_assert_1.default.strictEqual(exitCode, 0);
|
|
347
357
|
node_assert_1.default.strictEqual(result.ignored, 1);
|
|
348
358
|
const report = JSON.parse((0, node_fs_1.readFileSync)(reportPath, 'utf8'));
|
|
349
|
-
node_assert_1.default.strictEqual(report.summary.breaking, 0);
|
|
350
|
-
node_assert_1.default.strictEqual(report.summary.nonBreaking, 0);
|
|
351
|
-
node_assert_1.default.strictEqual(report.summary.informational, 0);
|
|
352
|
-
node_assert_1.default.strictEqual(report.recommendation.semver, 'patch');
|
|
359
|
+
node_assert_1.default.strictEqual(report.semantic.summary.breaking, 0);
|
|
360
|
+
node_assert_1.default.strictEqual(report.semantic.summary.nonBreaking, 0);
|
|
361
|
+
node_assert_1.default.strictEqual(report.semantic.summary.informational, 0);
|
|
362
|
+
node_assert_1.default.strictEqual(report.semantic.recommendation.semver, 'patch');
|
|
353
363
|
node_assert_1.default.ok(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.IGNORED_CHANGES(1).includes('IGNORED: 1 semantic change'));
|
|
354
364
|
});
|
|
355
365
|
(0, node_test_1.test)('fails when --input is missing', async () => {
|
|
@@ -362,4 +372,10 @@ async function runAnalyzeDiffCli(options) {
|
|
|
362
372
|
node_assert_1.default.strictEqual((0, analyzeDiff_1.toAnalyzeDiffExitCode)(result), 1);
|
|
363
373
|
node_assert_1.default.ok(result.error?.includes('"--input" is required for analyze-diff command'));
|
|
364
374
|
});
|
|
375
|
+
(0, node_test_1.test)('uses semantic ref expansion instead of full dereference in the analyze hot path', () => {
|
|
376
|
+
const source = (0, node_fs_1.readFileSync)(node_path_1.default.join(__dirname, '..', 'analyzeDiff.ts'), 'utf8');
|
|
377
|
+
node_assert_1.default.ok(source.includes('loadSemanticOpenApiSpec'));
|
|
378
|
+
node_assert_1.default.ok(!source.includes('dereferenceOpenApiSpec'));
|
|
379
|
+
node_assert_1.default.ok(!source.includes('dereferenceOpenApiObject'));
|
|
380
|
+
});
|
|
365
381
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzeDiffLomMiracles.test.d.ts","sourceRoot":"","sources":["../../../../src/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const node_test_1 = require("node:test");
|
|
10
|
+
const silenceLoggers_1 = require("../../../test/helpers/silenceLoggers");
|
|
11
|
+
const analyzeDiff_1 = require("../analyzeDiff");
|
|
12
|
+
const generatedRoot = node_path_1.default.join(__dirname, 'generated');
|
|
13
|
+
const createTempDir = (t, prefix) => {
|
|
14
|
+
node_fs_1.default.mkdirSync(generatedRoot, { recursive: true });
|
|
15
|
+
const tempDir = node_fs_1.default.mkdtempSync(node_path_1.default.join(generatedRoot, prefix));
|
|
16
|
+
t.after(() => {
|
|
17
|
+
node_fs_1.default.rmSync(tempDir, { recursive: true, force: true });
|
|
18
|
+
});
|
|
19
|
+
return tempDir;
|
|
20
|
+
};
|
|
21
|
+
(0, node_test_1.describe)('@unit: analyzeDiff lom miracles', () => {
|
|
22
|
+
let restoreAppLogger;
|
|
23
|
+
(0, node_test_1.beforeEach)(() => {
|
|
24
|
+
restoreAppLogger = (0, silenceLoggers_1.installSilenceAppLogger)();
|
|
25
|
+
});
|
|
26
|
+
(0, node_test_1.afterEach)(() => {
|
|
27
|
+
restoreAppLogger?.();
|
|
28
|
+
restoreAppLogger = undefined;
|
|
29
|
+
});
|
|
30
|
+
(0, node_test_1.test)('builds changes and miracles for lom v1 vs v2 specs', async (t) => {
|
|
31
|
+
const tmpDir = createTempDir(t, 'lom-diff-');
|
|
32
|
+
const reportPath = node_path_1.default.join(tmpDir, 'report.json');
|
|
33
|
+
const specRoot = node_path_1.default.join(__dirname, '../../../../test/spec/lom');
|
|
34
|
+
const result = await (0, analyzeDiff_1.analyzeDiff)({
|
|
35
|
+
input: node_path_1.default.join(specRoot, 'lom_api.v2.yaml'),
|
|
36
|
+
compareWith: node_path_1.default.join(specRoot, 'lom_api.v1.yaml'),
|
|
37
|
+
outputReport: reportPath,
|
|
38
|
+
});
|
|
39
|
+
node_assert_1.default.ok(result.success, result.error);
|
|
40
|
+
const report = JSON.parse(node_fs_1.default.readFileSync(reportPath, 'utf-8'));
|
|
41
|
+
node_assert_1.default.ok(report.semantic.changes.length > 0, 'expected semantic changes');
|
|
42
|
+
node_assert_1.default.ok(report.structural.miracles.length > 0, 'expected miracles in report');
|
|
43
|
+
node_assert_1.default.ok(report.structural.miracles.some(miracle => miracle.type === 'RENAME'));
|
|
44
|
+
node_assert_1.default.ok(report.structural.miracles.some(miracle => miracle.type === 'TYPE_COERCION'));
|
|
45
|
+
node_assert_1.default.ok(report.semantic.changes.some(change => change.type === 'model.property.type.changed'));
|
|
46
|
+
});
|
|
47
|
+
});
|
|
@@ -7,6 +7,7 @@ const node_assert_1 = __importDefault(require("node:assert"));
|
|
|
7
7
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
9
|
const node_test_1 = require("node:test");
|
|
10
|
+
const silenceLoggers_1 = require("../../../test/helpers/silenceLoggers");
|
|
10
11
|
const analyzeDiff_1 = require("../analyzeDiff");
|
|
11
12
|
const writeSpec = (dir, filename, payload) => {
|
|
12
13
|
const filePath = node_path_1.default.join(dir, filename);
|
|
@@ -23,6 +24,14 @@ const createTempDir = (t, prefix) => {
|
|
|
23
24
|
return tempDir;
|
|
24
25
|
};
|
|
25
26
|
(0, node_test_1.describe)('@unit: analyzeDiff RENAME and invalid-regex handling', () => {
|
|
27
|
+
let restoreAppLogger;
|
|
28
|
+
(0, node_test_1.beforeEach)(() => {
|
|
29
|
+
restoreAppLogger = (0, silenceLoggers_1.installSilenceAppLogger)();
|
|
30
|
+
});
|
|
31
|
+
(0, node_test_1.afterEach)(() => {
|
|
32
|
+
restoreAppLogger?.();
|
|
33
|
+
restoreAppLogger = undefined;
|
|
34
|
+
});
|
|
26
35
|
(0, node_test_1.test)('detects semantic remove/add entries for property rename-like change', async (t) => {
|
|
27
36
|
const tmpDir = createTempDir(t, 'openapi-diff-rename-');
|
|
28
37
|
const reportPath = node_path_1.default.join(tmpDir, 'report.json');
|
|
@@ -66,12 +75,13 @@ const createTempDir = (t, prefix) => {
|
|
|
66
75
|
node_assert_1.default.ok(result.success, `analyzeDiff failed: ${result.error ?? 'unknown'}`);
|
|
67
76
|
const reportRaw = node_fs_1.default.readFileSync(reportPath, 'utf-8');
|
|
68
77
|
const report = JSON.parse(reportRaw);
|
|
69
|
-
const removed = report.changes.find(change => change.type === 'model.property.removed' && change.path === '#/components/schemas/User/properties/first_name');
|
|
70
|
-
const added = report.changes.find(change => change.type === 'model.property.added' && change.path === '#/components/schemas/User/properties/firstName');
|
|
78
|
+
const removed = report.semantic.changes.find(change => change.type === 'model.property.removed' && change.path === '#/components/schemas/User/properties/first_name');
|
|
79
|
+
const added = report.semantic.changes.find(change => change.type === 'model.property.added' && change.path === '#/components/schemas/User/properties/firstName');
|
|
71
80
|
node_assert_1.default.ok(removed, 'Expected semantic removal entry for previous property');
|
|
72
81
|
node_assert_1.default.ok(added, 'Expected semantic addition entry for renamed property');
|
|
73
82
|
node_assert_1.default.strictEqual(removed?.severity, 'breaking');
|
|
74
83
|
node_assert_1.default.strictEqual(added?.severity, 'non-breaking');
|
|
84
|
+
node_assert_1.default.ok(report.structural.miracles.some(miracle => miracle.type === 'RENAME'));
|
|
75
85
|
});
|
|
76
86
|
(0, node_test_1.test)('invalid regex in config does not crash and valid rules still apply', async (t) => {
|
|
77
87
|
const tmpDir = createTempDir(t, 'openapi-diff-invalidregex-');
|
|
@@ -132,11 +142,11 @@ const createTempDir = (t, prefix) => {
|
|
|
132
142
|
node_assert_1.default.ok(result.success, `analyzeDiff failed: ${result.error ?? 'unknown'}`);
|
|
133
143
|
const reportRaw = node_fs_1.default.readFileSync(reportPath, 'utf-8');
|
|
134
144
|
const report = JSON.parse(reportRaw);
|
|
135
|
-
const filteredTypeChange = report.changes.find(change => change.type === 'model.property.type.changed' && change.path === '#/components/schemas/User/properties/age');
|
|
145
|
+
const filteredTypeChange = report.semantic.changes.find(change => change.type === 'model.property.type.changed' && change.path === '#/components/schemas/User/properties/age');
|
|
136
146
|
node_assert_1.default.ok(!filteredTypeChange, 'Expected matching semantic change to be filtered by valid rule while invalid regex is ignored');
|
|
137
|
-
node_assert_1.default.strictEqual(report.summary.breaking, 0);
|
|
138
|
-
node_assert_1.default.strictEqual(report.summary.nonBreaking, 0);
|
|
139
|
-
node_assert_1.default.strictEqual(report.summary.informational, 0);
|
|
140
|
-
node_assert_1.default.strictEqual(report.recommendation.semver, 'patch');
|
|
147
|
+
node_assert_1.default.strictEqual(report.semantic.summary.breaking, 0);
|
|
148
|
+
node_assert_1.default.strictEqual(report.semantic.summary.nonBreaking, 0);
|
|
149
|
+
node_assert_1.default.strictEqual(report.semantic.summary.informational, 0);
|
|
150
|
+
node_assert_1.default.strictEqual(report.semantic.recommendation.semver, 'patch');
|
|
141
151
|
});
|
|
142
152
|
});
|
|
@@ -7,6 +7,7 @@ const node_assert_1 = __importDefault(require("node:assert"));
|
|
|
7
7
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
9
|
const node_test_1 = require("node:test");
|
|
10
|
+
const silenceLoggers_1 = require("../../../test/helpers/silenceLoggers");
|
|
10
11
|
const analyzeDiff_1 = require("../analyzeDiff");
|
|
11
12
|
const writeSpec = (dir, filename, payload) => {
|
|
12
13
|
const filePath = node_path_1.default.join(dir, filename);
|
|
@@ -23,6 +24,14 @@ const createTempDir = (t, prefix) => {
|
|
|
23
24
|
return tempDir;
|
|
24
25
|
};
|
|
25
26
|
(0, node_test_1.describe)('@unit: analyzeDiff TYPE_COERCION miracles', () => {
|
|
27
|
+
let restoreAppLogger;
|
|
28
|
+
(0, node_test_1.beforeEach)(() => {
|
|
29
|
+
restoreAppLogger = (0, silenceLoggers_1.installSilenceAppLogger)();
|
|
30
|
+
});
|
|
31
|
+
(0, node_test_1.afterEach)(() => {
|
|
32
|
+
restoreAppLogger?.();
|
|
33
|
+
restoreAppLogger = undefined;
|
|
34
|
+
});
|
|
26
35
|
(0, node_test_1.test)('detects semantic type change for scalar property transition', async (t) => {
|
|
27
36
|
const tmpDir = createTempDir(t, 'openapi-diff-test-');
|
|
28
37
|
const reportPath = node_path_1.default.join(tmpDir, 'report.json');
|
|
@@ -66,11 +75,12 @@ const createTempDir = (t, prefix) => {
|
|
|
66
75
|
node_assert_1.default.ok(result.success, `analyzeDiff failed: ${result.error ?? 'unknown error'}`);
|
|
67
76
|
const reportRaw = node_fs_1.default.readFileSync(reportPath, 'utf-8');
|
|
68
77
|
const report = JSON.parse(reportRaw);
|
|
69
|
-
const typeChange = report.changes.find(change => change.type === 'model.property.type.changed');
|
|
78
|
+
const typeChange = report.semantic.changes.find(change => change.type === 'model.property.type.changed');
|
|
70
79
|
node_assert_1.default.ok(typeChange, 'Expected semantic type-change entry');
|
|
71
80
|
node_assert_1.default.strictEqual(typeChange?.path, '#/components/schemas/User/properties/age');
|
|
72
81
|
node_assert_1.default.strictEqual(typeChange?.severity, 'breaking');
|
|
73
|
-
node_assert_1.default.ok(report.summary.breaking > 0);
|
|
82
|
+
node_assert_1.default.ok(report.semantic.summary.breaking > 0);
|
|
83
|
+
node_assert_1.default.ok(report.structural.miracles.some(miracle => miracle.type === 'TYPE_COERCION'));
|
|
74
84
|
});
|
|
75
85
|
(0, node_test_1.test)('filters semantic type-change entry when rule matches path', async (t) => {
|
|
76
86
|
const tmpDir = createTempDir(t, 'openapi-diff-test-');
|
|
@@ -127,11 +137,11 @@ const createTempDir = (t, prefix) => {
|
|
|
127
137
|
node_assert_1.default.ok(result.success, `analyzeDiff failed: ${result.error ?? 'unknown error'}`);
|
|
128
138
|
const reportRaw = node_fs_1.default.readFileSync(reportPath, 'utf-8');
|
|
129
139
|
const report = JSON.parse(reportRaw);
|
|
130
|
-
const filteredTypeChange = report.changes.find(change => change.type === 'model.property.type.changed' && change.path === '#/components/schemas/User/properties/age');
|
|
140
|
+
const filteredTypeChange = report.semantic.changes.find(change => change.type === 'model.property.type.changed' && change.path === '#/components/schemas/User/properties/age');
|
|
131
141
|
node_assert_1.default.ok(!filteredTypeChange, 'Expected semantic type-change to be filtered by analyze.ignore');
|
|
132
|
-
node_assert_1.default.strictEqual(report.summary.breaking, 0);
|
|
133
|
-
node_assert_1.default.strictEqual(report.summary.nonBreaking, 0);
|
|
134
|
-
node_assert_1.default.strictEqual(report.summary.informational, 0);
|
|
135
|
-
node_assert_1.default.strictEqual(report.recommendation.semver, 'patch');
|
|
142
|
+
node_assert_1.default.strictEqual(report.semantic.summary.breaking, 0);
|
|
143
|
+
node_assert_1.default.strictEqual(report.semantic.summary.nonBreaking, 0);
|
|
144
|
+
node_assert_1.default.strictEqual(report.semantic.summary.informational, 0);
|
|
145
|
+
node_assert_1.default.strictEqual(report.semantic.recommendation.semver, 'patch');
|
|
136
146
|
});
|
|
137
147
|
});
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { OptionValues } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Результат выполнения команды analyze-diff.
|
|
4
|
+
* @property success признак успешного завершения
|
|
5
|
+
* @property [skipped] анализ пропущен из-за отсутствия базовой спецификации
|
|
6
|
+
* @property [reportPath] абсолютный путь к сохранённому отчёту
|
|
7
|
+
* @property [ignored] количество проигнорированных изменений
|
|
8
|
+
* @property [error] текст ошибки при неуспешном завершении
|
|
9
|
+
*/
|
|
2
10
|
export type AnalyzeDiffResult = {
|
|
3
11
|
success: boolean;
|
|
4
12
|
skipped?: boolean;
|
|
@@ -7,11 +15,15 @@ export type AnalyzeDiffResult = {
|
|
|
7
15
|
error?: string;
|
|
8
16
|
};
|
|
9
17
|
/**
|
|
10
|
-
*
|
|
18
|
+
* Преобразует результат analyze-diff в код выхода процесса. Не вызывает `process.exit`.
|
|
19
|
+
* @param result результат выполнения analyze-diff
|
|
20
|
+
* @returns код выхода: 0 при успехе, 1 при ошибке
|
|
11
21
|
*/
|
|
12
22
|
export declare function toAnalyzeDiffExitCode(result: AnalyzeDiffResult): number;
|
|
13
23
|
/**
|
|
14
|
-
*
|
|
24
|
+
* Выполняет семантическое сравнение двух OpenAPI-спецификаций и записывает JSON-отчёт.
|
|
25
|
+
* @param options опции CLI команды analyze-diff
|
|
26
|
+
* @returns результат выполнения с путём к отчёту или описанием ошибки
|
|
15
27
|
*/
|
|
16
28
|
export declare function analyzeDiff(options: OptionValues): Promise<AnalyzeDiffResult>;
|
|
17
29
|
//# sourceMappingURL=analyzeDiff.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzeDiff.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/analyzeDiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"analyzeDiff.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/analyzeDiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAuBzC;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAEvE;AAqBD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuGnF"}
|
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.toAnalyzeDiffExitCode = toAnalyzeDiffExitCode;
|
|
4
7
|
exports.analyzeDiff = analyzeDiff;
|
|
8
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
5
9
|
const Consts_1 = require("../../common/Consts");
|
|
6
10
|
const LoggerMessages_1 = require("../../common/LoggerMessages");
|
|
7
|
-
const
|
|
11
|
+
const Validation_1 = require("../../common/Validation");
|
|
8
12
|
const evaluateGovernanceRules_1 = require("../../core/governance/evaluateGovernanceRules");
|
|
9
13
|
const loadGovernanceConfig_1 = require("../../core/governance/loadGovernanceConfig");
|
|
10
14
|
const applySemanticDiffPluginHooks_1 = require("../../core/plugins/applySemanticDiffPluginHooks");
|
|
11
15
|
const loadGeneratorPlugins_1 = require("../../core/plugins/loadGeneratorPlugins");
|
|
12
16
|
const analyzeOpenApiDiff_1 = require("../../core/semanticDiff/analyzeOpenApiDiff");
|
|
13
|
-
const
|
|
17
|
+
const DiffReport_model_1 = require("../../core/types/DiffReport.model");
|
|
18
|
+
const adapters_1 = require("../../core/utils/adapters");
|
|
19
|
+
const buildMiraclesFromSemanticChanges_1 = require("../../core/utils/buildMiraclesFromSemanticChanges");
|
|
20
|
+
const loadSemanticOpenApiSpec_1 = require("../../core/utils/loadSemanticOpenApiSpec");
|
|
14
21
|
const schemas_1 = require("../schemas");
|
|
15
22
|
const ciSummary_1 = require("./ciSummary");
|
|
16
23
|
const ignoreRules_1 = require("./ignoreRules");
|
|
@@ -19,16 +26,36 @@ const pluginPaths_1 = require("./pluginPaths");
|
|
|
19
26
|
const semanticDiffContext_1 = require("./semanticDiffContext");
|
|
20
27
|
const specParser_1 = require("./specParser");
|
|
21
28
|
/**
|
|
22
|
-
*
|
|
29
|
+
* Преобразует результат analyze-diff в код выхода процесса. Не вызывает `process.exit`.
|
|
30
|
+
* @param result результат выполнения analyze-diff
|
|
31
|
+
* @returns код выхода: 0 при успехе, 1 при ошибке
|
|
23
32
|
*/
|
|
24
33
|
function toAnalyzeDiffExitCode(result) {
|
|
25
34
|
return result.success ? 0 : 1;
|
|
26
35
|
}
|
|
36
|
+
function createSpecHash(spec) {
|
|
37
|
+
const seen = new WeakSet();
|
|
38
|
+
const serializedSpec = JSON.stringify(spec, (_key, value) => {
|
|
39
|
+
if (value && typeof value === 'object') {
|
|
40
|
+
if (seen.has(value)) {
|
|
41
|
+
return '[Circular]';
|
|
42
|
+
}
|
|
43
|
+
seen.add(value);
|
|
44
|
+
}
|
|
45
|
+
return value;
|
|
46
|
+
});
|
|
47
|
+
return crypto_1.default
|
|
48
|
+
.createHash('sha256')
|
|
49
|
+
.update(serializedSpec ?? '')
|
|
50
|
+
.digest('hex');
|
|
51
|
+
}
|
|
27
52
|
/**
|
|
28
|
-
*
|
|
53
|
+
* Выполняет семантическое сравнение двух OpenAPI-спецификаций и записывает JSON-отчёт.
|
|
54
|
+
* @param options опции CLI команды analyze-diff
|
|
55
|
+
* @returns результат выполнения с путём к отчёту или описанием ошибки
|
|
29
56
|
*/
|
|
30
57
|
async function analyzeDiff(options) {
|
|
31
|
-
const validationResult = (0,
|
|
58
|
+
const validationResult = (0, Validation_1.validateZodOptions)(schemas_1.analyzeDiffOptionsSchema, options);
|
|
32
59
|
if (!validationResult.success) {
|
|
33
60
|
const message = validationResult.errors.join('\n');
|
|
34
61
|
Consts_1.APP_LOGGER.error(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.VALIDATION_ERROR(message));
|
|
@@ -46,11 +73,9 @@ async function analyzeDiff(options) {
|
|
|
46
73
|
}
|
|
47
74
|
const baseSourceLabel = oldSpecInput ? `compare-with:${oldSpecInput}` : `git:${gitRef}`;
|
|
48
75
|
Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.STARTED(newSpecInput, baseSourceLabel));
|
|
49
|
-
|
|
50
|
-
const newSpec = await (0,
|
|
51
|
-
const oldSpec = oldSpecInput
|
|
52
|
-
? await (0, getOpenApiSpec_1.getOpenApiSpec)((0, semanticDiffContext_1.createSemanticDiffContext)(oldSpecInput), oldSpecInput)
|
|
53
|
-
: (await (0, specParser_1.readSpecFromGit)(gitRef, newSpecInput));
|
|
76
|
+
(0, semanticDiffContext_1.createSemanticDiffContext)(newSpecInput);
|
|
77
|
+
const newSpec = await (0, loadSemanticOpenApiSpec_1.loadSemanticOpenApiSpec)(newSpecInput);
|
|
78
|
+
const oldSpec = oldSpecInput ? await (0, loadSemanticOpenApiSpec_1.loadSemanticOpenApiSpec)(oldSpecInput) : await (0, loadSemanticOpenApiSpec_1.loadSemanticOpenApiObject)(await (0, specParser_1.readSpecFromGit)(gitRef, newSpecInput), newSpecInput);
|
|
54
79
|
if (oldSpecInput && validatedOptions.git) {
|
|
55
80
|
Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.COMPARE_WITH_OVERRIDES_GIT(validatedOptions.git));
|
|
56
81
|
}
|
|
@@ -72,7 +97,7 @@ async function analyzeDiff(options) {
|
|
|
72
97
|
},
|
|
73
98
|
});
|
|
74
99
|
const { report: reportAfterIgnore, ignored } = (0, ignoreSemanticChanges_1.filterSemanticChangesByIgnoreRules)(pluginHooksResult.report, ignoreRules);
|
|
75
|
-
const
|
|
100
|
+
const semanticReport = {
|
|
76
101
|
...reportAfterIgnore,
|
|
77
102
|
governance: (0, evaluateGovernanceRules_1.evaluateGovernanceRules)({
|
|
78
103
|
openApi: newSpec,
|
|
@@ -80,19 +105,37 @@ async function analyzeDiff(options) {
|
|
|
80
105
|
allowBreaking: validatedOptions.allowBreaking ?? false,
|
|
81
106
|
governanceConfig: governancePolicy,
|
|
82
107
|
}),
|
|
108
|
+
miracles: (0, buildMiraclesFromSemanticChanges_1.buildMiraclesFromSemanticChanges)(reportAfterIgnore.changes),
|
|
109
|
+
};
|
|
110
|
+
const report = {
|
|
111
|
+
schemaVersion: DiffReport_model_1.UNIFIED_DIFF_REPORT_SCHEMA_VERSION,
|
|
112
|
+
timestamp: new Date().toISOString(),
|
|
113
|
+
metadata: {
|
|
114
|
+
base: baseSourceLabel,
|
|
115
|
+
target: newSpecInput,
|
|
116
|
+
baseHash: createSpecHash(oldSpec),
|
|
117
|
+
targetHash: createSpecHash(newSpec),
|
|
118
|
+
},
|
|
119
|
+
semantic: {
|
|
120
|
+
changes: semanticReport.changes,
|
|
121
|
+
governance: semanticReport.governance,
|
|
122
|
+
recommendation: semanticReport.recommendation,
|
|
123
|
+
summary: semanticReport.summary,
|
|
124
|
+
},
|
|
125
|
+
structural: (0, adapters_1.adaptSemanticToStructural)(semanticReport, ignored),
|
|
83
126
|
};
|
|
84
127
|
const reportPath = await (0, analyzeOpenApiDiff_1.writeSemanticDiffReport)(report, pluginHooksResult.reportPath);
|
|
85
128
|
Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.REPORT_CREATED(reportPath));
|
|
86
|
-
Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.SUMMARY(
|
|
87
|
-
Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.RECOMMENDATION(
|
|
88
|
-
Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.GOVERNANCE(
|
|
129
|
+
Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.SUMMARY(semanticReport, reportPath));
|
|
130
|
+
Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.RECOMMENDATION(semanticReport));
|
|
131
|
+
Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.GOVERNANCE(semanticReport));
|
|
89
132
|
if (ignored > 0) {
|
|
90
133
|
Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.IGNORED_CHANGES(ignored));
|
|
91
134
|
}
|
|
92
135
|
if (validatedOptions.ci) {
|
|
93
136
|
Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.CI_MARKDOWN_SUMMARY((0, ciSummary_1.formatCiMarkdownSummary)(report, reportPath)));
|
|
94
137
|
}
|
|
95
|
-
if (validatedOptions.ci &&
|
|
138
|
+
if (validatedOptions.ci && semanticReport.governance.summary.errors > 0) {
|
|
96
139
|
return { success: false, reportPath, error: LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.CI_FAILURE };
|
|
97
140
|
}
|
|
98
141
|
return { success: true, reportPath, ignored };
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { UnifiedDiffReport } from '../../core/types/DiffReport.model';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Формирует markdown-сводку семантического diff для CI-логов.
|
|
4
|
+
* @param report унифицированный diff-отчёт
|
|
5
|
+
* @param reportPath путь к сохранённому отчёту
|
|
6
|
+
* @returns markdown-текст для вывода в CI
|
|
4
7
|
*/
|
|
5
|
-
export declare function formatCiMarkdownSummary(report:
|
|
8
|
+
export declare function formatCiMarkdownSummary(report: UnifiedDiffReport, reportPath: string): string;
|
|
6
9
|
//# sourceMappingURL=ciSummary.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ciSummary.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/ciSummary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ciSummary.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/ciSummary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAE3E;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAe7F"}
|
|
@@ -2,19 +2,23 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.formatCiMarkdownSummary = formatCiMarkdownSummary;
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Формирует markdown-сводку семантического diff для CI-логов.
|
|
6
|
+
* @param report унифицированный diff-отчёт
|
|
7
|
+
* @param reportPath путь к сохранённому отчёту
|
|
8
|
+
* @returns markdown-текст для вывода в CI
|
|
6
9
|
*/
|
|
7
10
|
function formatCiMarkdownSummary(report, reportPath) {
|
|
8
|
-
const
|
|
11
|
+
const semantic = report.semantic;
|
|
12
|
+
const reasons = semantic.recommendation.reasons.map(reason => `- \`${reason}\``).join('\n');
|
|
9
13
|
return [
|
|
10
14
|
'### OpenAPI Semantic Diff',
|
|
11
15
|
`- Report: \`${reportPath}\``,
|
|
12
16
|
`- Schema Version: \`${report.schemaVersion}\``,
|
|
13
|
-
`- Recommendation: \`${
|
|
14
|
-
`- Reason: ${
|
|
17
|
+
`- Recommendation: \`${semantic.recommendation.semver}\` (confidence: \`${semantic.recommendation.confidence}\`)`,
|
|
18
|
+
`- Reason: ${semantic.recommendation.reason}`,
|
|
15
19
|
'- Reason Codes:',
|
|
16
20
|
reasons,
|
|
17
|
-
`- Summary: breaking=\`${
|
|
18
|
-
`- Governance: errors=\`${
|
|
21
|
+
`- Summary: breaking=\`${semantic.summary.breaking}\`, nonBreaking=\`${semantic.summary.nonBreaking}\`, informational=\`${semantic.summary.informational}\``,
|
|
22
|
+
`- Governance: errors=\`${semantic.governance.summary.errors}\`, warnings=\`${semantic.governance.summary.warnings}\`, info=\`${semantic.governance.summary.info}\``,
|
|
19
23
|
].join('\n');
|
|
20
24
|
}
|
|
@@ -1,10 +1,4 @@
|
|
|
1
1
|
import type { DiffEntry, IgnoreRule } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Проверяет, активно ли правило игнорирования по полю `until`.
|
|
4
|
-
* @param rule правило игнорирования
|
|
5
|
-
* @returns true если правило активно или не содержит валидной даты
|
|
6
|
-
*/
|
|
7
|
-
export declare const isRuleActive: (rule: IgnoreRule) => boolean;
|
|
8
2
|
/**
|
|
9
3
|
* Проверяет, соответствует ли запись diff правилу игнорирования.
|
|
10
4
|
* Совмещает полное совпадение пути, префикс и регулярные выражения.
|
|
@@ -13,21 +7,5 @@ export declare const isRuleActive: (rule: IgnoreRule) => boolean;
|
|
|
13
7
|
* @returns true если правило применимо к записи
|
|
14
8
|
*/
|
|
15
9
|
export declare const matchesIgnoreRule: (entry: DiffEntry, rule: IgnoreRule) => boolean;
|
|
16
|
-
/**
|
|
17
|
-
* Применяет набор правил игнорирования к массиву записей и возвращает отфильтрованные записи и число игнорированных.
|
|
18
|
-
* @param entries список записей diff
|
|
19
|
-
* @param rules список правил игнорирования
|
|
20
|
-
* @returns объект с полем filtered и числом ignored
|
|
21
|
-
*/
|
|
22
|
-
export declare const applyIgnoreRules: (entries: DiffEntry[], rules: IgnoreRule[]) => {
|
|
23
|
-
filtered: DiffEntry[];
|
|
24
|
-
ignored: number;
|
|
25
|
-
};
|
|
26
|
-
/**
|
|
27
|
-
* Извлекает правила игнорирования из загруженной конфигурации openapi.
|
|
28
|
-
* @param configData загруженные данные конфигурации
|
|
29
|
-
* @returns список правил ignore
|
|
30
|
-
*/
|
|
31
|
-
export declare const getIgnoreRulesFromConfig: (configData: Record<string, any> | Record<string, any>[] | null) => IgnoreRule[];
|
|
32
10
|
export declare const loadIgnoreRules: (openapiConfigPath?: string) => IgnoreRule[];
|
|
33
11
|
//# sourceMappingURL=ignoreRules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ignoreRules.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/ignoreRules.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ignoreRules.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/ignoreRules.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAcrD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,SAAS,EAAE,MAAM,UAAU,KAAG,OAkBtE,CAAC;AAgBF,eAAO,MAAM,eAAe,GAAI,oBAAoB,MAAM,KAAG,UAAU,EAGtE,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.loadIgnoreRules = exports.
|
|
3
|
+
exports.loadIgnoreRules = exports.matchesIgnoreRule = void 0;
|
|
4
4
|
const Consts_1 = require("../../common/Consts");
|
|
5
5
|
const LoggerMessages_1 = require("../../common/LoggerMessages");
|
|
6
6
|
const loadConfigIfExists_1 = require("../../common/utils/loadConfigIfExists");
|
|
@@ -17,7 +17,6 @@ const isRuleActive = (rule) => {
|
|
|
17
17
|
return true;
|
|
18
18
|
return Date.now() <= timestamp;
|
|
19
19
|
};
|
|
20
|
-
exports.isRuleActive = isRuleActive;
|
|
21
20
|
/**
|
|
22
21
|
* Проверяет, соответствует ли запись diff правилу игнорирования.
|
|
23
22
|
* Совмещает полное совпадение пути, префикс и регулярные выражения.
|
|
@@ -26,7 +25,7 @@ exports.isRuleActive = isRuleActive;
|
|
|
26
25
|
* @returns true если правило применимо к записи
|
|
27
26
|
*/
|
|
28
27
|
const matchesIgnoreRule = (entry, rule) => {
|
|
29
|
-
if (!
|
|
28
|
+
if (!isRuleActive(rule))
|
|
30
29
|
return false;
|
|
31
30
|
if (rule.path) {
|
|
32
31
|
if (entry.path === rule.path)
|
|
@@ -51,26 +50,6 @@ const matchesIgnoreRule = (entry, rule) => {
|
|
|
51
50
|
return false;
|
|
52
51
|
};
|
|
53
52
|
exports.matchesIgnoreRule = matchesIgnoreRule;
|
|
54
|
-
/**
|
|
55
|
-
* Применяет набор правил игнорирования к массиву записей и возвращает отфильтрованные записи и число игнорированных.
|
|
56
|
-
* @param entries список записей diff
|
|
57
|
-
* @param rules список правил игнорирования
|
|
58
|
-
* @returns объект с полем filtered и числом ignored
|
|
59
|
-
*/
|
|
60
|
-
const applyIgnoreRules = (entries, rules) => {
|
|
61
|
-
if (!rules.length) {
|
|
62
|
-
return { filtered: entries, ignored: 0 };
|
|
63
|
-
}
|
|
64
|
-
let ignored = 0;
|
|
65
|
-
const filtered = entries.filter(entry => {
|
|
66
|
-
const shouldIgnore = rules.some(rule => (0, exports.matchesIgnoreRule)(entry, rule));
|
|
67
|
-
if (shouldIgnore)
|
|
68
|
-
ignored += 1;
|
|
69
|
-
return !shouldIgnore;
|
|
70
|
-
});
|
|
71
|
-
return { filtered, ignored };
|
|
72
|
-
};
|
|
73
|
-
exports.applyIgnoreRules = applyIgnoreRules;
|
|
74
53
|
/**
|
|
75
54
|
* Извлекает правила игнорирования из загруженной конфигурации openapi.
|
|
76
55
|
* @param configData загруженные данные конфигурации
|
|
@@ -85,9 +64,8 @@ const getIgnoreRulesFromConfig = (configData) => {
|
|
|
85
64
|
}
|
|
86
65
|
return configData.analyze?.ignore ?? [];
|
|
87
66
|
};
|
|
88
|
-
exports.getIgnoreRulesFromConfig = getIgnoreRulesFromConfig;
|
|
89
67
|
const loadIgnoreRules = (openapiConfigPath) => {
|
|
90
68
|
const configData = (0, loadConfigIfExists_1.loadConfigIfExists)(openapiConfigPath);
|
|
91
|
-
return
|
|
69
|
+
return getIgnoreRulesFromConfig(configData);
|
|
92
70
|
};
|
|
93
71
|
exports.loadIgnoreRules = loadIgnoreRules;
|