ts-openapi-codegen 2.1.0-beta.1 → 2.1.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (520) hide show
  1. package/README.md +27 -934
  2. package/README.rus.md +27 -934
  3. package/dist/cli/analyzeDiff/__tests__/analyzeDiff.cli.test.js +40 -24
  4. package/dist/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.d.ts +2 -0
  5. package/dist/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.d.ts.map +1 -0
  6. package/dist/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.js +47 -0
  7. package/dist/cli/analyzeDiff/__tests__/analyzeDiffRenameAndInvalidRegex.test.js +17 -7
  8. package/dist/cli/analyzeDiff/__tests__/analyzeDiffTypeCoercion.test.js +17 -7
  9. package/dist/cli/analyzeDiff/analyzeDiff.d.ts +14 -2
  10. package/dist/cli/analyzeDiff/analyzeDiff.d.ts.map +1 -1
  11. package/dist/cli/analyzeDiff/analyzeDiff.js +58 -15
  12. package/dist/cli/analyzeDiff/ciSummary.d.ts +6 -3
  13. package/dist/cli/analyzeDiff/ciSummary.d.ts.map +1 -1
  14. package/dist/cli/analyzeDiff/ciSummary.js +10 -6
  15. package/dist/cli/analyzeDiff/ignoreRules.d.ts +0 -22
  16. package/dist/cli/analyzeDiff/ignoreRules.d.ts.map +1 -1
  17. package/dist/cli/analyzeDiff/ignoreRules.js +3 -25
  18. package/dist/cli/analyzeDiff/miracles.d.ts +0 -54
  19. package/dist/cli/analyzeDiff/miracles.d.ts.map +1 -1
  20. package/dist/cli/analyzeDiff/miracles.js +1 -219
  21. package/dist/cli/analyzeDiff/specParser.d.ts +0 -13
  22. package/dist/cli/analyzeDiff/specParser.d.ts.map +1 -1
  23. package/dist/cli/analyzeDiff/specParser.js +2 -23
  24. package/dist/cli/analyzeDiff/types.d.ts +0 -42
  25. package/dist/cli/analyzeDiff/types.d.ts.map +1 -1
  26. package/dist/cli/analyzeUsage/analyzeUsage.d.ts +4 -0
  27. package/dist/cli/analyzeUsage/analyzeUsage.d.ts.map +1 -0
  28. package/dist/cli/analyzeUsage/analyzeUsage.js +60 -0
  29. package/dist/cli/analyzeUsage/core/Analyzer.d.ts +9 -0
  30. package/dist/cli/analyzeUsage/core/Analyzer.d.ts.map +1 -0
  31. package/dist/cli/analyzeUsage/core/Analyzer.js +29 -0
  32. package/dist/cli/analyzeUsage/core/ProjectContext.d.ts +10 -0
  33. package/dist/cli/analyzeUsage/core/ProjectContext.d.ts.map +1 -0
  34. package/dist/cli/analyzeUsage/core/ProjectContext.js +58 -0
  35. package/dist/cli/analyzeUsage/core/Scanner.d.ts +23 -0
  36. package/dist/cli/analyzeUsage/core/Scanner.d.ts.map +1 -0
  37. package/dist/cli/analyzeUsage/core/Scanner.js +125 -0
  38. package/dist/cli/analyzeUsage/rules/ClientRule.d.ts +14 -0
  39. package/dist/cli/analyzeUsage/rules/ClientRule.d.ts.map +1 -0
  40. package/dist/cli/analyzeUsage/rules/ClientRule.js +86 -0
  41. package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts +7 -0
  42. package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts.map +1 -0
  43. package/dist/cli/analyzeUsage/rules/CoverageRule.js +55 -0
  44. package/dist/cli/analyzeUsage/rules/DiagnosticsRule.d.ts +6 -0
  45. package/dist/cli/analyzeUsage/rules/DiagnosticsRule.d.ts.map +1 -0
  46. package/dist/cli/analyzeUsage/rules/DiagnosticsRule.js +63 -0
  47. package/dist/cli/analyzeUsage/rules/ImportRule.d.ts +6 -0
  48. package/dist/cli/analyzeUsage/rules/ImportRule.d.ts.map +1 -0
  49. package/dist/cli/analyzeUsage/rules/ImportRule.js +50 -0
  50. package/dist/cli/analyzeUsage/rules/ModelRule.d.ts +6 -0
  51. package/dist/cli/analyzeUsage/rules/ModelRule.d.ts.map +1 -0
  52. package/dist/cli/analyzeUsage/rules/ModelRule.js +34 -0
  53. package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts +6 -0
  54. package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts.map +1 -0
  55. package/dist/cli/analyzeUsage/rules/SchemaRule.js +46 -0
  56. package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts +15 -0
  57. package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts.map +1 -0
  58. package/dist/cli/analyzeUsage/rules/ServiceRule.js +96 -0
  59. package/dist/cli/analyzeUsage/types.d.ts +52 -0
  60. package/dist/cli/analyzeUsage/types.d.ts.map +1 -0
  61. package/dist/cli/analyzeUsage/types.js +2 -0
  62. package/dist/cli/analyzeUsage/utils/fuzzy.d.ts +5 -0
  63. package/dist/cli/analyzeUsage/utils/fuzzy.d.ts.map +1 -0
  64. package/dist/cli/analyzeUsage/utils/fuzzy.js +38 -0
  65. package/dist/cli/analyzeUsage/utils/report.d.ts +16 -0
  66. package/dist/cli/analyzeUsage/utils/report.d.ts.map +1 -0
  67. package/dist/cli/analyzeUsage/utils/report.js +85 -0
  68. package/dist/cli/checkAndUpdateConfig/__tests__/checkConfig.test.d.ts +2 -0
  69. package/dist/cli/checkAndUpdateConfig/__tests__/checkConfig.test.d.ts.map +1 -0
  70. package/dist/cli/checkAndUpdateConfig/__tests__/checkConfig.test.js +53 -0
  71. package/dist/cli/checkAndUpdateConfig/__tests__/updateConfig.test.d.ts +2 -0
  72. package/dist/cli/checkAndUpdateConfig/__tests__/updateConfig.test.d.ts.map +1 -0
  73. package/dist/cli/checkAndUpdateConfig/__tests__/updateConfig.test.js +52 -0
  74. package/dist/cli/checkAndUpdateConfig/checkConfig.d.ts +2 -1
  75. package/dist/cli/checkAndUpdateConfig/checkConfig.d.ts.map +1 -1
  76. package/dist/cli/checkAndUpdateConfig/checkConfig.js +15 -6
  77. package/dist/cli/checkAndUpdateConfig/updateConfig.d.ts +2 -1
  78. package/dist/cli/checkAndUpdateConfig/updateConfig.d.ts.map +1 -1
  79. package/dist/cli/checkAndUpdateConfig/updateConfig.js +8 -5
  80. package/dist/cli/checkAndUpdateConfig/utils/__tests__/prepareConfigData.test.d.ts +2 -0
  81. package/dist/cli/checkAndUpdateConfig/utils/__tests__/prepareConfigData.test.d.ts.map +1 -0
  82. package/dist/cli/checkAndUpdateConfig/utils/__tests__/prepareConfigData.test.js +20 -0
  83. package/dist/cli/checkAndUpdateConfig/utils/__tests__/removeDefaultConfigValues.test.d.ts +2 -0
  84. package/dist/cli/checkAndUpdateConfig/utils/__tests__/removeDefaultConfigValues.test.d.ts.map +1 -0
  85. package/dist/cli/checkAndUpdateConfig/utils/__tests__/removeDefaultConfigValues.test.js +35 -0
  86. package/dist/cli/checkAndUpdateConfig/utils/__tests__/validateAndMigrateConfigData.test.d.ts +2 -0
  87. package/dist/cli/checkAndUpdateConfig/utils/__tests__/validateAndMigrateConfigData.test.d.ts.map +1 -0
  88. package/dist/cli/checkAndUpdateConfig/utils/__tests__/validateAndMigrateConfigData.test.js +59 -0
  89. package/dist/cli/checkAndUpdateConfig/utils/removeDefaultConfigValues.d.ts.map +1 -1
  90. package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.d.ts.map +1 -1
  91. package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.js +19 -1
  92. package/dist/cli/checkAndUpdateConfig/utils/validateExecutorSetup.d.ts +6 -0
  93. package/dist/cli/checkAndUpdateConfig/utils/validateExecutorSetup.d.ts.map +1 -0
  94. package/dist/cli/checkAndUpdateConfig/utils/validateExecutorSetup.js +55 -0
  95. package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.d.ts +1 -1
  96. package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.d.ts.map +1 -1
  97. package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.js +1 -1
  98. package/dist/cli/generateOpenApiClient/__tests__/generateOpenApiClient.strict.test.js +18 -9
  99. package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts +2 -5
  100. package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts.map +1 -1
  101. package/dist/cli/generateOpenApiClient/generateOpenApiClient.js +24 -20
  102. package/dist/cli/index.js +45 -9
  103. package/dist/cli/initOpenApiConfig/Types.d.ts +2 -0
  104. package/dist/cli/initOpenApiConfig/Types.d.ts.map +1 -1
  105. package/dist/cli/initOpenApiConfig/__tests__/init.test.d.ts +2 -0
  106. package/dist/cli/initOpenApiConfig/__tests__/init.test.d.ts.map +1 -0
  107. package/dist/cli/initOpenApiConfig/__tests__/init.test.js +20 -0
  108. package/dist/cli/initOpenApiConfig/__tests__/initConfig.test.d.ts +2 -0
  109. package/dist/cli/initOpenApiConfig/__tests__/initConfig.test.d.ts.map +1 -0
  110. package/dist/cli/initOpenApiConfig/__tests__/initConfig.test.js +49 -0
  111. package/dist/cli/initOpenApiConfig/init.d.ts +2 -1
  112. package/dist/cli/initOpenApiConfig/init.d.ts.map +1 -1
  113. package/dist/cli/initOpenApiConfig/init.js +52 -20
  114. package/dist/cli/initOpenApiConfig/initConfig.d.ts +5 -0
  115. package/dist/cli/initOpenApiConfig/initConfig.d.ts.map +1 -1
  116. package/dist/cli/initOpenApiConfig/initConfig.js +8 -4
  117. package/dist/cli/initOpenApiConfig/initCustomRequest.d.ts +3 -2
  118. package/dist/cli/initOpenApiConfig/initCustomRequest.d.ts.map +1 -1
  119. package/dist/cli/initOpenApiConfig/initCustomRequest.js +36 -10
  120. package/dist/cli/initOpenApiConfig/utils/__tests__/buildConfig.test.d.ts +2 -0
  121. package/dist/cli/initOpenApiConfig/utils/__tests__/buildConfig.test.d.ts.map +1 -0
  122. package/dist/cli/initOpenApiConfig/utils/__tests__/buildConfig.test.js +93 -0
  123. package/dist/cli/initOpenApiConfig/utils/__tests__/findSpecFiles.test.d.ts +2 -0
  124. package/dist/cli/initOpenApiConfig/utils/__tests__/findSpecFiles.test.d.ts.map +1 -0
  125. package/dist/cli/initOpenApiConfig/utils/__tests__/findSpecFiles.test.js +45 -0
  126. package/dist/cli/initOpenApiConfig/utils/__tests__/validateSpecFiles.test.d.ts +2 -0
  127. package/dist/cli/initOpenApiConfig/utils/__tests__/validateSpecFiles.test.d.ts.map +1 -0
  128. package/dist/cli/initOpenApiConfig/utils/__tests__/validateSpecFiles.test.js +61 -0
  129. package/dist/cli/initOpenApiConfig/utils/buildConfig.d.ts +6 -12
  130. package/dist/cli/initOpenApiConfig/utils/buildConfig.d.ts.map +1 -1
  131. package/dist/cli/initOpenApiConfig/utils/buildConfig.js +24 -19
  132. package/dist/cli/initOpenApiConfig/utils/registerHandlebarTemplates.d.ts.map +1 -1
  133. package/dist/cli/initOpenApiConfig/utils/registerHandlebarTemplates.js +2 -0
  134. package/dist/cli/interactive/constants.d.ts +0 -4
  135. package/dist/cli/interactive/constants.d.ts.map +1 -1
  136. package/dist/cli/interactive/constants.js +1 -5
  137. package/dist/cli/previewChanges/previewChanges.d.ts +2 -1
  138. package/dist/cli/previewChanges/previewChanges.d.ts.map +1 -1
  139. package/dist/cli/previewChanges/previewChanges.js +8 -8
  140. package/dist/cli/previewChanges/utils/__tests__/compareFiles.test.d.ts +2 -0
  141. package/dist/cli/previewChanges/utils/__tests__/compareFiles.test.d.ts.map +1 -0
  142. package/dist/cli/previewChanges/utils/__tests__/compareFiles.test.js +52 -0
  143. package/dist/cli/previewChanges/utils/__tests__/isDirectoryEmpty.test.d.ts +2 -0
  144. package/dist/cli/previewChanges/utils/__tests__/isDirectoryEmpty.test.d.ts.map +1 -0
  145. package/dist/cli/previewChanges/utils/__tests__/isDirectoryEmpty.test.js +43 -0
  146. package/dist/cli/previewChanges/utils/__tests__/readDirectoryRecursive.test.d.ts +2 -0
  147. package/dist/cli/previewChanges/utils/__tests__/readDirectoryRecursive.test.d.ts.map +1 -0
  148. package/dist/cli/previewChanges/utils/__tests__/readDirectoryRecursive.test.js +32 -0
  149. package/dist/cli/previewChanges/utils/__tests__/updateOutputPaths.test.d.ts +2 -0
  150. package/dist/cli/previewChanges/utils/__tests__/updateOutputPaths.test.d.ts.map +1 -0
  151. package/dist/cli/previewChanges/utils/__tests__/updateOutputPaths.test.js +68 -0
  152. package/dist/cli/previewChanges/utils/formatDiff.d.ts.map +1 -1
  153. package/dist/cli/previewChanges/utils/updateOutputPaths.d.ts.map +1 -1
  154. package/dist/cli/previewChanges/utils/updateOutputPaths.js +5 -12
  155. package/dist/cli/schemas/__tests__/checkConfigAndUpdate.test.d.ts +2 -0
  156. package/dist/cli/schemas/__tests__/checkConfigAndUpdate.test.d.ts.map +1 -0
  157. package/dist/cli/schemas/__tests__/checkConfigAndUpdate.test.js +36 -0
  158. package/dist/cli/schemas/__tests__/generateOptionsSchema.test.d.ts +2 -0
  159. package/dist/cli/schemas/__tests__/generateOptionsSchema.test.d.ts.map +1 -0
  160. package/dist/cli/schemas/__tests__/generateOptionsSchema.test.js +59 -0
  161. package/dist/cli/schemas/__tests__/initOptionsSchema.test.d.ts +2 -0
  162. package/dist/cli/schemas/__tests__/initOptionsSchema.test.d.ts.map +1 -0
  163. package/dist/cli/schemas/__tests__/initOptionsSchema.test.js +43 -0
  164. package/dist/cli/schemas/__tests__/previewChangesSchema.test.d.ts +2 -0
  165. package/dist/cli/schemas/__tests__/previewChangesSchema.test.d.ts.map +1 -0
  166. package/dist/cli/schemas/__tests__/previewChangesSchema.test.js +31 -0
  167. package/dist/cli/schemas/analyzeUsage.d.ts +13 -0
  168. package/dist/cli/schemas/analyzeUsage.d.ts.map +1 -0
  169. package/dist/cli/schemas/analyzeUsage.js +41 -0
  170. package/dist/cli/schemas/generate.d.ts +10 -2
  171. package/dist/cli/schemas/generate.d.ts.map +1 -1
  172. package/dist/cli/schemas/generate.js +7 -2
  173. package/dist/cli/schemas/index.d.ts +2 -2
  174. package/dist/cli/schemas/index.d.ts.map +1 -1
  175. package/dist/cli/schemas/index.js +1 -1
  176. package/dist/cli/schemas/init.d.ts +10 -0
  177. package/dist/cli/schemas/init.d.ts.map +1 -1
  178. package/dist/cli/schemas/init.js +3 -1
  179. package/dist/cli/types.d.ts +6 -0
  180. package/dist/cli/types.d.ts.map +1 -0
  181. package/dist/cli/types.js +2 -0
  182. package/dist/common/Consts.d.ts +1 -0
  183. package/dist/common/Consts.d.ts.map +1 -1
  184. package/dist/common/Consts.js +7 -3
  185. package/dist/common/Logger.d.ts.map +1 -1
  186. package/dist/common/Logger.js +3 -3
  187. package/dist/common/LoggerMessages.d.ts +71 -12
  188. package/dist/common/LoggerMessages.d.ts.map +1 -1
  189. package/dist/common/LoggerMessages.js +76 -18
  190. package/dist/common/TEslintFixOptions.d.ts +20 -0
  191. package/dist/common/TEslintFixOptions.d.ts.map +1 -0
  192. package/dist/common/TEslintFixOptions.js +15 -0
  193. package/dist/common/TRawOptions.d.ts.map +1 -1
  194. package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.d.ts.map +1 -1
  195. package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.js +2 -4
  196. package/dist/common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas.d.ts.map +1 -1
  197. package/dist/common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas.js +1 -1
  198. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.d.ts.map +1 -1
  199. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.js +1 -2
  200. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.d.ts.map +1 -1
  201. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.js +1 -1
  202. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.d.ts.map +1 -1
  203. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.js +1 -1
  204. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV4.d.ts.map +1 -1
  205. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts +10 -2
  206. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts.map +1 -1
  207. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.js +15 -5
  208. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts +18 -4
  209. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts.map +1 -1
  210. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.js +7 -1
  211. package/dist/common/VersionedSchema/CommonSchemas.d.ts.map +1 -1
  212. package/dist/common/VersionedSchema/CommonSchemas.js +4 -2
  213. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV2.js +1 -1
  214. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.d.ts.map +1 -1
  215. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.js +1 -1
  216. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV4.js +1 -1
  217. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV5.d.ts.map +1 -1
  218. package/dist/common/VersionedSchema/OptionsVersioned/OptionsMigrationPlans.d.ts.map +1 -1
  219. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV1.d.ts +2 -2
  220. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV1.d.ts.map +1 -1
  221. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV2.d.ts +2 -2
  222. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV3.js +1 -1
  223. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV4.d.ts +1 -1
  224. package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.d.ts.map +1 -1
  225. package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.js +7 -1
  226. package/dist/common/VersionedSchema/Utils/__tests__/allUtils.test.js +4 -16
  227. package/dist/common/VersionedSchema/Utils/buildVersionedSchema.d.ts.map +1 -1
  228. package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.d.ts +1 -1
  229. package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.d.ts.map +1 -1
  230. package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.js +1 -1
  231. package/dist/common/VersionedSchema/Utils/createTrivialMigration.d.ts.map +1 -1
  232. package/dist/common/VersionedSchema/Utils/createTrivialMigration.js +1 -1
  233. package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.d.ts.map +1 -1
  234. package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.js +4 -6
  235. package/dist/common/VersionedSchema/Utils/getLatestVersionFromMigrationPlans.d.ts.map +1 -1
  236. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.d.ts.map +1 -1
  237. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.js +6 -8
  238. package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.d.ts.map +1 -1
  239. package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.js +1 -1
  240. package/dist/common/VersionedSchema/Utils/validateAndSuggestKeyCorrections.d.ts.map +1 -1
  241. package/dist/common/VersionedSchema/refinements/dependentOptionsRefinement.d.ts +1 -1
  242. package/dist/common/VersionedSchema/refinements/dependentOptionsRefinement.d.ts.map +1 -1
  243. package/dist/common/utils/__tests__/eslintFix.test.js +25 -67
  244. package/dist/common/utils/__tests__/extractEslintFixOptions.test.d.ts +2 -0
  245. package/dist/common/utils/__tests__/extractEslintFixOptions.test.d.ts.map +1 -0
  246. package/dist/common/utils/__tests__/extractEslintFixOptions.test.js +28 -0
  247. package/dist/common/utils/__tests__/format.test.js +26 -17
  248. package/dist/common/utils/__tests__/prepareTempTsConfig.test.d.ts +2 -0
  249. package/dist/common/utils/__tests__/prepareTempTsConfig.test.d.ts.map +1 -0
  250. package/dist/common/utils/__tests__/prepareTempTsConfig.test.js +78 -0
  251. package/dist/common/utils/codegenTempDir.d.ts +20 -0
  252. package/dist/common/utils/codegenTempDir.d.ts.map +1 -0
  253. package/dist/common/utils/codegenTempDir.js +42 -0
  254. package/dist/common/utils/convertArrayToObject.d.ts.map +1 -1
  255. package/dist/common/utils/convertArrayToObject.js +3 -8
  256. package/dist/common/utils/eslintFix.d.ts +48 -4
  257. package/dist/common/utils/eslintFix.d.ts.map +1 -1
  258. package/dist/common/utils/eslintFix.js +121 -15
  259. package/dist/common/utils/format.d.ts +1 -1
  260. package/dist/common/utils/format.d.ts.map +1 -1
  261. package/dist/common/utils/format.js +23 -11
  262. package/dist/common/utils/jsonPath.d.ts.map +1 -1
  263. package/dist/common/utils/prepareTempEslintConfig.d.ts +18 -0
  264. package/dist/common/utils/prepareTempEslintConfig.d.ts.map +1 -0
  265. package/dist/common/utils/prepareTempEslintConfig.js +55 -0
  266. package/dist/common/utils/prepareTempTsConfig.d.ts +23 -0
  267. package/dist/common/utils/prepareTempTsConfig.d.ts.map +1 -0
  268. package/dist/common/utils/prepareTempTsConfig.js +105 -0
  269. package/dist/core/Context.d.ts.map +1 -1
  270. package/dist/core/Context.js +2 -6
  271. package/dist/core/OpenApiClient.d.ts +27 -1
  272. package/dist/core/OpenApiClient.d.ts.map +1 -1
  273. package/dist/core/OpenApiClient.js +259 -19
  274. package/dist/core/WriteClient.d.ts +84 -17
  275. package/dist/core/WriteClient.d.ts.map +1 -1
  276. package/dist/core/WriteClient.js +96 -22
  277. package/dist/core/__tests__/WriteClient.test.js +2 -1
  278. package/dist/core/api/v2/parser/getOperationResponses.d.ts.map +1 -1
  279. package/dist/core/api/v2/parser/getOperationResponses.js +1 -3
  280. package/dist/core/api/v2/parser/getServiceName.d.ts +1 -1
  281. package/dist/core/api/v3/parser/getOperation.d.ts.map +1 -1
  282. package/dist/core/api/v3/parser/getOperationParameters.d.ts.map +1 -1
  283. package/dist/core/api/v3/parser/getOperationResponses.d.ts.map +1 -1
  284. package/dist/core/api/v3/parser/getOperationResponses.js +1 -3
  285. package/dist/core/api/v3/parser/getServiceName.d.ts +1 -1
  286. package/dist/core/governance/evaluateGovernanceRules.d.ts.map +1 -1
  287. package/dist/core/governance/evaluateGovernanceRules.js +1 -3
  288. package/dist/core/governance/loadGovernanceConfig.d.ts.map +1 -1
  289. package/dist/core/governance/loadGovernanceConfig.js +2 -4
  290. package/dist/core/plugins/GeneratorPlugin.model.d.ts.map +1 -1
  291. package/dist/core/plugins/applySemanticDiffPluginHooks.d.ts.map +1 -1
  292. package/dist/core/plugins/getBuiltinPlugins.d.ts.map +1 -1
  293. package/dist/core/plugins/loadGeneratorPlugins.d.ts.map +1 -1
  294. package/dist/core/plugins/loadGeneratorPlugins.js +1 -1
  295. package/dist/core/semanticDiff/__tests__/analyzeOpenApiDiff.test.js +79 -21
  296. package/dist/core/semanticDiff/__tests__/semanticDiffReportSchema.test.js +20 -1
  297. package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts +58 -6
  298. package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts.map +1 -1
  299. package/dist/core/semanticDiff/analyzeOpenApiDiff.js +47 -19
  300. package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts +8 -3
  301. package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts.map +1 -1
  302. package/dist/core/semanticDiff/semanticDiffReportSchema.js +139 -56
  303. package/dist/core/strict/validateOpenApiStrict.d.ts.map +1 -1
  304. package/dist/core/types/Consts.js +1 -1
  305. package/dist/core/types/DiffReport.model.d.ts +101 -0
  306. package/dist/core/types/DiffReport.model.d.ts.map +1 -0
  307. package/dist/core/types/DiffReport.model.js +5 -0
  308. package/dist/core/types/base/ClientArtifacts.model.d.ts +3 -3
  309. package/dist/core/types/base/ClientArtifacts.model.d.ts.map +1 -1
  310. package/dist/core/types/base/ExportedModel.model.d.ts +1 -1
  311. package/dist/core/types/base/ExportedModel.model.d.ts.map +1 -1
  312. package/dist/core/types/base/ExportedService.model.d.ts.map +1 -1
  313. package/dist/core/types/base/OutputPaths.model.d.ts.map +1 -1
  314. package/dist/core/types/base/PrefixArtifacts.model.d.ts.map +1 -1
  315. package/dist/core/types/base/PropertyGroup.model.d.ts +1 -1
  316. package/dist/core/types/base/SimpleClientArtifacts.model.d.ts +1 -1
  317. package/dist/core/types/base/SimpleClientArtifacts.model.d.ts.map +1 -1
  318. package/dist/core/types/base/Templates.model.d.ts +1 -0
  319. package/dist/core/types/base/Templates.model.d.ts.map +1 -1
  320. package/dist/core/types/shared/Client.model.d.ts +1 -1
  321. package/dist/core/types/shared/Client.model.d.ts.map +1 -1
  322. package/dist/core/types/shared/Model.model.d.ts +37 -1
  323. package/dist/core/types/shared/Model.model.d.ts.map +1 -1
  324. package/dist/core/utils/GenerationCache.d.ts +18 -0
  325. package/dist/core/utils/GenerationCache.d.ts.map +1 -0
  326. package/dist/core/utils/GenerationCache.js +41 -0
  327. package/dist/core/utils/__mocks__/templates.d.ts.map +1 -1
  328. package/dist/core/utils/__mocks__/templates.js +1 -0
  329. package/dist/core/utils/__tests__/GenerationCache.test.d.ts +2 -0
  330. package/dist/core/utils/__tests__/GenerationCache.test.d.ts.map +1 -0
  331. package/dist/core/utils/__tests__/GenerationCache.test.js +37 -0
  332. package/dist/core/utils/__tests__/applyDiffReportToClient.test.js +182 -0
  333. package/dist/core/utils/__tests__/buildMiraclesFromSemanticChanges.test.d.ts +2 -0
  334. package/dist/core/utils/__tests__/buildMiraclesFromSemanticChanges.test.d.ts.map +1 -0
  335. package/dist/core/utils/__tests__/buildMiraclesFromSemanticChanges.test.js +77 -0
  336. package/dist/core/utils/__tests__/expandOpenApiRefsForSemanticDiff.test.d.ts +2 -0
  337. package/dist/core/utils/__tests__/expandOpenApiRefsForSemanticDiff.test.d.ts.map +1 -0
  338. package/dist/core/utils/__tests__/expandOpenApiRefsForSemanticDiff.test.js +159 -0
  339. package/dist/core/utils/__tests__/loadDiffReport.test.d.ts +2 -0
  340. package/dist/core/utils/__tests__/loadDiffReport.test.d.ts.map +1 -0
  341. package/dist/core/utils/__tests__/loadDiffReport.test.js +246 -0
  342. package/dist/core/utils/__tests__/modelHelpers.test.js +27 -9
  343. package/dist/core/utils/__tests__/postProcessModelImports.test.js +1 -4
  344. package/dist/core/utils/__tests__/postProcessServiceImports.test.js +1 -4
  345. package/dist/core/utils/__tests__/prepareDtoModels.test.js +168 -1
  346. package/dist/core/utils/__tests__/registerHandlebarHelpers.test.js +27 -0
  347. package/dist/core/utils/__tests__/resolveClassesModeTypes.test.d.ts +2 -0
  348. package/dist/core/utils/__tests__/resolveClassesModeTypes.test.d.ts.map +1 -0
  349. package/dist/core/utils/__tests__/resolveClassesModeTypes.test.js +111 -0
  350. package/dist/core/utils/__tests__/semanticChangesToDiffEntries.test.d.ts +2 -0
  351. package/dist/core/utils/__tests__/semanticChangesToDiffEntries.test.d.ts.map +1 -0
  352. package/dist/core/utils/__tests__/semanticChangesToDiffEntries.test.js +68 -0
  353. package/dist/core/utils/__tests__/serviceHelpers.test.js +10 -11
  354. package/dist/core/utils/__tests__/sortByRequiredExtended.test.js +10 -27
  355. package/dist/core/utils/__tests__/templateRendering.test.d.ts +2 -0
  356. package/dist/core/utils/__tests__/templateRendering.test.d.ts.map +1 -0
  357. package/dist/core/utils/__tests__/templateRendering.test.js +190 -0
  358. package/dist/core/utils/__tests__/writeFileIfChanged.test.d.ts +2 -0
  359. package/dist/core/utils/__tests__/writeFileIfChanged.test.d.ts.map +1 -0
  360. package/dist/core/utils/__tests__/writeFileIfChanged.test.js +30 -0
  361. package/dist/core/utils/adapters/__tests__/semanticToStructural.test.d.ts +2 -0
  362. package/dist/core/utils/adapters/__tests__/semanticToStructural.test.d.ts.map +1 -0
  363. package/dist/core/utils/adapters/__tests__/semanticToStructural.test.js +63 -0
  364. package/dist/core/utils/adapters/extractMiraclesFromSemantic.d.ts +10 -0
  365. package/dist/core/utils/adapters/extractMiraclesFromSemantic.d.ts.map +1 -0
  366. package/dist/core/utils/adapters/extractMiraclesFromSemantic.js +13 -0
  367. package/dist/core/utils/adapters/index.d.ts +3 -0
  368. package/dist/core/utils/adapters/index.d.ts.map +1 -0
  369. package/dist/core/utils/adapters/index.js +6 -0
  370. package/dist/core/utils/adapters/semanticToStructural.d.ts +12 -0
  371. package/dist/core/utils/adapters/semanticToStructural.d.ts.map +1 -0
  372. package/dist/core/utils/adapters/semanticToStructural.js +36 -0
  373. package/dist/core/utils/applyDiffReportToClient.d.ts +13 -1
  374. package/dist/core/utils/applyDiffReportToClient.d.ts.map +1 -1
  375. package/dist/core/utils/applyDiffReportToClient.js +189 -109
  376. package/dist/core/utils/areEqual.d.ts +1 -1
  377. package/dist/core/utils/buildMiraclesFromSemanticChanges.d.ts +25 -0
  378. package/dist/core/utils/buildMiraclesFromSemanticChanges.d.ts.map +1 -0
  379. package/dist/core/utils/buildMiraclesFromSemanticChanges.js +146 -0
  380. package/dist/core/utils/expandOpenApiRefsForSemanticDiff.d.ts +23 -0
  381. package/dist/core/utils/expandOpenApiRefsForSemanticDiff.d.ts.map +1 -0
  382. package/dist/core/utils/expandOpenApiRefsForSemanticDiff.js +163 -0
  383. package/dist/core/utils/getOpenApiSpec.d.ts +6 -0
  384. package/dist/core/utils/getOpenApiSpec.d.ts.map +1 -1
  385. package/dist/core/utils/getOpenApiSpec.js +6 -0
  386. package/dist/core/utils/getOperationErrors.d.ts +2 -2
  387. package/dist/core/utils/getOperationErrors.d.ts.map +1 -1
  388. package/dist/core/utils/getOperationResults.d.ts +1 -1
  389. package/dist/core/utils/getPropertyGroupSimple.d.ts.map +1 -1
  390. package/dist/core/utils/getPropertyGroupSimple.js +1 -3
  391. package/dist/core/utils/isSubdirectory.d.ts.map +1 -1
  392. package/dist/core/utils/loadDiffReport.d.ts +11 -30
  393. package/dist/core/utils/loadDiffReport.d.ts.map +1 -1
  394. package/dist/core/utils/loadDiffReport.js +75 -9
  395. package/dist/core/utils/loadSemanticOpenApiSpec.d.ts +15 -0
  396. package/dist/core/utils/loadSemanticOpenApiSpec.d.ts.map +1 -0
  397. package/dist/core/utils/loadSemanticOpenApiSpec.js +61 -0
  398. package/dist/core/utils/modelHelpers.d.ts +13 -5
  399. package/dist/core/utils/modelHelpers.d.ts.map +1 -1
  400. package/dist/core/utils/modelHelpers.js +28 -23
  401. package/dist/core/utils/normalizeString.d.ts.map +1 -1
  402. package/dist/core/utils/normalizeString.js +1 -5
  403. package/dist/core/utils/postProcessServiceImports.d.ts.map +1 -1
  404. package/dist/core/utils/postProcessServiceImports.js +1 -3
  405. package/dist/core/utils/precompileTemplates.js +4 -2
  406. package/dist/core/utils/prepareAlias.d.ts +1 -1
  407. package/dist/core/utils/prepareDtoModels.d.ts +5 -0
  408. package/dist/core/utils/prepareDtoModels.d.ts.map +1 -1
  409. package/dist/core/utils/prepareDtoModels.js +57 -20
  410. package/dist/core/utils/registerHandlebarHelpers.d.ts +1 -0
  411. package/dist/core/utils/registerHandlebarHelpers.d.ts.map +1 -1
  412. package/dist/core/utils/registerHandlebarHelpers.js +3 -0
  413. package/dist/core/utils/registerHandlebarTemplates.d.ts +1 -0
  414. package/dist/core/utils/registerHandlebarTemplates.d.ts.map +1 -1
  415. package/dist/core/utils/registerHandlebarTemplates.js +2 -0
  416. package/dist/core/utils/resolveClassesModeTypes.d.ts +8 -0
  417. package/dist/core/utils/resolveClassesModeTypes.d.ts.map +1 -0
  418. package/dist/core/utils/resolveClassesModeTypes.js +77 -0
  419. package/dist/core/utils/semanticChangesToDiffEntries.d.ts +28 -0
  420. package/dist/core/utils/semanticChangesToDiffEntries.d.ts.map +1 -0
  421. package/dist/core/utils/semanticChangesToDiffEntries.js +98 -0
  422. package/dist/core/utils/semanticPointerToJsonPath.d.ts +7 -0
  423. package/dist/core/utils/semanticPointerToJsonPath.d.ts.map +1 -0
  424. package/dist/core/utils/semanticPointerToJsonPath.js +67 -0
  425. package/dist/core/utils/serviceHelpers.d.ts +6 -7
  426. package/dist/core/utils/serviceHelpers.d.ts.map +1 -1
  427. package/dist/core/utils/serviceHelpers.js +8 -25
  428. package/dist/core/utils/sortModelByName.d.ts +1 -1
  429. package/dist/core/utils/validateRawOptions.js +2 -2
  430. package/dist/core/utils/writeClientCore.d.ts +2 -0
  431. package/dist/core/utils/writeClientCore.d.ts.map +1 -1
  432. package/dist/core/utils/writeClientCore.js +43 -21
  433. package/dist/core/utils/writeClientCoreIndex.d.ts.map +1 -1
  434. package/dist/core/utils/writeClientCoreIndex.js +14 -4
  435. package/dist/core/utils/writeClientExecutor.d.ts +1 -3
  436. package/dist/core/utils/writeClientExecutor.d.ts.map +1 -1
  437. package/dist/core/utils/writeClientExecutor.js +6 -11
  438. package/dist/core/utils/writeClientFullIndex.js +4 -4
  439. package/dist/core/utils/writeClientModels.d.ts +1 -2
  440. package/dist/core/utils/writeClientModels.d.ts.map +1 -1
  441. package/dist/core/utils/writeClientModels.js +14 -16
  442. package/dist/core/utils/writeClientModelsIndex.d.ts +1 -1
  443. package/dist/core/utils/writeClientModelsIndex.d.ts.map +1 -1
  444. package/dist/core/utils/writeClientModelsIndex.js +14 -4
  445. package/dist/core/utils/writeClientSchemas.d.ts +1 -3
  446. package/dist/core/utils/writeClientSchemas.d.ts.map +1 -1
  447. package/dist/core/utils/writeClientSchemas.js +9 -14
  448. package/dist/core/utils/writeClientSchemasIndex.d.ts.map +1 -1
  449. package/dist/core/utils/writeClientSchemasIndex.js +14 -4
  450. package/dist/core/utils/writeClientServices.d.ts +15 -16
  451. package/dist/core/utils/writeClientServices.d.ts.map +1 -1
  452. package/dist/core/utils/writeClientServices.js +12 -19
  453. package/dist/core/utils/writeClientServicesIndex.d.ts.map +1 -1
  454. package/dist/core/utils/writeClientServicesIndex.js +14 -4
  455. package/dist/core/utils/writeClientSimpleIndex.js +4 -4
  456. package/dist/core/utils/writeFileIfChanged.d.ts +3 -0
  457. package/dist/core/utils/writeFileIfChanged.d.ts.map +1 -0
  458. package/dist/core/utils/writeFileIfChanged.js +22 -0
  459. package/dist/templatesCompiled/cli/customCreateExecutorAdapter.d.ts +8 -0
  460. package/dist/templatesCompiled/cli/customCreateExecutorAdapter.d.ts.map +1 -0
  461. package/dist/templatesCompiled/cli/customCreateExecutorAdapter.js +18 -0
  462. package/dist/templatesCompiled/cli/customRequest.js +7 -7
  463. package/dist/templatesCompiled/cli/customRequestExecutor.js +7 -7
  464. package/dist/templatesCompiled/client/core/ApiError.js +1 -1
  465. package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.d.ts +0 -6
  466. package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.d.ts.map +1 -1
  467. package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.js +3 -22
  468. package/dist/templatesCompiled/client/core/executor/legacyRequestAdapter.d.ts +11 -0
  469. package/dist/templatesCompiled/client/core/executor/legacyRequestAdapter.d.ts.map +1 -0
  470. package/dist/templatesCompiled/client/core/executor/legacyRequestAdapter.js +28 -0
  471. package/dist/templatesCompiled/client/core/executor/requestExecutor.d.ts +2 -0
  472. package/dist/templatesCompiled/client/core/executor/requestExecutor.d.ts.map +1 -1
  473. package/dist/templatesCompiled/client/core/executor/requestExecutor.js +8 -2
  474. package/dist/templatesCompiled/client/core/functions/catchErrors.js +1 -1
  475. package/dist/templatesCompiled/client/core/interceptors/apiErrorInterceptor.js +1 -1
  476. package/dist/templatesCompiled/client/core/interceptors/interceptors.js +1 -1
  477. package/dist/templatesCompiled/client/core/interceptors/withInterceptors.js +1 -1
  478. package/dist/templatesCompiled/client/exportClient.d.ts +0 -4
  479. package/dist/templatesCompiled/client/exportClient.d.ts.map +1 -1
  480. package/dist/templatesCompiled/client/exportClient.js +9 -45
  481. package/dist/templatesCompiled/client/exportModels.d.ts +17 -11
  482. package/dist/templatesCompiled/client/exportModels.d.ts.map +1 -1
  483. package/dist/templatesCompiled/client/exportModels.js +96 -49
  484. package/dist/templatesCompiled/client/exportService.d.ts +13 -10
  485. package/dist/templatesCompiled/client/exportService.d.ts.map +1 -1
  486. package/dist/templatesCompiled/client/exportService.js +95 -67
  487. package/dist/templatesCompiled/client/indexCore.js +4 -4
  488. package/dist/templatesCompiled/client/indexFull.js +8 -8
  489. package/dist/templatesCompiled/client/indexSimple.js +2 -2
  490. package/dist/templatesCompiled/client/partials/header.d.ts +1 -0
  491. package/dist/templatesCompiled/client/partials/header.d.ts.map +1 -1
  492. package/dist/templatesCompiled/client/partials/header.js +11 -2
  493. package/dist/test/helpers/silenceLoggers.d.ts +11 -0
  494. package/dist/test/helpers/silenceLoggers.d.ts.map +1 -0
  495. package/dist/test/helpers/silenceLoggers.js +88 -0
  496. package/package.json +132 -136
  497. package/dist/cli/analyzeDiff/buildLegacyReport.d.ts +0 -17
  498. package/dist/cli/analyzeDiff/buildLegacyReport.d.ts.map +0 -1
  499. package/dist/cli/analyzeDiff/buildLegacyReport.js +0 -54
  500. package/dist/cli/analyzeDiff/diffEngine.d.ts +0 -54
  501. package/dist/cli/analyzeDiff/diffEngine.d.ts.map +0 -1
  502. package/dist/cli/analyzeDiff/diffEngine.js +0 -209
  503. package/dist/cli/analyzeDiff/logLegacyReport.d.ts +0 -6
  504. package/dist/cli/analyzeDiff/logLegacyReport.d.ts.map +0 -1
  505. package/dist/cli/analyzeDiff/logLegacyReport.js +0 -29
  506. package/dist/cli/analyzeDiff/report.d.ts +0 -3
  507. package/dist/cli/analyzeDiff/report.d.ts.map +0 -1
  508. package/dist/cli/analyzeDiff/report.js +0 -7
  509. package/dist/cli/analyzeDiff/writeLegacyReport.d.ts +0 -6
  510. package/dist/cli/analyzeDiff/writeLegacyReport.d.ts.map +0 -1
  511. package/dist/cli/analyzeDiff/writeLegacyReport.js +0 -21
  512. package/dist/common/VersionedSchema/refinements/singleOrMultiRefinement.d.ts +0 -4
  513. package/dist/common/VersionedSchema/refinements/singleOrMultiRefinement.d.ts.map +0 -1
  514. package/dist/common/VersionedSchema/refinements/singleOrMultiRefinement.js +0 -21
  515. package/dist/common/utils/normalizeObject.d.ts +0 -2
  516. package/dist/common/utils/normalizeObject.d.ts.map +0 -1
  517. package/dist/common/utils/normalizeObject.js +0 -63
  518. package/dist/core/utils/appendUniqueLinesToFile.d.ts +0 -2
  519. package/dist/core/utils/appendUniqueLinesToFile.d.ts.map +0 -1
  520. package/dist/core/utils/appendUniqueLinesToFile.js +0 -24
