ts-openapi-codegen 1.0.0-beta.8 → 2.0.0-beta.0

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 (375) hide show
  1. package/README.md +221 -123
  2. package/README.rus.md +725 -0
  3. package/dist/cli/checkAndUpdateConfig/checkConfig.d.ts +12 -0
  4. package/dist/cli/checkAndUpdateConfig/checkConfig.d.ts.map +1 -0
  5. package/dist/cli/checkAndUpdateConfig/checkConfig.js +66 -0
  6. package/dist/cli/checkAndUpdateConfig/constants.d.ts +13 -0
  7. package/dist/cli/checkAndUpdateConfig/constants.d.ts.map +1 -0
  8. package/dist/cli/checkAndUpdateConfig/constants.js +29 -0
  9. package/dist/cli/checkAndUpdateConfig/types.d.ts +20 -0
  10. package/dist/cli/checkAndUpdateConfig/types.d.ts.map +1 -0
  11. package/dist/cli/checkAndUpdateConfig/types.js +12 -0
  12. package/dist/cli/checkAndUpdateConfig/updateConfig.d.ts +12 -0
  13. package/dist/cli/checkAndUpdateConfig/updateConfig.d.ts.map +1 -0
  14. package/dist/cli/checkAndUpdateConfig/updateConfig.js +56 -0
  15. package/dist/cli/checkAndUpdateConfig/utils/generateConfigExample.d.ts +2 -0
  16. package/dist/cli/checkAndUpdateConfig/utils/generateConfigExample.d.ts.map +1 -0
  17. package/dist/cli/checkAndUpdateConfig/utils/generateConfigExample.js +11 -0
  18. package/dist/cli/checkAndUpdateConfig/utils/prepareConfigData.d.ts +14 -0
  19. package/dist/cli/checkAndUpdateConfig/utils/prepareConfigData.d.ts.map +1 -0
  20. package/dist/cli/checkAndUpdateConfig/utils/prepareConfigData.js +30 -0
  21. package/dist/cli/checkAndUpdateConfig/utils/removeDefaultConfigValues.d.ts +17 -0
  22. package/dist/cli/checkAndUpdateConfig/utils/removeDefaultConfigValues.d.ts.map +1 -0
  23. package/dist/cli/checkAndUpdateConfig/utils/removeDefaultConfigValues.js +29 -0
  24. package/dist/cli/checkAndUpdateConfig/utils/rewriteConfigFile.d.ts +2 -0
  25. package/dist/cli/checkAndUpdateConfig/utils/rewriteConfigFile.d.ts.map +1 -0
  26. package/dist/cli/checkAndUpdateConfig/utils/rewriteConfigFile.js +11 -0
  27. package/dist/cli/checkAndUpdateConfig/utils/selectConfigAction.d.ts +29 -0
  28. package/dist/cli/checkAndUpdateConfig/utils/selectConfigAction.d.ts.map +1 -0
  29. package/dist/cli/checkAndUpdateConfig/utils/selectConfigAction.js +49 -0
  30. package/dist/cli/checkAndUpdateConfig/utils/updateExistingConfigFile.d.ts +6 -0
  31. package/dist/cli/checkAndUpdateConfig/utils/updateExistingConfigFile.d.ts.map +1 -0
  32. package/dist/cli/checkAndUpdateConfig/utils/updateExistingConfigFile.js +22 -0
  33. package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.d.ts +17 -0
  34. package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.d.ts.map +1 -0
  35. package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.js +53 -0
  36. package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.d.ts +34 -0
  37. package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.d.ts.map +1 -0
  38. package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.js +41 -0
  39. package/dist/cli/checkAndUpdateConfig/utils/writeExampleConfigFile.d.ts +6 -0
  40. package/dist/cli/checkAndUpdateConfig/utils/writeExampleConfigFile.d.ts.map +1 -0
  41. package/dist/cli/checkAndUpdateConfig/utils/writeExampleConfigFile.js +18 -0
  42. package/dist/cli/generate/runGenerateOpenApi.d.ts +2 -2
  43. package/dist/cli/generate/runGenerateOpenApi.d.ts.map +1 -1
  44. package/dist/cli/generate/runGenerateOpenApi.js +20 -37
  45. package/dist/cli/index.d.ts +1 -0
  46. package/dist/cli/index.js +56 -30
  47. package/dist/cli/initOpenApiConfig/runInitOpenapiConfig.d.ts.map +1 -1
  48. package/dist/cli/initOpenApiConfig/runInitOpenapiConfig.js +11 -18
  49. package/dist/cli/interactive/confirmDialog.d.ts +17 -0
  50. package/dist/cli/interactive/confirmDialog.d.ts.map +1 -0
  51. package/dist/cli/interactive/confirmDialog.js +36 -0
  52. package/dist/cli/interactive/constants.d.ts +7 -0
  53. package/dist/cli/interactive/constants.d.ts.map +1 -0
  54. package/dist/cli/interactive/constants.js +25 -0
  55. package/dist/cli/interactive/selectDialog.d.ts +17 -0
  56. package/dist/cli/interactive/selectDialog.d.ts.map +1 -0
  57. package/dist/cli/interactive/selectDialog.js +43 -0
  58. package/dist/cli/interactive/types.d.ts +40 -0
  59. package/dist/cli/interactive/types.d.ts.map +1 -0
  60. package/dist/cli/interactive/types.js +12 -0
  61. package/dist/common/Consts.d.ts +4 -0
  62. package/dist/common/Consts.d.ts.map +1 -1
  63. package/dist/common/Consts.js +31 -1
  64. package/dist/common/Enums.d.ts +4 -0
  65. package/dist/common/Enums.d.ts.map +1 -1
  66. package/dist/common/Enums.js +6 -1
  67. package/dist/common/Logger.d.ts +1 -1
  68. package/dist/common/Logger.d.ts.map +1 -1
  69. package/dist/common/Logger.js +7 -39
  70. package/dist/common/LoggerMessages.d.ts +64 -0
  71. package/dist/common/LoggerMessages.d.ts.map +1 -0
  72. package/dist/common/LoggerMessages.js +82 -0
  73. package/dist/common/TRawOptions.d.ts +40 -0
  74. package/dist/common/TRawOptions.d.ts.map +1 -0
  75. package/dist/common/UpdateNotifier.d.ts +36 -2
  76. package/dist/common/UpdateNotifier.d.ts.map +1 -1
  77. package/dist/common/UpdateNotifier.js +150 -57
  78. package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.d.ts +8 -0
  79. package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.d.ts.map +1 -0
  80. package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.js +31 -0
  81. package/dist/common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas.d.ts +8 -0
  82. package/dist/common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas.d.ts.map +1 -0
  83. package/dist/common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas.js +33 -0
  84. package/dist/common/VersionedSchema/Enums.d.ts +2 -1
  85. package/dist/common/VersionedSchema/Enums.d.ts.map +1 -1
  86. package/dist/common/VersionedSchema/Enums.js +1 -0
  87. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsMigrationPlan.d.ts.map +1 -1
  88. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsMigrationPlan.js +10 -19
  89. package/dist/common/VersionedSchema/OptionsVersioned/OptionsMigrationPlans.d.ts.map +1 -1
  90. package/dist/common/VersionedSchema/OptionsVersioned/OptionsMigrationPlans.js +10 -10
  91. package/dist/common/VersionedSchema/Types.d.ts +10 -0
  92. package/dist/common/VersionedSchema/Types.d.ts.map +1 -1
  93. package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsMigrationPlan.d.ts +3 -0
  94. package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsMigrationPlan.d.ts.map +1 -0
  95. package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsMigrationPlan.js +28 -0
  96. package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsSchemaV1.d.ts +7 -0
  97. package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsSchemaV1.d.ts.map +1 -0
  98. package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsSchemaV1.js +42 -0
  99. package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsVersionedSchemas.d.ts +3 -0
  100. package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsVersionedSchemas.d.ts.map +1 -0
  101. package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsVersionedSchemas.js +10 -0
  102. package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.d.ts +11 -0
  103. package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.d.ts.map +1 -0
  104. package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.js +19 -0
  105. package/dist/common/VersionedSchema/Utils/createTrivialMigration.d.ts +7 -0
  106. package/dist/common/VersionedSchema/Utils/createTrivialMigration.d.ts.map +1 -0
  107. package/dist/common/VersionedSchema/Utils/createTrivialMigration.js +15 -0
  108. package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.d.ts +1 -7
  109. package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.d.ts.map +1 -1
  110. package/dist/common/VersionedSchema/Utils/getCurrentErrorMessage.d.ts +3 -0
  111. package/dist/common/VersionedSchema/Utils/getCurrentErrorMessage.d.ts.map +1 -0
  112. package/dist/common/VersionedSchema/Utils/getCurrentErrorMessage.js +14 -0
  113. package/dist/common/VersionedSchema/Utils/getKeyByMapValue.d.ts +2 -0
  114. package/dist/common/VersionedSchema/Utils/getKeyByMapValue.d.ts.map +1 -0
  115. package/dist/common/VersionedSchema/Utils/getKeyByMapValue.js +11 -0
  116. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.d.ts +5 -2
  117. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.d.ts.map +1 -1
  118. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.js +31 -17
  119. package/dist/common/utils/__tests__/__mock__/mockJoiSchema.d.ts.map +1 -0
  120. package/dist/common/utils/__tests__/convertArrayToObject.test.d.ts.map +1 -0
  121. package/dist/common/{__tests__ → utils/__tests__}/convertArrayToObject.test.js +14 -14
  122. package/dist/common/utils/__tests__/determineBestMatchingSchemaVersion.test.d.ts.map +1 -0
  123. package/dist/common/{__tests__ → utils/__tests__}/determineBestMatchingSchemaVersion.test.js +5 -5
  124. package/dist/common/utils/__tests__/generateKeyMappingForInvalidKeys.test.d.ts.map +1 -0
  125. package/dist/common/{__tests__ → utils/__tests__}/generateKeyMappingForInvalidKeys.test.js +4 -4
  126. package/dist/common/utils/__tests__/getUniqueKeysFromSchemas.test.d.ts.map +1 -0
  127. package/dist/common/{__tests__ → utils/__tests__}/getUniqueKeysFromSchemas.test.js +4 -4
  128. package/dist/common/utils/__tests__/getUniqueObjectKeys.test.d.ts.map +1 -0
  129. package/dist/common/{__tests__ → utils/__tests__}/getUniqueObjectKeys.test.js +5 -5
  130. package/dist/common/utils/__tests__/mergeObjectSchemas.test.d.ts.map +1 -0
  131. package/dist/common/{__tests__ → utils/__tests__}/mergeObjectSchemas.test.js +5 -5
  132. package/dist/common/utils/__tests__/migrationForMultiOptions.test.d.ts.map +1 -0
  133. package/dist/common/{__tests__ → utils/__tests__}/migrationForMultiOptions.test.js +21 -15
  134. package/dist/common/utils/__tests__/migrationForOptions.test.d.ts.map +1 -0
  135. package/dist/common/{__tests__ → utils/__tests__}/migrationForOptions.test.js +13 -9
  136. package/dist/common/utils/__tests__/pathHelpers.test.d.ts.map +1 -0
  137. package/dist/{core → common}/utils/__tests__/pathHelpers.test.js +8 -8
  138. package/dist/common/utils/__tests__/replaceInvalidKeysWithMappedNames.test.d.ts.map +1 -0
  139. package/dist/common/{__tests__ → utils/__tests__}/replaceInvalidKeysWithMappedNames.test.js +5 -5
  140. package/dist/common/utils/__tests__/validateAndSuggestKeyCorrections.test.d.ts.map +1 -0
  141. package/dist/common/{__tests__ → utils/__tests__}/validateAndSuggestKeyCorrections.test.js +5 -5
  142. package/dist/common/utils/convertArrayToObject.d.ts +2 -0
  143. package/dist/common/utils/convertArrayToObject.d.ts.map +1 -0
  144. package/dist/common/{Utils.js → utils/convertArrayToObject.js} +0 -20
  145. package/dist/{core/utils/fileSystem.d.ts → common/utils/fileSystemHelpers.d.ts} +8 -5
  146. package/dist/common/utils/fileSystemHelpers.d.ts.map +1 -0
  147. package/dist/common/utils/fileSystemHelpers.js +85 -0
  148. package/dist/common/utils/format.d.ts +3 -0
  149. package/dist/common/utils/format.d.ts.map +1 -0
  150. package/dist/{core → common}/utils/format.js +2 -2
  151. package/dist/common/utils/loadConfigIfExists.d.ts +2 -0
  152. package/dist/common/utils/loadConfigIfExists.d.ts.map +1 -0
  153. package/dist/common/utils/loadConfigIfExists.js +22 -0
  154. package/dist/common/utils/pathHelpers.d.ts +6 -0
  155. package/dist/common/utils/pathHelpers.d.ts.map +1 -0
  156. package/dist/{core → common}/utils/pathHelpers.js +16 -20
  157. package/dist/common/utils/safeHasOwn.d.ts +2 -0
  158. package/dist/common/utils/safeHasOwn.d.ts.map +1 -0
  159. package/dist/common/utils/safeHasOwn.js +9 -0
  160. package/dist/core/Context.d.ts.map +1 -1
  161. package/dist/core/Context.js +3 -3
  162. package/dist/core/OpenApiClient.d.ts +13 -0
  163. package/dist/core/OpenApiClient.d.ts.map +1 -0
  164. package/dist/core/OpenApiClient.js +175 -0
  165. package/dist/core/WriteClient.d.ts +1 -1
  166. package/dist/core/WriteClient.d.ts.map +1 -1
  167. package/dist/core/WriteClient.js +20 -20
  168. package/dist/core/__tests__/WriteClient.test.js +61 -60
  169. package/dist/core/api/v2/Parser.d.ts.map +1 -1
  170. package/dist/core/api/v2/Parser.js +2 -9
  171. package/dist/core/api/v2/parser/__tests__/getServer.test.js +2 -2
  172. package/dist/core/api/v2/parser/__tests__/getType.test.js +3 -3
  173. package/dist/core/api/v2/parser/getModelProperties.d.ts.map +1 -1
  174. package/dist/core/api/v2/parser/getModelProperties.js +2 -5
  175. package/dist/core/api/v2/parser/getModels.d.ts.map +1 -1
  176. package/dist/core/api/v2/parser/getModels.js +2 -1
  177. package/dist/core/api/v2/parser/getOperationParameter.d.ts.map +1 -1
  178. package/dist/core/api/v2/parser/getOperationParameter.js +2 -1
  179. package/dist/core/api/v2/parser/getOperationResponse.d.ts.map +1 -1
  180. package/dist/core/api/v2/parser/getOperationResponse.js +2 -5
  181. package/dist/core/api/v2/parser/getOperationResponses.d.ts.map +1 -1
  182. package/dist/core/api/v2/parser/getOperationResponses.js +2 -5
  183. package/dist/core/api/v2/parser/getServices.d.ts.map +1 -1
  184. package/dist/core/api/v2/parser/getServices.js +2 -5
  185. package/dist/core/api/v2/parser/getType.js +4 -4
  186. package/dist/core/api/v3/Parser.d.ts +1 -1
  187. package/dist/core/api/v3/Parser.d.ts.map +1 -1
  188. package/dist/core/api/v3/Parser.js +2 -9
  189. package/dist/core/api/v3/parser/__tests__/getServer.test.js +3 -3
  190. package/dist/core/api/v3/parser/__tests__/getType.test.js +3 -3
  191. package/dist/core/api/v3/parser/getModelProperties.d.ts.map +1 -1
  192. package/dist/core/api/v3/parser/getModelProperties.js +2 -5
  193. package/dist/core/api/v3/parser/getModels.d.ts.map +1 -1
  194. package/dist/core/api/v3/parser/getModels.js +2 -1
  195. package/dist/core/api/v3/parser/getOperationResponse.d.ts.map +1 -1
  196. package/dist/core/api/v3/parser/getOperationResponse.js +2 -5
  197. package/dist/core/api/v3/parser/getOperationResponses.d.ts.map +1 -1
  198. package/dist/core/api/v3/parser/getOperationResponses.js +2 -5
  199. package/dist/core/api/v3/parser/getServer.d.ts.map +1 -1
  200. package/dist/core/api/v3/parser/getServer.js +2 -5
  201. package/dist/core/api/v3/parser/getServices.d.ts.map +1 -1
  202. package/dist/core/api/v3/parser/getServices.js +2 -5
  203. package/dist/core/api/v3/parser/getType.d.ts.map +1 -1
  204. package/dist/core/api/v3/parser/getType.js +5 -13
  205. package/dist/core/index.d.ts +2 -2
  206. package/dist/core/index.d.ts.map +1 -1
  207. package/dist/core/index.js +6 -161
  208. package/dist/core/types/Consts.d.ts +5 -1
  209. package/dist/core/types/Consts.d.ts.map +1 -1
  210. package/dist/core/types/Consts.js +6 -2
  211. package/dist/core/types/base/Root.model.d.ts +1 -0
  212. package/dist/core/types/base/Root.model.d.ts.map +1 -1
  213. package/dist/core/utils/__tests__/escapeDescription.test.js +3 -3
  214. package/dist/core/utils/__tests__/escapeName.test.js +2 -2
  215. package/dist/core/utils/__tests__/flatMap.test.js +2 -2
  216. package/dist/core/utils/__tests__/getAbsolutePath.test.js +6 -6
  217. package/dist/core/utils/__tests__/getClassName.test.js +2 -2
  218. package/dist/core/utils/__tests__/getComment.test.js +2 -2
  219. package/dist/core/utils/__tests__/getEnumFromDescription.test.js +2 -2
  220. package/dist/core/utils/__tests__/getFileName.test.js +2 -2
  221. package/dist/core/utils/__tests__/getGatheringRefs.test.js +2 -2
  222. package/dist/core/utils/__tests__/getMappedType.test.js +2 -2
  223. package/dist/core/utils/__tests__/getModelNames.test.js +2 -2
  224. package/dist/core/utils/__tests__/getOpenApiVersion.test.js +2 -2
  225. package/dist/core/utils/__tests__/getOperationName.test.js +2 -2
  226. package/dist/core/utils/__tests__/getOperationParameterName.test.js +2 -2
  227. package/dist/core/utils/__tests__/getOperationPath.test.js +2 -2
  228. package/dist/core/utils/__tests__/getOperationResponseCode.test.js +2 -2
  229. package/dist/core/utils/__tests__/getPattern.test.js +2 -2
  230. package/dist/core/utils/__tests__/getRefFromSchema.test.js +2 -2
  231. package/dist/core/utils/__tests__/getRefs.test.js +2 -2
  232. package/dist/core/utils/__tests__/getRelativeModelPath.test.js +3 -3
  233. package/dist/core/utils/__tests__/getServiceClassName.test.js +2 -2
  234. package/dist/core/utils/__tests__/getServiceNames.test.js +2 -2
  235. package/dist/core/utils/__tests__/getServiceVersion.test.js +2 -2
  236. package/dist/core/utils/__tests__/isString.test.js +2 -2
  237. package/dist/core/utils/__tests__/isSubdirectory.test.js +10 -10
  238. package/dist/core/utils/__tests__/registerHandlebarHelpers.test.js +2 -2
  239. package/dist/core/utils/__tests__/registerHandlebarTemplates.test.js +2 -2
  240. package/dist/core/utils/__tests__/replaceString.test.js +2 -2
  241. package/dist/core/utils/__tests__/resolveRefToImportPath.test.js +360 -51
  242. package/dist/core/utils/__tests__/sort.test.js +2 -2
  243. package/dist/core/utils/__tests__/sortByRequiredExtended.test.js +11 -11
  244. package/dist/core/utils/__tests__/sortByRequiredSimple.test.js +11 -11
  245. package/dist/core/utils/__tests__/sortModelsByName.test.js +2 -2
  246. package/dist/core/utils/__tests__/sortServicesByName.test.js +2 -2
  247. package/dist/core/utils/__tests__/stripNamespace.test.js +2 -2
  248. package/dist/core/utils/__tests__/unique.test.js +2 -2
  249. package/dist/core/utils/__tests__/writeClientCore.test.js +52 -50
  250. package/dist/core/utils/__tests__/writeClientFullIndex.test.js +39 -37
  251. package/dist/core/utils/__tests__/writeClientModels.test.js +65 -63
  252. package/dist/core/utils/__tests__/writeClientSchemas.test.js +65 -63
  253. package/dist/core/utils/__tests__/writeClientServices.test.js +60 -58
  254. package/dist/core/utils/appendUniqueLinesToFile.js +4 -4
  255. package/dist/core/utils/createNormalizedRef.js +2 -2
  256. package/dist/core/utils/getAbsolutePath.js +3 -3
  257. package/dist/core/utils/getModelNameWithPrefix.d.ts +3 -0
  258. package/dist/core/utils/getModelNameWithPrefix.d.ts.map +1 -0
  259. package/dist/core/utils/getModelNameWithPrefix.js +15 -0
  260. package/dist/core/utils/getOpenApiSpec.d.ts.map +1 -1
  261. package/dist/core/utils/getOpenApiSpec.js +4 -4
  262. package/dist/core/utils/getOutputPaths.d.ts.map +1 -1
  263. package/dist/core/utils/getOutputPaths.js +6 -6
  264. package/dist/core/utils/getPattern.d.ts.map +1 -1
  265. package/dist/core/utils/getPattern.js +2 -1
  266. package/dist/core/utils/getRelativeModelPath.d.ts.map +1 -1
  267. package/dist/core/utils/getRelativeModelPath.js +2 -6
  268. package/dist/core/utils/isSubdirectory.d.ts.map +1 -1
  269. package/dist/core/utils/isSubdirectory.js +4 -3
  270. package/dist/core/utils/mapPathToTargetDirSafe.d.ts.map +1 -1
  271. package/dist/core/utils/mapPathToTargetDirSafe.js +11 -12
  272. package/dist/core/utils/modelHelpers.d.ts.map +1 -1
  273. package/dist/core/utils/modelHelpers.js +18 -6
  274. package/dist/core/utils/normalizeString.d.ts +2 -0
  275. package/dist/core/utils/normalizeString.d.ts.map +1 -0
  276. package/dist/core/utils/normalizeString.js +14 -0
  277. package/dist/core/utils/normalizedAbsolutePath.js +3 -3
  278. package/dist/core/utils/parseRef.d.ts.map +1 -1
  279. package/dist/core/utils/parseRef.js +7 -10
  280. package/dist/core/utils/precompileTemplates.js +14 -10
  281. package/dist/core/utils/registerHandlebarHelpers.d.ts.map +1 -1
  282. package/dist/core/utils/registerHandlebarHelpers.js +24 -0
  283. package/dist/core/utils/replaceString.d.ts.map +1 -1
  284. package/dist/core/utils/replaceString.js +2 -1
  285. package/dist/core/utils/resolveRefPath.d.ts.map +1 -1
  286. package/dist/core/utils/resolveRefPath.js +3 -3
  287. package/dist/core/utils/resolveRefToImportPath.d.ts +8 -2
  288. package/dist/core/utils/resolveRefToImportPath.d.ts.map +1 -1
  289. package/dist/core/utils/resolveRefToImportPath.js +91 -31
  290. package/dist/core/utils/serviceHelpers.d.ts.map +1 -1
  291. package/dist/core/utils/serviceHelpers.js +2 -1
  292. package/dist/core/utils/stripNamespace.js +5 -5
  293. package/dist/core/utils/writeClientCore.d.ts.map +1 -1
  294. package/dist/core/utils/writeClientCore.js +12 -12
  295. package/dist/core/utils/writeClientCoreIndex.d.ts.map +1 -1
  296. package/dist/core/utils/writeClientCoreIndex.js +2 -2
  297. package/dist/core/utils/writeClientFullIndex.d.ts.map +1 -1
  298. package/dist/core/utils/writeClientFullIndex.js +4 -4
  299. package/dist/core/utils/writeClientModels.d.ts.map +1 -1
  300. package/dist/core/utils/writeClientModels.js +7 -7
  301. package/dist/core/utils/writeClientModelsIndex.d.ts.map +1 -1
  302. package/dist/core/utils/writeClientModelsIndex.js +2 -2
  303. package/dist/core/utils/writeClientSchemas.d.ts.map +1 -1
  304. package/dist/core/utils/writeClientSchemas.js +7 -7
  305. package/dist/core/utils/writeClientSchemasIndex.d.ts.map +1 -1
  306. package/dist/core/utils/writeClientSchemasIndex.js +2 -2
  307. package/dist/core/utils/writeClientServices.d.ts.map +1 -1
  308. package/dist/core/utils/writeClientServices.js +5 -5
  309. package/dist/core/utils/writeClientServicesIndex.d.ts.map +1 -1
  310. package/dist/core/utils/writeClientServicesIndex.js +2 -2
  311. package/dist/core/utils/writeClientSimpleIndex.d.ts.map +1 -1
  312. package/dist/core/utils/writeClientSimpleIndex.js +4 -4
  313. package/dist/templatesCompiled/client/exportModel.js +4 -4
  314. package/dist/templatesCompiled/client/exportService.d.ts.map +1 -1
  315. package/dist/templatesCompiled/client/exportService.js +12 -13
  316. package/dist/templatesCompiled/client/indexFull.d.ts.map +1 -1
  317. package/dist/templatesCompiled/client/indexFull.js +35 -29
  318. package/dist/templatesCompiled/client/partials/parameters.d.ts +3 -2
  319. package/dist/templatesCompiled/client/partials/parameters.d.ts.map +1 -1
  320. package/dist/templatesCompiled/client/partials/parameters.js +25 -20
  321. package/dist/templatesCompiled/client/partials/parametersDefinition.d.ts +4 -2
  322. package/dist/templatesCompiled/client/partials/parametersDefinition.d.ts.map +1 -1
  323. package/dist/templatesCompiled/client/partials/parametersDefinition.js +31 -10
  324. package/package.json +15 -13
  325. package/dist/cli/chekOpenApiConfig/chekOpenApiConfig.d.ts +0 -5
  326. package/dist/cli/chekOpenApiConfig/chekOpenApiConfig.d.ts.map +0 -1
  327. package/dist/cli/chekOpenApiConfig/chekOpenApiConfig.js +0 -45
  328. package/dist/common/Options.d.ts +0 -26
  329. package/dist/common/Options.d.ts.map +0 -1
  330. package/dist/common/Utils.d.ts +0 -3
  331. package/dist/common/Utils.d.ts.map +0 -1
  332. package/dist/common/__tests__/__mock__/mockJoiSchema.d.ts.map +0 -1
  333. package/dist/common/__tests__/convertArrayToObject.test.d.ts.map +0 -1
  334. package/dist/common/__tests__/determineBestMatchingSchemaVersion.test.d.ts.map +0 -1
  335. package/dist/common/__tests__/generateKeyMappingForInvalidKeys.test.d.ts.map +0 -1
  336. package/dist/common/__tests__/getUniqueKeysFromSchemas.test.d.ts.map +0 -1
  337. package/dist/common/__tests__/getUniqueObjectKeys.test.d.ts.map +0 -1
  338. package/dist/common/__tests__/mergeObjectSchemas.test.d.ts.map +0 -1
  339. package/dist/common/__tests__/migrationForMultiOptions.test.d.ts.map +0 -1
  340. package/dist/common/__tests__/migrationForOptions.test.d.ts.map +0 -1
  341. package/dist/common/__tests__/replaceInvalidKeysWithMappedNames.test.d.ts.map +0 -1
  342. package/dist/common/__tests__/validateAndSuggestKeyCorrections.test.d.ts.map +0 -1
  343. package/dist/core/utils/__tests__/getRelativeModelImportPath.test.d.ts +0 -2
  344. package/dist/core/utils/__tests__/getRelativeModelImportPath.test.d.ts.map +0 -1
  345. package/dist/core/utils/__tests__/getRelativeModelImportPath.test.js +0 -82
  346. package/dist/core/utils/__tests__/pathHelpers.test.d.ts.map +0 -1
  347. package/dist/core/utils/fileSystem.d.ts.map +0 -1
  348. package/dist/core/utils/fileSystem.js +0 -26
  349. package/dist/core/utils/format.d.ts +0 -2
  350. package/dist/core/utils/format.d.ts.map +0 -1
  351. package/dist/core/utils/getRelativeModelImportPath.d.ts +0 -9
  352. package/dist/core/utils/getRelativeModelImportPath.d.ts.map +0 -1
  353. package/dist/core/utils/getRelativeModelImportPath.js +0 -45
  354. package/dist/core/utils/isDirectory.d.ts +0 -2
  355. package/dist/core/utils/isDirectory.d.ts.map +0 -1
  356. package/dist/core/utils/isDirectory.js +0 -13
  357. package/dist/core/utils/pathHelpers.d.ts +0 -7
  358. package/dist/core/utils/pathHelpers.d.ts.map +0 -1
  359. package/dist/core/utils/prepareOptions.d.ts +0 -8
  360. package/dist/core/utils/prepareOptions.d.ts.map +0 -1
  361. package/dist/core/utils/prepareOptions.js +0 -31
  362. /package/dist/common/{Options.js → TRawOptions.js} +0 -0
  363. /package/dist/common/{__tests__ → utils/__tests__}/__mock__/mockJoiSchema.d.ts +0 -0
  364. /package/dist/common/{__tests__ → utils/__tests__}/__mock__/mockJoiSchema.js +0 -0
  365. /package/dist/common/{__tests__ → utils/__tests__}/convertArrayToObject.test.d.ts +0 -0
  366. /package/dist/common/{__tests__ → utils/__tests__}/determineBestMatchingSchemaVersion.test.d.ts +0 -0
  367. /package/dist/common/{__tests__ → utils/__tests__}/generateKeyMappingForInvalidKeys.test.d.ts +0 -0
  368. /package/dist/common/{__tests__ → utils/__tests__}/getUniqueKeysFromSchemas.test.d.ts +0 -0
  369. /package/dist/common/{__tests__ → utils/__tests__}/getUniqueObjectKeys.test.d.ts +0 -0
  370. /package/dist/common/{__tests__ → utils/__tests__}/mergeObjectSchemas.test.d.ts +0 -0
  371. /package/dist/common/{__tests__ → utils/__tests__}/migrationForMultiOptions.test.d.ts +0 -0
  372. /package/dist/common/{__tests__ → utils/__tests__}/migrationForOptions.test.d.ts +0 -0
  373. /package/dist/{core → common}/utils/__tests__/pathHelpers.test.d.ts +0 -0
  374. /package/dist/common/{__tests__ → utils/__tests__}/replaceInvalidKeysWithMappedNames.test.d.ts +0 -0
  375. /package/dist/common/{__tests__ → utils/__tests__}/validateAndSuggestKeyCorrections.test.d.ts +0 -0
