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.
Files changed (333) hide show
  1. package/README.md +7 -0
  2. package/README.rus.md +7 -0
  3. package/dist/cli/analyzeDiff/__tests__/analyzeDiff.cli.test.js +31 -24
  4. package/dist/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.d.ts +2 -0
  5. package/dist/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.d.ts.map +1 -0
  6. package/dist/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.js +47 -0
  7. package/dist/cli/analyzeDiff/__tests__/analyzeDiffRenameAndInvalidRegex.test.js +8 -7
  8. package/dist/cli/analyzeDiff/__tests__/analyzeDiffTypeCoercion.test.js +8 -7
  9. package/dist/cli/analyzeDiff/analyzeDiff.d.ts +14 -2
  10. package/dist/cli/analyzeDiff/analyzeDiff.d.ts.map +1 -1
  11. package/dist/cli/analyzeDiff/analyzeDiff.js +56 -13
  12. package/dist/cli/analyzeDiff/ciSummary.d.ts +6 -3
  13. package/dist/cli/analyzeDiff/ciSummary.d.ts.map +1 -1
  14. package/dist/cli/analyzeDiff/ciSummary.js +10 -6
  15. package/dist/cli/analyzeDiff/ignoreRules.d.ts +0 -6
  16. package/dist/cli/analyzeDiff/ignoreRules.d.ts.map +1 -1
  17. package/dist/cli/analyzeDiff/ignoreRules.js +2 -3
  18. package/dist/cli/analyzeDiff/report.d.ts +0 -1
  19. package/dist/cli/analyzeDiff/report.d.ts.map +1 -1
  20. package/dist/cli/analyzeDiff/report.js +1 -3
  21. package/dist/cli/analyzeDiff/writeLegacyReport.d.ts +2 -0
  22. package/dist/cli/analyzeDiff/writeLegacyReport.d.ts.map +1 -1
  23. package/dist/cli/analyzeDiff/writeLegacyReport.js +2 -0
  24. package/dist/cli/analyzeUsage/analyzeUsage.d.ts +2 -2
  25. package/dist/cli/analyzeUsage/analyzeUsage.d.ts.map +1 -1
  26. package/dist/cli/analyzeUsage/analyzeUsage.js +10 -12
  27. package/dist/cli/analyzeUsage/core/ProjectContext.d.ts +1 -1
  28. package/dist/cli/analyzeUsage/core/ProjectContext.d.ts.map +1 -1
  29. package/dist/cli/analyzeUsage/core/ProjectContext.js +5 -10
  30. package/dist/cli/analyzeUsage/core/Scanner.d.ts +8 -0
  31. package/dist/cli/analyzeUsage/core/Scanner.d.ts.map +1 -1
  32. package/dist/cli/analyzeUsage/core/Scanner.js +10 -0
  33. package/dist/cli/analyzeUsage/rules/ClientRule.d.ts +10 -2
  34. package/dist/cli/analyzeUsage/rules/ClientRule.d.ts.map +1 -1
  35. package/dist/cli/analyzeUsage/rules/ClientRule.js +29 -21
  36. package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts +2 -2
  37. package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts.map +1 -1
  38. package/dist/cli/analyzeUsage/rules/CoverageRule.js +16 -24
  39. package/dist/cli/analyzeUsage/rules/DiagnosticsRule.d.ts.map +1 -1
  40. package/dist/cli/analyzeUsage/rules/DiagnosticsRule.js +4 -1
  41. package/dist/cli/analyzeUsage/rules/ImportRule.d.ts +2 -2
  42. package/dist/cli/analyzeUsage/rules/ImportRule.d.ts.map +1 -1
  43. package/dist/cli/analyzeUsage/rules/ImportRule.js +9 -11
  44. package/dist/cli/analyzeUsage/rules/ModelRule.d.ts +2 -2
  45. package/dist/cli/analyzeUsage/rules/ModelRule.d.ts.map +1 -1
  46. package/dist/cli/analyzeUsage/rules/ModelRule.js +4 -8
  47. package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts +2 -2
  48. package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts.map +1 -1
  49. package/dist/cli/analyzeUsage/rules/SchemaRule.js +8 -10
  50. package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts +10 -2
  51. package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts.map +1 -1
  52. package/dist/cli/analyzeUsage/rules/ServiceRule.js +27 -23
  53. package/dist/cli/analyzeUsage/types.d.ts +4 -4
  54. package/dist/cli/analyzeUsage/types.d.ts.map +1 -1
  55. package/dist/cli/analyzeUsage/utils/fuzzy.d.ts.map +1 -1
  56. package/dist/cli/analyzeUsage/utils/report.d.ts +1 -1
  57. package/dist/cli/analyzeUsage/utils/report.d.ts.map +1 -1
  58. package/dist/cli/analyzeUsage/utils/report.js +8 -8
  59. package/dist/cli/checkAndUpdateConfig/utils/removeDefaultConfigValues.d.ts.map +1 -1
  60. package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.d.ts.map +1 -1
  61. package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.js +1 -1
  62. package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.d.ts +1 -1
  63. package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.d.ts.map +1 -1
  64. package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.js +1 -1
  65. package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts.map +1 -1
  66. package/dist/cli/generateOpenApiClient/generateOpenApiClient.js +9 -1
  67. package/dist/cli/index.js +3 -2
  68. package/dist/cli/initOpenApiConfig/utils/__tests__/buildConfig.test.js +2 -8
  69. package/dist/cli/initOpenApiConfig/utils/registerHandlebarTemplates.d.ts.map +1 -1
  70. package/dist/cli/interactive/constants.d.ts +0 -4
  71. package/dist/cli/interactive/constants.d.ts.map +1 -1
  72. package/dist/cli/interactive/constants.js +1 -5
  73. package/dist/cli/previewChanges/previewChanges.d.ts.map +1 -1
  74. package/dist/cli/previewChanges/utils/formatDiff.d.ts.map +1 -1
  75. package/dist/cli/previewChanges/utils/updateOutputPaths.d.ts.map +1 -1
  76. package/dist/cli/previewChanges/utils/updateOutputPaths.js +5 -12
  77. package/dist/cli/schemas/analyzeUsage.d.ts.map +1 -1
  78. package/dist/cli/schemas/analyzeUsage.js +4 -1
  79. package/dist/cli/schemas/generate.d.ts +3 -2
  80. package/dist/cli/schemas/generate.d.ts.map +1 -1
  81. package/dist/cli/schemas/generate.js +3 -2
  82. package/dist/common/Consts.d.ts.map +1 -1
  83. package/dist/common/Consts.js +1 -2
  84. package/dist/common/Logger.d.ts.map +1 -1
  85. package/dist/common/Logger.js +1 -1
  86. package/dist/common/LoggerMessages.d.ts +15 -3
  87. package/dist/common/LoggerMessages.d.ts.map +1 -1
  88. package/dist/common/LoggerMessages.js +18 -7
  89. package/dist/common/TEslintFixOptions.d.ts +20 -0
  90. package/dist/common/TEslintFixOptions.d.ts.map +1 -0
  91. package/dist/common/TEslintFixOptions.js +15 -0
  92. package/dist/common/TRawOptions.d.ts.map +1 -1
  93. package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.d.ts.map +1 -1
  94. package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.js +2 -4
  95. package/dist/common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas.d.ts.map +1 -1
  96. package/dist/common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas.js +1 -1
  97. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.d.ts.map +1 -1
  98. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.js +1 -2
  99. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.d.ts.map +1 -1
  100. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.js +1 -1
  101. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.d.ts.map +1 -1
  102. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.js +1 -1
  103. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV4.d.ts.map +1 -1
  104. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts +3 -2
  105. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts.map +1 -1
  106. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.js +10 -4
  107. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts +4 -4
  108. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts.map +1 -1
  109. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.js +7 -1
  110. package/dist/common/VersionedSchema/CommonSchemas.d.ts.map +1 -1
  111. package/dist/common/VersionedSchema/CommonSchemas.js +4 -2
  112. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV2.js +1 -1
  113. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.d.ts.map +1 -1
  114. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.js +1 -1
  115. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV4.js +1 -1
  116. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV5.d.ts.map +1 -1
  117. package/dist/common/VersionedSchema/OptionsVersioned/OptionsMigrationPlans.d.ts.map +1 -1
  118. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV1.d.ts +2 -2
  119. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV1.d.ts.map +1 -1
  120. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV2.d.ts +2 -2
  121. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV3.js +1 -1
  122. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV4.d.ts +1 -1
  123. package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.d.ts.map +1 -1
  124. package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.js +3 -2
  125. package/dist/common/VersionedSchema/Utils/__tests__/allUtils.test.js +4 -16
  126. package/dist/common/VersionedSchema/Utils/buildVersionedSchema.d.ts.map +1 -1
  127. package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.d.ts +1 -1
  128. package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.d.ts.map +1 -1
  129. package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.js +1 -1
  130. package/dist/common/VersionedSchema/Utils/createTrivialMigration.d.ts.map +1 -1
  131. package/dist/common/VersionedSchema/Utils/createTrivialMigration.js +1 -1
  132. package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.d.ts.map +1 -1
  133. package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.js +1 -3
  134. package/dist/common/VersionedSchema/Utils/getLatestVersionFromMigrationPlans.d.ts.map +1 -1
  135. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.d.ts.map +1 -1
  136. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.js +1 -3
  137. package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.d.ts.map +1 -1
  138. package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.js +1 -1
  139. package/dist/common/VersionedSchema/Utils/validateAndSuggestKeyCorrections.d.ts.map +1 -1
  140. package/dist/common/VersionedSchema/refinements/dependentOptionsRefinement.d.ts +1 -1
  141. package/dist/common/VersionedSchema/refinements/dependentOptionsRefinement.d.ts.map +1 -1
  142. package/dist/common/utils/__tests__/eslintFix.test.js +25 -67
  143. package/dist/common/utils/__tests__/extractEslintFixOptions.test.d.ts +2 -0
  144. package/dist/common/utils/__tests__/extractEslintFixOptions.test.d.ts.map +1 -0
  145. package/dist/common/utils/__tests__/extractEslintFixOptions.test.js +28 -0
  146. package/dist/common/utils/__tests__/format.test.js +26 -17
  147. package/dist/common/utils/__tests__/prepareTempTsConfig.test.d.ts +2 -0
  148. package/dist/common/utils/__tests__/prepareTempTsConfig.test.d.ts.map +1 -0
  149. package/dist/common/utils/__tests__/prepareTempTsConfig.test.js +78 -0
  150. package/dist/common/utils/codegenTempDir.d.ts +20 -0
  151. package/dist/common/utils/codegenTempDir.d.ts.map +1 -0
  152. package/dist/common/utils/codegenTempDir.js +42 -0
  153. package/dist/common/utils/convertArrayToObject.d.ts.map +1 -1
  154. package/dist/common/utils/convertArrayToObject.js +3 -8
  155. package/dist/common/utils/eslintFix.d.ts +48 -4
  156. package/dist/common/utils/eslintFix.d.ts.map +1 -1
  157. package/dist/common/utils/eslintFix.js +121 -15
  158. package/dist/common/utils/format.d.ts +1 -1
  159. package/dist/common/utils/format.d.ts.map +1 -1
  160. package/dist/common/utils/format.js +23 -11
  161. package/dist/common/utils/jsonPath.d.ts.map +1 -1
  162. package/dist/common/utils/prepareTempEslintConfig.d.ts +18 -0
  163. package/dist/common/utils/prepareTempEslintConfig.d.ts.map +1 -0
  164. package/dist/common/utils/prepareTempEslintConfig.js +55 -0
  165. package/dist/common/utils/prepareTempTsConfig.d.ts +23 -0
  166. package/dist/common/utils/prepareTempTsConfig.d.ts.map +1 -0
  167. package/dist/common/utils/prepareTempTsConfig.js +105 -0
  168. package/dist/core/Context.d.ts.map +1 -1
  169. package/dist/core/Context.js +2 -6
  170. package/dist/core/OpenApiClient.d.ts +15 -0
  171. package/dist/core/OpenApiClient.d.ts.map +1 -1
  172. package/dist/core/OpenApiClient.js +68 -10
  173. package/dist/core/WriteClient.d.ts +73 -17
  174. package/dist/core/WriteClient.d.ts.map +1 -1
  175. package/dist/core/WriteClient.js +72 -18
  176. package/dist/core/__tests__/WriteClient.test.js +1 -1
  177. package/dist/core/api/v2/parser/getOperationResponses.d.ts.map +1 -1
  178. package/dist/core/api/v2/parser/getOperationResponses.js +1 -3
  179. package/dist/core/api/v2/parser/getServiceName.d.ts +1 -1
  180. package/dist/core/api/v3/parser/getOperation.d.ts.map +1 -1
  181. package/dist/core/api/v3/parser/getOperationParameters.d.ts.map +1 -1
  182. package/dist/core/api/v3/parser/getOperationResponses.d.ts.map +1 -1
  183. package/dist/core/api/v3/parser/getOperationResponses.js +1 -3
  184. package/dist/core/api/v3/parser/getServiceName.d.ts +1 -1
  185. package/dist/core/governance/evaluateGovernanceRules.d.ts.map +1 -1
  186. package/dist/core/governance/evaluateGovernanceRules.js +1 -3
  187. package/dist/core/governance/loadGovernanceConfig.d.ts.map +1 -1
  188. package/dist/core/governance/loadGovernanceConfig.js +2 -4
  189. package/dist/core/plugins/GeneratorPlugin.model.d.ts.map +1 -1
  190. package/dist/core/plugins/applySemanticDiffPluginHooks.d.ts.map +1 -1
  191. package/dist/core/semanticDiff/__tests__/analyzeOpenApiDiff.test.js +79 -21
  192. package/dist/core/semanticDiff/__tests__/semanticDiffReportSchema.test.js +20 -1
  193. package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts +58 -6
  194. package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts.map +1 -1
  195. package/dist/core/semanticDiff/analyzeOpenApiDiff.js +47 -19
  196. package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts +9 -1
  197. package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts.map +1 -1
  198. package/dist/core/semanticDiff/semanticDiffReportSchema.js +137 -53
  199. package/dist/core/strict/validateOpenApiStrict.d.ts.map +1 -1
  200. package/dist/core/types/Consts.js +1 -1
  201. package/dist/core/types/DiffReport.model.d.ts +101 -0
  202. package/dist/core/types/DiffReport.model.d.ts.map +1 -0
  203. package/dist/core/types/DiffReport.model.js +5 -0
  204. package/dist/core/types/base/ClientArtifacts.model.d.ts +3 -3
  205. package/dist/core/types/base/ClientArtifacts.model.d.ts.map +1 -1
  206. package/dist/core/types/base/ExportedModel.model.d.ts +1 -1
  207. package/dist/core/types/base/ExportedModel.model.d.ts.map +1 -1
  208. package/dist/core/types/base/ExportedService.model.d.ts.map +1 -1
  209. package/dist/core/types/base/OutputPaths.model.d.ts.map +1 -1
  210. package/dist/core/types/base/PrefixArtifacts.model.d.ts.map +1 -1
  211. package/dist/core/types/base/PropertyGroup.model.d.ts +1 -1
  212. package/dist/core/types/base/SimpleClientArtifacts.model.d.ts +1 -1
  213. package/dist/core/types/base/SimpleClientArtifacts.model.d.ts.map +1 -1
  214. package/dist/core/types/shared/Model.model.d.ts +36 -0
  215. package/dist/core/types/shared/Model.model.d.ts.map +1 -1
  216. package/dist/core/utils/__tests__/applyDiffReportToClient.test.js +182 -0
  217. package/dist/core/utils/__tests__/buildMiraclesFromSemanticChanges.test.d.ts +2 -0
  218. package/dist/core/utils/__tests__/buildMiraclesFromSemanticChanges.test.d.ts.map +1 -0
  219. package/dist/core/utils/__tests__/buildMiraclesFromSemanticChanges.test.js +77 -0
  220. package/dist/core/utils/__tests__/expandOpenApiRefsForSemanticDiff.test.d.ts +2 -0
  221. package/dist/core/utils/__tests__/expandOpenApiRefsForSemanticDiff.test.d.ts.map +1 -0
  222. package/dist/core/utils/__tests__/expandOpenApiRefsForSemanticDiff.test.js +159 -0
  223. package/dist/core/utils/__tests__/loadDiffReport.test.js +131 -0
  224. package/dist/core/utils/__tests__/modelHelpers.test.js +27 -9
  225. package/dist/core/utils/__tests__/postProcessModelImports.test.js +1 -4
  226. package/dist/core/utils/__tests__/postProcessServiceImports.test.js +1 -4
  227. package/dist/core/utils/__tests__/prepareDtoModels.test.js +74 -2
  228. package/dist/core/utils/__tests__/registerHandlebarHelpers.test.js +27 -0
  229. package/dist/core/utils/__tests__/resolveClassesModeTypes.test.d.ts +2 -0
  230. package/dist/core/utils/__tests__/resolveClassesModeTypes.test.d.ts.map +1 -0
  231. package/dist/core/utils/__tests__/resolveClassesModeTypes.test.js +111 -0
  232. package/dist/core/utils/__tests__/semanticChangesToDiffEntries.test.d.ts +2 -0
  233. package/dist/core/utils/__tests__/semanticChangesToDiffEntries.test.d.ts.map +1 -0
  234. package/dist/core/utils/__tests__/semanticChangesToDiffEntries.test.js +68 -0
  235. package/dist/core/utils/__tests__/serviceHelpers.test.js +10 -11
  236. package/dist/core/utils/__tests__/sortByRequiredExtended.test.js +10 -27
  237. package/dist/core/utils/__tests__/templateRendering.test.js +71 -0
  238. package/dist/core/utils/adapters/__tests__/semanticToStructural.test.d.ts +2 -0
  239. package/dist/core/utils/adapters/__tests__/semanticToStructural.test.d.ts.map +1 -0
  240. package/dist/core/utils/adapters/__tests__/semanticToStructural.test.js +63 -0
  241. package/dist/core/utils/adapters/extractMiraclesFromSemantic.d.ts +10 -0
  242. package/dist/core/utils/adapters/extractMiraclesFromSemantic.d.ts.map +1 -0
  243. package/dist/core/utils/adapters/extractMiraclesFromSemantic.js +13 -0
  244. package/dist/core/utils/adapters/index.d.ts +4 -0
  245. package/dist/core/utils/adapters/index.d.ts.map +1 -0
  246. package/dist/core/utils/adapters/index.js +8 -0
  247. package/dist/core/utils/adapters/semanticToStructural.d.ts +12 -0
  248. package/dist/core/utils/adapters/semanticToStructural.d.ts.map +1 -0
  249. package/dist/core/utils/adapters/semanticToStructural.js +36 -0
  250. package/dist/core/utils/appendUniqueLinesToFile.js +1 -1
  251. package/dist/core/utils/applyDiffReportToClient.d.ts +13 -1
  252. package/dist/core/utils/applyDiffReportToClient.d.ts.map +1 -1
  253. package/dist/core/utils/applyDiffReportToClient.js +189 -109
  254. package/dist/core/utils/areEqual.d.ts +1 -1
  255. package/dist/core/utils/buildMiraclesFromSemanticChanges.d.ts +25 -0
  256. package/dist/core/utils/buildMiraclesFromSemanticChanges.d.ts.map +1 -0
  257. package/dist/core/utils/buildMiraclesFromSemanticChanges.js +146 -0
  258. package/dist/core/utils/expandOpenApiRefsForSemanticDiff.d.ts +23 -0
  259. package/dist/core/utils/expandOpenApiRefsForSemanticDiff.d.ts.map +1 -0
  260. package/dist/core/utils/expandOpenApiRefsForSemanticDiff.js +163 -0
  261. package/dist/core/utils/getOpenApiSpec.d.ts +18 -0
  262. package/dist/core/utils/getOpenApiSpec.d.ts.map +1 -1
  263. package/dist/core/utils/getOpenApiSpec.js +35 -0
  264. package/dist/core/utils/getOperationErrors.d.ts +2 -2
  265. package/dist/core/utils/getOperationErrors.d.ts.map +1 -1
  266. package/dist/core/utils/getOperationResults.d.ts +1 -1
  267. package/dist/core/utils/getPropertyGroupSimple.d.ts.map +1 -1
  268. package/dist/core/utils/getPropertyGroupSimple.js +1 -3
  269. package/dist/core/utils/isSubdirectory.d.ts.map +1 -1
  270. package/dist/core/utils/loadDiffReport.d.ts +11 -30
  271. package/dist/core/utils/loadDiffReport.d.ts.map +1 -1
  272. package/dist/core/utils/loadDiffReport.js +69 -3
  273. package/dist/core/utils/loadSemanticOpenApiSpec.d.ts +15 -0
  274. package/dist/core/utils/loadSemanticOpenApiSpec.d.ts.map +1 -0
  275. package/dist/core/utils/loadSemanticOpenApiSpec.js +61 -0
  276. package/dist/core/utils/modelHelpers.d.ts +13 -5
  277. package/dist/core/utils/modelHelpers.d.ts.map +1 -1
  278. package/dist/core/utils/modelHelpers.js +28 -23
  279. package/dist/core/utils/normalizeString.d.ts.map +1 -1
  280. package/dist/core/utils/normalizeString.js +1 -5
  281. package/dist/core/utils/postProcessServiceImports.d.ts.map +1 -1
  282. package/dist/core/utils/postProcessServiceImports.js +1 -3
  283. package/dist/core/utils/precompileTemplates.js +1 -0
  284. package/dist/core/utils/prepareAlias.d.ts +1 -1
  285. package/dist/core/utils/prepareDtoModels.d.ts +5 -0
  286. package/dist/core/utils/prepareDtoModels.d.ts.map +1 -1
  287. package/dist/core/utils/prepareDtoModels.js +56 -13
  288. package/dist/core/utils/registerHandlebarHelpers.d.ts +1 -0
  289. package/dist/core/utils/registerHandlebarHelpers.d.ts.map +1 -1
  290. package/dist/core/utils/registerHandlebarHelpers.js +3 -0
  291. package/dist/core/utils/registerHandlebarTemplates.d.ts +1 -0
  292. package/dist/core/utils/registerHandlebarTemplates.d.ts.map +1 -1
  293. package/dist/core/utils/resolveClassesModeTypes.d.ts +8 -0
  294. package/dist/core/utils/resolveClassesModeTypes.d.ts.map +1 -0
  295. package/dist/core/utils/resolveClassesModeTypes.js +77 -0
  296. package/dist/core/utils/semanticChangesToDiffEntries.d.ts +37 -0
  297. package/dist/core/utils/semanticChangesToDiffEntries.d.ts.map +1 -0
  298. package/dist/core/utils/semanticChangesToDiffEntries.js +99 -0
  299. package/dist/core/utils/semanticPointerToJsonPath.d.ts +7 -0
  300. package/dist/core/utils/semanticPointerToJsonPath.d.ts.map +1 -0
  301. package/dist/core/utils/semanticPointerToJsonPath.js +67 -0
  302. package/dist/core/utils/serviceHelpers.d.ts +6 -7
  303. package/dist/core/utils/serviceHelpers.d.ts.map +1 -1
  304. package/dist/core/utils/serviceHelpers.js +8 -25
  305. package/dist/core/utils/sortModelByName.d.ts +1 -1
  306. package/dist/core/utils/writeClientExecutor.d.ts +1 -2
  307. package/dist/core/utils/writeClientExecutor.d.ts.map +1 -1
  308. package/dist/core/utils/writeClientExecutor.js +2 -6
  309. package/dist/core/utils/writeClientModels.d.ts +1 -2
  310. package/dist/core/utils/writeClientModels.d.ts.map +1 -1
  311. package/dist/core/utils/writeClientModels.js +4 -6
  312. package/dist/core/utils/writeClientSchemas.d.ts +1 -3
  313. package/dist/core/utils/writeClientSchemas.d.ts.map +1 -1
  314. package/dist/core/utils/writeClientSchemas.js +2 -7
  315. package/dist/core/utils/writeClientServices.d.ts +15 -16
  316. package/dist/core/utils/writeClientServices.d.ts.map +1 -1
  317. package/dist/core/utils/writeClientServices.js +6 -13
  318. package/dist/templatesCompiled/client/exportModels.d.ts +17 -11
  319. package/dist/templatesCompiled/client/exportModels.d.ts.map +1 -1
  320. package/dist/templatesCompiled/client/exportModels.js +96 -49
  321. package/dist/templatesCompiled/client/exportService.d.ts +13 -10
  322. package/dist/templatesCompiled/client/exportService.d.ts.map +1 -1
  323. package/dist/templatesCompiled/client/exportService.js +95 -67
  324. package/dist/templatesCompiled/client/partials/header.d.ts +1 -0
  325. package/dist/templatesCompiled/client/partials/header.d.ts.map +1 -1
  326. package/dist/templatesCompiled/client/partials/header.js +11 -2
  327. package/package.json +130 -136
  328. package/dist/cli/analyzeDiff/buildLegacyReport.d.ts +0 -17
  329. package/dist/cli/analyzeDiff/buildLegacyReport.d.ts.map +0 -1
  330. package/dist/cli/analyzeDiff/buildLegacyReport.js +0 -54
  331. package/dist/cli/analyzeDiff/diffEngine.d.ts +0 -54
  332. package/dist/cli/analyzeDiff/diffEngine.d.ts.map +0 -1
  333. 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 "../types/OpenApiOperation.model";
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;AAwFF;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,CAqEjF"}
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;AAkCnE;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CA6BrH"}
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, "utf8");
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,CAChB,GAAG,EAAE,2BAA2B,KAC/B,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC;IACxG,iBAAiB,CAAC,EAAE,CAChB,GAAG,EAAE,8BAA8B,KAClC;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;CAC3I"}
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,CAC9C,KAAK,EAAE,iCAAiC,GACzC,OAAO,CAAC,kCAAkC,CAAC,CAmK7C"}
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
- change.path.includes('/tier') &&
187
- change.severity === 'non-breaking'));
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
- change.path.includes('/profile') &&
255
- change.severity === 'breaking'));
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 report = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)({
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
- type SemanticDiffSummary = {
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
- type SemanticDiffRecommendation = {
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
- type SemanticDiffChange = {
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
- * Creates semantic diff report between two OpenAPI specs.
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
- * Writes semantic diff report to JSON file and returns absolute path.
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,EAAE,sBAAsB,EAAE,gBAAgB,EAA2B,MAAM,uCAAuC,CAAC;AAC1H,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,KAAK,cAAc,GAAG,UAAU,GAAG,cAAc,GAAG,eAAe,CAAC;AAEpE,KAAK,mBAAmB,GAAG;IACvB,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,GAC/B,sBAAsB,GACtB,iCAAiC,GACjC,gCAAgC,GAChC,wBAAwB,CAAC;AAE/B,KAAK,0BAA0B,GAAG;IAC9B,MAAM,EAAE,gCAAgC,CAAC;IACzC,UAAU,EAAE,sBAAsB,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,gCAAgC,EAAE,CAAC;CAC/C,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,mCAAmC,UAAU,CAAC;AAE3D,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;CACjC,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC7C,CAAC;AA6yBF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,yBAA8B,GAAG,kBAAkB,CA2B9I;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAajH"}
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.keys()) {
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
- * Creates semantic diff report between two OpenAPI specs.
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
- * Writes semantic diff report to JSON file and returns absolute path.
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
- * Validates semantic diff report payload by JSON Schema contract.
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,WA6G1C,CAAC;AAEF;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,OAAO,GAAG,wCAAwC,CAc1G"}
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"}