ts-openapi-codegen 2.0.0-beta.9 → 2.1.0-beta.1

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 (525) hide show
  1. package/README.md +177 -18
  2. package/README.rus.md +177 -21
  3. package/dist/cli/analyzeDiff/__tests__/analyzeDiff.cli.test.d.ts +2 -0
  4. package/dist/cli/analyzeDiff/__tests__/analyzeDiff.cli.test.d.ts.map +1 -0
  5. package/dist/cli/analyzeDiff/__tests__/analyzeDiff.cli.test.js +365 -0
  6. package/dist/cli/analyzeDiff/__tests__/analyzeDiffRenameAndInvalidRegex.test.d.ts +2 -0
  7. package/dist/cli/analyzeDiff/__tests__/analyzeDiffRenameAndInvalidRegex.test.d.ts.map +1 -0
  8. package/dist/cli/analyzeDiff/__tests__/analyzeDiffRenameAndInvalidRegex.test.js +142 -0
  9. package/dist/cli/analyzeDiff/__tests__/analyzeDiffTypeCoercion.test.d.ts +2 -0
  10. package/dist/cli/analyzeDiff/__tests__/analyzeDiffTypeCoercion.test.d.ts.map +1 -0
  11. package/dist/cli/analyzeDiff/__tests__/analyzeDiffTypeCoercion.test.js +137 -0
  12. package/dist/cli/analyzeDiff/analyzeDiff.d.ts +17 -0
  13. package/dist/cli/analyzeDiff/analyzeDiff.d.ts.map +1 -0
  14. package/dist/cli/analyzeDiff/analyzeDiff.js +105 -0
  15. package/dist/cli/analyzeDiff/buildLegacyReport.d.ts +17 -0
  16. package/dist/cli/analyzeDiff/buildLegacyReport.d.ts.map +1 -0
  17. package/dist/cli/analyzeDiff/buildLegacyReport.js +54 -0
  18. package/dist/cli/analyzeDiff/ciSummary.d.ts +6 -0
  19. package/dist/cli/analyzeDiff/ciSummary.d.ts.map +1 -0
  20. package/dist/cli/analyzeDiff/ciSummary.js +20 -0
  21. package/dist/cli/analyzeDiff/diffEngine.d.ts +54 -0
  22. package/dist/cli/analyzeDiff/diffEngine.d.ts.map +1 -0
  23. package/dist/cli/analyzeDiff/diffEngine.js +209 -0
  24. package/dist/cli/analyzeDiff/ignoreRules.d.ts +33 -0
  25. package/dist/cli/analyzeDiff/ignoreRules.d.ts.map +1 -0
  26. package/dist/cli/analyzeDiff/ignoreRules.js +93 -0
  27. package/dist/cli/analyzeDiff/ignoreSemanticChanges.d.ts +10 -0
  28. package/dist/cli/analyzeDiff/ignoreSemanticChanges.d.ts.map +1 -0
  29. package/dist/cli/analyzeDiff/ignoreSemanticChanges.js +84 -0
  30. package/dist/cli/analyzeDiff/logLegacyReport.d.ts +6 -0
  31. package/dist/cli/analyzeDiff/logLegacyReport.d.ts.map +1 -0
  32. package/dist/cli/analyzeDiff/logLegacyReport.js +29 -0
  33. package/dist/cli/analyzeDiff/miracles.d.ts +89 -0
  34. package/dist/cli/analyzeDiff/miracles.d.ts.map +1 -0
  35. package/dist/cli/analyzeDiff/miracles.js +325 -0
  36. package/dist/cli/analyzeDiff/pluginPaths.d.ts +5 -0
  37. package/dist/cli/analyzeDiff/pluginPaths.d.ts.map +1 -0
  38. package/dist/cli/analyzeDiff/pluginPaths.js +13 -0
  39. package/dist/cli/analyzeDiff/report.d.ts +3 -0
  40. package/dist/cli/analyzeDiff/report.d.ts.map +1 -0
  41. package/dist/cli/analyzeDiff/report.js +7 -0
  42. package/dist/cli/analyzeDiff/semanticDiffContext.d.ts +6 -0
  43. package/dist/cli/analyzeDiff/semanticDiffContext.d.ts.map +1 -0
  44. package/dist/cli/analyzeDiff/semanticDiffContext.js +16 -0
  45. package/dist/cli/analyzeDiff/specParser.d.ts +22 -0
  46. package/dist/cli/analyzeDiff/specParser.d.ts.map +1 -0
  47. package/dist/cli/analyzeDiff/specParser.js +80 -0
  48. package/dist/cli/analyzeDiff/types.d.ts +61 -0
  49. package/dist/cli/analyzeDiff/types.d.ts.map +1 -0
  50. package/dist/cli/analyzeDiff/types.js +2 -0
  51. package/dist/cli/analyzeDiff/writeLegacyReport.d.ts +6 -0
  52. package/dist/cli/analyzeDiff/writeLegacyReport.d.ts.map +1 -0
  53. package/dist/cli/analyzeDiff/writeLegacyReport.js +21 -0
  54. package/dist/cli/checkAndUpdateConfig/checkConfig.d.ts.map +1 -1
  55. package/dist/cli/checkAndUpdateConfig/checkConfig.js +13 -8
  56. package/dist/cli/checkAndUpdateConfig/constants.d.ts +0 -9
  57. package/dist/cli/checkAndUpdateConfig/constants.d.ts.map +1 -1
  58. package/dist/cli/checkAndUpdateConfig/constants.js +1 -10
  59. package/dist/cli/checkAndUpdateConfig/updateConfig.d.ts.map +1 -1
  60. package/dist/cli/checkAndUpdateConfig/updateConfig.js +11 -7
  61. package/dist/cli/checkAndUpdateConfig/utils/selectConfigAction.d.ts.map +1 -1
  62. package/dist/cli/checkAndUpdateConfig/utils/selectConfigAction.js +6 -3
  63. package/dist/cli/checkAndUpdateConfig/utils/updateExistingConfigFile.d.ts.map +1 -1
  64. package/dist/cli/checkAndUpdateConfig/utils/updateExistingConfigFile.js +3 -2
  65. package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.d.ts.map +1 -1
  66. package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.js +5 -0
  67. package/dist/cli/checkAndUpdateConfig/utils/writeExampleConfigFile.d.ts.map +1 -1
  68. package/dist/cli/checkAndUpdateConfig/utils/writeExampleConfigFile.js +2 -2
  69. package/dist/cli/generateOpenApiClient/__tests__/generateOpenApiClient.strict.test.d.ts +2 -0
  70. package/dist/cli/generateOpenApiClient/__tests__/generateOpenApiClient.strict.test.d.ts.map +1 -0
  71. package/dist/cli/generateOpenApiClient/__tests__/generateOpenApiClient.strict.test.js +152 -0
  72. package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts +6 -2
  73. package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts.map +1 -1
  74. package/dist/cli/generateOpenApiClient/generateOpenApiClient.js +70 -22
  75. package/dist/cli/index.js +62 -5
  76. package/dist/cli/initOpenApiConfig/init.d.ts.map +1 -1
  77. package/dist/cli/initOpenApiConfig/init.js +19 -6
  78. package/dist/cli/initOpenApiConfig/initConfig.d.ts +1 -0
  79. package/dist/cli/initOpenApiConfig/initConfig.d.ts.map +1 -1
  80. package/dist/cli/initOpenApiConfig/initConfig.js +47 -24
  81. package/dist/cli/initOpenApiConfig/initCustomRequest.d.ts +8 -1
  82. package/dist/cli/initOpenApiConfig/initCustomRequest.d.ts.map +1 -1
  83. package/dist/cli/initOpenApiConfig/initCustomRequest.js +40 -8
  84. package/dist/cli/initOpenApiConfig/utils/buildConfig.d.ts.map +1 -1
  85. package/dist/cli/initOpenApiConfig/utils/buildConfig.js +60 -0
  86. package/dist/cli/initOpenApiConfig/utils/validateSpecFile.d.ts.map +1 -1
  87. package/dist/cli/initOpenApiConfig/utils/validateSpecFile.js +2 -1
  88. package/dist/cli/initOpenApiConfig/utils/writeConfigFile.d.ts.map +1 -1
  89. package/dist/cli/initOpenApiConfig/utils/writeConfigFile.js +2 -1
  90. package/dist/cli/interactive/confirmDialog.d.ts.map +1 -1
  91. package/dist/cli/interactive/confirmDialog.js +3 -2
  92. package/dist/cli/interactive/constants.d.ts +2 -2
  93. package/dist/cli/interactive/constants.js +8 -8
  94. package/dist/cli/interactive/selectDialog.d.ts.map +1 -1
  95. package/dist/cli/interactive/selectDialog.js +11 -6
  96. package/dist/cli/previewChanges/previewChanges.d.ts.map +1 -1
  97. package/dist/cli/previewChanges/previewChanges.js +151 -39
  98. package/dist/cli/previewChanges/utils/updateOutputPaths.d.ts.map +1 -1
  99. package/dist/cli/previewChanges/utils/updateOutputPaths.js +6 -0
  100. package/dist/cli/schemas/analyzeDiff.d.ts +14 -0
  101. package/dist/cli/schemas/analyzeDiff.d.ts.map +1 -0
  102. package/dist/cli/schemas/analyzeDiff.js +28 -0
  103. package/dist/cli/schemas/generate.d.ts +9 -0
  104. package/dist/cli/schemas/generate.d.ts.map +1 -1
  105. package/dist/cli/schemas/generate.js +9 -0
  106. package/dist/cli/schemas/index.d.ts +3 -1
  107. package/dist/cli/schemas/index.d.ts.map +1 -1
  108. package/dist/cli/schemas/index.js +2 -0
  109. package/dist/common/Consts.d.ts +1 -0
  110. package/dist/common/Consts.d.ts.map +1 -1
  111. package/dist/common/Consts.js +19 -2
  112. package/dist/common/Logger.d.ts +20 -1
  113. package/dist/common/Logger.d.ts.map +1 -1
  114. package/dist/common/Logger.js +70 -9
  115. package/dist/common/LoggerMessages.d.ts +136 -33
  116. package/dist/common/LoggerMessages.d.ts.map +1 -1
  117. package/dist/common/LoggerMessages.js +119 -45
  118. package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.d.ts +1 -1
  119. package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.d.ts.map +1 -1
  120. package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.js +20 -4
  121. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.d.ts +4 -0
  122. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.d.ts.map +1 -1
  123. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.d.ts +10 -2
  124. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.d.ts.map +1 -1
  125. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.d.ts +10 -2
  126. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.d.ts.map +1 -1
  127. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV3.d.ts +10 -2
  128. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV3.d.ts.map +1 -1
  129. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV4.d.ts +77 -0
  130. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV4.d.ts.map +1 -0
  131. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV4.js +41 -0
  132. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts +79 -0
  133. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts.map +1 -0
  134. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.js +19 -0
  135. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts +326 -28
  136. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts.map +1 -1
  137. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.js +15 -17
  138. package/dist/common/VersionedSchema/CommonSchemas.d.ts +52 -4
  139. package/dist/common/VersionedSchema/CommonSchemas.d.ts.map +1 -1
  140. package/dist/common/VersionedSchema/CommonSchemas.js +48 -7
  141. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV1.d.ts +6 -2
  142. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV1.d.ts.map +1 -1
  143. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV2.d.ts +4 -0
  144. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV2.d.ts.map +1 -1
  145. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.d.ts +4 -0
  146. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.d.ts.map +1 -1
  147. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV4.d.ts +6 -2
  148. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV4.d.ts.map +1 -1
  149. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV5.d.ts +6 -2
  150. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV5.d.ts.map +1 -1
  151. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV1.d.ts +6 -2
  152. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV1.d.ts.map +1 -1
  153. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV2.d.ts +4 -0
  154. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV2.d.ts.map +1 -1
  155. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV3.d.ts +4 -0
  156. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV3.d.ts.map +1 -1
  157. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV4.d.ts +6 -2
  158. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV4.d.ts.map +1 -1
  159. package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.d.ts.map +1 -1
  160. package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.js +40 -1
  161. package/dist/common/VersionedSchema/Utils/__tests__/allUtils.test.d.ts +2 -0
  162. package/dist/common/VersionedSchema/Utils/__tests__/allUtils.test.d.ts.map +1 -0
  163. package/dist/common/VersionedSchema/Utils/__tests__/allUtils.test.js +185 -0
  164. package/dist/common/VersionedSchema/Utils/__tests__/compareShapes.test.js +20 -3
  165. package/dist/common/VersionedSchema/Utils/__tests__/migrateDataToLatestSchemaVersion.test.js +19 -1
  166. package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.d.ts +4 -0
  167. package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.d.ts.map +1 -1
  168. package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.js +68 -23
  169. package/dist/common/VersionedSchema/Utils/getUniqueKeysFromSchemas.d.ts +1 -1
  170. package/dist/common/VersionedSchema/Utils/getUniqueKeysFromSchemas.js +1 -1
  171. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.d.ts +10 -0
  172. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.d.ts.map +1 -1
  173. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.js +34 -15
  174. package/dist/common/__tests__/Logger.test.d.ts +2 -0
  175. package/dist/common/__tests__/Logger.test.d.ts.map +1 -0
  176. package/dist/common/__tests__/Logger.test.js +100 -0
  177. package/dist/common/utils/__tests__/convertArrayToObject.test.js +67 -169
  178. package/dist/common/utils/__tests__/eslintFix.test.d.ts +2 -0
  179. package/dist/common/utils/__tests__/eslintFix.test.d.ts.map +1 -0
  180. package/dist/common/utils/__tests__/eslintFix.test.js +134 -0
  181. package/dist/common/utils/__tests__/format.test.d.ts +2 -0
  182. package/dist/common/utils/__tests__/format.test.d.ts.map +1 -0
  183. package/dist/common/utils/__tests__/format.test.js +90 -0
  184. package/dist/common/utils/convertArrayToObject.d.ts.map +1 -1
  185. package/dist/common/utils/convertArrayToObject.js +54 -14
  186. package/dist/common/utils/eslintFix.d.ts +7 -0
  187. package/dist/common/utils/eslintFix.d.ts.map +1 -0
  188. package/dist/common/utils/eslintFix.js +78 -0
  189. package/dist/common/utils/format.d.ts +1 -1
  190. package/dist/common/utils/format.d.ts.map +1 -1
  191. package/dist/common/utils/format.js +39 -15
  192. package/dist/common/utils/jsonPath.d.ts +5 -0
  193. package/dist/common/utils/jsonPath.d.ts.map +1 -0
  194. package/dist/common/utils/jsonPath.js +27 -0
  195. package/dist/common/utils/normalizeObject.d.ts +2 -0
  196. package/dist/common/utils/normalizeObject.d.ts.map +1 -0
  197. package/dist/common/utils/normalizeObject.js +63 -0
  198. package/dist/core/Context.d.ts +8 -1
  199. package/dist/core/Context.d.ts.map +1 -1
  200. package/dist/core/Context.js +23 -4
  201. package/dist/core/OpenApiClient.d.ts +2 -0
  202. package/dist/core/OpenApiClient.d.ts.map +1 -1
  203. package/dist/core/OpenApiClient.js +127 -6
  204. package/dist/core/WriteClient.d.ts +12 -1
  205. package/dist/core/WriteClient.d.ts.map +1 -1
  206. package/dist/core/WriteClient.js +83 -8
  207. package/dist/core/__tests__/WriteClient.test.js +6 -1
  208. package/dist/core/api/v2/parser/__tests__/getModel.test.d.ts +2 -0
  209. package/dist/core/api/v2/parser/__tests__/getModel.test.d.ts.map +1 -0
  210. package/dist/core/api/v2/parser/__tests__/getModel.test.js +34 -0
  211. package/dist/core/api/v2/parser/getModel.d.ts.map +1 -1
  212. package/dist/core/api/v2/parser/getModel.js +6 -1
  213. package/dist/core/api/v2/parser/getOperation.d.ts.map +1 -1
  214. package/dist/core/api/v2/parser/getOperation.js +2 -0
  215. package/dist/core/api/v2/parser/getOperationResponses.d.ts.map +1 -1
  216. package/dist/core/api/v2/parser/getOperationResponses.js +9 -1
  217. package/dist/core/api/v2/parser/getType.d.ts.map +1 -1
  218. package/dist/core/api/v2/parser/getType.js +2 -1
  219. package/dist/core/api/v2/types/OpenApiSchema.model.d.ts +2 -0
  220. package/dist/core/api/v2/types/OpenApiSchema.model.d.ts.map +1 -1
  221. package/dist/core/api/v3/parser/__tests__/getContent.test.d.ts +2 -0
  222. package/dist/core/api/v3/parser/__tests__/getContent.test.d.ts.map +1 -0
  223. package/dist/core/api/v3/parser/__tests__/getContent.test.js +65 -0
  224. package/dist/core/api/v3/parser/__tests__/getModel.test.d.ts +2 -0
  225. package/dist/core/api/v3/parser/__tests__/getModel.test.d.ts.map +1 -0
  226. package/dist/core/api/v3/parser/__tests__/getModel.test.js +34 -0
  227. package/dist/core/api/v3/parser/getContent.d.ts.map +1 -1
  228. package/dist/core/api/v3/parser/getContent.js +21 -11
  229. package/dist/core/api/v3/parser/getModel.d.ts.map +1 -1
  230. package/dist/core/api/v3/parser/getModel.js +6 -1
  231. package/dist/core/api/v3/parser/getOperation.d.ts.map +1 -1
  232. package/dist/core/api/v3/parser/getOperation.js +2 -0
  233. package/dist/core/api/v3/parser/getOperationResponses.d.ts.map +1 -1
  234. package/dist/core/api/v3/parser/getOperationResponses.js +9 -1
  235. package/dist/core/api/v3/parser/getType.d.ts.map +1 -1
  236. package/dist/core/api/v3/parser/getType.js +2 -1
  237. package/dist/core/api/v3/types/OpenApiSchema.model.d.ts +2 -0
  238. package/dist/core/api/v3/types/OpenApiSchema.model.d.ts.map +1 -1
  239. package/dist/core/governance/__tests__/evaluateGovernanceRules.test.d.ts +2 -0
  240. package/dist/core/governance/__tests__/evaluateGovernanceRules.test.d.ts.map +1 -0
  241. package/dist/core/governance/__tests__/evaluateGovernanceRules.test.js +100 -0
  242. package/dist/core/governance/__tests__/loadGovernanceConfig.test.d.ts +2 -0
  243. package/dist/core/governance/__tests__/loadGovernanceConfig.test.d.ts.map +1 -0
  244. package/dist/core/governance/__tests__/loadGovernanceConfig.test.js +71 -0
  245. package/dist/core/governance/evaluateGovernanceRules.d.ts +42 -0
  246. package/dist/core/governance/evaluateGovernanceRules.d.ts.map +1 -0
  247. package/dist/core/governance/evaluateGovernanceRules.js +134 -0
  248. package/dist/core/governance/governanceConfigSchema.d.ts +4 -0
  249. package/dist/core/governance/governanceConfigSchema.d.ts.map +1 -0
  250. package/dist/core/governance/governanceConfigSchema.js +39 -0
  251. package/dist/core/governance/loadGovernanceConfig.d.ts +7 -0
  252. package/dist/core/governance/loadGovernanceConfig.d.ts.map +1 -0
  253. package/dist/core/governance/loadGovernanceConfig.js +60 -0
  254. package/dist/core/index.d.ts +3 -0
  255. package/dist/core/index.d.ts.map +1 -1
  256. package/dist/core/index.js +4 -2
  257. package/dist/core/plugins/GeneratorPlugin.model.d.ts +42 -0
  258. package/dist/core/plugins/GeneratorPlugin.model.d.ts.map +1 -0
  259. package/dist/core/plugins/GeneratorPlugin.model.js +2 -0
  260. package/dist/core/plugins/__tests__/applySemanticDiffPluginHooks.test.d.ts +2 -0
  261. package/dist/core/plugins/__tests__/applySemanticDiffPluginHooks.test.d.ts.map +1 -0
  262. package/dist/core/plugins/__tests__/applySemanticDiffPluginHooks.test.js +115 -0
  263. package/dist/core/plugins/__tests__/loadGeneratorPlugins.test.d.ts +2 -0
  264. package/dist/core/plugins/__tests__/loadGeneratorPlugins.test.d.ts.map +1 -0
  265. package/dist/core/plugins/__tests__/loadGeneratorPlugins.test.js +62 -0
  266. package/dist/core/plugins/applySemanticDiffPluginHooks.d.ts +28 -0
  267. package/dist/core/plugins/applySemanticDiffPluginHooks.d.ts.map +1 -0
  268. package/dist/core/plugins/applySemanticDiffPluginHooks.js +160 -0
  269. package/dist/core/plugins/builtins/xTypescriptTypePlugin.d.ts +6 -0
  270. package/dist/core/plugins/builtins/xTypescriptTypePlugin.d.ts.map +1 -0
  271. package/dist/core/plugins/builtins/xTypescriptTypePlugin.js +13 -0
  272. package/dist/core/plugins/getBuiltinPlugins.d.ts +6 -0
  273. package/dist/core/plugins/getBuiltinPlugins.d.ts.map +1 -0
  274. package/dist/core/plugins/getBuiltinPlugins.js +10 -0
  275. package/dist/core/plugins/index.d.ts +4 -0
  276. package/dist/core/plugins/index.d.ts.map +1 -0
  277. package/dist/core/plugins/index.js +5 -0
  278. package/dist/core/plugins/loadGeneratorPlugins.d.ts +6 -0
  279. package/dist/core/plugins/loadGeneratorPlugins.d.ts.map +1 -0
  280. package/dist/core/plugins/loadGeneratorPlugins.js +94 -0
  281. package/dist/core/semanticDiff/__tests__/analyzeOpenApiDiff.test.d.ts +2 -0
  282. package/dist/core/semanticDiff/__tests__/analyzeOpenApiDiff.test.d.ts.map +1 -0
  283. package/dist/core/semanticDiff/__tests__/analyzeOpenApiDiff.test.js +537 -0
  284. package/dist/core/semanticDiff/__tests__/semanticDiffReportSchema.test.d.ts +2 -0
  285. package/dist/core/semanticDiff/__tests__/semanticDiffReportSchema.test.d.ts.map +1 -0
  286. package/dist/core/semanticDiff/__tests__/semanticDiffReportSchema.test.js +66 -0
  287. package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts +45 -0
  288. package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts.map +1 -0
  289. package/dist/core/semanticDiff/analyzeOpenApiDiff.js +640 -0
  290. package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts +11 -0
  291. package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts.map +1 -0
  292. package/dist/core/semanticDiff/semanticDiffReportSchema.js +132 -0
  293. package/dist/core/strict/__tests__/validateOpenApiStrict.test.d.ts +2 -0
  294. package/dist/core/strict/__tests__/validateOpenApiStrict.test.d.ts.map +1 -0
  295. package/dist/core/strict/__tests__/validateOpenApiStrict.test.js +156 -0
  296. package/dist/core/strict/validateOpenApiStrict.d.ts +43 -0
  297. package/dist/core/strict/validateOpenApiStrict.d.ts.map +1 -0
  298. package/dist/core/strict/validateOpenApiStrict.js +253 -0
  299. package/dist/core/types/base/ClientArtifacts.model.d.ts +2 -0
  300. package/dist/core/types/base/ClientArtifacts.model.d.ts.map +1 -1
  301. package/dist/core/types/base/Templates.model.d.ts +4 -1
  302. package/dist/core/types/base/Templates.model.d.ts.map +1 -1
  303. package/dist/core/types/enums/EmptySchemaStrategy.enum.d.ts +6 -0
  304. package/dist/core/types/enums/EmptySchemaStrategy.enum.d.ts.map +1 -0
  305. package/dist/core/types/enums/EmptySchemaStrategy.enum.js +9 -0
  306. package/dist/core/types/enums/ModelsMode.enum.d.ts +5 -0
  307. package/dist/core/types/enums/ModelsMode.enum.d.ts.map +1 -0
  308. package/dist/core/types/enums/ModelsMode.enum.js +8 -0
  309. package/dist/core/types/shared/Client.model.d.ts +2 -0
  310. package/dist/core/types/shared/Client.model.d.ts.map +1 -1
  311. package/dist/core/types/shared/DiffInfo.model.d.ts +13 -0
  312. package/dist/core/types/shared/DiffInfo.model.d.ts.map +1 -0
  313. package/dist/core/types/shared/DiffInfo.model.js +2 -0
  314. package/dist/core/types/shared/Miracle.model.d.ts +13 -0
  315. package/dist/core/types/shared/Miracle.model.d.ts.map +1 -0
  316. package/dist/core/types/shared/Miracle.model.js +2 -0
  317. package/dist/core/types/shared/Model.model.d.ts +23 -0
  318. package/dist/core/types/shared/Model.model.d.ts.map +1 -1
  319. package/dist/core/types/shared/Operation.model.d.ts +5 -0
  320. package/dist/core/types/shared/Operation.model.d.ts.map +1 -1
  321. package/dist/core/utils/__mocks__/templates.d.ts.map +1 -1
  322. package/dist/core/utils/__mocks__/templates.js +9 -0
  323. package/dist/core/utils/__tests__/applyDiffReportToClient.test.d.ts +2 -0
  324. package/dist/core/utils/__tests__/applyDiffReportToClient.test.d.ts.map +1 -0
  325. package/dist/core/utils/__tests__/applyDiffReportToClient.test.js +108 -0
  326. package/dist/core/utils/__tests__/getMappedType.test.js +2 -0
  327. package/dist/core/utils/__tests__/getOperationResponseCode.test.js +7 -2
  328. package/dist/core/utils/__tests__/getOperationResults.test.d.ts +2 -0
  329. package/dist/core/utils/__tests__/getOperationResults.test.d.ts.map +1 -0
  330. package/dist/core/utils/__tests__/getOperationResults.test.js +43 -0
  331. package/dist/core/utils/__tests__/getRelativeModelPath.test.d.ts +2 -0
  332. package/dist/core/utils/__tests__/getRelativeModelPath.test.d.ts.map +1 -0
  333. package/dist/core/utils/__tests__/getRelativeModelPath.test.js +27 -0
  334. package/dist/core/utils/__tests__/modelHelpers.test.d.ts +2 -0
  335. package/dist/core/utils/__tests__/modelHelpers.test.d.ts.map +1 -0
  336. package/dist/core/utils/__tests__/modelHelpers.test.js +151 -0
  337. package/dist/core/utils/__tests__/postProcessModelImports.test.d.ts +2 -0
  338. package/dist/core/utils/__tests__/postProcessModelImports.test.d.ts.map +1 -0
  339. package/dist/core/utils/__tests__/postProcessModelImports.test.js +67 -0
  340. package/dist/core/utils/__tests__/postProcessServiceImports.test.d.ts +2 -0
  341. package/dist/core/utils/__tests__/postProcessServiceImports.test.d.ts.map +1 -0
  342. package/dist/core/utils/__tests__/postProcessServiceImports.test.js +26 -0
  343. package/dist/core/utils/__tests__/prepareDtoModels.test.d.ts +2 -0
  344. package/dist/core/utils/__tests__/prepareDtoModels.test.d.ts.map +1 -0
  345. package/dist/core/utils/__tests__/prepareDtoModels.test.js +116 -0
  346. package/dist/core/utils/__tests__/resolveRefPath.test.d.ts +2 -0
  347. package/dist/core/utils/__tests__/resolveRefPath.test.d.ts.map +1 -0
  348. package/dist/core/utils/__tests__/resolveRefPath.test.js +22 -0
  349. package/dist/core/utils/__tests__/serviceHelpers.test.d.ts +2 -0
  350. package/dist/core/utils/__tests__/serviceHelpers.test.d.ts.map +1 -0
  351. package/dist/core/utils/__tests__/serviceHelpers.test.js +122 -0
  352. package/dist/core/utils/__tests__/writeClientExecutor.test.d.ts +2 -0
  353. package/dist/core/utils/__tests__/writeClientExecutor.test.d.ts.map +1 -0
  354. package/dist/core/utils/__tests__/writeClientExecutor.test.js +20 -0
  355. package/dist/core/utils/__tests__/writeClientModels.test.js +50 -0
  356. package/dist/core/utils/__tests__/writeClientSchemas.test.js +2 -0
  357. package/dist/core/utils/applyDiffReportToClient.d.ts +14 -0
  358. package/dist/core/utils/applyDiffReportToClient.d.ts.map +1 -0
  359. package/dist/core/utils/applyDiffReportToClient.js +367 -0
  360. package/dist/core/utils/getMappedType.d.ts.map +1 -1
  361. package/dist/core/utils/getMappedType.js +2 -0
  362. package/dist/core/utils/getOperationResponseCode.d.ts.map +1 -1
  363. package/dist/core/utils/getOperationResponseCode.js +10 -8
  364. package/dist/core/utils/getRelativeModelPath.d.ts +9 -0
  365. package/dist/core/utils/getRelativeModelPath.d.ts.map +1 -0
  366. package/dist/core/utils/getRelativeModelPath.js +37 -0
  367. package/dist/core/utils/loadDiffReport.d.ts +39 -0
  368. package/dist/core/utils/loadDiffReport.d.ts.map +1 -0
  369. package/dist/core/utils/loadDiffReport.js +51 -0
  370. package/dist/core/utils/modelHelpers.d.ts.map +1 -1
  371. package/dist/core/utils/modelHelpers.js +37 -3
  372. package/dist/core/utils/postProcessModelImports.d.ts.map +1 -1
  373. package/dist/core/utils/postProcessModelImports.js +14 -1
  374. package/dist/core/utils/postProcessServiceImports.d.ts.map +1 -1
  375. package/dist/core/utils/postProcessServiceImports.js +1 -2
  376. package/dist/core/utils/precompileTemplates.js +1 -0
  377. package/dist/core/utils/prepareDtoModels.d.ts +3 -0
  378. package/dist/core/utils/prepareDtoModels.d.ts.map +1 -0
  379. package/dist/core/utils/prepareDtoModels.js +189 -0
  380. package/dist/core/utils/registerHandlebarHelpers.d.ts.map +1 -1
  381. package/dist/core/utils/registerHandlebarHelpers.js +29 -1
  382. package/dist/core/utils/registerHandlebarTemplates.d.ts.map +1 -1
  383. package/dist/core/utils/registerHandlebarTemplates.js +48 -41
  384. package/dist/core/utils/resolveRefPath.d.ts.map +1 -1
  385. package/dist/core/utils/resolveRefPath.js +1 -4
  386. package/dist/core/utils/validateRawOptions.d.ts +1 -1
  387. package/dist/core/utils/validateRawOptions.d.ts.map +1 -1
  388. package/dist/core/utils/validateRawOptions.js +4 -2
  389. package/dist/core/utils/writeClientCore.d.ts +2 -0
  390. package/dist/core/utils/writeClientCore.d.ts.map +1 -1
  391. package/dist/core/utils/writeClientCore.js +6 -1
  392. package/dist/core/utils/writeClientCoreIndex.d.ts +1 -0
  393. package/dist/core/utils/writeClientCoreIndex.d.ts.map +1 -1
  394. package/dist/core/utils/writeClientCoreIndex.js +2 -2
  395. package/dist/core/utils/writeClientExecutor.d.ts +6 -1
  396. package/dist/core/utils/writeClientExecutor.d.ts.map +1 -1
  397. package/dist/core/utils/writeClientExecutor.js +22 -3
  398. package/dist/core/utils/writeClientFullIndex.d.ts.map +1 -1
  399. package/dist/core/utils/writeClientFullIndex.js +3 -1
  400. package/dist/core/utils/writeClientModels.d.ts +6 -0
  401. package/dist/core/utils/writeClientModels.d.ts.map +1 -1
  402. package/dist/core/utils/writeClientModels.js +24 -3
  403. package/dist/core/utils/writeClientModelsIndex.d.ts +2 -0
  404. package/dist/core/utils/writeClientModelsIndex.d.ts.map +1 -1
  405. package/dist/core/utils/writeClientModelsIndex.js +2 -2
  406. package/dist/core/utils/writeClientSchemas.d.ts +6 -1
  407. package/dist/core/utils/writeClientSchemas.d.ts.map +1 -1
  408. package/dist/core/utils/writeClientSchemas.js +16 -3
  409. package/dist/core/utils/writeClientServices.d.ts +2 -0
  410. package/dist/core/utils/writeClientServices.d.ts.map +1 -1
  411. package/dist/core/utils/writeClientServices.js +6 -2
  412. package/dist/templatesCompiled/cli/openApiConfig.d.ts +4 -1
  413. package/dist/templatesCompiled/cli/openApiConfig.d.ts.map +1 -1
  414. package/dist/templatesCompiled/cli/openApiConfig.js +88 -37
  415. package/dist/templatesCompiled/client/core/ApiError.js +1 -1
  416. package/dist/templatesCompiled/client/core/ApiRequestOptions.js +1 -1
  417. package/dist/templatesCompiled/client/core/ApiResult.js +1 -1
  418. package/dist/templatesCompiled/client/core/BaseDto.d.ts +8 -0
  419. package/dist/templatesCompiled/client/core/BaseDto.d.ts.map +1 -0
  420. package/dist/templatesCompiled/client/core/BaseDto.js +18 -0
  421. package/dist/templatesCompiled/client/core/axios/getResponseBody.js +1 -1
  422. package/dist/templatesCompiled/client/core/axios/request.js +3 -3
  423. package/dist/templatesCompiled/client/core/axios/sendRequest.js +4 -4
  424. package/dist/templatesCompiled/client/core/dtoUtils.d.ts +8 -0
  425. package/dist/templatesCompiled/client/core/dtoUtils.d.ts.map +1 -0
  426. package/dist/templatesCompiled/client/core/dtoUtils.js +18 -0
  427. package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.d.ts +2 -0
  428. package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.d.ts.map +1 -1
  429. package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.js +13 -8
  430. package/dist/templatesCompiled/client/core/executor/requestExecutor.js +1 -1
  431. package/dist/templatesCompiled/client/core/fetch/getResponseBody.js +1 -1
  432. package/dist/templatesCompiled/client/core/fetch/request.js +3 -3
  433. package/dist/templatesCompiled/client/core/functions/catchErrors.js +1 -1
  434. package/dist/templatesCompiled/client/core/functions/isBinary.js +1 -1
  435. package/dist/templatesCompiled/client/core/interceptors/withInterceptors.js +1 -1
  436. package/dist/templatesCompiled/client/core/node/getResponseBody.js +1 -1
  437. package/dist/templatesCompiled/client/core/node/request.js +3 -3
  438. package/dist/templatesCompiled/client/core/xhr/getResponseBody.js +1 -1
  439. package/dist/templatesCompiled/client/core/xhr/request.js +3 -3
  440. package/dist/templatesCompiled/client/core/xhr/sendRequest.js +4 -4
  441. package/dist/templatesCompiled/client/exportClient.d.ts +4 -0
  442. package/dist/templatesCompiled/client/exportClient.d.ts.map +1 -1
  443. package/dist/templatesCompiled/client/exportClient.js +51 -13
  444. package/dist/templatesCompiled/client/exportModels.d.ts +34 -0
  445. package/dist/templatesCompiled/client/exportModels.d.ts.map +1 -0
  446. package/dist/templatesCompiled/client/exportModels.js +280 -0
  447. package/dist/templatesCompiled/client/exportSchema.d.ts +5 -1
  448. package/dist/templatesCompiled/client/exportSchema.d.ts.map +1 -1
  449. package/dist/templatesCompiled/client/exportSchema.js +37 -7
  450. package/dist/templatesCompiled/client/exportService.d.ts +9 -4
  451. package/dist/templatesCompiled/client/exportService.d.ts.map +1 -1
  452. package/dist/templatesCompiled/client/exportService.js +96 -37
  453. package/dist/templatesCompiled/client/indexCore.d.ts +3 -1
  454. package/dist/templatesCompiled/client/indexCore.d.ts.map +1 -1
  455. package/dist/templatesCompiled/client/indexCore.js +13 -2
  456. package/dist/templatesCompiled/client/indexFull.d.ts +10 -7
  457. package/dist/templatesCompiled/client/indexFull.d.ts.map +1 -1
  458. package/dist/templatesCompiled/client/indexFull.js +54 -33
  459. package/dist/templatesCompiled/client/indexModels.d.ts +7 -5
  460. package/dist/templatesCompiled/client/indexModels.d.ts.map +1 -1
  461. package/dist/templatesCompiled/client/indexModels.js +27 -18
  462. package/dist/templatesCompiled/client/indexSimple.d.ts +1 -0
  463. package/dist/templatesCompiled/client/indexSimple.d.ts.map +1 -1
  464. package/dist/templatesCompiled/client/indexSimple.js +4 -1
  465. package/dist/templatesCompiled/client/joi/exportSchema.js +5 -5
  466. package/dist/templatesCompiled/client/joi/partials/joiSchema.js +7 -7
  467. package/dist/templatesCompiled/client/joi/partials/joiSchemaComposition.js +4 -4
  468. package/dist/templatesCompiled/client/joi/partials/joiSchemaGeneric.d.ts +27 -19
  469. package/dist/templatesCompiled/client/joi/partials/joiSchemaGeneric.d.ts.map +1 -1
  470. package/dist/templatesCompiled/client/joi/partials/joiSchemaGeneric.js +144 -63
  471. package/dist/templatesCompiled/client/joi/partials/joiSchemaInterface.d.ts +5 -3
  472. package/dist/templatesCompiled/client/joi/partials/joiSchemaInterface.d.ts.map +1 -1
  473. package/dist/templatesCompiled/client/joi/partials/joiSchemaInterface.js +39 -12
  474. package/dist/templatesCompiled/client/jsonschema/exportSchema.d.ts +1 -0
  475. package/dist/templatesCompiled/client/jsonschema/exportSchema.d.ts.map +1 -1
  476. package/dist/templatesCompiled/client/jsonschema/exportSchema.js +21 -17
  477. package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchema.js +7 -7
  478. package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaArray.js +5 -5
  479. package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaComposition.js +2 -2
  480. package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaDictionary.js +5 -5
  481. package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaInterface.d.ts +3 -1
  482. package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaInterface.d.ts.map +1 -1
  483. package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaInterface.js +45 -15
  484. package/dist/templatesCompiled/client/partials/exportInterface.d.ts +13 -5
  485. package/dist/templatesCompiled/client/partials/exportInterface.d.ts.map +1 -1
  486. package/dist/templatesCompiled/client/partials/exportInterface.js +91 -21
  487. package/dist/templatesCompiled/client/partials/result.d.ts +6 -4
  488. package/dist/templatesCompiled/client/partials/result.d.ts.map +1 -1
  489. package/dist/templatesCompiled/client/partials/result.js +16 -6
  490. package/dist/templatesCompiled/client/partials/serviceOption.d.ts +1 -0
  491. package/dist/templatesCompiled/client/partials/serviceOption.d.ts.map +1 -1
  492. package/dist/templatesCompiled/client/partials/serviceOption.js +11 -4
  493. package/dist/templatesCompiled/client/yup/exportSchema.js +3 -3
  494. package/dist/templatesCompiled/client/yup/partials/yupSchema.js +7 -7
  495. package/dist/templatesCompiled/client/yup/partials/yupSchemaComposition.js +4 -4
  496. package/dist/templatesCompiled/client/yup/partials/yupSchemaGeneric.d.ts +22 -16
  497. package/dist/templatesCompiled/client/yup/partials/yupSchemaGeneric.d.ts.map +1 -1
  498. package/dist/templatesCompiled/client/yup/partials/yupSchemaGeneric.js +72 -60
  499. package/dist/templatesCompiled/client/yup/partials/yupSchemaInterface.d.ts +5 -3
  500. package/dist/templatesCompiled/client/yup/partials/yupSchemaInterface.d.ts.map +1 -1
  501. package/dist/templatesCompiled/client/yup/partials/yupSchemaInterface.js +39 -12
  502. package/dist/templatesCompiled/client/zod/exportSchema.js +3 -3
  503. package/dist/templatesCompiled/client/zod/partials/zodSchema.js +7 -7
  504. package/dist/templatesCompiled/client/zod/partials/zodSchemaArray.d.ts +5 -6
  505. package/dist/templatesCompiled/client/zod/partials/zodSchemaArray.d.ts.map +1 -1
  506. package/dist/templatesCompiled/client/zod/partials/zodSchemaArray.js +14 -28
  507. package/dist/templatesCompiled/client/zod/partials/zodSchemaComposition.d.ts +3 -0
  508. package/dist/templatesCompiled/client/zod/partials/zodSchemaComposition.d.ts.map +1 -1
  509. package/dist/templatesCompiled/client/zod/partials/zodSchemaComposition.js +32 -8
  510. package/dist/templatesCompiled/client/zod/partials/zodSchemaDictionary.d.ts +3 -4
  511. package/dist/templatesCompiled/client/zod/partials/zodSchemaDictionary.d.ts.map +1 -1
  512. package/dist/templatesCompiled/client/zod/partials/zodSchemaDictionary.js +9 -23
  513. package/dist/templatesCompiled/client/zod/partials/zodSchemaGeneric.d.ts +27 -19
  514. package/dist/templatesCompiled/client/zod/partials/zodSchemaGeneric.d.ts.map +1 -1
  515. package/dist/templatesCompiled/client/zod/partials/zodSchemaGeneric.js +77 -61
  516. package/dist/templatesCompiled/client/zod/partials/zodSchemaInterface.d.ts +4 -2
  517. package/dist/templatesCompiled/client/zod/partials/zodSchemaInterface.d.ts.map +1 -1
  518. package/dist/templatesCompiled/client/zod/partials/zodSchemaInterface.js +18 -7
  519. package/package.json +8 -6
  520. package/dist/common/defaultOptions.d.ts +0 -3
  521. package/dist/common/defaultOptions.d.ts.map +0 -1
  522. package/dist/common/defaultOptions.js +0 -28
  523. package/dist/core/utils/advancedDeduplicatePath.d.ts +0 -5
  524. package/dist/core/utils/advancedDeduplicatePath.d.ts.map +0 -1
  525. package/dist/core/utils/advancedDeduplicatePath.js +0 -29