@@ -9,6 +9,7 @@ const node_path_1 = __importDefault(require("node:path"));
9
9
  const node_test_1 = require("node:test");
10
10
  const LoggerMessages_1 = require("../../../common/LoggerMessages");
11
11
  const semanticDiffReportSchema_1 = require("../../../core/semanticDiff/semanticDiffReportSchema");
12
+ const silenceLoggers_1 = require("../../../test/helpers/silenceLoggers");
12
13
  const analyzeDiff_1 = require("../analyzeDiff");
13
14
  const ciSummary_1 = require("../ciSummary");
14
15
  const repoRoot = node_path_1.default.join(__dirname, '..', '..', '..', '..');
@@ -29,6 +30,14 @@ async function runAnalyzeDiffCli(options) {
29
30
  };
30
31
  }
31
32
  (0, node_test_1.describe)('@unit: analyzeDiff cli', () => {
33
+ let restoreAppLogger;
34
+ (0, node_test_1.beforeEach)(() => {
35
+ restoreAppLogger = (0, silenceLoggers_1.installSilenceAppLogger)();
36
+ });
37
+ (0, node_test_1.afterEach)(() => {
38
+ restoreAppLogger?.();
39
+ restoreAppLogger = undefined;
40
+ });
32
41
  (0, node_test_1.test)('returns exit code 0 and skips when --input has no base source', async (t) => {
33
42
  const tempDir = createTempDir(t, 'openapi-cli-analyze-skip-');
34
43
  const reportPath = node_path_1.default.join(tempDir, 'report.json');
@@ -102,12 +111,13 @@ async function runAnalyzeDiffCli(options) {
102
111
  const report = JSON.parse((0, node_fs_1.readFileSync)(reportPath, 'utf8'));
103
112
  const schemaValidation = (0, semanticDiffReportSchema_1.validateSemanticDiffReportSchema)(report);
104
113
  node_assert_1.default.strictEqual(schemaValidation.valid, true, schemaValidation.errors.join('\n'));
105
- node_assert_1.default.strictEqual(report.schemaVersion, '1.1.0');
106
- node_assert_1.default.strictEqual(report.summary.breaking, 0);
107
- node_assert_1.default.ok(report.summary.nonBreaking > 0);
108
- node_assert_1.default.strictEqual(report.recommendation.semver, 'minor');
109
- node_assert_1.default.ok(report.recommendation.reasons.includes('HAS_BACKWARD_COMPATIBLE_CHANGES'));
110
- node_assert_1.default.strictEqual(report.governance.summary.errors, 0);
114
+ node_assert_1.default.strictEqual(report.schemaVersion, '2.0.0');
115
+ node_assert_1.default.strictEqual(report.semantic.summary.breaking, 0);
116
+ node_assert_1.default.ok(report.semantic.summary.nonBreaking > 0);
117
+ node_assert_1.default.strictEqual(report.semantic.recommendation.semver, 'minor');
118
+ node_assert_1.default.ok(report.semantic.recommendation.reasons.includes('HAS_BACKWARD_COMPATIBLE_CHANGES'));
119
+ node_assert_1.default.strictEqual(report.semantic.governance.summary.errors, 0);
120
+ node_assert_1.default.strictEqual(report.structural.diff.all.length, report.semantic.changes.length);
111
121
  const ciSummary = (0, ciSummary_1.formatCiMarkdownSummary)(report, reportPath);
112
122
  node_assert_1.default.ok(ciSummary.includes('### OpenAPI Semantic Diff'));
113
123
  node_assert_1.default.ok(ciSummary.includes('HAS_BACKWARD_COMPATIBLE_CHANGES'));
@@ -145,12 +155,12 @@ async function runAnalyzeDiffCli(options) {
145
155
  const report = JSON.parse((0, node_fs_1.readFileSync)(reportPath, 'utf8'));
146
156
  const schemaValidation = (0, semanticDiffReportSchema_1.validateSemanticDiffReportSchema)(report);
147
157
  node_assert_1.default.strictEqual(schemaValidation.valid, true, schemaValidation.errors.join('\n'));
148
- node_assert_1.default.strictEqual(report.schemaVersion, '1.1.0');
149
- node_assert_1.default.ok(report.summary.breaking > 0);
150
- node_assert_1.default.ok(report.changes.some(change => change.severity === 'breaking'));
151
- node_assert_1.default.strictEqual(report.recommendation.semver, 'major');
152
- node_assert_1.default.ok(report.recommendation.reasons.includes('HAS_BREAKING_CHANGES'));
153
- node_assert_1.default.ok(report.governance.violations.some(violation => violation.ruleId === 'NO_BREAKING_WITHOUT_FLAG'));
158
+ node_assert_1.default.strictEqual(report.schemaVersion, '2.0.0');
159
+ node_assert_1.default.ok(report.semantic.summary.breaking > 0);
160
+ node_assert_1.default.ok(report.semantic.changes.some(change => change.severity === 'breaking'));
161
+ node_assert_1.default.strictEqual(report.semantic.recommendation.semver, 'major');
162
+ node_assert_1.default.ok(report.semantic.recommendation.reasons.includes('HAS_BREAKING_CHANGES'));
163
+ node_assert_1.default.ok(report.semantic.governance.violations.some(violation => violation.ruleId === 'NO_BREAKING_WITHOUT_FLAG'));
154
164
  const ciSummary = (0, ciSummary_1.formatCiMarkdownSummary)(report, reportPath);
155
165
  node_assert_1.default.ok(ciSummary.includes('### OpenAPI Semantic Diff'));
156
166
  node_assert_1.default.ok(ciSummary.includes('HAS_BREAKING_CHANGES'));
@@ -190,9 +200,9 @@ async function runAnalyzeDiffCli(options) {
190
200
  const report = JSON.parse((0, node_fs_1.readFileSync)(reportPath, 'utf8'));
191
201
  const schemaValidation = (0, semanticDiffReportSchema_1.validateSemanticDiffReportSchema)(report);
192
202
  node_assert_1.default.strictEqual(schemaValidation.valid, true, schemaValidation.errors.join('\n'));
193
- node_assert_1.default.strictEqual(report.schemaVersion, '1.1.0');
194
- node_assert_1.default.ok(report.summary.breaking > 0);
195
- node_assert_1.default.ok(!report.governance.violations.some(violation => violation.ruleId === 'NO_BREAKING_WITHOUT_FLAG'));
203
+ node_assert_1.default.strictEqual(report.schemaVersion, '2.0.0');
204
+ node_assert_1.default.ok(report.semantic.summary.breaking > 0);
205
+ node_assert_1.default.ok(!report.semantic.governance.violations.some(violation => violation.ruleId === 'NO_BREAKING_WITHOUT_FLAG'));
196
206
  node_assert_1.default.ok((0, ciSummary_1.formatCiMarkdownSummary)(report, reportPath).includes('### OpenAPI Semantic Diff'));
197
207
  });
198
208
  (0, node_test_1.test)('returns exit code 0 for breaking diff in ci mode when governance config disables no-breaking rule', async (t) => {
@@ -238,9 +248,9 @@ async function runAnalyzeDiffCli(options) {
238
248
  const report = JSON.parse((0, node_fs_1.readFileSync)(reportPath, 'utf8'));
239
249
  const schemaValidation = (0, semanticDiffReportSchema_1.validateSemanticDiffReportSchema)(report);
240
250
  node_assert_1.default.strictEqual(schemaValidation.valid, true, schemaValidation.errors.join('\n'));
241
- node_assert_1.default.strictEqual(report.schemaVersion, '1.1.0');
242
- node_assert_1.default.ok(report.summary.breaking > 0);
243
- node_assert_1.default.ok(!report.governance.violations.some(violation => violation.ruleId === 'NO_BREAKING_WITHOUT_FLAG'));
251
+ node_assert_1.default.strictEqual(report.schemaVersion, '2.0.0');
252
+ node_assert_1.default.ok(report.semantic.summary.breaking > 0);
253
+ node_assert_1.default.ok(!report.semantic.governance.violations.some(violation => violation.ruleId === 'NO_BREAKING_WITHOUT_FLAG'));
244
254
  node_assert_1.default.ok((0, ciSummary_1.formatCiMarkdownSummary)(report, reportPath).includes('### OpenAPI Semantic Diff'));
245
255
  });
246
256
  (0, node_test_1.test)('uses --compare-with over --git when both flags are provided', async (t) => {
@@ -284,8 +294,8 @@ async function runAnalyzeDiffCli(options) {
284
294
  node_assert_1.default.strictEqual(exitCode, 0);
285
295
  node_assert_1.default.strictEqual(result.success, true);
286
296
  const report = JSON.parse((0, node_fs_1.readFileSync)(reportPath, 'utf8'));
287
- node_assert_1.default.strictEqual(report.summary.breaking, 0);
288
- node_assert_1.default.strictEqual(report.recommendation.semver, 'patch');
297
+ node_assert_1.default.strictEqual(report.semantic.summary.breaking, 0);
298
+ node_assert_1.default.strictEqual(report.semantic.recommendation.semver, 'patch');
289
299
  node_assert_1.default.ok(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.COMPARE_WITH_OVERRIDES_GIT('HEAD~9999').includes('Ignoring git ref'));
290
300
  });
291
301
  (0, node_test_1.test)('filters semantic changes with analyze.ignore and recalculates summary', async (t) => {
@@ -346,10 +356,10 @@ async function runAnalyzeDiffCli(options) {
346
356
  node_assert_1.default.strictEqual(exitCode, 0);
347
357
  node_assert_1.default.strictEqual(result.ignored, 1);
348
358
  const report = JSON.parse((0, node_fs_1.readFileSync)(reportPath, 'utf8'));
349
- node_assert_1.default.strictEqual(report.summary.breaking, 0);
350
- node_assert_1.default.strictEqual(report.summary.nonBreaking, 0);
351
- node_assert_1.default.strictEqual(report.summary.informational, 0);
352
- node_assert_1.default.strictEqual(report.recommendation.semver, 'patch');
359
+ node_assert_1.default.strictEqual(report.semantic.summary.breaking, 0);
360
+ node_assert_1.default.strictEqual(report.semantic.summary.nonBreaking, 0);
361
+ node_assert_1.default.strictEqual(report.semantic.summary.informational, 0);
362
+ node_assert_1.default.strictEqual(report.semantic.recommendation.semver, 'patch');
353
363
  node_assert_1.default.ok(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.IGNORED_CHANGES(1).includes('IGNORED: 1 semantic change'));
354
364
  });
355
365
  (0, node_test_1.test)('fails when --input is missing', async () => {
@@ -362,4 +372,10 @@ async function runAnalyzeDiffCli(options) {
362
372
  node_assert_1.default.strictEqual((0, analyzeDiff_1.toAnalyzeDiffExitCode)(result), 1);
363
373
  node_assert_1.default.ok(result.error?.includes('"--input" is required for analyze-diff command'));
364
374
  });
375
+ (0, node_test_1.test)('uses semantic ref expansion instead of full dereference in the analyze hot path', () => {
376
+ const source = (0, node_fs_1.readFileSync)(node_path_1.default.join(__dirname, '..', 'analyzeDiff.ts'), 'utf8');
377
+ node_assert_1.default.ok(source.includes('loadSemanticOpenApiSpec'));
378
+ node_assert_1.default.ok(!source.includes('dereferenceOpenApiSpec'));
379
+ node_assert_1.default.ok(!source.includes('dereferenceOpenApiObject'));
380
+ });
365
381
  });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=analyzeDiffLomMiracles.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzeDiffLomMiracles.test.d.ts","sourceRoot":"","sources":["../../../../src/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_assert_1 = __importDefault(require("node:assert"));
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const node_test_1 = require("node:test");
10
+ const silenceLoggers_1 = require("../../../test/helpers/silenceLoggers");
11
+ const analyzeDiff_1 = require("../analyzeDiff");
12
+ const generatedRoot = node_path_1.default.join(__dirname, 'generated');
13
+ const createTempDir = (t, prefix) => {
14
+ node_fs_1.default.mkdirSync(generatedRoot, { recursive: true });
15
+ const tempDir = node_fs_1.default.mkdtempSync(node_path_1.default.join(generatedRoot, prefix));
16
+ t.after(() => {
17
+ node_fs_1.default.rmSync(tempDir, { recursive: true, force: true });
18
+ });
19
+ return tempDir;
20
+ };
21
+ (0, node_test_1.describe)('@unit: analyzeDiff lom miracles', () => {
22
+ let restoreAppLogger;
23
+ (0, node_test_1.beforeEach)(() => {
24
+ restoreAppLogger = (0, silenceLoggers_1.installSilenceAppLogger)();
25
+ });
26
+ (0, node_test_1.afterEach)(() => {
27
+ restoreAppLogger?.();
28
+ restoreAppLogger = undefined;
29
+ });
30
+ (0, node_test_1.test)('builds changes and miracles for lom v1 vs v2 specs', async (t) => {
31
+ const tmpDir = createTempDir(t, 'lom-diff-');
32
+ const reportPath = node_path_1.default.join(tmpDir, 'report.json');
33
+ const specRoot = node_path_1.default.join(__dirname, '../../../../test/spec/lom');
34
+ const result = await (0, analyzeDiff_1.analyzeDiff)({
35
+ input: node_path_1.default.join(specRoot, 'lom_api.v2.yaml'),
36
+ compareWith: node_path_1.default.join(specRoot, 'lom_api.v1.yaml'),
37
+ outputReport: reportPath,
38
+ });
39
+ node_assert_1.default.ok(result.success, result.error);
40
+ const report = JSON.parse(node_fs_1.default.readFileSync(reportPath, 'utf-8'));
41
+ node_assert_1.default.ok(report.semantic.changes.length > 0, 'expected semantic changes');
42
+ node_assert_1.default.ok(report.structural.miracles.length > 0, 'expected miracles in report');
43
+ node_assert_1.default.ok(report.structural.miracles.some(miracle => miracle.type === 'RENAME'));
44
+ node_assert_1.default.ok(report.structural.miracles.some(miracle => miracle.type === 'TYPE_COERCION'));
45
+ node_assert_1.default.ok(report.semantic.changes.some(change => change.type === 'model.property.type.changed'));
46
+ });
47
+ });
@@ -7,6 +7,7 @@ const node_assert_1 = __importDefault(require("node:assert"));
7
7
  const node_fs_1 = __importDefault(require("node:fs"));
8
8
  const node_path_1 = __importDefault(require("node:path"));
9
9
  const node_test_1 = require("node:test");
10
+ const silenceLoggers_1 = require("../../../test/helpers/silenceLoggers");
10
11
  const analyzeDiff_1 = require("../analyzeDiff");
11
12
  const writeSpec = (dir, filename, payload) => {
12
13
  const filePath = node_path_1.default.join(dir, filename);
@@ -23,6 +24,14 @@ const createTempDir = (t, prefix) => {
23
24
  return tempDir;
24
25
  };
25
26
  (0, node_test_1.describe)('@unit: analyzeDiff RENAME and invalid-regex handling', () => {
27
+ let restoreAppLogger;
28
+ (0, node_test_1.beforeEach)(() => {
29
+ restoreAppLogger = (0, silenceLoggers_1.installSilenceAppLogger)();
30
+ });
31
+ (0, node_test_1.afterEach)(() => {
32
+ restoreAppLogger?.();
33
+ restoreAppLogger = undefined;
34
+ });
26
35
  (0, node_test_1.test)('detects semantic remove/add entries for property rename-like change', async (t) => {
27
36
  const tmpDir = createTempDir(t, 'openapi-diff-rename-');
28
37
  const reportPath = node_path_1.default.join(tmpDir, 'report.json');
@@ -66,12 +75,13 @@ const createTempDir = (t, prefix) => {
66
75
  node_assert_1.default.ok(result.success, `analyzeDiff failed: ${result.error ?? 'unknown'}`);
67
76
  const reportRaw = node_fs_1.default.readFileSync(reportPath, 'utf-8');
68
77
  const report = JSON.parse(reportRaw);
69
- const removed = report.changes.find(change => change.type === 'model.property.removed' && change.path === '#/components/schemas/User/properties/first_name');
70
- const added = report.changes.find(change => change.type === 'model.property.added' && change.path === '#/components/schemas/User/properties/firstName');
78
+ const removed = report.semantic.changes.find(change => change.type === 'model.property.removed' && change.path === '#/components/schemas/User/properties/first_name');
79
+ const added = report.semantic.changes.find(change => change.type === 'model.property.added' && change.path === '#/components/schemas/User/properties/firstName');
71
80
  node_assert_1.default.ok(removed, 'Expected semantic removal entry for previous property');
72
81
  node_assert_1.default.ok(added, 'Expected semantic addition entry for renamed property');
73
82
  node_assert_1.default.strictEqual(removed?.severity, 'breaking');
74
83
  node_assert_1.default.strictEqual(added?.severity, 'non-breaking');
84
+ node_assert_1.default.ok(report.structural.miracles.some(miracle => miracle.type === 'RENAME'));
75
85
  });
76
86
  (0, node_test_1.test)('invalid regex in config does not crash and valid rules still apply', async (t) => {
77
87
  const tmpDir = createTempDir(t, 'openapi-diff-invalidregex-');
@@ -132,11 +142,11 @@ const createTempDir = (t, prefix) => {
132
142
  node_assert_1.default.ok(result.success, `analyzeDiff failed: ${result.error ?? 'unknown'}`);
133
143
  const reportRaw = node_fs_1.default.readFileSync(reportPath, 'utf-8');
134
144
  const report = JSON.parse(reportRaw);
135
- const filteredTypeChange = report.changes.find(change => change.type === 'model.property.type.changed' && change.path === '#/components/schemas/User/properties/age');
145
+ const filteredTypeChange = report.semantic.changes.find(change => change.type === 'model.property.type.changed' && change.path === '#/components/schemas/User/properties/age');
136
146
  node_assert_1.default.ok(!filteredTypeChange, 'Expected matching semantic change to be filtered by valid rule while invalid regex is ignored');
137
- node_assert_1.default.strictEqual(report.summary.breaking, 0);
138
- node_assert_1.default.strictEqual(report.summary.nonBreaking, 0);
139
- node_assert_1.default.strictEqual(report.summary.informational, 0);
140
- node_assert_1.default.strictEqual(report.recommendation.semver, 'patch');
147
+ node_assert_1.default.strictEqual(report.semantic.summary.breaking, 0);
148
+ node_assert_1.default.strictEqual(report.semantic.summary.nonBreaking, 0);
149
+ node_assert_1.default.strictEqual(report.semantic.summary.informational, 0);
150
+ node_assert_1.default.strictEqual(report.semantic.recommendation.semver, 'patch');
141
151
  });
142
152
  });
@@ -7,6 +7,7 @@ const node_assert_1 = __importDefault(require("node:assert"));
7
7
  const node_fs_1 = __importDefault(require("node:fs"));
8
8
  const node_path_1 = __importDefault(require("node:path"));
9
9
  const node_test_1 = require("node:test");
10
+ const silenceLoggers_1 = require("../../../test/helpers/silenceLoggers");
10
11
  const analyzeDiff_1 = require("../analyzeDiff");
11
12
  const writeSpec = (dir, filename, payload) => {
12
13
  const filePath = node_path_1.default.join(dir, filename);
@@ -23,6 +24,14 @@ const createTempDir = (t, prefix) => {
23
24
  return tempDir;
24
25
  };
25
26
  (0, node_test_1.describe)('@unit: analyzeDiff TYPE_COERCION miracles', () => {
27
+ let restoreAppLogger;
28
+ (0, node_test_1.beforeEach)(() => {
29
+ restoreAppLogger = (0, silenceLoggers_1.installSilenceAppLogger)();
30
+ });
31
+ (0, node_test_1.afterEach)(() => {
32
+ restoreAppLogger?.();
33
+ restoreAppLogger = undefined;
34
+ });
26
35
  (0, node_test_1.test)('detects semantic type change for scalar property transition', async (t) => {
27
36
  const tmpDir = createTempDir(t, 'openapi-diff-test-');
28
37
  const reportPath = node_path_1.default.join(tmpDir, 'report.json');
@@ -66,11 +75,12 @@ const createTempDir = (t, prefix) => {
66
75
  node_assert_1.default.ok(result.success, `analyzeDiff failed: ${result.error ?? 'unknown error'}`);
67
76
  const reportRaw = node_fs_1.default.readFileSync(reportPath, 'utf-8');
68
77
  const report = JSON.parse(reportRaw);
69
- const typeChange = report.changes.find(change => change.type === 'model.property.type.changed');
78
+ const typeChange = report.semantic.changes.find(change => change.type === 'model.property.type.changed');
70
79
  node_assert_1.default.ok(typeChange, 'Expected semantic type-change entry');
71
80
  node_assert_1.default.strictEqual(typeChange?.path, '#/components/schemas/User/properties/age');
72
81
  node_assert_1.default.strictEqual(typeChange?.severity, 'breaking');
73
- node_assert_1.default.ok(report.summary.breaking > 0);
82
+ node_assert_1.default.ok(report.semantic.summary.breaking > 0);
83
+ node_assert_1.default.ok(report.structural.miracles.some(miracle => miracle.type === 'TYPE_COERCION'));
74
84
  });
75
85
  (0, node_test_1.test)('filters semantic type-change entry when rule matches path', async (t) => {
76
86
  const tmpDir = createTempDir(t, 'openapi-diff-test-');
@@ -127,11 +137,11 @@ const createTempDir = (t, prefix) => {
127
137
  node_assert_1.default.ok(result.success, `analyzeDiff failed: ${result.error ?? 'unknown error'}`);
128
138
  const reportRaw = node_fs_1.default.readFileSync(reportPath, 'utf-8');
129
139
  const report = JSON.parse(reportRaw);
130
- const filteredTypeChange = report.changes.find(change => change.type === 'model.property.type.changed' && change.path === '#/components/schemas/User/properties/age');
140
+ const filteredTypeChange = report.semantic.changes.find(change => change.type === 'model.property.type.changed' && change.path === '#/components/schemas/User/properties/age');
131
141
  node_assert_1.default.ok(!filteredTypeChange, 'Expected semantic type-change to be filtered by analyze.ignore');
132
- node_assert_1.default.strictEqual(report.summary.breaking, 0);
133
- node_assert_1.default.strictEqual(report.summary.nonBreaking, 0);
134
- node_assert_1.default.strictEqual(report.summary.informational, 0);
135
- node_assert_1.default.strictEqual(report.recommendation.semver, 'patch');
142
+ node_assert_1.default.strictEqual(report.semantic.summary.breaking, 0);
143
+ node_assert_1.default.strictEqual(report.semantic.summary.nonBreaking, 0);
144
+ node_assert_1.default.strictEqual(report.semantic.summary.informational, 0);
145
+ node_assert_1.default.strictEqual(report.semantic.recommendation.semver, 'patch');
136
146
  });
137
147
  });
@@ -1,4 +1,12 @@
1
1
  import { OptionValues } from 'commander';
2
+ /**
3
+ * Результат выполнения команды analyze-diff.
4
+ * @property success признак успешного завершения
5
+ * @property [skipped] анализ пропущен из-за отсутствия базовой спецификации
6
+ * @property [reportPath] абсолютный путь к сохранённому отчёту
7
+ * @property [ignored] количество проигнорированных изменений
8
+ * @property [error] текст ошибки при неуспешном завершении
9
+ */
2
10
  export type AnalyzeDiffResult = {
3
11
  success: boolean;
4
12
  skipped?: boolean;
@@ -7,11 +15,15 @@ export type AnalyzeDiffResult = {
7
15
  error?: string;
8
16
  };
9
17
  /**
10
- * Maps analyze-diff result to a process exit code. Does not call `process.exit`.
18
+ * Преобразует результат analyze-diff в код выхода процесса. Не вызывает `process.exit`.
19
+ * @param result результат выполнения analyze-diff
20
+ * @returns код выхода: 0 при успехе, 1 при ошибке
11
21
  */
12
22
  export declare function toAnalyzeDiffExitCode(result: AnalyzeDiffResult): number;
13
23
  /**
14
- * Runs semantic diff analysis between two OpenAPI specs and writes JSON report.
24
+ * Выполняет семантическое сравнение двух OpenAPI-спецификаций и записывает JSON-отчёт.
25
+ * @param options опции CLI команды analyze-diff
26
+ * @returns результат выполнения с путём к отчёту или описанием ошибки
15
27
  */
16
28
  export declare function analyzeDiff(options: OptionValues): Promise<AnalyzeDiffResult>;
17
29
  //# sourceMappingURL=analyzeDiff.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"analyzeDiff.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/analyzeDiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;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"}
1
+ {"version":3,"file":"analyzeDiff.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/analyzeDiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAuBzC;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAEvE;AAqBD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuGnF"}
@@ -1,16 +1,23 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.toAnalyzeDiffExitCode = toAnalyzeDiffExitCode;
4
7
  exports.analyzeDiff = analyzeDiff;
8
+ const crypto_1 = __importDefault(require("crypto"));
5
9
  const Consts_1 = require("../../common/Consts");
6
10
  const LoggerMessages_1 = require("../../common/LoggerMessages");
7
- const validateZodOptions_1 = require("../../common/Validation/validateZodOptions");
11
+ const Validation_1 = require("../../common/Validation");
8
12
  const evaluateGovernanceRules_1 = require("../../core/governance/evaluateGovernanceRules");
9
13
  const loadGovernanceConfig_1 = require("../../core/governance/loadGovernanceConfig");
10
14
  const applySemanticDiffPluginHooks_1 = require("../../core/plugins/applySemanticDiffPluginHooks");
11
15
  const loadGeneratorPlugins_1 = require("../../core/plugins/loadGeneratorPlugins");
12
16
  const analyzeOpenApiDiff_1 = require("../../core/semanticDiff/analyzeOpenApiDiff");
13
- const getOpenApiSpec_1 = require("../../core/utils/getOpenApiSpec");
17
+ const DiffReport_model_1 = require("../../core/types/DiffReport.model");
18
+ const adapters_1 = require("../../core/utils/adapters");
19
+ const buildMiraclesFromSemanticChanges_1 = require("../../core/utils/buildMiraclesFromSemanticChanges");
20
+ const loadSemanticOpenApiSpec_1 = require("../../core/utils/loadSemanticOpenApiSpec");
14
21
  const schemas_1 = require("../schemas");
15
22
  const ciSummary_1 = require("./ciSummary");
16
23
  const ignoreRules_1 = require("./ignoreRules");
@@ -19,16 +26,36 @@ const pluginPaths_1 = require("./pluginPaths");
19
26
  const semanticDiffContext_1 = require("./semanticDiffContext");
20
27
  const specParser_1 = require("./specParser");
21
28
  /**
22
- * Maps analyze-diff result to a process exit code. Does not call `process.exit`.
29
+ * Преобразует результат analyze-diff в код выхода процесса. Не вызывает `process.exit`.
30
+ * @param result результат выполнения analyze-diff
31
+ * @returns код выхода: 0 при успехе, 1 при ошибке
23
32
  */
24
33
  function toAnalyzeDiffExitCode(result) {
25
34
  return result.success ? 0 : 1;
26
35
  }
36
+ function createSpecHash(spec) {
37
+ const seen = new WeakSet();
38
+ const serializedSpec = JSON.stringify(spec, (_key, value) => {
39
+ if (value && typeof value === 'object') {
40
+ if (seen.has(value)) {
41
+ return '[Circular]';
42
+ }
43
+ seen.add(value);
44
+ }
45
+ return value;
46
+ });
47
+ return crypto_1.default
48
+ .createHash('sha256')
49
+ .update(serializedSpec ?? '')
50
+ .digest('hex');
51
+ }
27
52
  /**
28
- * Runs semantic diff analysis between two OpenAPI specs and writes JSON report.
53
+ * Выполняет семантическое сравнение двух OpenAPI-спецификаций и записывает JSON-отчёт.
54
+ * @param options опции CLI команды analyze-diff
55
+ * @returns результат выполнения с путём к отчёту или описанием ошибки
29
56
  */
30
57
  async function analyzeDiff(options) {
31
- const validationResult = (0, validateZodOptions_1.validateZodOptions)(schemas_1.analyzeDiffOptionsSchema, options);
58
+ const validationResult = (0, Validation_1.validateZodOptions)(schemas_1.analyzeDiffOptionsSchema, options);
32
59
  if (!validationResult.success) {
33
60
  const message = validationResult.errors.join('\n');
34
61
  Consts_1.APP_LOGGER.error(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.VALIDATION_ERROR(message));
@@ -46,11 +73,9 @@ async function analyzeDiff(options) {
46
73
  }
47
74
  const baseSourceLabel = oldSpecInput ? `compare-with:${oldSpecInput}` : `git:${gitRef}`;
48
75
  Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.STARTED(newSpecInput, baseSourceLabel));
49
- 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));
76
+ (0, semanticDiffContext_1.createSemanticDiffContext)(newSpecInput);
77
+ const newSpec = await (0, loadSemanticOpenApiSpec_1.loadSemanticOpenApiSpec)(newSpecInput);
78
+ const oldSpec = oldSpecInput ? await (0, loadSemanticOpenApiSpec_1.loadSemanticOpenApiSpec)(oldSpecInput) : await (0, loadSemanticOpenApiSpec_1.loadSemanticOpenApiObject)(await (0, specParser_1.readSpecFromGit)(gitRef, newSpecInput), newSpecInput);
54
79
  if (oldSpecInput && validatedOptions.git) {
55
80
  Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.COMPARE_WITH_OVERRIDES_GIT(validatedOptions.git));
56
81
  }
@@ -72,7 +97,7 @@ async function analyzeDiff(options) {
72
97
  },
73
98
  });
74
99
  const { report: reportAfterIgnore, ignored } = (0, ignoreSemanticChanges_1.filterSemanticChangesByIgnoreRules)(pluginHooksResult.report, ignoreRules);
75
- const report = {
100
+ const semanticReport = {
76
101
  ...reportAfterIgnore,
77
102
  governance: (0, evaluateGovernanceRules_1.evaluateGovernanceRules)({
78
103
  openApi: newSpec,
@@ -80,19 +105,37 @@ async function analyzeDiff(options) {
80
105
  allowBreaking: validatedOptions.allowBreaking ?? false,
81
106
  governanceConfig: governancePolicy,
82
107
  }),
108
+ miracles: (0, buildMiraclesFromSemanticChanges_1.buildMiraclesFromSemanticChanges)(reportAfterIgnore.changes),
109
+ };
110
+ const report = {
111
+ schemaVersion: DiffReport_model_1.UNIFIED_DIFF_REPORT_SCHEMA_VERSION,
112
+ timestamp: new Date().toISOString(),
113
+ metadata: {
114
+ base: baseSourceLabel,
115
+ target: newSpecInput,
116
+ baseHash: createSpecHash(oldSpec),
117
+ targetHash: createSpecHash(newSpec),
118
+ },
119
+ semantic: {
120
+ changes: semanticReport.changes,
121
+ governance: semanticReport.governance,
122
+ recommendation: semanticReport.recommendation,
123
+ summary: semanticReport.summary,
124
+ },
125
+ structural: (0, adapters_1.adaptSemanticToStructural)(semanticReport, ignored),
83
126
  };
84
127
  const reportPath = await (0, analyzeOpenApiDiff_1.writeSemanticDiffReport)(report, pluginHooksResult.reportPath);
85
128
  Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.REPORT_CREATED(reportPath));
86
- Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.SUMMARY(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));
129
+ Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.SUMMARY(semanticReport, reportPath));
130
+ Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.RECOMMENDATION(semanticReport));
131
+ Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.GOVERNANCE(semanticReport));
89
132
  if (ignored > 0) {
90
133
  Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.IGNORED_CHANGES(ignored));
91
134
  }
92
135
  if (validatedOptions.ci) {
93
136
  Consts_1.APP_LOGGER.info(LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.CI_MARKDOWN_SUMMARY((0, ciSummary_1.formatCiMarkdownSummary)(report, reportPath)));
94
137
  }
95
- if (validatedOptions.ci && report.governance.summary.errors > 0) {
138
+ if (validatedOptions.ci && semanticReport.governance.summary.errors > 0) {
96
139
  return { success: false, reportPath, error: LoggerMessages_1.LOGGER_MESSAGES.ANALYZE_DIFF.CI_FAILURE };
97
140
  }
98
141
  return { success: true, reportPath, ignored };
@@ -1,6 +1,9 @@
1
- import { SemanticDiffReport } from '../../core/semanticDiff/analyzeOpenApiDiff';
1
+ import type { UnifiedDiffReport } from '../../core/types/DiffReport.model';
2
2
  /**
3
- * Builds markdown summary for CI logs.
3
+ * Формирует markdown-сводку семантического diff для CI-логов.
4
+ * @param report унифицированный diff-отчёт
5
+ * @param reportPath путь к сохранённому отчёту
6
+ * @returns markdown-текст для вывода в CI
4
7
  */
5
- export declare function formatCiMarkdownSummary(report: SemanticDiffReport, reportPath: string): string;
8
+ export declare function formatCiMarkdownSummary(report: UnifiedDiffReport, reportPath: string): string;
6
9
  //# sourceMappingURL=ciSummary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ciSummary.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/ciSummary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAEhF;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAc9F"}
1
+ {"version":3,"file":"ciSummary.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/ciSummary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAE3E;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAe7F"}
@@ -2,19 +2,23 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.formatCiMarkdownSummary = formatCiMarkdownSummary;
4
4
  /**
5
- * Builds markdown summary for CI logs.
5
+ * Формирует markdown-сводку семантического diff для CI-логов.
6
+ * @param report унифицированный diff-отчёт
7
+ * @param reportPath путь к сохранённому отчёту
8
+ * @returns markdown-текст для вывода в CI
6
9
  */
7
10
  function formatCiMarkdownSummary(report, reportPath) {
8
- const reasons = report.recommendation.reasons.map(reason => `- \`${reason}\``).join('\n');
11
+ const semantic = report.semantic;
12
+ const reasons = semantic.recommendation.reasons.map(reason => `- \`${reason}\``).join('\n');
9
13
  return [
10
14
  '### OpenAPI Semantic Diff',
11
15
  `- Report: \`${reportPath}\``,
12
16
  `- Schema Version: \`${report.schemaVersion}\``,
13
- `- Recommendation: \`${report.recommendation.semver}\` (confidence: \`${report.recommendation.confidence}\`)`,
14
- `- Reason: ${report.recommendation.reason}`,
17
+ `- Recommendation: \`${semantic.recommendation.semver}\` (confidence: \`${semantic.recommendation.confidence}\`)`,
18
+ `- Reason: ${semantic.recommendation.reason}`,
15
19
  '- Reason Codes:',
16
20
  reasons,
17
- `- Summary: breaking=\`${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}\``,
21
+ `- Summary: breaking=\`${semantic.summary.breaking}\`, nonBreaking=\`${semantic.summary.nonBreaking}\`, informational=\`${semantic.summary.informational}\``,
22
+ `- Governance: errors=\`${semantic.governance.summary.errors}\`, warnings=\`${semantic.governance.summary.warnings}\`, info=\`${semantic.governance.summary.info}\``,
19
23
  ].join('\n');
20
24
  }
@@ -1,10 +1,4 @@
1
1
  import type { DiffEntry, IgnoreRule } from './types';
2
- /**
3
- * Проверяет, активно ли правило игнорирования по полю `until`.
4
- * @param rule правило игнорирования
5
- * @returns true если правило активно или не содержит валидной даты
6
- */
7
- export declare const isRuleActive: (rule: IgnoreRule) => boolean;
8
2
  /**
9
3
  * Проверяет, соответствует ли запись diff правилу игнорирования.
10
4
  * Совмещает полное совпадение пути, префикс и регулярные выражения.
@@ -13,21 +7,5 @@ export declare const isRuleActive: (rule: IgnoreRule) => boolean;
13
7
  * @returns true если правило применимо к записи
14
8
  */
15
9
  export declare const matchesIgnoreRule: (entry: DiffEntry, rule: IgnoreRule) => boolean;
16
- /**
17
- * Применяет набор правил игнорирования к массиву записей и возвращает отфильтрованные записи и число игнорированных.
18
- * @param entries список записей diff
19
- * @param rules список правил игнорирования
20
- * @returns объект с полем filtered и числом ignored
21
- */
22
- export declare const applyIgnoreRules: (entries: DiffEntry[], rules: IgnoreRule[]) => {
23
- filtered: DiffEntry[];
24
- ignored: number;
25
- };
26
- /**
27
- * Извлекает правила игнорирования из загруженной конфигурации openapi.
28
- * @param configData загруженные данные конфигурации
29
- * @returns список правил ignore
30
- */
31
- export declare const getIgnoreRulesFromConfig: (configData: Record<string, any> | Record<string, any>[] | null) => IgnoreRule[];
32
10
  export declare const loadIgnoreRules: (openapiConfigPath?: string) => IgnoreRule[];
33
11
  //# sourceMappingURL=ignoreRules.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ignoreRules.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/ignoreRules.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,UAAU,KAAG,OAK/C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,SAAS,EAAE,MAAM,UAAU,KAAG,OAkBtE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,SAAS,EAAE,EAAE,OAAO,UAAU,EAAE,KAAG;IAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAapH,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GACjC,YAAY,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,KAC/D,UAAU,EAOZ,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,oBAAoB,MAAM,KAAG,UAAU,EAGtE,CAAC"}
1
+ {"version":3,"file":"ignoreRules.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/ignoreRules.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAcrD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,SAAS,EAAE,MAAM,UAAU,KAAG,OAkBtE,CAAC;AAgBF,eAAO,MAAM,eAAe,GAAI,oBAAoB,MAAM,KAAG,UAAU,EAGtE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loadIgnoreRules = exports.getIgnoreRulesFromConfig = exports.applyIgnoreRules = exports.matchesIgnoreRule = exports.isRuleActive = void 0;
3
+ exports.loadIgnoreRules = exports.matchesIgnoreRule = void 0;
4
4
  const Consts_1 = require("../../common/Consts");
5
5
  const LoggerMessages_1 = require("../../common/LoggerMessages");
6
6
  const loadConfigIfExists_1 = require("../../common/utils/loadConfigIfExists");
@@ -17,7 +17,6 @@ const isRuleActive = (rule) => {
17
17
  return true;
18
18
  return Date.now() <= timestamp;
19
19
  };
20
- exports.isRuleActive = isRuleActive;
21
20
  /**
22
21
  * Проверяет, соответствует ли запись diff правилу игнорирования.
23
22
  * Совмещает полное совпадение пути, префикс и регулярные выражения.
@@ -26,7 +25,7 @@ exports.isRuleActive = isRuleActive;
26
25
  * @returns true если правило применимо к записи
27
26
  */
28
27
  const matchesIgnoreRule = (entry, rule) => {
29
- if (!(0, exports.isRuleActive)(rule))
28
+ if (!isRuleActive(rule))
30
29
  return false;
31
30
  if (rule.path) {
32
31
  if (entry.path === rule.path)
@@ -51,26 +50,6 @@ const matchesIgnoreRule = (entry, rule) => {
51
50
  return false;
52
51
  };
53
52
  exports.matchesIgnoreRule = matchesIgnoreRule;
54
- /**
55
- * Применяет набор правил игнорирования к массиву записей и возвращает отфильтрованные записи и число игнорированных.
56
- * @param entries список записей diff
57
- * @param rules список правил игнорирования
58
- * @returns объект с полем filtered и числом ignored
59
- */
60
- const applyIgnoreRules = (entries, rules) => {
61
- if (!rules.length) {
62
- return { filtered: entries, ignored: 0 };
63
- }
64
- let ignored = 0;
65
- const filtered = entries.filter(entry => {
66
- const shouldIgnore = rules.some(rule => (0, exports.matchesIgnoreRule)(entry, rule));
67
- if (shouldIgnore)
68
- ignored += 1;
69
- return !shouldIgnore;
70
- });
71
- return { filtered, ignored };
72
- };
73
- exports.applyIgnoreRules = applyIgnoreRules;
74
53
  /**
75
54
  * Извлекает правила игнорирования из загруженной конфигурации openapi.
76
55
  * @param configData загруженные данные конфигурации
@@ -85,9 +64,8 @@ const getIgnoreRulesFromConfig = (configData) => {
85
64
  }
86
65
  return configData.analyze?.ignore ?? [];
87
66
  };
88
- exports.getIgnoreRulesFromConfig = getIgnoreRulesFromConfig;
89
67
  const loadIgnoreRules = (openapiConfigPath) => {
90
68
  const configData = (0, loadConfigIfExists_1.loadConfigIfExists)(openapiConfigPath);
91
- return (0, exports.getIgnoreRulesFromConfig)(configData);
69
+ return getIgnoreRulesFromConfig(configData);
92
70
  };
93
71
  exports.loadIgnoreRules = loadIgnoreRules;