ts-openapi-codegen 2.0.0 → 2.1.0-beta.2

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 +95 -2
  2. package/README.rus.md +95 -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,6 @@
1
+ import { OpenApiGeneratorPlugin } from './GeneratorPlugin.model';
2
+ /**
3
+ * Loads user plugins and appends built-in plugins as fallback handlers.
4
+ */
5
+ export declare function loadGeneratorPlugins(pluginPaths: string[]): Promise<OpenApiGeneratorPlugin[]>;
6
+ //# sourceMappingURL=loadGeneratorPlugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadGeneratorPlugins.d.ts","sourceRoot":"","sources":["../../../src/core/plugins/loadGeneratorPlugins.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAiDjE;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAcnG"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.loadGeneratorPlugins = loadGeneratorPlugins;
37
+ const pathHelpers_1 = require("../../common/utils/pathHelpers");
38
+ const getBuiltinPlugins_1 = require("./getBuiltinPlugins");
39
+ const node_url_1 = require("node:url");
40
+ /**
41
+ * Type guard for runtime plugin objects.
42
+ */
43
+ function isOpenApiGeneratorPlugin(value) {
44
+ return !!value && typeof value === 'object' && typeof value.name === 'string';
45
+ }
46
+ /**
47
+ * Resolves plugin export from a required module.
48
+ */
49
+ function getPluginFromModule(moduleExports) {
50
+ const exported = moduleExports;
51
+ return exported?.default ?? exported?.plugin ?? moduleExports;
52
+ }
53
+ /**
54
+ * Checks whether loader can fallback from require() to dynamic import().
55
+ */
56
+ function canFallbackToDynamicImport(error) {
57
+ const errorCode = typeof error === 'object' && error && 'code' in error ? String(error.code) : '';
58
+ const errorMessage = error instanceof Error ? error.message : '';
59
+ return (errorCode === 'ERR_REQUIRE_ESM' ||
60
+ errorCode === 'ERR_UNKNOWN_FILE_EXTENSION' ||
61
+ errorMessage.includes('Cannot use import statement outside a module') ||
62
+ errorMessage.includes('Unexpected token export'));
63
+ }
64
+ /**
65
+ * Loads a plugin module from a file path using require() with import() fallback.
66
+ */
67
+ async function loadPluginModule(pluginPath) {
68
+ try {
69
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
70
+ return require(pluginPath);
71
+ }
72
+ catch (error) {
73
+ if (!canFallbackToDynamicImport(error)) {
74
+ throw error;
75
+ }
76
+ return Promise.resolve(`${(0, node_url_1.pathToFileURL)(pluginPath).href}`).then(s => __importStar(require(s)));
77
+ }
78
+ }
79
+ /**
80
+ * Loads user plugins and appends built-in plugins as fallback handlers.
81
+ */
82
+ async function loadGeneratorPlugins(pluginPaths) {
83
+ const loadedPlugins = [];
84
+ for (const pluginPath of pluginPaths) {
85
+ const resolvedPath = (0, pathHelpers_1.resolveHelper)(process.cwd(), pluginPath);
86
+ const moduleExports = await loadPluginModule(resolvedPath);
87
+ const plugin = getPluginFromModule(moduleExports);
88
+ if (!isOpenApiGeneratorPlugin(plugin)) {
89
+ throw new Error(`Invalid plugin at "${pluginPath}": expected export with shape { name: string }`);
90
+ }
91
+ loadedPlugins.push(plugin);
92
+ }
93
+ return [...loadedPlugins, ...(0, getBuiltinPlugins_1.getBuiltinPlugins)()];
94
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=analyzeOpenApiDiff.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzeOpenApiDiff.test.d.ts","sourceRoot":"","sources":["../../../../src/core/semanticDiff/__tests__/analyzeOpenApiDiff.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,537 @@
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_test_1 = require("node:test");
8
+ const analyzeOpenApiDiff_1 = require("../analyzeOpenApiDiff");
9
+ (0, node_test_1.describe)('@unit: analyzeOpenApiDiff', () => {
10
+ (0, node_test_1.test)('detects breaking model and operation removals', () => {
11
+ const oldSpec = {
12
+ openapi: '3.0.0',
13
+ paths: {
14
+ '/pets': {
15
+ get: {
16
+ responses: {
17
+ '200': { description: 'ok' },
18
+ },
19
+ },
20
+ },
21
+ },
22
+ components: {
23
+ schemas: {
24
+ Pet: {
25
+ type: 'object',
26
+ properties: {
27
+ id: { type: 'string' },
28
+ },
29
+ required: ['id'],
30
+ },
31
+ },
32
+ },
33
+ };
34
+ const newSpec = {
35
+ openapi: '3.0.0',
36
+ paths: {},
37
+ components: {
38
+ schemas: {},
39
+ },
40
+ };
41
+ const report = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec);
42
+ node_assert_1.default.strictEqual(report.schemaVersion, '1.1.0');
43
+ node_assert_1.default.ok(report.summary.breaking >= 2);
44
+ node_assert_1.default.ok(report.changes.some(change => change.type === 'model.removed'));
45
+ node_assert_1.default.ok(report.changes.some(change => change.type === 'operation.removed'));
46
+ });
47
+ (0, node_test_1.test)('detects property required/type changes and enum changes', () => {
48
+ const oldSpec = {
49
+ openapi: '3.0.0',
50
+ paths: {},
51
+ components: {
52
+ schemas: {
53
+ User: {
54
+ type: 'object',
55
+ properties: {
56
+ age: { type: 'number' },
57
+ role: { enum: ['user', 'admin'] },
58
+ },
59
+ required: ['age'],
60
+ },
61
+ },
62
+ },
63
+ };
64
+ const newSpec = {
65
+ openapi: '3.0.0',
66
+ paths: {},
67
+ components: {
68
+ schemas: {
69
+ User: {
70
+ type: 'object',
71
+ properties: {
72
+ age: { type: 'integer' },
73
+ role: { enum: ['admin'] },
74
+ },
75
+ required: [],
76
+ },
77
+ },
78
+ },
79
+ };
80
+ const report = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec);
81
+ node_assert_1.default.ok(report.changes.some(change => change.type === 'model.property.type.changed' && change.severity === 'breaking'));
82
+ node_assert_1.default.ok(report.changes.some(change => change.type === 'model.property.required.changed' && change.severity === 'non-breaking'));
83
+ node_assert_1.default.ok(report.changes.some(change => change.type === 'model.property.type.changed' && change.path.includes('/role')));
84
+ });
85
+ (0, node_test_1.test)('detects non-breaking additions', () => {
86
+ const oldSpec = {
87
+ openapi: '3.0.0',
88
+ paths: {
89
+ '/ping': {
90
+ get: {
91
+ responses: {
92
+ '200': { description: 'ok' },
93
+ },
94
+ },
95
+ },
96
+ },
97
+ components: {
98
+ schemas: {
99
+ Ping: {
100
+ type: 'object',
101
+ properties: {
102
+ value: { type: 'string' },
103
+ },
104
+ },
105
+ },
106
+ },
107
+ };
108
+ const newSpec = {
109
+ openapi: '3.0.0',
110
+ paths: {
111
+ '/ping': {
112
+ get: {
113
+ responses: {
114
+ '200': { description: 'ok' },
115
+ '201': { description: 'created' },
116
+ },
117
+ },
118
+ },
119
+ '/pong': {
120
+ get: {
121
+ responses: {
122
+ '200': { description: 'ok' },
123
+ },
124
+ },
125
+ },
126
+ },
127
+ components: {
128
+ schemas: {
129
+ Ping: {
130
+ type: 'object',
131
+ properties: {
132
+ value: { type: 'string' },
133
+ meta: { type: 'string' },
134
+ },
135
+ },
136
+ Pong: {
137
+ type: 'object',
138
+ properties: {
139
+ value: { type: 'string' },
140
+ },
141
+ },
142
+ },
143
+ },
144
+ };
145
+ const report = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec);
146
+ node_assert_1.default.ok(report.summary.nonBreaking >= 3);
147
+ node_assert_1.default.ok(report.changes.some(change => change.type === 'model.added'));
148
+ node_assert_1.default.ok(report.changes.some(change => change.type === 'operation.added'));
149
+ node_assert_1.default.ok(report.changes.some(change => change.type === 'operation.response.success.added'));
150
+ });
151
+ (0, node_test_1.test)('classifies widening and narrowing transitions for enum/number and union', () => {
152
+ const oldSpec = {
153
+ openapi: '3.0.0',
154
+ paths: {},
155
+ components: {
156
+ schemas: {
157
+ Account: {
158
+ type: 'object',
159
+ properties: {
160
+ tier: { enum: ['basic', 'pro'] },
161
+ score: { type: 'integer' },
162
+ state: { oneOf: [{ type: 'string' }, { type: 'number' }] },
163
+ },
164
+ },
165
+ },
166
+ },
167
+ };
168
+ const newSpec = {
169
+ openapi: '3.0.0',
170
+ paths: {},
171
+ components: {
172
+ schemas: {
173
+ Account: {
174
+ type: 'object',
175
+ properties: {
176
+ tier: { enum: ['basic', 'pro', 'enterprise'] },
177
+ score: { type: 'number' },
178
+ state: { oneOf: [{ type: 'string' }] },
179
+ },
180
+ },
181
+ },
182
+ },
183
+ };
184
+ const report = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec);
185
+ node_assert_1.default.ok(report.changes.some(change => change.type === 'model.property.type.changed' &&
186
+ change.path.includes('/tier') &&
187
+ change.severity === 'non-breaking'));
188
+ node_assert_1.default.ok(report.changes.some(change => change.type === 'model.property.type.changed' &&
189
+ change.path.includes('/score') &&
190
+ change.severity === 'non-breaking'));
191
+ node_assert_1.default.ok(report.changes.some(change => change.type === 'model.property.type.changed' &&
192
+ change.path.includes('/state') &&
193
+ change.severity === 'breaking'));
194
+ });
195
+ (0, node_test_1.test)('treats different refs and narrowing formats as breaking, widening formats as non-breaking', () => {
196
+ const oldSpec = {
197
+ openapi: '3.0.0',
198
+ paths: {},
199
+ components: {
200
+ schemas: {
201
+ User: {
202
+ type: 'object',
203
+ properties: {
204
+ profile: { $ref: '#/components/schemas/ProfileV1' },
205
+ count: { type: 'integer', format: 'int32' },
206
+ ratio: { type: 'number', format: 'float' },
207
+ },
208
+ },
209
+ ProfileV1: {
210
+ type: 'object',
211
+ properties: {
212
+ id: { type: 'string' },
213
+ },
214
+ },
215
+ ProfileV2: {
216
+ type: 'object',
217
+ properties: {
218
+ id: { type: 'string' },
219
+ },
220
+ },
221
+ },
222
+ },
223
+ };
224
+ const newSpec = {
225
+ openapi: '3.0.0',
226
+ paths: {},
227
+ components: {
228
+ schemas: {
229
+ User: {
230
+ type: 'object',
231
+ properties: {
232
+ profile: { $ref: '#/components/schemas/ProfileV2' },
233
+ count: { type: 'integer', format: 'int64' },
234
+ ratio: { type: 'number', format: 'double' },
235
+ },
236
+ },
237
+ ProfileV1: {
238
+ type: 'object',
239
+ properties: {
240
+ id: { type: 'string' },
241
+ },
242
+ },
243
+ ProfileV2: {
244
+ type: 'object',
245
+ properties: {
246
+ id: { type: 'string' },
247
+ },
248
+ },
249
+ },
250
+ },
251
+ };
252
+ const wideningReport = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec);
253
+ node_assert_1.default.ok(wideningReport.changes.some(change => change.type === 'model.property.type.changed' &&
254
+ change.path.includes('/profile') &&
255
+ change.severity === 'breaking'));
256
+ node_assert_1.default.ok(wideningReport.changes.some(change => change.type === 'model.property.type.changed' &&
257
+ change.path.includes('/count') &&
258
+ change.severity === 'non-breaking'));
259
+ node_assert_1.default.ok(wideningReport.changes.some(change => change.type === 'model.property.type.changed' &&
260
+ change.path.includes('/ratio') &&
261
+ change.severity === 'non-breaking'));
262
+ const narrowingReport = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)({
263
+ openapi: '3.0.0',
264
+ paths: {},
265
+ components: {
266
+ schemas: {
267
+ User: {
268
+ type: 'object',
269
+ properties: {
270
+ count: { type: 'integer', format: 'int64' },
271
+ },
272
+ },
273
+ },
274
+ },
275
+ }, {
276
+ openapi: '3.0.0',
277
+ paths: {},
278
+ components: {
279
+ schemas: {
280
+ User: {
281
+ type: 'object',
282
+ properties: {
283
+ count: { type: 'integer', format: 'int32' },
284
+ },
285
+ },
286
+ },
287
+ },
288
+ });
289
+ node_assert_1.default.ok(narrowingReport.changes.some(change => change.type === 'model.property.type.changed' &&
290
+ change.path.includes('/count') &&
291
+ change.severity === 'breaking'));
292
+ });
293
+ (0, node_test_1.test)('detects success response payload schema changes', () => {
294
+ const oldSpec = {
295
+ openapi: '3.0.0',
296
+ paths: {
297
+ '/users/{id}': {
298
+ get: {
299
+ responses: {
300
+ '200': {
301
+ description: 'ok',
302
+ content: {
303
+ 'application/json': {
304
+ schema: { type: 'integer' },
305
+ },
306
+ },
307
+ },
308
+ },
309
+ },
310
+ },
311
+ },
312
+ components: {
313
+ schemas: {},
314
+ },
315
+ };
316
+ const newSpec = {
317
+ openapi: '3.0.0',
318
+ paths: {
319
+ '/users/{id}': {
320
+ get: {
321
+ responses: {
322
+ '200': {
323
+ description: 'ok',
324
+ content: {
325
+ 'application/json': {
326
+ schema: { type: 'number' },
327
+ },
328
+ },
329
+ },
330
+ '201': {
331
+ description: 'created',
332
+ content: {
333
+ 'application/json': {
334
+ schema: { type: 'string' },
335
+ },
336
+ },
337
+ },
338
+ },
339
+ },
340
+ },
341
+ },
342
+ components: {
343
+ schemas: {},
344
+ },
345
+ };
346
+ const report = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec);
347
+ node_assert_1.default.ok(report.changes.some(change => change.type === 'operation.response.success.type.changed' && change.severity === 'non-breaking'));
348
+ node_assert_1.default.ok(report.changes.some(change => change.type === 'operation.response.success.added'));
349
+ });
350
+ (0, node_test_1.test)('returns stable and deduplicated changes ordering', () => {
351
+ const oldSpec = {
352
+ openapi: '3.0.0',
353
+ paths: {
354
+ '/z': {
355
+ get: {
356
+ responses: {
357
+ '200': { description: 'ok' },
358
+ },
359
+ },
360
+ },
361
+ },
362
+ components: {
363
+ schemas: {
364
+ Zeta: {
365
+ type: 'object',
366
+ properties: {
367
+ value: { type: 'string' },
368
+ },
369
+ },
370
+ Alpha: {
371
+ type: 'object',
372
+ properties: {
373
+ value: { type: 'string' },
374
+ },
375
+ },
376
+ },
377
+ },
378
+ };
379
+ const newSpec = {
380
+ openapi: '3.0.0',
381
+ paths: {},
382
+ components: {
383
+ schemas: {},
384
+ },
385
+ };
386
+ const report = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec);
387
+ const keys = report.changes.map(change => `${change.path}|${change.type}|${change.severity}|${change.message}`);
388
+ const sortedKeys = [...keys].sort((left, right) => left.localeCompare(right));
389
+ const uniqueSize = new Set(keys).size;
390
+ node_assert_1.default.deepStrictEqual(keys, sortedKeys);
391
+ node_assert_1.default.equal(keys.length, uniqueSize);
392
+ });
393
+ (0, node_test_1.test)('builds semver recommendation matrix (major/minor/patch)', () => {
394
+ const majorReport = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)({
395
+ openapi: '3.0.0',
396
+ paths: {
397
+ '/users': {
398
+ get: {
399
+ responses: {
400
+ '200': { description: 'ok' },
401
+ },
402
+ },
403
+ },
404
+ },
405
+ components: { schemas: {} },
406
+ }, {
407
+ openapi: '3.0.0',
408
+ paths: {},
409
+ components: { schemas: {} },
410
+ });
411
+ node_assert_1.default.strictEqual(majorReport.recommendation.semver, 'major');
412
+ node_assert_1.default.ok(majorReport.recommendation.reasons.includes('HAS_BREAKING_CHANGES'));
413
+ const minorReport = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)({
414
+ openapi: '3.0.0',
415
+ paths: {},
416
+ components: { schemas: {} },
417
+ }, {
418
+ openapi: '3.0.0',
419
+ paths: {
420
+ '/users': {
421
+ get: {
422
+ responses: {
423
+ '200': { description: 'ok' },
424
+ },
425
+ },
426
+ },
427
+ },
428
+ components: { schemas: {} },
429
+ });
430
+ node_assert_1.default.strictEqual(minorReport.recommendation.semver, 'minor');
431
+ node_assert_1.default.ok(minorReport.recommendation.reasons.includes('HAS_BACKWARD_COMPATIBLE_CHANGES'));
432
+ const patchReport = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)({
433
+ openapi: '3.0.0',
434
+ paths: {
435
+ '/users': {
436
+ get: {
437
+ responses: {
438
+ '200': { description: 'ok' },
439
+ },
440
+ },
441
+ },
442
+ },
443
+ components: { schemas: {} },
444
+ }, {
445
+ openapi: '3.0.0',
446
+ paths: {
447
+ '/users': {
448
+ get: {
449
+ responses: {
450
+ '200': { description: 'ok' },
451
+ },
452
+ },
453
+ },
454
+ },
455
+ components: { schemas: {} },
456
+ });
457
+ node_assert_1.default.strictEqual(patchReport.recommendation.semver, 'patch');
458
+ node_assert_1.default.ok(patchReport.recommendation.reasons.includes('NO_API_SURFACE_CHANGES'));
459
+ });
460
+ (0, node_test_1.test)('builds governance violations and supports allowBreaking override', () => {
461
+ const oldSpec = {
462
+ openapi: '3.0.0',
463
+ paths: {
464
+ '/users': {
465
+ get: {
466
+ operationId: 'getUsers',
467
+ responses: {
468
+ '200': { description: 'ok' },
469
+ },
470
+ },
471
+ },
472
+ },
473
+ components: { schemas: {} },
474
+ };
475
+ const newSpec = {
476
+ openapi: '3.0.0',
477
+ paths: {
478
+ '/users': {
479
+ get: {
480
+ responses: {
481
+ default: { description: 'fallback' },
482
+ },
483
+ },
484
+ },
485
+ },
486
+ components: { schemas: {} },
487
+ };
488
+ const strictGovernanceReport = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec);
489
+ node_assert_1.default.ok(strictGovernanceReport.governance.violations.some(violation => violation.ruleId === 'NO_BREAKING_WITHOUT_FLAG'));
490
+ node_assert_1.default.ok(strictGovernanceReport.governance.violations.some(violation => violation.ruleId === 'REQUIRE_OPERATION_ID'));
491
+ node_assert_1.default.ok(strictGovernanceReport.governance.violations.some(violation => violation.ruleId === 'NO_DEFAULT_WITHOUT_2XX'));
492
+ node_assert_1.default.ok(strictGovernanceReport.governance.summary.errors > 0);
493
+ const allowedBreakingReport = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec, { allowBreaking: true });
494
+ node_assert_1.default.ok(!allowedBreakingReport.governance.violations.some(violation => violation.ruleId === 'NO_BREAKING_WITHOUT_FLAG'));
495
+ });
496
+ (0, node_test_1.test)('applies governance config overrides in semantic diff report', () => {
497
+ const report = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)({
498
+ openapi: '3.0.0',
499
+ paths: {
500
+ '/users': {
501
+ get: {
502
+ operationId: 'getUsers',
503
+ responses: {
504
+ '200': { description: 'ok' },
505
+ },
506
+ },
507
+ },
508
+ },
509
+ components: { schemas: {} },
510
+ }, {
511
+ openapi: '3.0.0',
512
+ paths: {
513
+ '/users': {
514
+ get: {
515
+ responses: {
516
+ default: { description: 'fallback' },
517
+ },
518
+ },
519
+ },
520
+ },
521
+ components: { schemas: {} },
522
+ }, {
523
+ governanceConfig: {
524
+ rules: {
525
+ REQUIRE_OPERATION_ID: {
526
+ enabled: false,
527
+ },
528
+ NO_DEFAULT_WITHOUT_2XX: {
529
+ severity: 'error',
530
+ },
531
+ },
532
+ },
533
+ });
534
+ node_assert_1.default.ok(!report.governance.violations.some(violation => violation.ruleId === 'REQUIRE_OPERATION_ID'));
535
+ node_assert_1.default.ok(report.governance.violations.some(violation => violation.ruleId === 'NO_DEFAULT_WITHOUT_2XX' && violation.severity === 'error'));
536
+ });
537
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=semanticDiffReportSchema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semanticDiffReportSchema.test.d.ts","sourceRoot":"","sources":["../../../../src/core/semanticDiff/__tests__/semanticDiffReportSchema.test.ts"],"names":[],"mappings":""}