ts-openapi-codegen 2.0.0 → 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 (418) hide show
  1. package/README.md +91 -2
  2. package/README.rus.md +91 -2
  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/writeExampleConfigFile.d.ts.map +1 -1
  66. package/dist/cli/checkAndUpdateConfig/utils/writeExampleConfigFile.js +2 -2
  67. package/dist/cli/generateOpenApiClient/__tests__/generateOpenApiClient.strict.test.d.ts +2 -0
  68. package/dist/cli/generateOpenApiClient/__tests__/generateOpenApiClient.strict.test.d.ts.map +1 -0
  69. package/dist/cli/generateOpenApiClient/__tests__/generateOpenApiClient.strict.test.js +152 -0
  70. package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts +6 -2
  71. package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts.map +1 -1
  72. package/dist/cli/generateOpenApiClient/generateOpenApiClient.js +54 -18
  73. package/dist/cli/index.js +57 -2
  74. package/dist/cli/initOpenApiConfig/init.d.ts.map +1 -1
  75. package/dist/cli/initOpenApiConfig/init.js +19 -6
  76. package/dist/cli/initOpenApiConfig/initConfig.d.ts +1 -0
  77. package/dist/cli/initOpenApiConfig/initConfig.d.ts.map +1 -1
  78. package/dist/cli/initOpenApiConfig/initConfig.js +47 -24
  79. package/dist/cli/initOpenApiConfig/initCustomRequest.d.ts +8 -1
  80. package/dist/cli/initOpenApiConfig/initCustomRequest.d.ts.map +1 -1
  81. package/dist/cli/initOpenApiConfig/initCustomRequest.js +40 -8
  82. package/dist/cli/initOpenApiConfig/utils/buildConfig.d.ts.map +1 -1
  83. package/dist/cli/initOpenApiConfig/utils/buildConfig.js +60 -0
  84. package/dist/cli/initOpenApiConfig/utils/validateSpecFile.d.ts.map +1 -1
  85. package/dist/cli/initOpenApiConfig/utils/validateSpecFile.js +2 -1
  86. package/dist/cli/initOpenApiConfig/utils/writeConfigFile.d.ts.map +1 -1
  87. package/dist/cli/initOpenApiConfig/utils/writeConfigFile.js +2 -1
  88. package/dist/cli/interactive/confirmDialog.d.ts.map +1 -1
  89. package/dist/cli/interactive/confirmDialog.js +3 -2
  90. package/dist/cli/interactive/constants.d.ts +2 -2
  91. package/dist/cli/interactive/constants.js +8 -8
  92. package/dist/cli/interactive/selectDialog.d.ts.map +1 -1
  93. package/dist/cli/interactive/selectDialog.js +11 -6
  94. package/dist/cli/previewChanges/previewChanges.d.ts.map +1 -1
  95. package/dist/cli/previewChanges/previewChanges.js +45 -17
  96. package/dist/cli/schemas/analyzeDiff.d.ts +14 -0
  97. package/dist/cli/schemas/analyzeDiff.d.ts.map +1 -0
  98. package/dist/cli/schemas/analyzeDiff.js +28 -0
  99. package/dist/cli/schemas/generate.d.ts +9 -0
  100. package/dist/cli/schemas/generate.d.ts.map +1 -1
  101. package/dist/cli/schemas/generate.js +9 -0
  102. package/dist/cli/schemas/index.d.ts +3 -1
  103. package/dist/cli/schemas/index.d.ts.map +1 -1
  104. package/dist/cli/schemas/index.js +2 -0
  105. package/dist/common/Consts.d.ts +1 -0
  106. package/dist/common/Consts.d.ts.map +1 -1
  107. package/dist/common/Consts.js +15 -1
  108. package/dist/common/Logger.d.ts +20 -1
  109. package/dist/common/Logger.d.ts.map +1 -1
  110. package/dist/common/Logger.js +70 -9
  111. package/dist/common/LoggerMessages.d.ts +135 -33
  112. package/dist/common/LoggerMessages.d.ts.map +1 -1
  113. package/dist/common/LoggerMessages.js +118 -45
  114. package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.d.ts.map +1 -1
  115. package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.js +7 -1
  116. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.d.ts +4 -0
  117. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.d.ts.map +1 -1
  118. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.d.ts +8 -0
  119. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.d.ts.map +1 -1
  120. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.d.ts +8 -0
  121. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.d.ts.map +1 -1
  122. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV3.d.ts +8 -0
  123. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV3.d.ts.map +1 -1
  124. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV4.d.ts +35 -0
  125. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV4.d.ts.map +1 -1
  126. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV4.js +4 -1
  127. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts +79 -0
  128. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts.map +1 -0
  129. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.js +19 -0
  130. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts +171 -0
  131. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts.map +1 -1
  132. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.js +2 -0
  133. package/dist/common/VersionedSchema/CommonSchemas.d.ts +40 -0
  134. package/dist/common/VersionedSchema/CommonSchemas.d.ts.map +1 -1
  135. package/dist/common/VersionedSchema/CommonSchemas.js +34 -1
  136. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV1.d.ts +4 -0
  137. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV1.d.ts.map +1 -1
  138. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV2.d.ts +4 -0
  139. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV2.d.ts.map +1 -1
  140. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.d.ts +4 -0
  141. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.d.ts.map +1 -1
  142. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV4.d.ts +4 -0
  143. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV4.d.ts.map +1 -1
  144. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV5.d.ts +4 -0
  145. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV5.d.ts.map +1 -1
  146. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV1.d.ts +4 -0
  147. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV1.d.ts.map +1 -1
  148. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV2.d.ts +4 -0
  149. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV2.d.ts.map +1 -1
  150. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV3.d.ts +4 -0
  151. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV3.d.ts.map +1 -1
  152. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV4.d.ts +4 -0
  153. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV4.d.ts.map +1 -1
  154. package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.d.ts.map +1 -1
  155. package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.js +23 -3
  156. package/dist/common/VersionedSchema/Utils/__tests__/migrateDataToLatestSchemaVersion.test.js +2 -2
  157. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.d.ts.map +1 -1
  158. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.js +2 -1
  159. package/dist/common/__tests__/Logger.test.d.ts +2 -0
  160. package/dist/common/__tests__/Logger.test.d.ts.map +1 -0
  161. package/dist/common/__tests__/Logger.test.js +100 -0
  162. package/dist/common/utils/__tests__/convertArrayToObject.test.js +3 -0
  163. package/dist/common/utils/__tests__/eslintFix.test.d.ts +2 -0
  164. package/dist/common/utils/__tests__/eslintFix.test.d.ts.map +1 -0
  165. package/dist/common/utils/__tests__/eslintFix.test.js +134 -0
  166. package/dist/common/utils/__tests__/format.test.d.ts +2 -0
  167. package/dist/common/utils/__tests__/format.test.d.ts.map +1 -0
  168. package/dist/common/utils/__tests__/format.test.js +90 -0
  169. package/dist/common/utils/convertArrayToObject.d.ts.map +1 -1
  170. package/dist/common/utils/convertArrayToObject.js +3 -0
  171. package/dist/common/utils/eslintFix.d.ts +7 -0
  172. package/dist/common/utils/eslintFix.d.ts.map +1 -0
  173. package/dist/common/utils/eslintFix.js +78 -0
  174. package/dist/common/utils/format.d.ts +1 -1
  175. package/dist/common/utils/format.d.ts.map +1 -1
  176. package/dist/common/utils/format.js +39 -15
  177. package/dist/common/utils/jsonPath.d.ts +5 -0
  178. package/dist/common/utils/jsonPath.d.ts.map +1 -0
  179. package/dist/common/utils/jsonPath.js +27 -0
  180. package/dist/common/utils/normalizeObject.d.ts +2 -0
  181. package/dist/common/utils/normalizeObject.d.ts.map +1 -0
  182. package/dist/common/utils/normalizeObject.js +63 -0
  183. package/dist/core/Context.d.ts +8 -1
  184. package/dist/core/Context.d.ts.map +1 -1
  185. package/dist/core/Context.js +23 -4
  186. package/dist/core/OpenApiClient.d.ts +2 -0
  187. package/dist/core/OpenApiClient.d.ts.map +1 -1
  188. package/dist/core/OpenApiClient.js +116 -6
  189. package/dist/core/WriteClient.d.ts +4 -0
  190. package/dist/core/WriteClient.d.ts.map +1 -1
  191. package/dist/core/WriteClient.js +38 -4
  192. package/dist/core/__tests__/WriteClient.test.js +4 -1
  193. package/dist/core/api/v2/parser/__tests__/getModel.test.d.ts +2 -0
  194. package/dist/core/api/v2/parser/__tests__/getModel.test.d.ts.map +1 -0
  195. package/dist/core/api/v2/parser/__tests__/getModel.test.js +34 -0
  196. package/dist/core/api/v2/parser/getModel.d.ts.map +1 -1
  197. package/dist/core/api/v2/parser/getModel.js +6 -1
  198. package/dist/core/api/v2/parser/getOperation.d.ts.map +1 -1
  199. package/dist/core/api/v2/parser/getOperation.js +2 -0
  200. package/dist/core/api/v2/parser/getOperationResponses.d.ts.map +1 -1
  201. package/dist/core/api/v2/parser/getOperationResponses.js +9 -1
  202. package/dist/core/api/v2/types/OpenApiSchema.model.d.ts +2 -0
  203. package/dist/core/api/v2/types/OpenApiSchema.model.d.ts.map +1 -1
  204. package/dist/core/api/v3/parser/__tests__/getContent.test.d.ts +2 -0
  205. package/dist/core/api/v3/parser/__tests__/getContent.test.d.ts.map +1 -0
  206. package/dist/core/api/v3/parser/__tests__/getContent.test.js +65 -0
  207. package/dist/core/api/v3/parser/__tests__/getModel.test.d.ts +2 -0
  208. package/dist/core/api/v3/parser/__tests__/getModel.test.d.ts.map +1 -0
  209. package/dist/core/api/v3/parser/__tests__/getModel.test.js +34 -0
  210. package/dist/core/api/v3/parser/getContent.d.ts.map +1 -1
  211. package/dist/core/api/v3/parser/getContent.js +21 -11
  212. package/dist/core/api/v3/parser/getModel.d.ts.map +1 -1
  213. package/dist/core/api/v3/parser/getModel.js +6 -1
  214. package/dist/core/api/v3/parser/getOperation.d.ts.map +1 -1
  215. package/dist/core/api/v3/parser/getOperation.js +2 -0
  216. package/dist/core/api/v3/parser/getOperationResponses.d.ts.map +1 -1
  217. package/dist/core/api/v3/parser/getOperationResponses.js +9 -1
  218. package/dist/core/api/v3/types/OpenApiSchema.model.d.ts +2 -0
  219. package/dist/core/api/v3/types/OpenApiSchema.model.d.ts.map +1 -1
  220. package/dist/core/governance/__tests__/evaluateGovernanceRules.test.d.ts +2 -0
  221. package/dist/core/governance/__tests__/evaluateGovernanceRules.test.d.ts.map +1 -0
  222. package/dist/core/governance/__tests__/evaluateGovernanceRules.test.js +100 -0
  223. package/dist/core/governance/__tests__/loadGovernanceConfig.test.d.ts +2 -0
  224. package/dist/core/governance/__tests__/loadGovernanceConfig.test.d.ts.map +1 -0
  225. package/dist/core/governance/__tests__/loadGovernanceConfig.test.js +71 -0
  226. package/dist/core/governance/evaluateGovernanceRules.d.ts +42 -0
  227. package/dist/core/governance/evaluateGovernanceRules.d.ts.map +1 -0
  228. package/dist/core/governance/evaluateGovernanceRules.js +134 -0
  229. package/dist/core/governance/governanceConfigSchema.d.ts +4 -0
  230. package/dist/core/governance/governanceConfigSchema.d.ts.map +1 -0
  231. package/dist/core/governance/governanceConfigSchema.js +39 -0
  232. package/dist/core/governance/loadGovernanceConfig.d.ts +7 -0
  233. package/dist/core/governance/loadGovernanceConfig.d.ts.map +1 -0
  234. package/dist/core/governance/loadGovernanceConfig.js +60 -0
  235. package/dist/core/index.d.ts +3 -0
  236. package/dist/core/index.d.ts.map +1 -1
  237. package/dist/core/index.js +4 -2
  238. package/dist/core/plugins/GeneratorPlugin.model.d.ts +42 -0
  239. package/dist/core/plugins/GeneratorPlugin.model.d.ts.map +1 -0
  240. package/dist/core/plugins/GeneratorPlugin.model.js +2 -0
  241. package/dist/core/plugins/__tests__/applySemanticDiffPluginHooks.test.d.ts +2 -0
  242. package/dist/core/plugins/__tests__/applySemanticDiffPluginHooks.test.d.ts.map +1 -0
  243. package/dist/core/plugins/__tests__/applySemanticDiffPluginHooks.test.js +115 -0
  244. package/dist/core/plugins/__tests__/loadGeneratorPlugins.test.d.ts +2 -0
  245. package/dist/core/plugins/__tests__/loadGeneratorPlugins.test.d.ts.map +1 -0
  246. package/dist/core/plugins/__tests__/loadGeneratorPlugins.test.js +62 -0
  247. package/dist/core/plugins/applySemanticDiffPluginHooks.d.ts +28 -0
  248. package/dist/core/plugins/applySemanticDiffPluginHooks.d.ts.map +1 -0
  249. package/dist/core/plugins/applySemanticDiffPluginHooks.js +160 -0
  250. package/dist/core/plugins/builtins/xTypescriptTypePlugin.d.ts +6 -0
  251. package/dist/core/plugins/builtins/xTypescriptTypePlugin.d.ts.map +1 -0
  252. package/dist/core/plugins/builtins/xTypescriptTypePlugin.js +13 -0
  253. package/dist/core/plugins/getBuiltinPlugins.d.ts +6 -0
  254. package/dist/core/plugins/getBuiltinPlugins.d.ts.map +1 -0
  255. package/dist/core/plugins/getBuiltinPlugins.js +10 -0
  256. package/dist/core/plugins/index.d.ts +4 -0
  257. package/dist/core/plugins/index.d.ts.map +1 -0
  258. package/dist/core/plugins/index.js +5 -0
  259. package/dist/core/plugins/loadGeneratorPlugins.d.ts +6 -0
  260. package/dist/core/plugins/loadGeneratorPlugins.d.ts.map +1 -0
  261. package/dist/core/plugins/loadGeneratorPlugins.js +94 -0
  262. package/dist/core/semanticDiff/__tests__/analyzeOpenApiDiff.test.d.ts +2 -0
  263. package/dist/core/semanticDiff/__tests__/analyzeOpenApiDiff.test.d.ts.map +1 -0
  264. package/dist/core/semanticDiff/__tests__/analyzeOpenApiDiff.test.js +537 -0
  265. package/dist/core/semanticDiff/__tests__/semanticDiffReportSchema.test.d.ts +2 -0
  266. package/dist/core/semanticDiff/__tests__/semanticDiffReportSchema.test.d.ts.map +1 -0
  267. package/dist/core/semanticDiff/__tests__/semanticDiffReportSchema.test.js +66 -0
  268. package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts +45 -0
  269. package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts.map +1 -0
  270. package/dist/core/semanticDiff/analyzeOpenApiDiff.js +640 -0
  271. package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts +11 -0
  272. package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts.map +1 -0
  273. package/dist/core/semanticDiff/semanticDiffReportSchema.js +132 -0
  274. package/dist/core/strict/__tests__/validateOpenApiStrict.test.d.ts +2 -0
  275. package/dist/core/strict/__tests__/validateOpenApiStrict.test.d.ts.map +1 -0
  276. package/dist/core/strict/__tests__/validateOpenApiStrict.test.js +156 -0
  277. package/dist/core/strict/validateOpenApiStrict.d.ts +43 -0
  278. package/dist/core/strict/validateOpenApiStrict.d.ts.map +1 -0
  279. package/dist/core/strict/validateOpenApiStrict.js +253 -0
  280. package/dist/core/types/base/ClientArtifacts.model.d.ts +2 -0
  281. package/dist/core/types/base/ClientArtifacts.model.d.ts.map +1 -1
  282. package/dist/core/types/base/Templates.model.d.ts +3 -0
  283. package/dist/core/types/base/Templates.model.d.ts.map +1 -1
  284. package/dist/core/types/enums/ModelsMode.enum.d.ts +5 -0
  285. package/dist/core/types/enums/ModelsMode.enum.d.ts.map +1 -0
  286. package/dist/core/types/enums/ModelsMode.enum.js +8 -0
  287. package/dist/core/types/shared/Client.model.d.ts +2 -0
  288. package/dist/core/types/shared/Client.model.d.ts.map +1 -1
  289. package/dist/core/types/shared/DiffInfo.model.d.ts +13 -0
  290. package/dist/core/types/shared/DiffInfo.model.d.ts.map +1 -0
  291. package/dist/core/types/shared/DiffInfo.model.js +2 -0
  292. package/dist/core/types/shared/Miracle.model.d.ts +13 -0
  293. package/dist/core/types/shared/Miracle.model.d.ts.map +1 -0
  294. package/dist/core/types/shared/Miracle.model.js +2 -0
  295. package/dist/core/types/shared/Model.model.d.ts +23 -0
  296. package/dist/core/types/shared/Model.model.d.ts.map +1 -1
  297. package/dist/core/types/shared/Operation.model.d.ts +5 -0
  298. package/dist/core/types/shared/Operation.model.d.ts.map +1 -1
  299. package/dist/core/utils/__mocks__/templates.d.ts.map +1 -1
  300. package/dist/core/utils/__mocks__/templates.js +9 -0
  301. package/dist/core/utils/__tests__/applyDiffReportToClient.test.d.ts +2 -0
  302. package/dist/core/utils/__tests__/applyDiffReportToClient.test.d.ts.map +1 -0
  303. package/dist/core/utils/__tests__/applyDiffReportToClient.test.js +108 -0
  304. package/dist/core/utils/__tests__/getMappedType.test.js +2 -0
  305. package/dist/core/utils/__tests__/getOperationResponseCode.test.js +7 -2
  306. package/dist/core/utils/__tests__/getOperationResults.test.d.ts +2 -0
  307. package/dist/core/utils/__tests__/getOperationResults.test.d.ts.map +1 -0
  308. package/dist/core/utils/__tests__/getOperationResults.test.js +43 -0
  309. package/dist/core/utils/__tests__/prepareDtoModels.test.d.ts +2 -0
  310. package/dist/core/utils/__tests__/prepareDtoModels.test.d.ts.map +1 -0
  311. package/dist/core/utils/__tests__/prepareDtoModels.test.js +116 -0
  312. package/dist/core/utils/__tests__/serviceHelpers.test.js +1 -0
  313. package/dist/core/utils/__tests__/writeClientModels.test.js +50 -0
  314. package/dist/core/utils/applyDiffReportToClient.d.ts +14 -0
  315. package/dist/core/utils/applyDiffReportToClient.d.ts.map +1 -0
  316. package/dist/core/utils/applyDiffReportToClient.js +367 -0
  317. package/dist/core/utils/getMappedType.d.ts.map +1 -1
  318. package/dist/core/utils/getMappedType.js +2 -0
  319. package/dist/core/utils/getOpenApiSpec.d.ts.map +1 -1
  320. package/dist/core/utils/getOpenApiSpec.js +1 -14
  321. package/dist/core/utils/getOperationResponseCode.d.ts.map +1 -1
  322. package/dist/core/utils/getOperationResponseCode.js +10 -8
  323. package/dist/core/utils/loadDiffReport.d.ts +39 -0
  324. package/dist/core/utils/loadDiffReport.d.ts.map +1 -0
  325. package/dist/core/utils/loadDiffReport.js +51 -0
  326. package/dist/core/utils/prepareDtoModels.d.ts +3 -0
  327. package/dist/core/utils/prepareDtoModels.d.ts.map +1 -0
  328. package/dist/core/utils/prepareDtoModels.js +189 -0
  329. package/dist/core/utils/registerHandlebarHelpers.d.ts.map +1 -1
  330. package/dist/core/utils/registerHandlebarHelpers.js +4 -1
  331. package/dist/core/utils/registerHandlebarTemplates.d.ts.map +1 -1
  332. package/dist/core/utils/registerHandlebarTemplates.js +6 -0
  333. package/dist/core/utils/validateRawOptions.d.ts +1 -1
  334. package/dist/core/utils/validateRawOptions.d.ts.map +1 -1
  335. package/dist/core/utils/validateRawOptions.js +4 -2
  336. package/dist/core/utils/writeClientCore.d.ts +2 -0
  337. package/dist/core/utils/writeClientCore.d.ts.map +1 -1
  338. package/dist/core/utils/writeClientCore.js +6 -1
  339. package/dist/core/utils/writeClientCoreIndex.d.ts +1 -0
  340. package/dist/core/utils/writeClientCoreIndex.d.ts.map +1 -1
  341. package/dist/core/utils/writeClientCoreIndex.js +2 -2
  342. package/dist/core/utils/writeClientExecutor.d.ts +2 -0
  343. package/dist/core/utils/writeClientExecutor.d.ts.map +1 -1
  344. package/dist/core/utils/writeClientExecutor.js +6 -2
  345. package/dist/core/utils/writeClientFullIndex.d.ts.map +1 -1
  346. package/dist/core/utils/writeClientFullIndex.js +3 -1
  347. package/dist/core/utils/writeClientModels.d.ts +6 -0
  348. package/dist/core/utils/writeClientModels.d.ts.map +1 -1
  349. package/dist/core/utils/writeClientModels.js +24 -3
  350. package/dist/core/utils/writeClientModelsIndex.d.ts +2 -0
  351. package/dist/core/utils/writeClientModelsIndex.d.ts.map +1 -1
  352. package/dist/core/utils/writeClientModelsIndex.js +2 -2
  353. package/dist/core/utils/writeClientSchemas.d.ts +2 -0
  354. package/dist/core/utils/writeClientSchemas.d.ts.map +1 -1
  355. package/dist/core/utils/writeClientSchemas.js +6 -2
  356. package/dist/core/utils/writeClientServices.d.ts +2 -0
  357. package/dist/core/utils/writeClientServices.d.ts.map +1 -1
  358. package/dist/core/utils/writeClientServices.js +6 -2
  359. package/dist/templatesCompiled/cli/openApiConfig.d.ts +4 -1
  360. package/dist/templatesCompiled/cli/openApiConfig.d.ts.map +1 -1
  361. package/dist/templatesCompiled/cli/openApiConfig.js +88 -37
  362. package/dist/templatesCompiled/client/core/ApiRequestOptions.js +1 -1
  363. package/dist/templatesCompiled/client/core/BaseDto.d.ts +8 -0
  364. package/dist/templatesCompiled/client/core/BaseDto.d.ts.map +1 -0
  365. package/dist/templatesCompiled/client/core/BaseDto.js +18 -0
  366. package/dist/templatesCompiled/client/core/axios/getResponseBody.js +1 -1
  367. package/dist/templatesCompiled/client/core/axios/request.js +2 -2
  368. package/dist/templatesCompiled/client/core/axios/sendRequest.js +4 -4
  369. package/dist/templatesCompiled/client/core/dtoUtils.d.ts +8 -0
  370. package/dist/templatesCompiled/client/core/dtoUtils.d.ts.map +1 -0
  371. package/dist/templatesCompiled/client/core/dtoUtils.js +18 -0
  372. package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.js +2 -2
  373. package/dist/templatesCompiled/client/core/executor/requestExecutor.js +1 -1
  374. package/dist/templatesCompiled/client/core/fetch/getResponseBody.js +1 -1
  375. package/dist/templatesCompiled/client/core/fetch/request.js +2 -2
  376. package/dist/templatesCompiled/client/core/functions/isBinary.js +1 -1
  377. package/dist/templatesCompiled/client/core/node/getResponseBody.js +1 -1
  378. package/dist/templatesCompiled/client/core/node/request.js +2 -2
  379. package/dist/templatesCompiled/client/core/xhr/getResponseBody.js +1 -1
  380. package/dist/templatesCompiled/client/core/xhr/request.js +2 -2
  381. package/dist/templatesCompiled/client/core/xhr/sendRequest.js +4 -4
  382. package/dist/templatesCompiled/client/exportModels.d.ts +34 -0
  383. package/dist/templatesCompiled/client/exportModels.d.ts.map +1 -0
  384. package/dist/templatesCompiled/client/exportModels.js +280 -0
  385. package/dist/templatesCompiled/client/exportService.d.ts +7 -4
  386. package/dist/templatesCompiled/client/exportService.d.ts.map +1 -1
  387. package/dist/templatesCompiled/client/exportService.js +52 -33
  388. package/dist/templatesCompiled/client/indexCore.d.ts +3 -1
  389. package/dist/templatesCompiled/client/indexCore.d.ts.map +1 -1
  390. package/dist/templatesCompiled/client/indexCore.js +13 -2
  391. package/dist/templatesCompiled/client/indexFull.d.ts +9 -7
  392. package/dist/templatesCompiled/client/indexFull.d.ts.map +1 -1
  393. package/dist/templatesCompiled/client/indexFull.js +52 -34
  394. package/dist/templatesCompiled/client/indexModels.d.ts +7 -5
  395. package/dist/templatesCompiled/client/indexModels.d.ts.map +1 -1
  396. package/dist/templatesCompiled/client/indexModels.js +27 -18
  397. package/dist/templatesCompiled/client/joi/partials/joiSchemaGeneric.d.ts +27 -19
  398. package/dist/templatesCompiled/client/joi/partials/joiSchemaGeneric.d.ts.map +1 -1
  399. package/dist/templatesCompiled/client/joi/partials/joiSchemaGeneric.js +144 -63
  400. package/dist/templatesCompiled/client/jsonschema/exportSchema.d.ts +1 -0
  401. package/dist/templatesCompiled/client/jsonschema/exportSchema.d.ts.map +1 -1
  402. package/dist/templatesCompiled/client/jsonschema/exportSchema.js +17 -13
  403. package/dist/templatesCompiled/client/partials/exportInterface.d.ts +13 -5
  404. package/dist/templatesCompiled/client/partials/exportInterface.d.ts.map +1 -1
  405. package/dist/templatesCompiled/client/partials/exportInterface.js +91 -21
  406. package/dist/templatesCompiled/client/partials/result.d.ts +6 -4
  407. package/dist/templatesCompiled/client/partials/result.d.ts.map +1 -1
  408. package/dist/templatesCompiled/client/partials/result.js +16 -6
  409. package/dist/templatesCompiled/client/partials/serviceOption.d.ts +1 -0
  410. package/dist/templatesCompiled/client/partials/serviceOption.d.ts.map +1 -1
  411. package/dist/templatesCompiled/client/partials/serviceOption.js +11 -4
  412. package/dist/templatesCompiled/client/yup/partials/yupSchemaGeneric.d.ts +22 -16
  413. package/dist/templatesCompiled/client/yup/partials/yupSchemaGeneric.d.ts.map +1 -1
  414. package/dist/templatesCompiled/client/yup/partials/yupSchemaGeneric.js +72 -60
  415. package/dist/templatesCompiled/client/zod/partials/zodSchemaGeneric.d.ts +27 -19
  416. package/dist/templatesCompiled/client/zod/partials/zodSchemaGeneric.d.ts.map +1 -1
  417. package/dist/templatesCompiled/client/zod/partials/zodSchemaGeneric.js +77 -61
  418. package/package.json +7 -5
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_assert_1 = __importDefault(require("node:assert"));
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const node_test_1 = require("node:test");
10
+ const analyzeDiff_1 = require("../analyzeDiff");
11
+ const writeSpec = (dir, filename, payload) => {
12
+ const filePath = node_path_1.default.join(dir, filename);
13
+ node_fs_1.default.writeFileSync(filePath, JSON.stringify(payload, null, 2), 'utf-8');
14
+ return filePath;
15
+ };
16
+ const generatedRoot = node_path_1.default.join(__dirname, 'generated');
17
+ const createTempDir = (t, prefix) => {
18
+ node_fs_1.default.mkdirSync(generatedRoot, { recursive: true });
19
+ const tempDir = node_fs_1.default.mkdtempSync(node_path_1.default.join(generatedRoot, prefix));
20
+ t.after(() => {
21
+ node_fs_1.default.rmSync(tempDir, { recursive: true, force: true });
22
+ });
23
+ return tempDir;
24
+ };
25
+ (0, node_test_1.describe)('@unit: analyzeDiff RENAME and invalid-regex handling', () => {
26
+ (0, node_test_1.test)('detects semantic remove/add entries for property rename-like change', async (t) => {
27
+ const tmpDir = createTempDir(t, 'openapi-diff-rename-');
28
+ const reportPath = node_path_1.default.join(tmpDir, 'report.json');
29
+ const previousSpec = {
30
+ openapi: '3.0.0',
31
+ info: { title: 'Test', version: '1.0.0' },
32
+ paths: {},
33
+ components: {
34
+ schemas: {
35
+ User: {
36
+ type: 'object',
37
+ properties: {
38
+ first_name: { type: 'string' },
39
+ },
40
+ },
41
+ },
42
+ },
43
+ };
44
+ const currentSpec = {
45
+ openapi: '3.0.0',
46
+ info: { title: 'Test', version: '1.1.0' },
47
+ paths: {},
48
+ components: {
49
+ schemas: {
50
+ User: {
51
+ type: 'object',
52
+ properties: {
53
+ firstName: { type: 'string' },
54
+ },
55
+ },
56
+ },
57
+ },
58
+ };
59
+ const previousPath = writeSpec(tmpDir, 'previous.json', previousSpec);
60
+ const currentPath = writeSpec(tmpDir, 'current.json', currentSpec);
61
+ const result = await (0, analyzeDiff_1.analyzeDiff)({
62
+ input: currentPath,
63
+ compareWith: previousPath,
64
+ outputReport: reportPath,
65
+ });
66
+ node_assert_1.default.ok(result.success, `analyzeDiff failed: ${result.error ?? 'unknown'}`);
67
+ const reportRaw = node_fs_1.default.readFileSync(reportPath, 'utf-8');
68
+ const report = JSON.parse(reportRaw);
69
+ const removed = report.changes.find(change => change.type === 'model.property.removed' && change.path === '#/components/schemas/User/properties/first_name');
70
+ const added = report.changes.find(change => change.type === 'model.property.added' && change.path === '#/components/schemas/User/properties/firstName');
71
+ node_assert_1.default.ok(removed, 'Expected semantic removal entry for previous property');
72
+ node_assert_1.default.ok(added, 'Expected semantic addition entry for renamed property');
73
+ node_assert_1.default.strictEqual(removed?.severity, 'breaking');
74
+ node_assert_1.default.strictEqual(added?.severity, 'non-breaking');
75
+ });
76
+ (0, node_test_1.test)('invalid regex in config does not crash and valid rules still apply', async (t) => {
77
+ const tmpDir = createTempDir(t, 'openapi-diff-invalidregex-');
78
+ const reportPath = node_path_1.default.join(tmpDir, 'report.json');
79
+ const previousSpec = {
80
+ openapi: '3.0.0',
81
+ info: { title: 'Test', version: '1.0.0' },
82
+ paths: {},
83
+ components: {
84
+ schemas: {
85
+ User: {
86
+ type: 'object',
87
+ properties: {
88
+ age: { type: 'string' },
89
+ },
90
+ },
91
+ },
92
+ },
93
+ };
94
+ const currentSpec = {
95
+ openapi: '3.0.0',
96
+ info: { title: 'Test', version: '1.1.0' },
97
+ paths: {},
98
+ components: {
99
+ schemas: {
100
+ User: {
101
+ type: 'object',
102
+ properties: {
103
+ age: { type: 'number' },
104
+ },
105
+ },
106
+ },
107
+ },
108
+ };
109
+ const previousPath = writeSpec(tmpDir, 'previous.json', previousSpec);
110
+ const currentPath = writeSpec(tmpDir, 'current.json', currentSpec);
111
+ const configPath = node_path_1.default.join(tmpDir, 'openapi.config.json');
112
+ node_fs_1.default.writeFileSync(configPath, JSON.stringify({
113
+ analyze: {
114
+ ignore: [
115
+ {
116
+ pattern: '(', // invalid regex
117
+ reason: 'invalid pattern',
118
+ },
119
+ {
120
+ path: '#/components/schemas/User/properties/age',
121
+ reason: 'Ignore type diff in test',
122
+ },
123
+ ],
124
+ },
125
+ }, null, 2), 'utf-8');
126
+ const result = await (0, analyzeDiff_1.analyzeDiff)({
127
+ input: currentPath,
128
+ compareWith: previousPath,
129
+ outputReport: reportPath,
130
+ openapiConfig: configPath,
131
+ });
132
+ node_assert_1.default.ok(result.success, `analyzeDiff failed: ${result.error ?? 'unknown'}`);
133
+ const reportRaw = node_fs_1.default.readFileSync(reportPath, 'utf-8');
134
+ const report = JSON.parse(reportRaw);
135
+ const filteredTypeChange = report.changes.find(change => change.type === 'model.property.type.changed' && change.path === '#/components/schemas/User/properties/age');
136
+ node_assert_1.default.ok(!filteredTypeChange, 'Expected matching semantic change to be filtered by valid rule while invalid regex is ignored');
137
+ node_assert_1.default.strictEqual(report.summary.breaking, 0);
138
+ node_assert_1.default.strictEqual(report.summary.nonBreaking, 0);
139
+ node_assert_1.default.strictEqual(report.summary.informational, 0);
140
+ node_assert_1.default.strictEqual(report.recommendation.semver, 'patch');
141
+ });
142
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=analyzeDiffTypeCoercion.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzeDiffTypeCoercion.test.d.ts","sourceRoot":"","sources":["../../../../src/cli/analyzeDiff/__tests__/analyzeDiffTypeCoercion.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_assert_1 = __importDefault(require("node:assert"));
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const node_test_1 = require("node:test");
10
+ const analyzeDiff_1 = require("../analyzeDiff");
11
+ const writeSpec = (dir, filename, payload) => {
12
+ const filePath = node_path_1.default.join(dir, filename);
13
+ node_fs_1.default.writeFileSync(filePath, JSON.stringify(payload, null, 2), 'utf-8');
14
+ return filePath;
15
+ };
16
+ const generatedRoot = node_path_1.default.join(__dirname, 'generated');
17
+ const createTempDir = (t, prefix) => {
18
+ node_fs_1.default.mkdirSync(generatedRoot, { recursive: true });
19
+ const tempDir = node_fs_1.default.mkdtempSync(node_path_1.default.join(generatedRoot, prefix));
20
+ t.after(() => {
21
+ node_fs_1.default.rmSync(tempDir, { recursive: true, force: true });
22
+ });
23
+ return tempDir;
24
+ };
25
+ (0, node_test_1.describe)('@unit: analyzeDiff TYPE_COERCION miracles', () => {
26
+ (0, node_test_1.test)('detects semantic type change for scalar property transition', async (t) => {
27
+ const tmpDir = createTempDir(t, 'openapi-diff-test-');
28
+ const reportPath = node_path_1.default.join(tmpDir, 'report.json');
29
+ const previousSpec = {
30
+ openapi: '3.0.0',
31
+ info: { title: 'Test', version: '1.0.0' },
32
+ paths: {},
33
+ components: {
34
+ schemas: {
35
+ User: {
36
+ type: 'object',
37
+ properties: {
38
+ age: { type: 'string' },
39
+ },
40
+ },
41
+ },
42
+ },
43
+ };
44
+ const currentSpec = {
45
+ openapi: '3.0.0',
46
+ info: { title: 'Test', version: '1.1.0' },
47
+ paths: {},
48
+ components: {
49
+ schemas: {
50
+ User: {
51
+ type: 'object',
52
+ properties: {
53
+ age: { type: 'number' },
54
+ },
55
+ },
56
+ },
57
+ },
58
+ };
59
+ const previousPath = writeSpec(tmpDir, 'previous.json', previousSpec);
60
+ const currentPath = writeSpec(tmpDir, 'current.json', currentSpec);
61
+ const result = await (0, analyzeDiff_1.analyzeDiff)({
62
+ input: currentPath,
63
+ compareWith: previousPath,
64
+ outputReport: reportPath,
65
+ });
66
+ node_assert_1.default.ok(result.success, `analyzeDiff failed: ${result.error ?? 'unknown error'}`);
67
+ const reportRaw = node_fs_1.default.readFileSync(reportPath, 'utf-8');
68
+ const report = JSON.parse(reportRaw);
69
+ const typeChange = report.changes.find(change => change.type === 'model.property.type.changed');
70
+ node_assert_1.default.ok(typeChange, 'Expected semantic type-change entry');
71
+ node_assert_1.default.strictEqual(typeChange?.path, '#/components/schemas/User/properties/age');
72
+ node_assert_1.default.strictEqual(typeChange?.severity, 'breaking');
73
+ node_assert_1.default.ok(report.summary.breaking > 0);
74
+ });
75
+ (0, node_test_1.test)('filters semantic type-change entry when rule matches path', async (t) => {
76
+ const tmpDir = createTempDir(t, 'openapi-diff-test-');
77
+ const reportPath = node_path_1.default.join(tmpDir, 'report.json');
78
+ const previousSpec = {
79
+ openapi: '3.0.0',
80
+ info: { title: 'Test', version: '1.0.0' },
81
+ paths: {},
82
+ components: {
83
+ schemas: {
84
+ User: {
85
+ type: 'object',
86
+ properties: {
87
+ age: { type: 'string' },
88
+ },
89
+ },
90
+ },
91
+ },
92
+ };
93
+ const currentSpec = {
94
+ openapi: '3.0.0',
95
+ info: { title: 'Test', version: '1.1.0' },
96
+ paths: {},
97
+ components: {
98
+ schemas: {
99
+ User: {
100
+ type: 'object',
101
+ properties: {
102
+ age: { type: 'number' },
103
+ },
104
+ },
105
+ },
106
+ },
107
+ };
108
+ const previousPath = writeSpec(tmpDir, 'previous.json', previousSpec);
109
+ const currentPath = writeSpec(tmpDir, 'current.json', currentSpec);
110
+ const configPath = node_path_1.default.join(tmpDir, 'openapi.config.json');
111
+ node_fs_1.default.writeFileSync(configPath, JSON.stringify({
112
+ analyze: {
113
+ ignore: [
114
+ {
115
+ path: '#/components/schemas/User/properties/age',
116
+ reason: 'Ignore type diff in test',
117
+ },
118
+ ],
119
+ },
120
+ }, null, 2), 'utf-8');
121
+ const result = await (0, analyzeDiff_1.analyzeDiff)({
122
+ input: currentPath,
123
+ compareWith: previousPath,
124
+ outputReport: reportPath,
125
+ openapiConfig: configPath,
126
+ });
127
+ node_assert_1.default.ok(result.success, `analyzeDiff failed: ${result.error ?? 'unknown error'}`);
128
+ const reportRaw = node_fs_1.default.readFileSync(reportPath, 'utf-8');
129
+ const report = JSON.parse(reportRaw);
130
+ const filteredTypeChange = report.changes.find(change => change.type === 'model.property.type.changed' && change.path === '#/components/schemas/User/properties/age');
131
+ node_assert_1.default.ok(!filteredTypeChange, 'Expected semantic type-change to be filtered by analyze.ignore');
132
+ node_assert_1.default.strictEqual(report.summary.breaking, 0);
133
+ node_assert_1.default.strictEqual(report.summary.nonBreaking, 0);
134
+ node_assert_1.default.strictEqual(report.summary.informational, 0);
135
+ node_assert_1.default.strictEqual(report.recommendation.semver, 'patch');
136
+ });
137
+ });
@@ -0,0 +1,17 @@
1
+ import { OptionValues } from 'commander';
2
+ export type AnalyzeDiffResult = {
3
+ success: boolean;
4
+ skipped?: boolean;
5
+ reportPath?: string;
6
+ ignored?: number;
7
+ error?: string;
8
+ };
9
+ /**
10
+ * Maps analyze-diff result to a process exit code. Does not call `process.exit`.
11
+ */
12
+ export declare function toAnalyzeDiffExitCode(result: AnalyzeDiffResult): number;
13
+ /**
14
+ * Runs semantic diff analysis between two OpenAPI specs and writes JSON report.
15
+ */
16
+ export declare function analyzeDiff(options: OptionValues): Promise<AnalyzeDiffResult>;
17
+ //# sourceMappingURL=analyzeDiff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzeDiff.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/analyzeDiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAoBzC,MAAM,MAAM,iBAAiB,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAEvE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuFnF"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toAnalyzeDiffExitCode = toAnalyzeDiffExitCode;
4
+ exports.analyzeDiff = analyzeDiff;
5
+ const Consts_1 = require("../../common/Consts");
6
+ const LoggerMessages_1 = require("../../common/LoggerMessages");
7
+ const validateZodOptions_1 = require("../../common/Validation/validateZodOptions");
8
+ const evaluateGovernanceRules_1 = require("../../core/governance/evaluateGovernanceRules");
9
+ const loadGovernanceConfig_1 = require("../../core/governance/loadGovernanceConfig");
10
+ const applySemanticDiffPluginHooks_1 = require("../../core/plugins/applySemanticDiffPluginHooks");
11
+ const loadGeneratorPlugins_1 = require("../../core/plugins/loadGeneratorPlugins");
12
+ const analyzeOpenApiDiff_1 = require("../../core/semanticDiff/analyzeOpenApiDiff");
13
+ const getOpenApiSpec_1 = require("../../core/utils/getOpenApiSpec");
14
+ const schemas_1 = require("../schemas");
15
+ const ciSummary_1 = require("./ciSummary");
16
+ const ignoreRules_1 = require("./ignoreRules");
17
+ const ignoreSemanticChanges_1 = require("./ignoreSemanticChanges");
18
+ const pluginPaths_1 = require("./pluginPaths");
19
+ const semanticDiffContext_1 = require("./semanticDiffContext");
20
+ const specParser_1 = require("./specParser");
21
+ /**
22
+ * Maps analyze-diff result to a process exit code. Does not call `process.exit`.
23
+ */
24
+ function toAnalyzeDiffExitCode(result) {
25
+ return result.success ? 0 : 1;
26
+ }
27
+ /**
28
+ * Runs semantic diff analysis between two OpenAPI specs and writes JSON report.
29
+ */
30
+ async function analyzeDiff(options) {
31
+ const validationResult = (0, validateZodOptions_1.validateZodOptions)(schemas_1.analyzeDiffOptionsSchema, options);
32
+ if (!validationResult.success) {
33
+ const message = validationResult.errors.join('\n');
34
+ Consts_1.APP_LOGGER.error(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.VALIDATION_ERROR(message));
35
+ return { success: false, error: message };
36
+ }
37
+ try {
38
+ const validatedOptions = validationResult.data;
39
+ const reportPathInput = validatedOptions.outputReport ?? Consts_1.DEFAULT_ANALYZE_DIFF_REPORT_PATH;
40
+ const newSpecInput = validatedOptions.input;
41
+ const oldSpecInput = validatedOptions.compareWith;
42
+ const gitRef = validatedOptions.git;
43
+ if (!oldSpecInput && !gitRef) {
44
+ Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.SKIPPED_NO_BASE);
45
+ return { success: true, skipped: true };
46
+ }
47
+ const baseSourceLabel = oldSpecInput ? `compare-with:${oldSpecInput}` : `git:${gitRef}`;
48
+ Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.STARTED(newSpecInput, baseSourceLabel));
49
+ const newContext = (0, semanticDiffContext_1.createSemanticDiffContext)(newSpecInput);
50
+ const newSpec = await (0, getOpenApiSpec_1.getOpenApiSpec)(newContext, newSpecInput);
51
+ const oldSpec = oldSpecInput
52
+ ? await (0, getOpenApiSpec_1.getOpenApiSpec)((0, semanticDiffContext_1.createSemanticDiffContext)(oldSpecInput), oldSpecInput)
53
+ : (await (0, specParser_1.readSpecFromGit)(gitRef, newSpecInput));
54
+ if (oldSpecInput && validatedOptions.git) {
55
+ Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.COMPARE_WITH_OVERRIDES_GIT(validatedOptions.git));
56
+ }
57
+ const governancePolicy = await (0, loadGovernanceConfig_1.loadGovernanceConfig)(validatedOptions.governanceConfig);
58
+ const ignoreRules = (0, ignoreRules_1.loadIgnoreRules)(validatedOptions.openapiConfig);
59
+ const plugins = await (0, loadGeneratorPlugins_1.loadGeneratorPlugins)((0, pluginPaths_1.resolvePluginPaths)(validatedOptions.openapiConfig));
60
+ const baseReport = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec, {
61
+ allowBreaking: validatedOptions.allowBreaking ?? false,
62
+ governanceConfig: governancePolicy,
63
+ });
64
+ const pluginHooksResult = await (0, applySemanticDiffPluginHooks_1.applySemanticDiffPluginHooks)({
65
+ report: baseReport,
66
+ reportPath: reportPathInput,
67
+ plugins,
68
+ allowBreaking: validatedOptions.allowBreaking ?? false,
69
+ strictPluginMode: validatedOptions.strictPluginMode ?? false,
70
+ onDiagnostic: diagnostic => {
71
+ Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.PLUGIN_DIAGNOSTIC(diagnostic));
72
+ },
73
+ });
74
+ const { report: reportAfterIgnore, ignored } = (0, ignoreSemanticChanges_1.filterSemanticChangesByIgnoreRules)(pluginHooksResult.report, ignoreRules);
75
+ const report = {
76
+ ...reportAfterIgnore,
77
+ governance: (0, evaluateGovernanceRules_1.evaluateGovernanceRules)({
78
+ openApi: newSpec,
79
+ breakingChangesCount: reportAfterIgnore.summary.breaking,
80
+ allowBreaking: validatedOptions.allowBreaking ?? false,
81
+ governanceConfig: governancePolicy,
82
+ }),
83
+ };
84
+ const reportPath = await (0, analyzeOpenApiDiff_1.writeSemanticDiffReport)(report, pluginHooksResult.reportPath);
85
+ Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.REPORT_CREATED(reportPath));
86
+ Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.SUMMARY(report, reportPath));
87
+ Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.RECOMMENDATION(report));
88
+ Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.GOVERNANCE(report));
89
+ if (ignored > 0) {
90
+ Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.IGNORED_CHANGES(ignored));
91
+ }
92
+ if (validatedOptions.ci) {
93
+ Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.CI_MARKDOWN_SUMMARY((0, ciSummary_1.formatCiMarkdownSummary)(report, reportPath)));
94
+ }
95
+ if (validatedOptions.ci && report.governance.summary.errors > 0) {
96
+ return { success: false, reportPath, error: LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.CI_FAILURE };
97
+ }
98
+ return { success: true, reportPath, ignored };
99
+ }
100
+ catch (error) {
101
+ const message = error instanceof Error ? error.message : String(error);
102
+ Consts_1.APP_LOGGER.error(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.EXECUTION_ERROR(message));
103
+ return { success: false, error: message };
104
+ }
105
+ }
@@ -0,0 +1,17 @@
1
+ import type { DiffReport, IgnoreRule, JsonValue } from './types';
2
+ type BuildLegacyReportParams = {
3
+ baseLabel: string;
4
+ targetLabel: string;
5
+ oldSpec: JsonValue;
6
+ newSpec: JsonValue;
7
+ ignoreRules: IgnoreRule[];
8
+ };
9
+ /**
10
+ * Собирает legacy diff-отчет по сравнению двух спецификаций.
11
+ */
12
+ export declare function buildLegacyReport(params: BuildLegacyReportParams): {
13
+ report: DiffReport;
14
+ ignored: number;
15
+ };
16
+ export {};
17
+ //# sourceMappingURL=buildLegacyReport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildLegacyReport.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/buildLegacyReport.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAa,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE5E,KAAK,uBAAuB,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,SAAS,CAAC;IACnB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA6C1G"}
@@ -0,0 +1,54 @@
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.buildLegacyReport = buildLegacyReport;
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ const diffEngine_1 = require("./diffEngine");
9
+ const ignoreRules_1 = require("./ignoreRules");
10
+ const miracles_1 = require("./miracles");
11
+ /**
12
+ * Собирает legacy diff-отчет по сравнению двух спецификаций.
13
+ */
14
+ function buildLegacyReport(params) {
15
+ const { baseLabel, targetLabel, oldSpec, newSpec, ignoreRules } = params;
16
+ const normalizedOld = (0, diffEngine_1.normalizeForDiff)(oldSpec);
17
+ const normalizedNew = (0, diffEngine_1.normalizeForDiff)(newSpec);
18
+ const baseHash = crypto_1.default.createHash('sha256').update(JSON.stringify(normalizedOld)).digest('hex');
19
+ const targetHash = crypto_1.default.createHash('sha256').update(JSON.stringify(normalizedNew)).digest('hex');
20
+ const entries = (0, diffEngine_1.withDiffType)((0, diffEngine_1.collectDiffEntries)(normalizedOld, normalizedNew));
21
+ const { filtered, ignored } = (0, ignoreRules_1.applyIgnoreRules)(entries, ignoreRules);
22
+ const breakingCount = filtered.filter(entry => entry.severity === 'breaking').length;
23
+ const stabilityScore = filtered.length === 0 ? 100 : Math.round(((filtered.length - breakingCount) / filtered.length) * 100);
24
+ const stats = {
25
+ totalChanges: filtered.length,
26
+ added: filtered.filter(entry => entry.action === 'added').length,
27
+ removed: filtered.filter(entry => entry.action === 'removed').length,
28
+ changed: filtered.filter(entry => entry.action === 'changed').length,
29
+ ignored: ignored || undefined,
30
+ stabilityScore,
31
+ };
32
+ const breaking = filtered.filter(entry => entry.severity === 'breaking');
33
+ const warnings = filtered.filter(entry => entry.severity === 'warning');
34
+ const info = filtered.filter(entry => entry.severity === 'info');
35
+ const report = {
36
+ version: '1.0.0',
37
+ timestamp: new Date().toISOString(),
38
+ metadata: {
39
+ base: baseLabel,
40
+ target: targetLabel,
41
+ baseHash,
42
+ targetHash,
43
+ },
44
+ stats,
45
+ diff: {
46
+ breaking,
47
+ warnings,
48
+ info,
49
+ all: filtered,
50
+ },
51
+ miracles: (0, miracles_1.buildMiracles)(entries, normalizedOld, normalizedNew),
52
+ };
53
+ return { report, ignored };
54
+ }
@@ -0,0 +1,6 @@
1
+ import { SemanticDiffReport } from '../../core/semanticDiff/analyzeOpenApiDiff';
2
+ /**
3
+ * Builds markdown summary for CI logs.
4
+ */
5
+ export declare function formatCiMarkdownSummary(report: SemanticDiffReport, reportPath: string): string;
6
+ //# sourceMappingURL=ciSummary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ciSummary.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/ciSummary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAEhF;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAc9F"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatCiMarkdownSummary = formatCiMarkdownSummary;
4
+ /**
5
+ * Builds markdown summary for CI logs.
6
+ */
7
+ function formatCiMarkdownSummary(report, reportPath) {
8
+ const reasons = report.recommendation.reasons.map(reason => `- \`${reason}\``).join('\n');
9
+ return [
10
+ '### OpenAPI Semantic Diff',
11
+ `- Report: \`${reportPath}\``,
12
+ `- Schema Version: \`${report.schemaVersion}\``,
13
+ `- Recommendation: \`${report.recommendation.semver}\` (confidence: \`${report.recommendation.confidence}\`)`,
14
+ `- Reason: ${report.recommendation.reason}`,
15
+ '- Reason Codes:',
16
+ reasons,
17
+ `- Summary: breaking=\`${report.summary.breaking}\`, nonBreaking=\`${report.summary.nonBreaking}\`, informational=\`${report.summary.informational}\``,
18
+ `- Governance: errors=\`${report.governance.summary.errors}\`, warnings=\`${report.governance.summary.warnings}\`, info=\`${report.governance.summary.info}\``,
19
+ ].join('\n');
20
+ }
@@ -0,0 +1,54 @@
1
+ import { Diff } from 'deep-diff';
2
+ import type { DiffAction, DiffEntry, JsonValue } from './types';
3
+ /**
4
+ * Проверяет, содержит ли путь сегменты, указывающие на полиморфную схему (oneOf/anyOf).
5
+ * @param segments сегменты json-path
6
+ * @returns true если встречены полиморфные сегменты
7
+ */
8
+ export declare const hasPolymorphicSegment: (segments: (string | number)[]) => boolean;
9
+ /**
10
+ * Классифицирует серьёзность изменения по действию (added/removed/changed).
11
+ * @param action действие изменения
12
+ * @returns уровень серьёзности
13
+ */
14
+ export declare const classifySeverity: (action: DiffAction) => "info" | "warning" | "breaking";
15
+ /**
16
+ * Строит единичную запись отличия из набора сегментов пути и значений.
17
+ * Добавляет заметку при полиморфных изменениях.
18
+ * @param action действие изменения
19
+ * @param segments сегменты пути
20
+ * @param from предыдущее значение
21
+ * @param to новое значение
22
+ * @returns готовая запись DiffEntry
23
+ */
24
+ export declare const buildDiffEntry: (action: DiffAction, segments: (string | number)[], from?: JsonValue, to?: JsonValue) => DiffEntry;
25
+ /**
26
+ * Пытается классифицировать тип изменения по структуре json-path и самой записи.
27
+ * Возвращает семантические коды типа изменения (METHOD_REMOVED, PROPERTY_ADDED и т.д.).
28
+ * @param entry запись diff
29
+ * @returns код типа изменения или undefined
30
+ */
31
+ export declare const classifyDiffType: (entry: DiffEntry) => string | undefined;
32
+ /**
33
+ * Добавляет поле type к каждой записи diff, вычисленное через classifyDiffType, если отсутствует.
34
+ * @param entries массив записей diff
35
+ * @returns массив записей с полем type
36
+ */
37
+ export declare const withDiffType: (entries: DiffEntry[]) => DiffEntry[];
38
+ /**
39
+ * Преобразует единичный объект отличия из deep-diff в один или несколько DiffEntry.
40
+ * Обрабатывает массивные/индексные отличия (kind 'A') рекурсивно.
41
+ * @param difference объект отличия от deep-diff
42
+ * @returns массив DiffEntry
43
+ */
44
+ export declare const diffToEntries: (difference: Diff<unknown, unknown>) => DiffEntry[];
45
+ /**
46
+ * Собирает все записи отличий между двумя JSON-структурами: старой и новой.
47
+ * Выполняет глубокое сравнение и маппинг на DiffEntry.
48
+ * @param oldValue старая версия спецификации
49
+ * @param newValue новая версия спецификации
50
+ * @returns массив DiffEntry
51
+ */
52
+ export declare const collectDiffEntries: (oldValue: JsonValue, newValue: JsonValue) => DiffEntry[];
53
+ export declare const normalizeForDiff: (value: JsonValue) => JsonValue;
54
+ //# sourceMappingURL=diffEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diffEngine.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/diffEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAoB,MAAM,WAAW,CAAC;AAMnD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEhE;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAG,OAErE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,UAAU,oCAUlD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,UAAU,EAAE,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,OAAO,SAAS,EAAE,KAAK,SAAS,KAAG,SAoBpH,CAAC;AA0BF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,SAAS,KAAG,MAAM,GAAG,SAwC5D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,SAAS,EAAE,KAAG,SAAS,EAK5D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,YAAY,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,KAAG,SAAS,EA8B3E,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAAI,UAAU,SAAS,EAAE,UAAU,SAAS,KAAG,SAAS,EAMtF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,SAAS,KAAG,SAGnD,CAAC"}