@@ -0,0 +1,640 @@
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
+ exports.SEMANTIC_DIFF_REPORT_SCHEMA_VERSION = void 0;
7
+ exports.analyzeOpenApiDiff = analyzeOpenApiDiff;
8
+ exports.writeSemanticDiffReport = writeSemanticDiffReport;
9
+ const path_1 = __importDefault(require("path"));
10
+ const fileSystemHelpers_1 = require("../../common/utils/fileSystemHelpers");
11
+ const format_1 = require("../../common/utils/format");
12
+ const pathHelpers_1 = require("../../common/utils/pathHelpers");
13
+ const evaluateGovernanceRules_1 = require("../governance/evaluateGovernanceRules");
14
+ exports.SEMANTIC_DIFF_REPORT_SCHEMA_VERSION = '1.1.0';
15
+ const HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'];
16
+ /**
17
+ * Extracts OpenAPI v2/v3 schema container from a loaded spec.
18
+ */
19
+ function getSchemaContainer(spec) {
20
+ const specRecord = spec;
21
+ const components = specRecord.components;
22
+ const schemas = components?.schemas;
23
+ const definitions = specRecord.definitions;
24
+ if (schemas && typeof schemas === 'object') {
25
+ return schemas;
26
+ }
27
+ if (definitions && typeof definitions === 'object') {
28
+ return definitions;
29
+ }
30
+ return {};
31
+ }
32
+ /**
33
+ * Normalizes schema into a comparable type descriptor.
34
+ */
35
+ function getSchemaType(schema) {
36
+ if (!schema || typeof schema !== 'object') {
37
+ return 'unknown';
38
+ }
39
+ const schemaRecord = schema;
40
+ const schemaRef = schemaRecord.$ref;
41
+ if (typeof schemaRef === 'string') {
42
+ return `ref:${schemaRef}`;
43
+ }
44
+ const enumValues = schemaRecord.enum;
45
+ if (Array.isArray(enumValues)) {
46
+ const values = enumValues.map(item => String(item)).sort();
47
+ return `enum(${values.join('|')})`;
48
+ }
49
+ const schemaType = schemaRecord.type;
50
+ if (schemaType === 'array') {
51
+ return `array<${getSchemaType(schemaRecord.items)}>`;
52
+ }
53
+ if (Array.isArray(schemaRecord.oneOf)) {
54
+ const unionTypes = schemaRecord.oneOf.map(item => getSchemaType(item)).sort();
55
+ return `oneOf(${unionTypes.join('|')})`;
56
+ }
57
+ if (Array.isArray(schemaRecord.anyOf)) {
58
+ const unionTypes = schemaRecord.anyOf.map(item => getSchemaType(item)).sort();
59
+ return `anyOf(${unionTypes.join('|')})`;
60
+ }
61
+ if (Array.isArray(schemaRecord.allOf)) {
62
+ const intersectionTypes = schemaRecord.allOf.map(item => getSchemaType(item)).sort();
63
+ return `allOf(${intersectionTypes.join('&')})`;
64
+ }
65
+ if (typeof schemaType === 'string') {
66
+ const schemaFormat = schemaRecord.format;
67
+ if (typeof schemaFormat === 'string' && schemaFormat.trim()) {
68
+ return `${schemaType}:${schemaFormat}`;
69
+ }
70
+ return schemaType;
71
+ }
72
+ const properties = schemaRecord.properties;
73
+ if (properties && typeof properties === 'object') {
74
+ return 'object';
75
+ }
76
+ return 'unknown';
77
+ }
78
+ /**
79
+ * Classifies a type transition by severity for semantic diff.
80
+ */
81
+ function classifyTypeTransition(fromType, toType) {
82
+ if (fromType === toType) {
83
+ return 'informational';
84
+ }
85
+ if (isTypeAssignable(fromType, toType)) {
86
+ return 'non-breaking';
87
+ }
88
+ return 'breaking';
89
+ }
90
+ /**
91
+ * Splits descriptor content by top-level delimiter while preserving nested blocks.
92
+ */
93
+ function splitTopLevel(input, delimiter) {
94
+ const result = [];
95
+ let buffer = '';
96
+ let depth = 0;
97
+ for (const char of input) {
98
+ if (char === '(' || char === '<') {
99
+ depth += 1;
100
+ buffer += char;
101
+ continue;
102
+ }
103
+ if (char === ')' || char === '>') {
104
+ depth = Math.max(0, depth - 1);
105
+ buffer += char;
106
+ continue;
107
+ }
108
+ if (char === delimiter && depth === 0) {
109
+ if (buffer.trim()) {
110
+ result.push(buffer.trim());
111
+ }
112
+ buffer = '';
113
+ continue;
114
+ }
115
+ buffer += char;
116
+ }
117
+ if (buffer.trim()) {
118
+ result.push(buffer.trim());
119
+ }
120
+ return result;
121
+ }
122
+ /**
123
+ * Extracts descriptor arguments for pattern prefix(...)
124
+ */
125
+ function extractDescriptorArgs(descriptor, prefix) {
126
+ if (!descriptor.startsWith(`${prefix}(`) || !descriptor.endsWith(')')) {
127
+ return null;
128
+ }
129
+ const inner = descriptor.slice(prefix.length + 1, -1);
130
+ if (!inner.trim()) {
131
+ return [];
132
+ }
133
+ const separator = prefix === 'allOf' ? '&' : '|';
134
+ return splitTopLevel(inner, separator);
135
+ }
136
+ /**
137
+ * Parses array descriptor array<...>.
138
+ */
139
+ function extractArrayItemType(descriptor) {
140
+ if (!descriptor.startsWith('array<') || !descriptor.endsWith('>')) {
141
+ return null;
142
+ }
143
+ return descriptor.slice('array<'.length, -1);
144
+ }
145
+ /**
146
+ * Parses scalar descriptor into base and format parts.
147
+ */
148
+ function parseScalarDescriptor(descriptor) {
149
+ const [base, ...formatParts] = descriptor.split(':');
150
+ if (!base) {
151
+ return { base: descriptor, format: null };
152
+ }
153
+ if (formatParts.length === 0) {
154
+ return { base, format: null };
155
+ }
156
+ return {
157
+ base,
158
+ format: formatParts.join(':'),
159
+ };
160
+ }
161
+ /**
162
+ * Checks whether format transition is widening for a given base type.
163
+ */
164
+ function isFormatAssignable(baseType, fromFormat, toFormat) {
165
+ if (fromFormat === toFormat) {
166
+ return true;
167
+ }
168
+ if (fromFormat && !toFormat) {
169
+ return true;
170
+ }
171
+ if (!fromFormat && toFormat) {
172
+ return false;
173
+ }
174
+ if (!fromFormat || !toFormat) {
175
+ return true;
176
+ }
177
+ if (baseType === 'integer') {
178
+ if (fromFormat === 'int32' && toFormat === 'int64') {
179
+ return true;
180
+ }
181
+ if (fromFormat === 'int64' && toFormat === 'int32') {
182
+ return false;
183
+ }
184
+ }
185
+ if (baseType === 'number') {
186
+ if (fromFormat === 'float' && toFormat === 'double') {
187
+ return true;
188
+ }
189
+ if (fromFormat === 'double' && toFormat === 'float') {
190
+ return false;
191
+ }
192
+ }
193
+ return false;
194
+ }
195
+ /**
196
+ * Compares two scalar type descriptors without composite wrappers.
197
+ */
198
+ function isScalarTypeAssignable(fromType, toType) {
199
+ if (fromType === toType) {
200
+ return true;
201
+ }
202
+ if (toType === 'any' || toType === 'unknown') {
203
+ return true;
204
+ }
205
+ if (fromType === 'any' || fromType === 'unknown') {
206
+ return false;
207
+ }
208
+ const fromRef = fromType.startsWith('ref:');
209
+ const toRef = toType.startsWith('ref:');
210
+ if (fromRef || toRef) {
211
+ if (!fromRef || !toRef) {
212
+ return false;
213
+ }
214
+ return fromType === toType;
215
+ }
216
+ const { base: fromBase, format: fromFormat } = parseScalarDescriptor(fromType);
217
+ const { base: toBase, format: toFormat } = parseScalarDescriptor(toType);
218
+ if (fromBase === toBase) {
219
+ return isFormatAssignable(fromBase, fromFormat, toFormat);
220
+ }
221
+ if (fromBase === 'integer' && toBase === 'number') {
222
+ return true;
223
+ }
224
+ return false;
225
+ }
226
+ /**
227
+ * Checks assignability: true means change from -> to is widening or neutral.
228
+ */
229
+ function isTypeAssignable(fromType, toType) {
230
+ if (fromType === toType) {
231
+ return true;
232
+ }
233
+ const fromArrayItem = extractArrayItemType(fromType);
234
+ const toArrayItem = extractArrayItemType(toType);
235
+ if (fromArrayItem !== null || toArrayItem !== null) {
236
+ if (fromArrayItem === null || toArrayItem === null) {
237
+ return false;
238
+ }
239
+ return isTypeAssignable(fromArrayItem, toArrayItem);
240
+ }
241
+ const fromEnum = extractDescriptorArgs(fromType, 'enum');
242
+ const toEnum = extractDescriptorArgs(toType, 'enum');
243
+ if (fromEnum !== null || toEnum !== null) {
244
+ if (fromEnum === null || toEnum === null) {
245
+ return false;
246
+ }
247
+ return fromEnum.every(value => toEnum.includes(value));
248
+ }
249
+ const fromOneOf = extractDescriptorArgs(fromType, 'oneOf') ?? extractDescriptorArgs(fromType, 'anyOf');
250
+ if (fromOneOf !== null) {
251
+ return fromOneOf.every(option => isTypeAssignable(option, toType));
252
+ }
253
+ const toOneOf = extractDescriptorArgs(toType, 'oneOf') ?? extractDescriptorArgs(toType, 'anyOf');
254
+ if (toOneOf !== null) {
255
+ return toOneOf.some(option => isTypeAssignable(fromType, option));
256
+ }
257
+ const fromAllOf = extractDescriptorArgs(fromType, 'allOf');
258
+ if (fromAllOf !== null) {
259
+ return fromAllOf.some(option => isTypeAssignable(option, toType));
260
+ }
261
+ const toAllOf = extractDescriptorArgs(toType, 'allOf');
262
+ if (toAllOf !== null) {
263
+ return toAllOf.every(option => isTypeAssignable(fromType, option));
264
+ }
265
+ return isScalarTypeAssignable(fromType, toType);
266
+ }
267
+ /**
268
+ * Builds canonical model map from v2/v3 schema section.
269
+ */
270
+ function buildCanonicalModels(spec) {
271
+ const models = new Map();
272
+ const schemas = getSchemaContainer(spec);
273
+ for (const [name, schema] of Object.entries(schemas)) {
274
+ const propertiesMap = new Map();
275
+ const schemaProperties = schema.properties;
276
+ if (schemaProperties && typeof schemaProperties === 'object') {
277
+ for (const [propertyName, propertySchema] of Object.entries(schemaProperties)) {
278
+ propertiesMap.set(propertyName, getSchemaType(propertySchema));
279
+ }
280
+ }
281
+ const requiredRaw = schema.required;
282
+ const required = Array.isArray(requiredRaw) ? new Set(requiredRaw.map(value => String(value))) : new Set();
283
+ const modelEnumRaw = schema.enum;
284
+ const modelEnum = Array.isArray(modelEnumRaw) ? new Set(modelEnumRaw.map(value => String(value))) : new Set();
285
+ models.set(name, {
286
+ properties: propertiesMap,
287
+ required,
288
+ enumValues: modelEnum,
289
+ });
290
+ }
291
+ return models;
292
+ }
293
+ /**
294
+ * Checks whether response key is an explicit successful HTTP status key.
295
+ */
296
+ function isSuccessResponseKey(value) {
297
+ return /^\s*2\d\d\s*$/.test(value) || /^\s*2xx\s*$/i.test(value);
298
+ }
299
+ /**
300
+ * Resolves response payload schema type for OpenAPI v2/v3 response object.
301
+ */
302
+ function getResponsePayloadType(response) {
303
+ if (!response || typeof response !== 'object') {
304
+ return 'unknown';
305
+ }
306
+ const responseRecord = response;
307
+ const content = responseRecord.content;
308
+ if (content && typeof content === 'object') {
309
+ const jsonContent = content['application/json'];
310
+ if (jsonContent && typeof jsonContent === 'object') {
311
+ const jsonSchema = jsonContent.schema;
312
+ if (jsonSchema) {
313
+ return getSchemaType(jsonSchema);
314
+ }
315
+ }
316
+ for (const mediaTypeObject of Object.values(content)) {
317
+ if (!mediaTypeObject || typeof mediaTypeObject !== 'object') {
318
+ continue;
319
+ }
320
+ const mediaSchema = mediaTypeObject.schema;
321
+ if (mediaSchema) {
322
+ return getSchemaType(mediaSchema);
323
+ }
324
+ }
325
+ }
326
+ return getSchemaType(responseRecord.schema);
327
+ }
328
+ /**
329
+ * Builds canonical operation map from OpenAPI paths.
330
+ */
331
+ function buildCanonicalOperations(spec) {
332
+ const operations = new Map();
333
+ const specRecord = spec;
334
+ const paths = specRecord.paths ?? {};
335
+ for (const [routePath, pathItemRaw] of Object.entries(paths)) {
336
+ const pathItem = pathItemRaw ?? {};
337
+ const pathParametersRaw = pathItem.parameters;
338
+ const pathParameters = Array.isArray(pathParametersRaw) ? pathParametersRaw : [];
339
+ for (const method of HTTP_METHODS) {
340
+ const operationRaw = pathItem[method];
341
+ if (!operationRaw || typeof operationRaw !== 'object') {
342
+ continue;
343
+ }
344
+ const operation = operationRaw;
345
+ const operationKey = `${method.toUpperCase()} ${routePath}`;
346
+ const operationParametersRaw = operation.parameters;
347
+ const operationParameters = Array.isArray(operationParametersRaw) ? operationParametersRaw : [];
348
+ const mergedParameters = [...pathParameters, ...operationParameters];
349
+ const parameters = new Map();
350
+ for (const parameterRaw of mergedParameters) {
351
+ if (!parameterRaw || typeof parameterRaw !== 'object') {
352
+ continue;
353
+ }
354
+ const parameter = parameterRaw;
355
+ const parameterName = typeof parameter.name === 'string' ? parameter.name : '';
356
+ const parameterIn = typeof parameter.in === 'string' ? parameter.in : 'unknown';
357
+ if (!parameterName) {
358
+ continue;
359
+ }
360
+ const schema = parameter.schema ?? parameter;
361
+ const type = getSchemaType(schema);
362
+ const required = parameter.required === true;
363
+ parameters.set(`${parameterIn}:${parameterName}`, { required, type });
364
+ }
365
+ const requestBody = operation.requestBody;
366
+ const requestBodyRequired = requestBody?.required === true;
367
+ const successResponses = new Map();
368
+ const responses = operation.responses;
369
+ if (responses && typeof responses === 'object') {
370
+ for (const [responseCode, responseValue] of Object.entries(responses)) {
371
+ if (isSuccessResponseKey(responseCode)) {
372
+ successResponses.set(responseCode, getResponsePayloadType(responseValue));
373
+ }
374
+ }
375
+ }
376
+ operations.set(operationKey, {
377
+ parameters,
378
+ requestBodyRequired,
379
+ successResponses,
380
+ });
381
+ }
382
+ }
383
+ return operations;
384
+ }
385
+ /**
386
+ * Pushes change entry to report collection.
387
+ */
388
+ function pushChange(changes, severity, type, path, message) {
389
+ changes.push({ severity, type, path, message });
390
+ }
391
+ /**
392
+ * Normalizes, deduplicates and sorts changes for stable CI output.
393
+ */
394
+ function normalizeAndDedupeChanges(changes) {
395
+ const unique = new Map();
396
+ for (const change of changes) {
397
+ const normalizedPath = change.path.replace(/\s+/g, ' ').trim();
398
+ const normalizedMessage = change.message.replace(/\s+/g, ' ').trim();
399
+ const normalizedChange = {
400
+ ...change,
401
+ path: normalizedPath,
402
+ message: normalizedMessage,
403
+ };
404
+ const key = [normalizedChange.severity, normalizedChange.type, normalizedChange.path, normalizedChange.message].join('|');
405
+ if (!unique.has(key)) {
406
+ unique.set(key, normalizedChange);
407
+ }
408
+ }
409
+ return [...unique.values()].sort((left, right) => {
410
+ if (left.path !== right.path) {
411
+ return left.path.localeCompare(right.path);
412
+ }
413
+ if (left.type !== right.type) {
414
+ return left.type.localeCompare(right.type);
415
+ }
416
+ if (left.severity !== right.severity) {
417
+ return left.severity.localeCompare(right.severity);
418
+ }
419
+ return left.message.localeCompare(right.message);
420
+ });
421
+ }
422
+ /**
423
+ * Diffs canonical models and appends semantic changes.
424
+ */
425
+ function diffModels(oldModels, newModels, changes) {
426
+ for (const oldModelName of oldModels.keys()) {
427
+ if (!newModels.has(oldModelName)) {
428
+ pushChange(changes, 'breaking', 'model.removed', `#/components/schemas/${oldModelName}`, `Model "${oldModelName}" was removed.`);
429
+ }
430
+ }
431
+ for (const newModelName of newModels.keys()) {
432
+ if (!oldModels.has(newModelName)) {
433
+ pushChange(changes, 'non-breaking', 'model.added', `#/components/schemas/${newModelName}`, `Model "${newModelName}" was added.`);
434
+ }
435
+ }
436
+ for (const [modelName, oldModel] of oldModels.entries()) {
437
+ const newModel = newModels.get(modelName);
438
+ if (!newModel) {
439
+ continue;
440
+ }
441
+ for (const oldPropertyName of oldModel.properties.keys()) {
442
+ if (!newModel.properties.has(oldPropertyName)) {
443
+ pushChange(changes, 'breaking', 'model.property.removed', `#/components/schemas/${modelName}/properties/${oldPropertyName}`, `Property "${oldPropertyName}" was removed from model "${modelName}".`);
444
+ }
445
+ }
446
+ for (const [newPropertyName] of newModel.properties.entries()) {
447
+ if (!oldModel.properties.has(newPropertyName)) {
448
+ 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}".`);
450
+ }
451
+ }
452
+ for (const [propertyName, oldPropertyType] of oldModel.properties.entries()) {
453
+ const newPropertyType = newModel.properties.get(propertyName);
454
+ if (!newPropertyType) {
455
+ continue;
456
+ }
457
+ if (oldPropertyType !== newPropertyType) {
458
+ 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}".`);
460
+ }
461
+ const wasRequired = oldModel.required.has(propertyName);
462
+ const isRequired = newModel.required.has(propertyName);
463
+ 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}".`);
465
+ }
466
+ }
467
+ for (const oldEnumValue of oldModel.enumValues) {
468
+ 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}".`);
470
+ }
471
+ }
472
+ for (const newEnumValue of newModel.enumValues) {
473
+ 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}".`);
475
+ }
476
+ }
477
+ }
478
+ }
479
+ /**
480
+ * Diffs canonical operations and appends semantic changes.
481
+ */
482
+ function diffOperations(oldOperations, newOperations, changes) {
483
+ for (const oldOperationKey of oldOperations.keys()) {
484
+ if (!newOperations.has(oldOperationKey)) {
485
+ pushChange(changes, 'breaking', 'operation.removed', `#/paths/${oldOperationKey}`, `Operation "${oldOperationKey}" was removed.`);
486
+ }
487
+ }
488
+ for (const newOperationKey of newOperations.keys()) {
489
+ if (!oldOperations.has(newOperationKey)) {
490
+ pushChange(changes, 'non-breaking', 'operation.added', `#/paths/${newOperationKey}`, `Operation "${newOperationKey}" was added.`);
491
+ }
492
+ }
493
+ for (const [operationKey, oldOperation] of oldOperations.entries()) {
494
+ const newOperation = newOperations.get(operationKey);
495
+ if (!newOperation) {
496
+ continue;
497
+ }
498
+ for (const oldParameterName of oldOperation.parameters.keys()) {
499
+ if (!newOperation.parameters.has(oldParameterName)) {
500
+ pushChange(changes, 'breaking', 'operation.parameter.removed', `#/paths/${operationKey}/parameters/${oldParameterName}`, `Parameter "${oldParameterName}" was removed from operation "${operationKey}".`);
501
+ }
502
+ }
503
+ for (const [newParameterName, newParameter] of newOperation.parameters.entries()) {
504
+ 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}".`);
506
+ }
507
+ }
508
+ for (const [parameterName, oldParameter] of oldOperation.parameters.entries()) {
509
+ const newParameter = newOperation.parameters.get(parameterName);
510
+ if (!newParameter) {
511
+ continue;
512
+ }
513
+ 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}".`);
515
+ }
516
+ if (oldParameter.type !== newParameter.type) {
517
+ 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}".`);
519
+ }
520
+ }
521
+ 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}".`);
523
+ }
524
+ for (const oldResponseCode of oldOperation.successResponses.keys()) {
525
+ if (!newOperation.successResponses.has(oldResponseCode)) {
526
+ pushChange(changes, 'breaking', 'operation.response.success.removed', `#/paths/${operationKey}/responses/${oldResponseCode}`, `Successful response "${oldResponseCode}" was removed from operation "${operationKey}".`);
527
+ }
528
+ }
529
+ for (const newResponseCode of newOperation.successResponses.keys()) {
530
+ if (!oldOperation.successResponses.has(newResponseCode)) {
531
+ pushChange(changes, 'non-breaking', 'operation.response.success.added', `#/paths/${operationKey}/responses/${newResponseCode}`, `Successful response "${newResponseCode}" was added to operation "${operationKey}".`);
532
+ }
533
+ }
534
+ for (const [responseCode, oldResponseType] of oldOperation.successResponses.entries()) {
535
+ const newResponseType = newOperation.successResponses.get(responseCode);
536
+ if (!newResponseType || oldResponseType === newResponseType) {
537
+ continue;
538
+ }
539
+ 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}".`);
541
+ }
542
+ }
543
+ }
544
+ /**
545
+ * Calculates summary counters from semantic changes list.
546
+ */
547
+ function buildSummary(changes) {
548
+ return changes.reduce((summary, change) => {
549
+ if (change.severity === 'breaking') {
550
+ summary.breaking += 1;
551
+ }
552
+ else if (change.severity === 'non-breaking') {
553
+ summary.nonBreaking += 1;
554
+ }
555
+ else {
556
+ summary.informational += 1;
557
+ }
558
+ return summary;
559
+ }, {
560
+ breaking: 0,
561
+ nonBreaking: 0,
562
+ informational: 0,
563
+ });
564
+ }
565
+ /**
566
+ * Builds semver recommendation from semantic diff summary.
567
+ */
568
+ function buildSemverRecommendation(summary) {
569
+ if (summary.breaking > 0) {
570
+ return {
571
+ semver: 'major',
572
+ confidence: summary.breaking >= 3 ? 'high' : 'medium',
573
+ reason: 'Breaking changes detected.',
574
+ reasons: ['HAS_BREAKING_CHANGES'],
575
+ };
576
+ }
577
+ if (summary.nonBreaking > 0) {
578
+ return {
579
+ semver: 'minor',
580
+ confidence: summary.nonBreaking >= 3 ? 'high' : 'medium',
581
+ reason: 'Backward-compatible feature changes detected.',
582
+ reasons: ['HAS_BACKWARD_COMPATIBLE_CHANGES'],
583
+ };
584
+ }
585
+ if (summary.informational > 0) {
586
+ return {
587
+ semver: 'patch',
588
+ confidence: 'medium',
589
+ reason: 'Only informational changes detected.',
590
+ reasons: ['HAS_INFORMATIONAL_ONLY_CHANGES'],
591
+ };
592
+ }
593
+ return {
594
+ semver: 'patch',
595
+ confidence: 'high',
596
+ reason: 'No breaking or feature-level changes detected.',
597
+ reasons: ['NO_API_SURFACE_CHANGES'],
598
+ };
599
+ }
600
+ /**
601
+ * Creates semantic diff report between two OpenAPI specs.
602
+ */
603
+ function analyzeOpenApiDiff(oldSpec, newSpec, options = {}) {
604
+ const oldModels = buildCanonicalModels(oldSpec);
605
+ const newModels = buildCanonicalModels(newSpec);
606
+ const oldOperations = buildCanonicalOperations(oldSpec);
607
+ const newOperations = buildCanonicalOperations(newSpec);
608
+ const changes = [];
609
+ diffModels(oldModels, newModels, changes);
610
+ diffOperations(oldOperations, newOperations, changes);
611
+ const normalizedChanges = normalizeAndDedupeChanges(changes);
612
+ const summary = buildSummary(normalizedChanges);
613
+ const governance = (0, evaluateGovernanceRules_1.evaluateGovernanceRules)({
614
+ openApi: newSpec,
615
+ breakingChangesCount: summary.breaking,
616
+ allowBreaking: options.allowBreaking ?? false,
617
+ governanceConfig: options.governanceConfig,
618
+ });
619
+ return {
620
+ schemaVersion: exports.SEMANTIC_DIFF_REPORT_SCHEMA_VERSION,
621
+ summary,
622
+ recommendation: buildSemverRecommendation(summary),
623
+ governance,
624
+ changes: normalizedChanges,
625
+ };
626
+ }
627
+ /**
628
+ * Writes semantic diff report to JSON file and returns absolute path.
629
+ */
630
+ async function writeSemanticDiffReport(report, reportFilePath) {
631
+ const resolvedPath = (0, pathHelpers_1.resolveHelper)(process.cwd(), reportFilePath);
632
+ const directory = path_1.default.dirname(resolvedPath);
633
+ const directoryExists = await fileSystemHelpers_1.fileSystemHelpers.exists(directory);
634
+ if (!directoryExists) {
635
+ await fileSystemHelpers_1.fileSystemHelpers.mkdir(directory);
636
+ }
637
+ const reportContent = await (0, format_1.format)(JSON.stringify(report), 'json');
638
+ await fileSystemHelpers_1.fileSystemHelpers.writeFile(resolvedPath, reportContent);
639
+ return resolvedPath;
640
+ }
@@ -0,0 +1,11 @@
1
+ import { JSONSchema7 } from 'json-schema';
2
+ export type SemanticDiffReportSchemaValidationResult = {
3
+ valid: boolean;
4
+ errors: string[];
5
+ };
6
+ export declare const semanticDiffReportJsonSchema: JSONSchema7;
7
+ /**
8
+ * Validates semantic diff report payload by JSON Schema contract.
9
+ */
10
+ export declare function validateSemanticDiffReportSchema(report: unknown): SemanticDiffReportSchemaValidationResult;
11
+ //# sourceMappingURL=semanticDiffReportSchema.d.ts.map
@@ -0,0 +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"}