package/README.rus.md ADDED
@@ -0,0 +1,725 @@
1
+ # OpenAPI Typescript Codegen
2
+
3
+ [![NPM][npm-image]][npm-url]
4
+ [![License][license-image]][license-url]
5
+ [![Downloads][downloads-image]][downloads-url]
6
+ [![Downloads][coverage-image]][coverage-url]
7
+ [![TypeScript][typescript-image]][typescript-url]
8
+ [![CI][CI-image]][CI-url]
9
+ [![ISSUES][issues-image]][issues-url]
10
+ [![issues-pr][issues-pr-image]][issues-pr-url]
11
+ [![issues-pr-closed][issues-pr-closed-image]][issues-pr-closed-url]
12
+ [![stars-closed][stars-image]][stars-url]
13
+ ![librariesio-image]
14
+ ![lines-image]
15
+ ![Minimum node.js version](https://badgen.net/npm/node/next)
16
+
17
+
18
+ > Node.js библиотека, которая генерирует клиенты Typescript на основе спецификации OpenAPI.
19
+
20
+ ## Почему?
21
+ - Интерфейс ❤️ OpenAPI, но мы не хотим использовать JAVA codegen в наших сборках
22
+ - Быстрый, легкий, надежный и не зависящий от фреймворка. 🚀
23
+ - Поддерживает генерацию клиентов TypeScript
24
+ - Поддерживает генерацию http-клиентов fetch, XHR, Node.js и axios
25
+ - Поддерживает спецификации OpenAPI версии 2.0 и 3.0
26
+ - Поддерживает файлы JSON и YAML для ввода
27
+ - Поддерживает генерацию через CLI, Node.js и NPX
28
+ - Поддерживает tsc и @babel/plugin-transform-typescript
29
+ - Поддерживает кастомизацию имен моделей
30
+ - Поддерживает внешние ссылки с помощью [`swagger-parser`](https://github.com/APIDevTools/swagger-parser/)
31
+
32
+ ## Установка
33
+
34
+ ```
35
+ npm install ts-openapi-codegen --save-dev
36
+ ```
37
+
38
+ ## Использование
39
+
40
+ CLI инструмент поддерживает три основные команды: `generate`, `check-openapi-config`, и `init-openapi-config`.
41
+
42
+ ### Команда: `generate`
43
+
44
+ Генерирует TypeScript клиент на основе спецификаций OpenAPI.
45
+
46
+ **Базовое использование:**
47
+ ```bash
48
+ openapi generate --input ./spec.json --output ./dist
49
+ ```
50
+
51
+ **Все доступные опции:**
52
+
53
+ | Опция | Короткая | Тип | По умолчанию | Описание |
54
+ |-------|----------|-----|--------------|----------|
55
+ | `--input` | `-i` | string | - | Спецификация OpenAPI (путь, URL или строковое содержимое) - **обязательно** |
56
+ | `--output` | `-o` | string | - | Выходная директория - **обязательно** |
57
+ | `--openapi-config` | `-ocn` | string | `openapi.config.json` | Путь к файлу конфигурации |
58
+ | `--outputCore` | `-oc` | string | `{output}` | Выходная директория для core файлов |
59
+ | `--outputServices` | `-os` | string | `{output}` | Выходная директория для сервисов |
60
+ | `--outputModels` | `-om` | string | `{output}` | Выходная директория для моделей |
61
+ | `--outputSchemas` | `-osm` | string | `{output}` | Выходная директория для схем |
62
+ | `--httpClient` | `-c` | string | `fetch` | HTTP клиент для генерации: `fetch`, `xhr`, `node`, или `axios` |
63
+ | `--useOptions` | - | boolean | `false` | Использовать опции вместо аргументов |
64
+ | `--useUnionTypes` | - | boolean | `false` | Использовать union типы вместо enums |
65
+ | `--excludeCoreServiceFiles` | - | boolean | `false` | Исключить генерацию core и сервисных файлов |
66
+ | `--includeSchemasFiles` | - | boolean | `false` | Включить генерацию схем валидации моделей |
67
+ | `--request` | - | string | - | Путь к пользовательскому файлу запросов |
68
+ | `--interfacePrefix` | - | string | `I` | Префикс для интерфейсов моделей |
69
+ | `--enumPrefix` | - | string | `E` | Префикс для enum моделей |
70
+ | `--typePrefix` | - | string | `T` | Префикс для type моделей |
71
+ | `--useCancelableRequest` | - | boolean | `false` | Использовать отменяемый promise как тип возврата |
72
+ | `--sortByRequired` | `-s` | boolean | `false` | Использовать расширенную стратегию сортировки для аргументов функций |
73
+ | `--useSeparatedIndexes` | - | boolean | `false` | Использовать отдельные index файлы для core, models, schemas и services |
74
+ | `--logLevel` | `-l` | string | `error` | Уровень логирования: `info`, `warn`, или `error` |
75
+ | `--logTarget` | `-t` | string | `console` | Цель логирования: `console` или `file` |
76
+
77
+ **Примеры:**
78
+ ```bash
79
+ # Базовая генерация
80
+ openapi generate --input ./spec.json --output ./dist
81
+
82
+ # С пользовательским HTTP клиентом
83
+ openapi generate --input ./spec.json --output ./dist --httpClient axios
84
+
85
+ # С файлом конфигурации
86
+ openapi generate --openapi-config ./my-config.json
87
+
88
+ # Со всеми опциями через CLI
89
+ openapi generate \
90
+ --input ./spec.json \
91
+ --output ./dist \
92
+ --httpClient fetch \
93
+ --useOptions \
94
+ --useUnionTypes \
95
+ --includeSchemasFiles \
96
+ --logLevel info
97
+ ```
98
+
99
+ ### Команда: `check-openapi-config`
100
+
101
+ Проверяет структуру и значения файла конфигурации.
102
+
103
+ **Использование:**
104
+ ```bash
105
+ openapi check-openapi-config
106
+ openapi check-openapi-config --openapi-config ./custom-config.json
107
+ ```
108
+
109
+ **Опции:**
110
+ - `--openapi-config` / `-ocn` - Путь к файлу конфигурации (по умолчанию: `openapi.config.json`)
111
+
112
+ ### Команда: `init-openapi-config`
113
+
114
+ Генерирует шаблон файла конфигурации.
115
+
116
+ **Использование:**
117
+ ```bash
118
+ # Генерация шаблона с одним набором опций
119
+ openapi init-openapi-config
120
+
121
+ # Генерация шаблона с несколькими наборами опций
122
+ openapi init-openapi-config --type MULTIOPTION
123
+
124
+ # Пользовательское имя файла конфигурации
125
+ openapi init-openapi-config --openapi-config ./my-config.json
126
+ ```
127
+
128
+ **Опции:**
129
+ - `--openapi-config` / `-ocn` - Путь к выходному файлу конфигурации (по умолчанию: `openapi.config.json`)
130
+ - `--type` / `-t` - Тип шаблона: `OPTION` (одиночный) или `MULTIOPTION` (множественный) (по умолчанию: `OPTION`)
131
+
132
+ ### Файл конфигурации
133
+
134
+ Вместо передачи всех опций через CLI, вы можете использовать файл конфигурации. Создайте `openapi.config.json` в корне вашего проекта:
135
+
136
+ **Формат с одним набором опций:**
137
+ ```json
138
+ {
139
+ "input": "./spec.json",
140
+ "output": "./dist",
141
+ "client": "fetch",
142
+ "useOptions": false,
143
+ "useUnionTypes": false,
144
+ "excludeCoreServiceFiles": false,
145
+ "includeSchemasFiles": false,
146
+ "interfacePrefix": "I",
147
+ "enumPrefix": "E",
148
+ "typePrefix": "T",
149
+ "useCancelableRequest": false,
150
+ "sortByRequired": false,
151
+ "useSeparatedIndexes": false,
152
+ "request": "./custom-request.ts"
153
+ }
154
+ ```
155
+
156
+ **Формат с несколькими наборами опций (с общим блоком):**
157
+ ```json
158
+ {
159
+ "output": "./dist",
160
+ "client": "fetch",
161
+ "excludeCoreServiceFiles": true,
162
+ "includeSchemasFiles": true,
163
+ "items": [
164
+ {
165
+ "input": "./first.yml"
166
+ },
167
+ {
168
+ "input": "./second.yml",
169
+ "output": "./dist-v2"
170
+ }
171
+ ]
172
+ }
173
+ ```
174
+
175
+ **Формат массива (несколько конфигураций):**
176
+ ```json
177
+ [
178
+ {
179
+ "input": "./first.yml",
180
+ "output": "./dist",
181
+ "client": "xhr"
182
+ },
183
+ {
184
+ "input": "./second.yml",
185
+ "output": "./dist",
186
+ "client": "fetch"
187
+ }
188
+ ]
189
+ ```
190
+
191
+ | Имя | Тип | По умолчанию | Описание |
192
+ |-----|-----|--------------|----------|
193
+ | `input` | string | - | Путь/URL спецификации OpenAPI (обязательно для items) |
194
+ | `output` | string | - | Выходная директория (обязательно) |
195
+ | `outputCore` | string | `{output}` | Выходная директория для core файлов |
196
+ | `outputServices` | string | `{output}` | Выходная директория для сервисов |
197
+ | `outputModels` | string | `{output}` | Выходная директория для моделей |
198
+ | `outputSchemas` | string | `{output}` | Выходная директория для схем |
199
+ | `client` | string | `fetch` | HTTP клиент: `fetch`, `xhr`, `node`, или `axios` |
200
+ | `useOptions` | boolean | `false` | Использовать опции вместо аргументов |
201
+ | `useUnionTypes` | boolean | `false` | Использовать union типы вместо enums |
202
+ | `excludeCoreServiceFiles` | boolean | `false` | Исключить генерацию core и сервисных файлов |
203
+ | `includeSchemasFiles` | boolean | `false` | Включить генерацию схем валидации моделей |
204
+ | `request` | string | - | Путь к пользовательскому файлу запросов |
205
+ | `interfacePrefix` | string | `I` | Префикс для интерфейсов моделей |
206
+ | `enumPrefix` | string | `E` | Префикс для enum моделей |
207
+ | `typePrefix` | string | `T` | Префикс для type моделей |
208
+ | `useCancelableRequest` | boolean | `false` | Использовать отменяемый promise как тип возврата |
209
+ | `sortByRequired` | boolean | `false` | Расширенная стратегия сортировки для аргументов |
210
+ | `useSeparatedIndexes` | boolean | `false` | Использовать отдельные index файлы |
211
+ | `items` | array | - | Массив конфигураций (для формата multi-options) |
212
+
213
+ **Примечание:** Вы можете использовать команду `init-openapi-config` для генерации шаблона файла конфигурации.
214
+
215
+ ## Примеры
216
+
217
+ ### Использование CLI команд
218
+
219
+ **Базовая генерация:**
220
+ ```bash
221
+ openapi generate --input ./spec.json --output ./dist
222
+ ```
223
+
224
+ **С файлом конфигурации:**
225
+ ```bash
226
+ # Сначала создайте файл конфигурации
227
+ openapi init-openapi-config
228
+
229
+ # Затем выполните генерацию
230
+ openapi generate
231
+ ```
232
+
233
+ **Проверка конфигурации:**
234
+ ```bash
235
+ openapi check-openapi-config
236
+ ```
237
+
238
+ ### Использование NPX
239
+
240
+ ```bash
241
+ npx ts-openapi-codegen generate --input ./spec.json --output ./dist
242
+ ```
243
+
244
+ ### Использование скриптов в package.json
245
+
246
+ **package.json**
247
+ ```json
248
+ {
249
+ "scripts": {
250
+ "generate": "openapi generate --input ./spec.json --output ./dist",
251
+ "generate:config": "openapi generate",
252
+ "check-config": "openapi check-openapi-config",
253
+ "init-config": "openapi init-openapi-config"
254
+ }
255
+ }
256
+ ```
257
+
258
+ ### Node.js API
259
+
260
+ ```javascript
261
+ const OpenAPI = require('ts-openapi-codegen');
262
+
263
+ OpenAPI.generate({
264
+ input: './spec.json',
265
+ output: './dist'
266
+ });
267
+
268
+ // Или передав содержимое спецификации напрямую 🚀
269
+ OpenAPI.generate({
270
+ input: require('./spec.json'),
271
+ output: './dist'
272
+ });
273
+ ```
274
+
275
+
276
+ ## Возможности
277
+
278
+ ### HTTP Клиенты
279
+
280
+ Генератор поддерживает несколько HTTP клиентов:
281
+ - **fetch** (по умолчанию) - Browser Fetch API
282
+ - **xhr** - XMLHttpRequest
283
+ - **node** - Node.js совместимый клиент, использующий `node-fetch`
284
+ - **axios** - Axios HTTP клиент
285
+
286
+ Выберите клиент используя опцию `--httpClient` или свойство `client` в файле конфигурации.
287
+
288
+ ### Стиль аргументов vs. Стиль объектов `--useOptions`
289
+ В JavaScript или TypeScript нет [именованных параметров](https://en.wikipedia.org/wiki/Named_parameter), поэтому
290
+ мы предлагаем флаг `--useOptions` для генерации кода в двух разных стилях.
291
+
292
+ **Стиль аргументов:**
293
+ ```typescript
294
+ function createUser(name: string, password: string, type?: string, address?: string) {
295
+ // ...
296
+ }
297
+
298
+ // Использование
299
+ createUser('Jack', '123456', undefined, 'NY US');
300
+ ```
301
+
302
+ **Стиль объектов:**
303
+ ```typescript
304
+ function createUser({ name, password, type, address }: {
305
+ name: string,
306
+ password: string,
307
+ type?: string
308
+ address?: string
309
+ }) {
310
+ // ...
311
+ }
312
+
313
+ // Использование
314
+ createUser({
315
+ name: 'Jack',
316
+ password: '123456',
317
+ address: 'NY US'
318
+ });
319
+ ```
320
+
321
+ ### Enums vs. Union Types `--useUnionTypes`
322
+ Спецификация OpenAPI позволяет определять [enums](https://swagger.io/docs/specification/data-models/enums/) внутри
323
+ модели данных. По умолчанию мы конвертируем эти определения enums в [TypeScript enums](https://www.typescriptlang.org/docs/handbook/enums.html).
324
+ Однако эти enums объединяются внутри namespace модели, что не поддерживается Babel, [см. документацию](https://babeljs.io/docs/en/babel-plugin-transform-typescript#impartial-namespace-support).
325
+ Поскольку мы также хотим поддерживать проекты, использующие Babel [@babel/plugin-transform-typescript](https://babeljs.io/docs/en/babel-plugin-transform-typescript),
326
+ мы предлагаем флаг `--useUnionTypes` для генерации [union типов](https://www.typescriptlang.org/docs/handbook/unions-and-intersections.html#union-types)
327
+ вместо традиционных enums. Разницу можно увидеть ниже:
328
+
329
+ **Enums:**
330
+ ```typescript
331
+ // Модель
332
+ export interface Order {
333
+ id?: number;
334
+ quantity?: number;
335
+ status?: Order.status;
336
+ }
337
+
338
+ export namespace Order {
339
+ export enum status {
340
+ PLACED = 'placed',
341
+ APPROVED = 'approved',
342
+ DELIVERED = 'delivered',
343
+ }
344
+ }
345
+
346
+ // Использование
347
+ const order: Order = {
348
+ id: 1,
349
+ quantity: 40,
350
+ status: Order.status.PLACED
351
+ }
352
+ ```
353
+
354
+ **Union Types:**
355
+ ```typescript
356
+ // Модель
357
+ export interface Order {
358
+ id?: number;
359
+ quantity?: number;
360
+ status?: 'placed' | 'approved' | 'delivered';
361
+ }
362
+
363
+ // Использование
364
+ const order: Order = {
365
+ id: 1,
366
+ quantity: 40,
367
+ status: 'placed'
368
+ }
369
+ ```
370
+
371
+ ### Runtime схемы `--includeSchemasFiles`
372
+ По умолчанию генератор OpenAPI экспортирует только интерфейсы для ваших моделей. Эти интерфейсы помогут вам во время
373
+ разработки, но не будут доступны в JavaScript во время выполнения. Однако Swagger позволяет определять свойства,
374
+ которые могут быть полезны во время выполнения, например: `maxLength` строки или `pattern` для сопоставления и т.д. Допустим,
375
+ у нас есть следующая модель:
376
+
377
+ ```json
378
+ {
379
+ "MyModel": {
380
+ "required": [
381
+ "key",
382
+ "name"
383
+ ],
384
+ "type": "object",
385
+ "properties": {
386
+ "key": {
387
+ "maxLength": 64,
388
+ "pattern": "^[a-zA-Z0-9_]*$",
389
+ "type": "string"
390
+ },
391
+ "name": {
392
+ "maxLength": 255,
393
+ "type": "string"
394
+ },
395
+ "enabled": {
396
+ "type": "boolean",
397
+ "readOnly": true
398
+ },
399
+ "modified": {
400
+ "type": "string",
401
+ "format": "date-time",
402
+ "readOnly": true
403
+ }
404
+ }
405
+ }
406
+ }
407
+ ```
408
+
409
+ Это сгенерирует следующий интерфейс:
410
+
411
+ ```typescript
412
+ export interface MyModel {
413
+ key: string;
414
+ name: string;
415
+ readonly enabled?: boolean;
416
+ readonly modified?: string;
417
+ }
418
+ ```
419
+
420
+ Интерфейс не содержит таких свойств, как `maxLength` или `pattern`. Однако они могут быть полезны,
421
+ если мы хотим создать форму, где пользователь может создать такую модель. В этой форме вы будете итерироваться
422
+ по свойствам для рендеринга полей формы на основе их типа и валидации ввода на основе свойства `maxLength`
423
+ или `pattern`. Для этого нам нужно где-то хранить эту информацию... Для этого мы можем использовать
424
+ флаг `--includeSchemasFiles` для генерации runtime модели рядом с обычным интерфейсом:
425
+
426
+ ```typescript
427
+ export const $MyModel = {
428
+ properties: {
429
+ key: {
430
+ type: 'string',
431
+ isRequired: true,
432
+ maxLength: 64,
433
+ pattern: '^[a-zA-Z0-9_]*$',
434
+ },
435
+ name: {
436
+ type: 'string',
437
+ isRequired: true,
438
+ maxLength: 255,
439
+ },
440
+ enabled: {
441
+ type: 'boolean',
442
+ isReadOnly: true,
443
+ },
444
+ modified: {
445
+ type: 'string',
446
+ isReadOnly: true,
447
+ format: 'date-time',
448
+ },
449
+ },
450
+ };
451
+ ```
452
+
453
+ Эти runtime объекты имеют префикс `$` и раскрывают все интересные атрибуты модели
454
+ и её свойств. Теперь мы можем использовать этот объект для генерации формы:
455
+
456
+ ```typescript jsx
457
+ import { $MyModel } from './generated';
458
+
459
+ // Псевдокод для итерации по свойствам и возврата поля формы
460
+ // поле формы может быть абстрактным компонентом, который рендерит правильный
461
+ // тип поля и правила валидации на основе заданного ввода.
462
+ const formFields = Object.entries($MyModel.properties).map(([key, value]) => (
463
+ <FormField
464
+ name={key}
465
+ type={value.type}
466
+ format={value.format}
467
+ maxLength={value.maxLength}
468
+ pattern={value.pattern}
469
+ isReadOnly={value.isReadOnly}
470
+ />
471
+ ));
472
+
473
+ const MyForm = () => (
474
+ <form>
475
+ {formFields}
476
+ </form>
477
+ );
478
+
479
+ ```
480
+
481
+ ### Отменяемый promise `--useCancelableRequest`
482
+ По умолчанию генератор OpenAPI генерирует сервисы для доступа к API, которые используют неотменяемые запросы. Поэтому мы добавили возможность переключить генератор на генерацию отменяемых API запросов. Для этого используйте флаг `--useCancelableRequest`.
483
+ Пример отменяемого запроса будет выглядеть так:
484
+
485
+ ```typescript
486
+ export function request<T>(config: TOpenAPIConfig, options: ApiRequestOptions): CancelablePromise<T> {
487
+ return new CancelablePromise(async(resolve, reject, onCancel) => {
488
+ const url = `${config.BASE}${options.path}`.replace('{api-version}', config.VERSION);
489
+ try {
490
+ if (!onCancel.isCancelled) {
491
+ const response = await sendRequest(options, url, config, onCancel);
492
+ const responseBody = await getResponseBody(response);
493
+ const responseHeader = getResponseHeader(response, options.responseHeader);
494
+ const result: ApiResult = {
495
+ url,
496
+ ok: response.ok,
497
+ status: response.status,
498
+ statusText: response.statusText,
499
+ body: responseHeader || responseBody,
500
+ };
501
+
502
+ catchErrors(options, result);
503
+ resolve(result.body);
504
+ }
505
+ } catch (e) {
506
+ reject(e);
507
+ }
508
+ });
509
+ }
510
+ ```
511
+
512
+ ### Стратегия сортировки аргументов функций `--sortByRequired`
513
+ По умолчанию генератор OpenAPI сортирует параметры сервисных функций согласно упрощенной схеме. Если вам нужна более строгая опция сортировки, используйте флаг `--sortByRequired`. Упрощенная опция сортировки похожа на ту, что использовалась в версии 0.2.3 генератора OpenAPI. Этот флаг позволяет обновиться до новой версии генератора, если вы "застряли" на версии 0.2.3.
514
+
515
+ ### Отдельные index файлы `--useSeparatedIndexes`
516
+ По умолчанию генератор создает один index файл, который экспортирует весь сгенерированный код. С флагом `--useSeparatedIndexes` вы можете генерировать отдельные index файлы для core, models, schemas и services, что может помочь с лучшей организацией кода и tree-shaking.
517
+
518
+ ### Enum с пользовательскими именами и описаниями
519
+ Вы можете использовать `x-enum-varnames` и `x-enum-descriptions` в вашей спецификации для генерации enum с пользовательскими именами и описаниями.
520
+ Это еще не в официальной [спецификации](https://github.com/OAI/OpenAPI-Specification/issues/681). Но это поддерживаемое расширение,
521
+ которое может помочь разработчикам использовать более осмысленные перечислители.
522
+ ```json
523
+ {
524
+ "EnumWithStrings": {
525
+ "description": "This is a simple enum with strings",
526
+ "enum": [
527
+ 0,
528
+ 1,
529
+ 2
530
+ ],
531
+ "x-enum-varnames": [
532
+ "Success",
533
+ "Warning",
534
+ "Error"
535
+ ],
536
+ "x-enum-descriptions": [
537
+ "Used when the status of something is successful",
538
+ "Used when the status of something has a warning",
539
+ "Used when the status of something has an error"
540
+ ]
541
+ }
542
+ }
543
+ ```
544
+
545
+ Сгенерированный код:
546
+ ```typescript
547
+ enum EnumWithStrings {
548
+ /*
549
+ * Used when the status of something is successful
550
+ */
551
+ Success = 0,
552
+ /*
553
+ * Used when the status of something has a warning
554
+ */
555
+ Waring = 1,
556
+ /*
557
+ * Used when the status of something has an error
558
+ */
559
+ Error = 2,
560
+ }
561
+ ```
562
+
563
+
564
+ ### Nullable в OpenAPI v2
565
+ В спецификации OpenAPI v3 вы можете создавать свойства, которые могут быть NULL, указав `nullable: true` в вашей схеме.
566
+ Однако спецификация v2 не позволяет этого делать. Вы можете использовать неофициальный `x-nullable` в вашей спецификации
567
+ для генерации nullable свойств в OpenApi v2.
568
+
569
+ ```json
570
+ {
571
+ "ModelWithNullableString": {
572
+ "required": ["requiredProp"],
573
+ "description": "This is a model with one string property",
574
+ "type": "object",
575
+ "properties": {
576
+ "prop": {
577
+ "description": "This is a simple string property",
578
+ "type": "string",
579
+ "x-nullable": true
580
+ },
581
+ "requiredProp": {
582
+ "description": "This is a simple string property",
583
+ "type": "string",
584
+ "x-nullable": true
585
+ }
586
+ }
587
+ }
588
+ }
589
+ ```
590
+
591
+ Сгенерированный код:
592
+ ```typescript
593
+ interface ModelWithNullableString {
594
+ prop?: string | null,
595
+ requiredProp: string | null,
596
+ }
597
+ ```
598
+
599
+
600
+ ### Авторизация
601
+ Генератор OpenAPI поддерживает авторизацию Bearer Token. Для включения отправки
602
+ токенов в каждом запросе вы можете установить токен используя глобальную конфигурацию OpenAPI:
603
+
604
+ ```typescript
605
+ import { OpenAPI } from './generated';
606
+
607
+ OpenAPI.TOKEN = 'some-bearer-token';
608
+ ```
609
+
610
+ Альтернативно, мы также поддерживаем асинхронный метод, который предоставляет токен для каждого запроса.
611
+ Вы можете просто назначить этот метод тому же свойству `TOKEN` в глобальном объекте OpenAPI.
612
+
613
+ ```typescript
614
+ import { OpenAPI } from './generated';
615
+
616
+ const getToken = async () => {
617
+ // Какой-то код, который запрашивает токен...
618
+ return 'SOME_TOKEN';
619
+ }
620
+
621
+ OpenAPI.TOKEN = getToken;
622
+ ```
623
+
624
+ ### Ссылки
625
+
626
+ Локальные ссылки на определения схем (начинающиеся с `#/definitions/schemas/`)
627
+ будут преобразованы в ссылки на типы к эквивалентному сгенерированному типу верхнего уровня.
628
+
629
+ Генератор OpenAPI также поддерживает внешние ссылки, что позволяет разбить
630
+ ваш openapi.yml на несколько подфайлов или включить сторонние схемы
631
+ как часть ваших типов, чтобы обеспечить возможность генерации TypeScript для всего.
632
+
633
+ Внешние ссылки могут быть:
634
+ * *относительными ссылками* - ссылки на другие файлы в том же расположении, например
635
+ `{ $ref: 'schemas/customer.yml' }`
636
+ * *удаленными ссылками* - полностью квалифицированные ссылки на другое удаленное расположение
637
+ например `{ $ref: 'https://myexampledomain.com/schemas/customer_schema.yml' }`
638
+
639
+ Для удаленных ссылок поддерживаются как файлы (когда файл находится в текущей файловой системе),
640
+ так и http(s) URL.
641
+
642
+ Внешние ссылки также могут содержать внутренние пути во внешней схеме (например,
643
+ `schemas/collection.yml#/definitions/schemas/Customer`) и обратные ссылки на
644
+ базовый файл openapi или между файлами (так что вы можете ссылаться на другую
645
+ схему в главном файле как тип свойства объекта или массива, например).
646
+
647
+ При запуске файл OpenAPI или Swagger с внешними ссылками будет "собран",
648
+ так что все внешние ссылки и обратные ссылки будут разрешены (но локальные
649
+ ссылки сохранены).
650
+
651
+ FAQ
652
+ ===
653
+
654
+ ### Поддержка Babel
655
+ Если вы используете enums внутри ваших моделей / определений, то эти enums по умолчанию находятся внутри namespace с тем же именем,
656
+ что и ваша модель. Это называется объединением объявлений. Однако [@babel/plugin-transform-typescript](https://babeljs.io/docs/en/babel-plugin-transform-typescript)
657
+ не поддерживает эти namespace, поэтому если вы используете babel в вашем проекте, пожалуйста используйте флаг `--useUnionTypes`
658
+ для генерации union типов вместо традиционных enums. Больше информации можно найти здесь: [Enums vs. Union Types](#enums-vs-union-types---useuniontypes).
659
+
660
+ **Примечание:** Если вы используете Babel 7 и Typescript 3.8 (или выше), то вы должны включить `onlyRemoveTypeImports` для
661
+ игнорирования любых импортов 'type only', см. https://babeljs.io/docs/en/babel-preset-typescript#onlyremovetypeimports для большей информации
662
+
663
+ ```javascript
664
+ module.exports = {
665
+ presets: [
666
+ ['@babel/preset-typescript', {
667
+ onlyRemoveTypeImports: true,
668
+ }],
669
+ ],
670
+ };
671
+ ```
672
+
673
+
674
+ ### Поддержка Node.js
675
+ По умолчанию эта библиотека будет генерировать клиент, совместимый с (браузерным) [fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API),
676
+ однако этот клиент не будет работать в среде Node.js. Если вы хотите сгенерировать клиент, совместимый с Node.js, то
677
+ вы можете указать `--httpClient node` в вызове openapi:
678
+
679
+ `openapi generate --input ./spec.json --output ./dist --httpClient node`
680
+
681
+ Это сгенерирует клиент, который использует [`node-fetch`](https://www.npmjs.com/package/node-fetch) внутри. Однако,
682
+ для компиляции и запуска этого клиента вам нужно установить зависимости `node-fetch`:
683
+
684
+ ```
685
+ npm install @types/node-fetch --save-dev
686
+ npm install node-fetch --save-dev
687
+ npm install form-data --save-dev
688
+ ```
689
+
690
+ Для компиляции проекта и разрешения импортов вам нужно включить `allowSyntheticDefaultImports`
691
+ в вашем файле `tsconfig.json`.
692
+
693
+ ```json
694
+ {
695
+ "allowSyntheticDefaultImports": true
696
+ }
697
+ ```
698
+
699
+ [npm-url]: https://www.npmjs.com/package/ts-openapi-codegen
700
+ [npm-image]: https://img.shields.io/npm/v/ts-openapi-codegen.svg
701
+ [license-url]: LICENSE
702
+ [license-image]: http://img.shields.io/npm/l/ts-openapi-codegen.svg
703
+ [downloads-url]: http://npm-stat.com/charts.html?package=ts-openapi-codegen
704
+ [downloads-image]: http://img.shields.io/npm/dm/ts-openapi-codegen.svg
705
+ [travis-url]: https://app.travis-ci.com/github/ozonophore/openapi-codegen
706
+ [travis-image]: https://app.travis-ci.com/github/ozonophore/openapi-codegen.svg?branch=master
707
+ [coverage-url]: https://codecov.io/gh/ozonophore/openapi-codegen
708
+ [coverage-image]: https://codecov.io/gh/ozonophore/openapi-codegen/branch/master/graph/badge.svg?token=RBPZ01BW0Y
709
+ [typescript-url]: https://www.typescriptlang.org
710
+ [typescript-image]: https://badgen.net/badge/icon/typescript?icon=typescript&label
711
+ [CI-url]: https://github.com/ozonophore/openapi-codegen/actions/workflows/CI.yml
712
+ [CI-image]: https://github.com/ozonophore/openapi-codegen/actions/workflows/CI.yml/badge.svg?branch=master
713
+ [issues-url]: https://github.com/ozonophore/openapi-codegen/issues
714
+ [issues-image]: https://img.shields.io/github/issues/ozonophore/openapi-codegen.svg
715
+ [issues-pr-url]: https://github.com/ozonophore/openapi-codegen/pulls
716
+ [issues-pr-image]: https://img.shields.io/github/issues-pr/ozonophore/openapi-codegen.svg
717
+ [issues-pr-closed-url]: https://github.com/ozonophore/openapi-codegen/pulls?q=is%3Apr+is%3Aclosed
718
+ [issues-pr-closed-image]: https://img.shields.io/github/issues-pr-closed/ozonophore/openapi-codegen.svg
719
+ [stars-url]: https://github.com/ozonophore/openapi-codegen/stargazers
720
+ [stars-image]: https://img.shields.io/github/stars/ozonophore/openapi-codegen.svg
721
+ [librariesio-image]: https://img.shields.io/librariesio/github/ozonophore/openapi-codegen
722
+ [lines-image]: https://img.shields.io/tokei/lines/github/ozonophore/openapi-codegen
723
+
724
+
725
+