ts-openapi-codegen 2.1.0-beta.6 → 2.1.0-beta.7

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 (212) hide show
  1. package/dist/cli/analyzeDiff/__tests__/analyzeDiff.cli.test.js +9 -0
  2. package/dist/cli/analyzeDiff/__tests__/analyzeDiffRenameAndInvalidRegex.test.js +9 -0
  3. package/dist/cli/analyzeDiff/__tests__/analyzeDiffTypeCoercion.test.js +9 -0
  4. package/dist/cli/analyzeUsage/analyzeUsage.d.ts +4 -0
  5. package/dist/cli/analyzeUsage/analyzeUsage.d.ts.map +1 -0
  6. package/dist/cli/analyzeUsage/analyzeUsage.js +62 -0
  7. package/dist/cli/analyzeUsage/core/Analyzer.d.ts +9 -0
  8. package/dist/cli/analyzeUsage/core/Analyzer.d.ts.map +1 -0
  9. package/dist/cli/analyzeUsage/core/Analyzer.js +29 -0
  10. package/dist/cli/analyzeUsage/core/ProjectContext.d.ts +10 -0
  11. package/dist/cli/analyzeUsage/core/ProjectContext.d.ts.map +1 -0
  12. package/dist/cli/analyzeUsage/core/ProjectContext.js +63 -0
  13. package/dist/cli/analyzeUsage/core/Scanner.d.ts +15 -0
  14. package/dist/cli/analyzeUsage/core/Scanner.d.ts.map +1 -0
  15. package/dist/cli/analyzeUsage/core/Scanner.js +115 -0
  16. package/dist/cli/analyzeUsage/rules/ClientRule.d.ts +6 -0
  17. package/dist/cli/analyzeUsage/rules/ClientRule.d.ts.map +1 -0
  18. package/dist/cli/analyzeUsage/rules/ClientRule.js +78 -0
  19. package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts +7 -0
  20. package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts.map +1 -0
  21. package/dist/cli/analyzeUsage/rules/CoverageRule.js +63 -0
  22. package/dist/cli/analyzeUsage/rules/DiagnosticsRule.d.ts +6 -0
  23. package/dist/cli/analyzeUsage/rules/DiagnosticsRule.d.ts.map +1 -0
  24. package/dist/cli/analyzeUsage/rules/DiagnosticsRule.js +60 -0
  25. package/dist/cli/analyzeUsage/rules/ImportRule.d.ts +6 -0
  26. package/dist/cli/analyzeUsage/rules/ImportRule.d.ts.map +1 -0
  27. package/dist/cli/analyzeUsage/rules/ImportRule.js +52 -0
  28. package/dist/cli/analyzeUsage/rules/ModelRule.d.ts +6 -0
  29. package/dist/cli/analyzeUsage/rules/ModelRule.d.ts.map +1 -0
  30. package/dist/cli/analyzeUsage/rules/ModelRule.js +38 -0
  31. package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts +6 -0
  32. package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts.map +1 -0
  33. package/dist/cli/analyzeUsage/rules/SchemaRule.js +48 -0
  34. package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts +7 -0
  35. package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts.map +1 -0
  36. package/dist/cli/analyzeUsage/rules/ServiceRule.js +92 -0
  37. package/dist/cli/analyzeUsage/types.d.ts +52 -0
  38. package/dist/cli/analyzeUsage/types.d.ts.map +1 -0
  39. package/dist/cli/analyzeUsage/types.js +2 -0
  40. package/dist/cli/analyzeUsage/utils/fuzzy.d.ts +5 -0
  41. package/dist/cli/analyzeUsage/utils/fuzzy.d.ts.map +1 -0
  42. package/dist/cli/analyzeUsage/utils/fuzzy.js +38 -0
  43. package/dist/cli/analyzeUsage/utils/report.d.ts +16 -0
  44. package/dist/cli/analyzeUsage/utils/report.d.ts.map +1 -0
  45. package/dist/cli/analyzeUsage/utils/report.js +85 -0
  46. package/dist/cli/checkAndUpdateConfig/__tests__/checkConfig.test.js +10 -20
  47. package/dist/cli/checkAndUpdateConfig/__tests__/updateConfig.test.js +10 -20
  48. package/dist/cli/checkAndUpdateConfig/checkConfig.d.ts +2 -1
  49. package/dist/cli/checkAndUpdateConfig/checkConfig.d.ts.map +1 -1
  50. package/dist/cli/checkAndUpdateConfig/checkConfig.js +8 -4
  51. package/dist/cli/checkAndUpdateConfig/updateConfig.d.ts +2 -1
  52. package/dist/cli/checkAndUpdateConfig/updateConfig.d.ts.map +1 -1
  53. package/dist/cli/checkAndUpdateConfig/updateConfig.js +6 -3
  54. package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.d.ts.map +1 -1
  55. package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.js +19 -1
  56. package/dist/cli/generateOpenApiClient/__tests__/generateOpenApiClient.strict.test.js +18 -9
  57. package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts +2 -5
  58. package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts.map +1 -1
  59. package/dist/cli/generateOpenApiClient/generateOpenApiClient.js +12 -16
  60. package/dist/cli/index.js +41 -9
  61. package/dist/cli/initOpenApiConfig/__tests__/init.test.js +4 -14
  62. package/dist/cli/initOpenApiConfig/__tests__/initConfig.test.js +3 -1
  63. package/dist/cli/initOpenApiConfig/init.d.ts +2 -1
  64. package/dist/cli/initOpenApiConfig/init.d.ts.map +1 -1
  65. package/dist/cli/initOpenApiConfig/init.js +3 -3
  66. package/dist/cli/initOpenApiConfig/initCustomRequest.d.ts +0 -1
  67. package/dist/cli/initOpenApiConfig/initCustomRequest.d.ts.map +1 -1
  68. package/dist/cli/initOpenApiConfig/initCustomRequest.js +1 -2
  69. package/dist/cli/initOpenApiConfig/utils/__tests__/validateSpecFiles.test.js +9 -0
  70. package/dist/cli/initOpenApiConfig/utils/buildConfig.d.ts.map +1 -1
  71. package/dist/cli/initOpenApiConfig/utils/buildConfig.js +0 -4
  72. package/dist/cli/previewChanges/previewChanges.d.ts +2 -1
  73. package/dist/cli/previewChanges/previewChanges.d.ts.map +1 -1
  74. package/dist/cli/previewChanges/previewChanges.js +6 -6
  75. package/dist/cli/schemas/analyzeUsage.d.ts +13 -0
  76. package/dist/cli/schemas/analyzeUsage.d.ts.map +1 -0
  77. package/dist/cli/schemas/analyzeUsage.js +38 -0
  78. package/dist/cli/schemas/generate.d.ts +7 -0
  79. package/dist/cli/schemas/generate.d.ts.map +1 -1
  80. package/dist/cli/schemas/generate.js +4 -0
  81. package/dist/cli/schemas/index.d.ts +2 -2
  82. package/dist/cli/schemas/index.d.ts.map +1 -1
  83. package/dist/cli/schemas/index.js +1 -1
  84. package/dist/cli/schemas/init.d.ts +0 -1
  85. package/dist/cli/schemas/init.d.ts.map +1 -1
  86. package/dist/cli/schemas/init.js +0 -1
  87. package/dist/cli/types.d.ts +6 -0
  88. package/dist/cli/types.d.ts.map +1 -0
  89. package/dist/cli/types.js +2 -0
  90. package/dist/common/Consts.d.ts +1 -0
  91. package/dist/common/Consts.d.ts.map +1 -1
  92. package/dist/common/Consts.js +6 -2
  93. package/dist/common/Logger.js +2 -2
  94. package/dist/common/LoggerMessages.d.ts +59 -12
  95. package/dist/common/LoggerMessages.d.ts.map +1 -1
  96. package/dist/common/LoggerMessages.js +62 -15
  97. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.d.ts +0 -1
  98. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.d.ts.map +1 -1
  99. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.d.ts +0 -2
  100. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.d.ts.map +1 -1
  101. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.d.ts +0 -2
  102. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.d.ts.map +1 -1
  103. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV3.d.ts +0 -2
  104. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV3.d.ts.map +1 -1
  105. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV4.d.ts +0 -2
  106. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV4.d.ts.map +1 -1
  107. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts +7 -2
  108. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts.map +1 -1
  109. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.js +5 -1
  110. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts +14 -11
  111. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts.map +1 -1
  112. package/dist/common/VersionedSchema/CommonSchemas.d.ts +0 -2
  113. package/dist/common/VersionedSchema/CommonSchemas.d.ts.map +1 -1
  114. package/dist/common/VersionedSchema/CommonSchemas.js +0 -1
  115. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsMigrationPlan.d.ts.map +1 -1
  116. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsMigrationPlan.js +0 -1
  117. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.d.ts +0 -1
  118. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.d.ts.map +1 -1
  119. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV4.d.ts +0 -1
  120. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV4.d.ts.map +1 -1
  121. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV5.d.ts +0 -1
  122. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV5.d.ts.map +1 -1
  123. package/dist/common/VersionedSchema/OptionsVersioned/OptionsMigrationPlans.d.ts.map +1 -1
  124. package/dist/common/VersionedSchema/OptionsVersioned/OptionsMigrationPlans.js +0 -1
  125. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV3.d.ts +0 -1
  126. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV3.d.ts.map +1 -1
  127. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV4.d.ts +0 -1
  128. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV4.d.ts.map +1 -1
  129. package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.d.ts.map +1 -1
  130. package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.js +8 -9
  131. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.d.ts.map +1 -1
  132. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.js +1 -1
  133. package/dist/common/utils/__tests__/convertArrayToObject.test.js +0 -3
  134. package/dist/common/utils/convertArrayToObject.d.ts.map +1 -1
  135. package/dist/common/utils/convertArrayToObject.js +0 -2
  136. package/dist/core/OpenApiClient.d.ts +12 -1
  137. package/dist/core/OpenApiClient.d.ts.map +1 -1
  138. package/dist/core/OpenApiClient.js +193 -16
  139. package/dist/core/WriteClient.d.ts +12 -3
  140. package/dist/core/WriteClient.d.ts.map +1 -1
  141. package/dist/core/WriteClient.js +25 -5
  142. package/dist/core/plugins/getBuiltinPlugins.d.ts.map +1 -1
  143. package/dist/core/plugins/loadGeneratorPlugins.d.ts.map +1 -1
  144. package/dist/core/plugins/loadGeneratorPlugins.js +1 -1
  145. package/dist/core/types/shared/Client.model.d.ts +1 -1
  146. package/dist/core/types/shared/Client.model.d.ts.map +1 -1
  147. package/dist/core/types/shared/Model.model.d.ts +1 -1
  148. package/dist/core/types/shared/Model.model.d.ts.map +1 -1
  149. package/dist/core/utils/__tests__/prepareDtoModels.test.js +95 -0
  150. package/dist/core/utils/__tests__/writeClientServices.test.js +0 -1
  151. package/dist/core/utils/loadDiffReport.d.ts.map +1 -1
  152. package/dist/core/utils/loadDiffReport.js +5 -4
  153. package/dist/core/utils/precompileTemplates.js +3 -2
  154. package/dist/core/utils/prepareDtoModels.d.ts.map +1 -1
  155. package/dist/core/utils/prepareDtoModels.js +1 -7
  156. package/dist/core/utils/writeClientCore.d.ts +0 -2
  157. package/dist/core/utils/writeClientCore.d.ts.map +1 -1
  158. package/dist/core/utils/writeClientCore.js +19 -18
  159. package/dist/core/utils/writeClientCoreIndex.d.ts.map +1 -1
  160. package/dist/core/utils/writeClientCoreIndex.js +14 -4
  161. package/dist/core/utils/writeClientExecutor.d.ts.map +1 -1
  162. package/dist/core/utils/writeClientExecutor.js +4 -4
  163. package/dist/core/utils/writeClientFullIndex.js +4 -4
  164. package/dist/core/utils/writeClientModels.d.ts.map +1 -1
  165. package/dist/core/utils/writeClientModels.js +10 -10
  166. package/dist/core/utils/writeClientModelsIndex.d.ts +1 -1
  167. package/dist/core/utils/writeClientModelsIndex.d.ts.map +1 -1
  168. package/dist/core/utils/writeClientModelsIndex.js +14 -4
  169. package/dist/core/utils/writeClientSchemas.d.ts.map +1 -1
  170. package/dist/core/utils/writeClientSchemas.js +7 -7
  171. package/dist/core/utils/writeClientSchemasIndex.d.ts.map +1 -1
  172. package/dist/core/utils/writeClientSchemasIndex.js +14 -4
  173. package/dist/core/utils/writeClientServices.d.ts +0 -2
  174. package/dist/core/utils/writeClientServices.d.ts.map +1 -1
  175. package/dist/core/utils/writeClientServices.js +7 -8
  176. package/dist/core/utils/writeClientServicesIndex.d.ts.map +1 -1
  177. package/dist/core/utils/writeClientServicesIndex.js +14 -4
  178. package/dist/core/utils/writeClientSimpleIndex.js +4 -4
  179. package/dist/templatesCompiled/cli/customRequest.d.ts +2 -6
  180. package/dist/templatesCompiled/cli/customRequest.d.ts.map +1 -1
  181. package/dist/templatesCompiled/cli/customRequest.js +8 -28
  182. package/dist/templatesCompiled/cli/customRequestExecutor.d.ts +0 -3
  183. package/dist/templatesCompiled/cli/customRequestExecutor.d.ts.map +1 -1
  184. package/dist/templatesCompiled/cli/customRequestExecutor.js +5 -28
  185. package/dist/templatesCompiled/client/core/axios/request.d.ts +2 -6
  186. package/dist/templatesCompiled/client/core/axios/request.d.ts.map +1 -1
  187. package/dist/templatesCompiled/client/core/axios/request.js +2 -22
  188. package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.d.ts +2 -5
  189. package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.d.ts.map +1 -1
  190. package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.js +12 -42
  191. package/dist/templatesCompiled/client/core/executor/requestExecutor.d.ts +0 -2
  192. package/dist/templatesCompiled/client/core/executor/requestExecutor.d.ts.map +1 -1
  193. package/dist/templatesCompiled/client/core/executor/requestExecutor.js +3 -11
  194. package/dist/templatesCompiled/client/core/fetch/request.d.ts +2 -6
  195. package/dist/templatesCompiled/client/core/fetch/request.d.ts.map +1 -1
  196. package/dist/templatesCompiled/client/core/fetch/request.js +2 -22
  197. package/dist/templatesCompiled/client/core/interceptors/withInterceptors.d.ts +0 -2
  198. package/dist/templatesCompiled/client/core/interceptors/withInterceptors.d.ts.map +1 -1
  199. package/dist/templatesCompiled/client/core/interceptors/withInterceptors.js +3 -11
  200. package/dist/templatesCompiled/client/core/node/request.d.ts +2 -6
  201. package/dist/templatesCompiled/client/core/node/request.d.ts.map +1 -1
  202. package/dist/templatesCompiled/client/core/node/request.js +2 -22
  203. package/dist/templatesCompiled/client/core/xhr/request.d.ts +2 -6
  204. package/dist/templatesCompiled/client/core/xhr/request.d.ts.map +1 -1
  205. package/dist/templatesCompiled/client/core/xhr/request.js +2 -22
  206. package/dist/templatesCompiled/client/exportService.d.ts +9 -11
  207. package/dist/templatesCompiled/client/exportService.d.ts.map +1 -1
  208. package/dist/templatesCompiled/client/exportService.js +64 -82
  209. package/dist/test/helpers/silenceLoggers.d.ts +11 -0
  210. package/dist/test/helpers/silenceLoggers.d.ts.map +1 -0
  211. package/dist/test/helpers/silenceLoggers.js +88 -0
  212. package/package.json +4 -3
@@ -24,14 +24,14 @@ async function checkConfig(options) {
24
24
  if (!validationResult.success) {
25
25
  Consts_1.APP_LOGGER.error(LoggerMessages_1.LOGGER_MESSAGES.ERROR.GENERIC(validationResult.errors.join('\n')));
26
26
  await Consts_1.APP_LOGGER.shutdownLoggerAsync();
27
- process.exit(1);
27
+ return { success: false, error: validationResult.errors.join('\n') };
28
28
  }
29
29
  const validatedOptions = validationResult.data;
30
30
  const configData = (0, loadConfigIfExists_1.loadConfigIfExists)(validatedOptions.openapiConfig);
31
31
  if (!configData) {
32
32
  Consts_1.APP_LOGGER.error(LoggerMessages_1.LOGGER_MESSAGES.CONFIG.FILE_NOT_FOUND(validatedOptions.openapiConfig || ''));
33
33
  await Consts_1.APP_LOGGER.shutdownLoggerAsync();
34
- process.exit(1);
34
+ return { success: false, error: LoggerMessages_1.LOGGER_MESSAGES.CONFIG.FILE_NOT_FOUND(validatedOptions.openapiConfig || '') };
35
35
  }
36
36
  try {
37
37
  const { isActualConfigVersion, hasDefaultValues, migratedData } = (0, validateAndMigrateConfigData_1.validateAndMigrateConfigData)(configData);
@@ -44,7 +44,8 @@ async function checkConfig(options) {
44
44
  warningMessage: LoggerMessages_1.LOGGER_MESSAGES.CONFIG.WARNING_OUTDATED_CONFIG,
45
45
  actionChoices: constants_1.ACTION_FOR_CONFIG_DATA_OPTIONS,
46
46
  });
47
- return;
47
+ await Consts_1.APP_LOGGER.shutdownLoggerAsync();
48
+ return { success: true };
48
49
  }
49
50
  // Если есть значения по умолчанию, предложить их удаление
50
51
  if (hasDefaultValues) {
@@ -55,11 +56,14 @@ async function checkConfig(options) {
55
56
  actionChoices: constants_1.ACTION_FOR_CONFIG_DATA_OPTIONS,
56
57
  });
57
58
  }
59
+ await Consts_1.APP_LOGGER.shutdownLoggerAsync();
60
+ return { success: true };
58
61
  }
59
62
  catch (error) {
60
63
  handleConfigError(LoggerMessages_1.LOGGER_MESSAGES.CONFIG.CHECKING_FAILED, error);
61
64
  await Consts_1.APP_LOGGER.shutdownLoggerAsync();
62
- process.exit(1);
65
+ const message = error instanceof Error ? error.message : String(error);
66
+ return { success: false, error: message };
63
67
  }
64
68
  }
65
69
  /**
@@ -1,4 +1,5 @@
1
1
  import { OptionValues } from 'commander';
2
+ import { CLICommandResult } from '../types';
2
3
  /**
3
4
  * Обновляет конфигурационный файл до актуальной версии.
4
5
  * Выполняет миграцию данных при необходимости.
@@ -9,5 +10,5 @@ import { OptionValues } from 'commander';
9
10
  * @example
10
11
  * await updateConfig('./openapi-config.json');
11
12
  */
12
- export declare function updateConfig(options: OptionValues): Promise<void>;
13
+ export declare function updateConfig(options: OptionValues): Promise<CLICommandResult>;
13
14
  //# sourceMappingURL=updateConfig.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"updateConfig.d.ts","sourceRoot":"","sources":["../../../src/cli/checkAndUpdateConfig/updateConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAUzC;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCvE"}
1
+ {"version":3,"file":"updateConfig.d.ts","sourceRoot":"","sources":["../../../src/cli/checkAndUpdateConfig/updateConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAOzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAI5C;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuCnF"}
@@ -23,14 +23,14 @@ async function updateConfig(options) {
23
23
  if (!validationResult.success) {
24
24
  Consts_1.APP_LOGGER.error(LoggerMessages_1.LOGGER_MESSAGES.ERROR.GENERIC(validationResult.errors.join('\n')));
25
25
  await Consts_1.APP_LOGGER.shutdownLoggerAsync();
26
- process.exit(1);
26
+ return { success: false, error: validationResult.errors.join('\n') };
27
27
  }
28
28
  const validatedOptions = validationResult.data;
29
29
  const configData = (0, loadConfigIfExists_1.loadConfigIfExists)(validatedOptions.openapiConfig);
30
30
  if (!configData) {
31
31
  Consts_1.APP_LOGGER.error(LoggerMessages_1.LOGGER_MESSAGES.CONFIG.FILE_NOT_FOUND(validatedOptions.openapiConfig || ''));
32
32
  await Consts_1.APP_LOGGER.shutdownLoggerAsync();
33
- process.exit(1);
33
+ return { success: false, error: LoggerMessages_1.LOGGER_MESSAGES.CONFIG.FILE_NOT_FOUND(validatedOptions.openapiConfig || '') };
34
34
  }
35
35
  try {
36
36
  const { isActualConfigVersion, migratedData } = (0, validateAndMigrateConfigData_1.validateAndMigrateConfigData)(configData);
@@ -44,11 +44,14 @@ async function updateConfig(options) {
44
44
  isUpdating: true,
45
45
  });
46
46
  }
47
+ await Consts_1.APP_LOGGER.shutdownLoggerAsync();
48
+ return { success: true };
47
49
  }
48
50
  catch (error) {
49
51
  handleUpdateError(LoggerMessages_1.LOGGER_MESSAGES.CONFIG.UPDATING_FAILED, error);
50
52
  await Consts_1.APP_LOGGER.shutdownLoggerAsync();
51
- process.exit(1);
53
+ const message = error instanceof Error ? error.message : String(error);
54
+ return { success: false, error: message };
52
55
  }
53
56
  }
54
57
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"validateAndMigrateConfigData.d.ts","sourceRoot":"","sources":["../../../../src/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAGnD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,uBAAuB,CAmC7H"}
1
+ {"version":3,"file":"validateAndMigrateConfigData.d.ts","sourceRoot":"","sources":["../../../../src/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AA6BnD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,uBAAuB,CAmC7H"}
@@ -12,6 +12,24 @@ const OptionsVersionedSchemas_1 = require("../../../common/VersionedSchema/Optio
12
12
  const migrateDataToLatestSchemaVersion_1 = require("../../../common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion");
13
13
  const isInstanceOfMultiOptions_1 = require("../../../core/utils/isInstanceOfMultiOptions");
14
14
  const removeDefaultConfigValues_1 = require("./removeDefaultConfigValues");
15
+ const omitUndefinedValues = (data) => {
16
+ const result = {};
17
+ for (const [key, value] of Object.entries(data)) {
18
+ if (value === undefined) {
19
+ continue;
20
+ }
21
+ if (Array.isArray(value)) {
22
+ result[key] = value.map(item => item && typeof item === 'object' && !Array.isArray(item) ? omitUndefinedValues(item) : item);
23
+ continue;
24
+ }
25
+ if (value && typeof value === 'object') {
26
+ result[key] = omitUndefinedValues(value);
27
+ continue;
28
+ }
29
+ result[key] = value;
30
+ }
31
+ return result;
32
+ };
15
33
  /**
16
34
  * Валидирует и мигрирует данные конфигурации до последней версии схемы.
17
35
  * Определяет тип конфигурации (одиночная или множественная опция) и применяет соответствующий план миграции.
@@ -31,7 +49,7 @@ function validateAndMigrateConfigData(configData) {
31
49
  if (isArrayFormat) {
32
50
  Consts_1.APP_LOGGER.warn(LoggerMessages_1.LOGGER_MESSAGES.CONFIG.ARRAY_DEPRECATED);
33
51
  }
34
- const normalizedData = (0, convertArrayToObject_1.convertArrayToObject)(configData);
52
+ const normalizedData = omitUndefinedValues((0, convertArrayToObject_1.convertArrayToObject)(configData));
35
53
  const isMultiOptions = (0, isInstanceOfMultiOptions_1.isInstanceOfMultioptions)(normalizedData);
36
54
  // Выбрать соответствующие схемы и планы миграции
37
55
  const migrationPlans = isMultiOptions ? MultiOptionsMigrationPlan_1.multiOptionsMigrationPlan : OptionsMigrationPlans_1.optionsMigrationPlans;
@@ -7,6 +7,7 @@ const node_assert_1 = __importDefault(require("node:assert"));
7
7
  const node_fs_1 = 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 generateOpenApiClient_1 = require("../generateOpenApiClient");
11
12
  const repoRoot = node_path_1.default.join(__dirname, '..', '..', '..', '..');
12
13
  const cliDefaults = {
@@ -35,23 +36,31 @@ function createTempDir(t, prefix) {
35
36
  return tempDir;
36
37
  }
37
38
  function runStrictGenerate(options) {
38
- return (0, generateOpenApiClient_1.runGenerateOpenApiClient)({
39
+ return (0, generateOpenApiClient_1.generateOpenApiClient)({
39
40
  ...cliDefaults,
40
41
  ...options,
41
42
  });
42
43
  }
43
44
  (0, node_test_1.describe)('@unit: generateOpenApiClient strict-openapi', () => {
44
- (0, node_test_1.test)('returns exit code 0 and writes report file when strict has no errors', async (t) => {
45
+ let restoreLoggers;
46
+ (0, node_test_1.beforeEach)(() => {
47
+ restoreLoggers = (0, silenceLoggers_1.installSilenceLoggers)();
48
+ });
49
+ (0, node_test_1.afterEach)(() => {
50
+ restoreLoggers?.();
51
+ restoreLoggers = undefined;
52
+ });
53
+ (0, node_test_1.test)('returns success and writes report file when strict has no errors', async (t) => {
45
54
  const tempDir = createTempDir(t, 'openapi-cli-strict-ok-');
46
55
  const reportFile = node_path_1.default.join(tempDir, 'strict-report.json');
47
56
  const outputDir = node_path_1.default.join(tempDir, 'generated');
48
- const exitCode = await runStrictGenerate({
57
+ const result = await runStrictGenerate({
49
58
  input: node_path_1.default.join(repoRoot, 'test/spec/lom/lom_api.yaml'),
50
59
  output: outputDir,
51
60
  strictOpenapi: true,
52
61
  reportFile,
53
62
  });
54
- node_assert_1.default.strictEqual(exitCode, 0);
63
+ node_assert_1.default.strictEqual(result.success, true);
55
64
  const report = JSON.parse((0, node_fs_1.readFileSync)(reportFile, 'utf8'));
56
65
  node_assert_1.default.ok(Array.isArray(report.issues));
57
66
  node_assert_1.default.ok(Array.isArray(report.governance.violations));
@@ -59,7 +68,7 @@ function runStrictGenerate(options) {
59
68
  node_assert_1.default.strictEqual(typeof report.summary.warnings, 'number');
60
69
  node_assert_1.default.strictEqual(typeof report.summary.info, 'number');
61
70
  });
62
- (0, node_test_1.test)('returns exit code 1 and writes report file when strict finds errors', async (t) => {
71
+ (0, node_test_1.test)('returns failure and writes report file when strict finds errors', async (t) => {
63
72
  const tempDir = createTempDir(t, 'openapi-cli-strict-error-');
64
73
  const inputSpec = node_path_1.default.join(tempDir, 'broken-openapi.json');
65
74
  const reportFile = node_path_1.default.join(tempDir, 'strict-report.json');
@@ -92,13 +101,13 @@ function runStrictGenerate(options) {
92
101
  schemas: {},
93
102
  },
94
103
  }));
95
- const exitCode = await runStrictGenerate({
104
+ const result = await runStrictGenerate({
96
105
  input: inputSpec,
97
106
  output: outputDir,
98
107
  strictOpenapi: true,
99
108
  reportFile,
100
109
  });
101
- node_assert_1.default.strictEqual(exitCode, 1);
110
+ node_assert_1.default.strictEqual(result.success, false);
102
111
  const report = JSON.parse((0, node_fs_1.readFileSync)(reportFile, 'utf8'));
103
112
  node_assert_1.default.ok(report.summary.errors > 0);
104
113
  node_assert_1.default.ok(report.issues.some(issue => issue.severity === 'error'));
@@ -137,14 +146,14 @@ function runStrictGenerate(options) {
137
146
  },
138
147
  },
139
148
  }));
140
- const exitCode = await runStrictGenerate({
149
+ const result = await runStrictGenerate({
141
150
  input: inputSpec,
142
151
  output: outputDir,
143
152
  strictOpenapi: true,
144
153
  reportFile,
145
154
  governanceConfig,
146
155
  });
147
- node_assert_1.default.strictEqual(exitCode, 0);
156
+ node_assert_1.default.strictEqual(result.success, true);
148
157
  const report = JSON.parse((0, node_fs_1.readFileSync)(reportFile, 'utf8'));
149
158
  node_assert_1.default.ok(!report.governance.violations.some(violation => violation.ruleId === 'REQUIRE_OPERATION_ID'));
150
159
  node_assert_1.default.ok(report.governance.violations.some(violation => violation.ruleId === 'NO_DEFAULT_WITHOUT_2XX' && violation.severity === 'error'));
@@ -1,11 +1,8 @@
1
1
  import { OptionValues } from 'commander';
2
+ import { CLICommandResult } from '../types';
2
3
  /**
3
4
  * Runs OpenAPI client generation and returns a process exit code.
4
5
  * Does not call `process.exit` — safe for in-process unit tests.
5
6
  */
6
- export declare function runGenerateOpenApiClient(options: OptionValues): Promise<number>;
7
- /**
8
- * CLI entry: runs generation and terminates the process with the resulting exit code.
9
- */
10
- export declare function generateOpenApiClient(options: OptionValues): Promise<void>;
7
+ export declare function generateOpenApiClient(options: OptionValues): Promise<CLICommandResult>;
11
8
  //# sourceMappingURL=generateOpenApiClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateOpenApiClient.d.ts","sourceRoot":"","sources":["../../../src/cli/generateOpenApiClient/generateOpenApiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AA0BzC;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CA+FrF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF"}
1
+ {"version":3,"file":"generateOpenApiClient.d.ts","sourceRoot":"","sources":["../../../src/cli/generateOpenApiClient/generateOpenApiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAezC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAY5C;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmG5F"}
@@ -33,7 +33,6 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.runGenerateOpenApiClient = runGenerateOpenApiClient;
37
36
  exports.generateOpenApiClient = generateOpenApiClient;
38
37
  const Consts_1 = require("../../common/Consts");
39
38
  const Enums_1 = require("../../common/Enums");
@@ -60,7 +59,7 @@ const generateCliFlatSchema = UnifiedVersionedSchemas_1.flatOptionsSchema.strict
60
59
  * Runs OpenAPI client generation and returns a process exit code.
61
60
  * Does not call `process.exit` — safe for in-process unit tests.
62
61
  */
63
- async function runGenerateOpenApiClient(options) {
62
+ async function generateOpenApiClient(options) {
64
63
  const { openapiConfig, ...clientOptions } = options;
65
64
  try {
66
65
  const validationResult = (0, validateZodOptions_1.validateZodOptions)(schemas_1.generateOptionsSchema, {
@@ -73,7 +72,7 @@ async function runGenerateOpenApiClient(options) {
73
72
  message: LoggerMessages_1.LOGGER_MESSAGES.ERROR.GENERIC(validationResult.errors.join('\n')),
74
73
  });
75
74
  await Consts_1.APP_LOGGER.shutdownLoggerAsync();
76
- return 1;
75
+ return { success: false, error: validationResult.errors.join('\n') };
77
76
  }
78
77
  const validatedOptions = validationResult.data;
79
78
  const hasMinimumRequiredOptions = !!validatedOptions.input && !!validatedOptions.output;
@@ -89,11 +88,11 @@ async function runGenerateOpenApiClient(options) {
89
88
  message: LoggerMessages_1.LOGGER_MESSAGES.ERROR.GENERIC(directOptionsValidationResult.errors.join('\n')),
90
89
  });
91
90
  await Consts_1.APP_LOGGER.shutdownLoggerAsync();
92
- return 1;
91
+ return { success: false, error: directOptionsValidationResult.errors.join('\n') };
93
92
  }
94
93
  await OpenAPI.generate(directOptionsValidationResult.data);
95
94
  await Consts_1.APP_LOGGER.shutdownLoggerAsync();
96
- return 0;
95
+ return { success: true };
97
96
  }
98
97
  const configData = (0, loadConfigIfExists_1.loadConfigIfExists)(validatedOptions.openapiConfig);
99
98
  if (!configData) {
@@ -102,7 +101,7 @@ async function runGenerateOpenApiClient(options) {
102
101
  message: `${LoggerMessages_1.LOGGER_MESSAGES.CONFIG.FILE_MISSING}\n${LoggerMessages_1.LOGGER_MESSAGES.CONFIG.FILE_MISSING_HINT}`,
103
102
  });
104
103
  await Consts_1.APP_LOGGER.shutdownLoggerAsync();
105
- return 1;
104
+ return { success: false, error: LoggerMessages_1.LOGGER_MESSAGES.CONFIG.FILE_MISSING };
106
105
  }
107
106
  if (Array.isArray(configData)) {
108
107
  Consts_1.APP_LOGGER.warn(LoggerMessages_1.LOGGER_MESSAGES.CONFIG.ARRAY_DEPRECATED);
@@ -120,7 +119,7 @@ async function runGenerateOpenApiClient(options) {
120
119
  message: LoggerMessages_1.LOGGER_MESSAGES.CONFIG.CONVERSION_FAILED,
121
120
  });
122
121
  await Consts_1.APP_LOGGER.shutdownLoggerAsync();
123
- return 1;
122
+ return { success: false, error: LoggerMessages_1.LOGGER_MESSAGES.CONFIG.CONVERSION_FAILED };
124
123
  }
125
124
  const { value } = migratedOptions;
126
125
  const mergedOptions = {
@@ -128,10 +127,14 @@ async function runGenerateOpenApiClient(options) {
128
127
  strictOpenapi: validatedOptions.strictOpenapi ?? value.strictOpenapi,
129
128
  reportFile: validatedOptions.reportFile ?? value.reportFile,
130
129
  governanceConfig: validatedOptions.governanceConfig ?? value.governanceConfig,
130
+ cache: validatedOptions.cache ?? value.cache,
131
+ cachePath: validatedOptions.cachePath ?? value.cachePath,
132
+ cacheStrategy: validatedOptions.cacheStrategy ?? value.cacheStrategy,
133
+ cacheDebug: validatedOptions.cacheDebug ?? value.cacheDebug,
131
134
  };
132
135
  await OpenAPI.generate(mergedOptions);
133
136
  await Consts_1.APP_LOGGER.shutdownLoggerAsync();
134
- return 0;
137
+ return { success: true };
135
138
  }
136
139
  catch (error) {
137
140
  const message = error instanceof Error ? error.message : String(error);
@@ -141,13 +144,6 @@ async function runGenerateOpenApiClient(options) {
141
144
  error,
142
145
  });
143
146
  await Consts_1.APP_LOGGER.shutdownLoggerAsync();
144
- return 1;
147
+ return { success: false, error: message };
145
148
  }
146
149
  }
147
- /**
148
- * CLI entry: runs generation and terminates the process with the resulting exit code.
149
- */
150
- async function generateOpenApiClient(options) {
151
- const exitCode = await runGenerateOpenApiClient(options);
152
- process.exit(exitCode);
153
- }
package/dist/cli/index.js CHANGED
@@ -16,6 +16,7 @@ const HttpClient_enum_1 = require("../core/types/enums/HttpClient.enum");
16
16
  const ModelsMode_enum_1 = require("../core/types/enums/ModelsMode.enum");
17
17
  const ValidationLibrary_enum_1 = require("../core/types/enums/ValidationLibrary.enum");
18
18
  const analyzeDiff_1 = require("./analyzeDiff/analyzeDiff");
19
+ const analyzeUsage_1 = require("./analyzeUsage/analyzeUsage");
19
20
  const checkConfig_1 = require("./checkAndUpdateConfig/checkConfig");
20
21
  const updateConfig_1 = require("./checkAndUpdateConfig/updateConfig");
21
22
  const generateOpenApiClient_1 = require("./generateOpenApiClient/generateOpenApiClient");
@@ -31,6 +32,12 @@ const updateNotifier = new UpdateNotifier_1.UpdateNotifier({
31
32
  packageVersion: APP_VERSION,
32
33
  });
33
34
  const program = new commander_1.Command();
35
+ const finishCommand = (result) => {
36
+ if (!result || !result.success) {
37
+ process.exit(1);
38
+ }
39
+ process.exit(0);
40
+ };
34
41
  program.version(APP_VERSION).name(APP_NAME).description(APP_DESCRIPTION).addHelpText('before', (0, utils_1.getCLIName)(APP_NAME));
35
42
  /**
36
43
  * generate - Команда для генерации кода на основе OpenAPI спецификации
@@ -60,7 +67,6 @@ program
60
67
  .option('--enumPrefix <value>', 'Prefix for enum model(default: "E")', 'E')
61
68
  .option('--typePrefix <value>', 'Prefix for type model(default: "T")', 'T')
62
69
  .option('--useCancelableRequest', 'Use cancelled promise as returned data type in request (default: false)')
63
- .option('--useRequestRaw [value]', 'Generate requestRaw methods and raw HTTP stack (default: true)', (value) => value === undefined || value === 'true' || value === true)
64
70
  .addOption(new commander_1.Option('-l, --logLevel <level>', 'Logging level').choices([...Object.values(Enums_1.ELogLevel)]).default(Enums_1.ELogLevel.ERROR))
65
71
  .addOption(new commander_1.Option('-t, --logTarget <target>', 'Target of logging').choices([...Object.values(Enums_1.ELogOutput)]).default(Enums_1.ELogOutput.CONSOLE))
66
72
  .option('-s, --sortByRequired', 'Property sorting strategy: simplified or extended')
@@ -72,11 +78,16 @@ program
72
78
  .addOption(new commander_1.Option('--emptySchemaStrategy <value>', 'How to handle empty generated schemas').choices([...Object.values(EmptySchemaStrategy_enum_1.EmptySchemaStrategy)]).default(EmptySchemaStrategy_enum_1.EmptySchemaStrategy.KEEP))
73
79
  .option('--useProjectPrettier', 'Use project Prettier config for formatting generated code (default: false)')
74
80
  .option('--useEslintFix', 'Run ESLint --fix on generated files after writing (default: false)')
81
+ .option('--cache', 'Enable generation cache (default: disabled)')
82
+ .option('--cachePath <value>', 'Path to generation cache file relative to output directory (default: .openapi-codegen-cache.json)')
83
+ .addOption(new commander_1.Option('--cacheStrategy <value>', 'Cache strategy').choices(['content', 'entity']).default('entity'))
84
+ .option('--cacheDebug', 'Show cache hit/miss debug logs (default: false)')
75
85
  .hook('preAction', async () => {
76
86
  await updateNotifier.checkAndNotify();
77
87
  })
78
88
  .action(async (options) => {
79
- await (0, generateOpenApiClient_1.generateOpenApiClient)(options);
89
+ const result = await (0, generateOpenApiClient_1.generateOpenApiClient)(options);
90
+ finishCommand(result);
80
91
  });
81
92
  /**
82
93
  * check - Команда для проверки конфигурационного файла
@@ -90,7 +101,8 @@ program
90
101
  await updateNotifier.checkAndNotify();
91
102
  })
92
103
  .action(async (options) => {
93
- await (0, checkConfig_1.checkConfig)(options);
104
+ const result = await (0, checkConfig_1.checkConfig)(options);
105
+ finishCommand(result);
94
106
  });
95
107
  /**
96
108
  * update - Команда для обновления конфигурационного файла
@@ -104,7 +116,8 @@ program
104
116
  await updateNotifier.checkAndNotify();
105
117
  })
106
118
  .action(async (options) => {
107
- await (0, updateConfig_1.updateConfig)(options);
119
+ const result = await (0, updateConfig_1.updateConfig)(options);
120
+ finishCommand(result);
108
121
  });
109
122
  /**
110
123
  * init - Команда для инициализации конфигурационного файла
@@ -117,13 +130,13 @@ program
117
130
  .option('-sd, --specs-dir <value>', 'Путь до директории с файлами спецификации', './openapi')
118
131
  .option('--request <value>', 'Path to custom request file')
119
132
  .option('--useCancelableRequest', 'Use cancelled promise as returned data type in request (default: false)')
120
- .option('--useRequestRaw [value]', 'Generate requestRaw methods and raw HTTP stack (default: true)', (value) => value === undefined || value === true || value === 'true')
121
133
  .option('--useInteractiveMode', 'Использовать интерактивный режим команды. В терминале будут задаваться вопросы (default: false)')
122
134
  .hook('preAction', async () => {
123
135
  await updateNotifier.checkAndNotify();
124
136
  })
125
137
  .action(async (options) => {
126
- await (0, init_1.init)(options);
138
+ const result = await (0, init_1.init)(options);
139
+ finishCommand(result);
127
140
  });
128
141
  /**
129
142
  * preview-changes - Команда для предпросмотра изменений перед генерацией
@@ -140,7 +153,8 @@ program
140
153
  await updateNotifier.checkAndNotify();
141
154
  })
142
155
  .action(async (options) => {
143
- await (0, previewChanges_1.previewChanges)(options);
156
+ const result = await (0, previewChanges_1.previewChanges)(options);
157
+ finishCommand(result);
144
158
  });
145
159
  /**
146
160
  * analyze-diff - Команда для анализа изменений между двумя версиями OpenAPI спецификации
@@ -182,8 +196,26 @@ program
182
196
  })
183
197
  .action(async (options) => {
184
198
  const result = await (0, analyzeDiff_1.analyzeDiff)(options);
185
- await Consts_1.APP_LOGGER.shutdownLoggerAsync();
186
- process.exit((0, analyzeDiff_1.toAnalyzeDiffExitCode)(result));
199
+ finishCommand(result);
200
+ });
201
+ /**
202
+ * analyze-usage - Команда для анализа использования generated API в consumer-проекте
203
+ */
204
+ program
205
+ .command('analyze-usage')
206
+ .description('Analyzes generated API usage in a TypeScript consumer project and produces usage reports')
207
+ .addHelpText('before', (0, utils_1.getCLIName)(APP_NAME))
208
+ .option('-s, --sourcePath <value>', 'Path to generated API file')
209
+ .option('-p, --projectPath <value>', 'Root of your React/TS project')
210
+ .option('-t, --tsconfigPath <value>', 'Optional path to tsconfig.json')
211
+ .option('-o, --output <value>', 'Output report filename', 'api-report.json')
212
+ .option('-c, --check', 'CI mode (exit code 1 when errors are found)')
213
+ .hook('preAction', async () => {
214
+ await updateNotifier.checkAndNotify();
215
+ })
216
+ .action(async (options) => {
217
+ const result = await (0, analyzeUsage_1.analyzeUsage)(options);
218
+ finishCommand(result);
187
219
  });
188
220
  program.exitOverride();
189
221
  program.showSuggestionAfterError(false);
@@ -7,23 +7,13 @@ const node_assert_1 = __importDefault(require("node:assert"));
7
7
  const node_test_1 = require("node:test");
8
8
  const Consts_1 = require("../../../common/Consts");
9
9
  const init_1 = require("../init");
10
- class ProcessExitError extends Error {
11
- exitCode;
12
- constructor(exitCode) {
13
- super(`process.exit(${exitCode})`);
14
- this.exitCode = exitCode;
15
- this.name = 'ProcessExitError';
16
- }
17
- }
18
10
  (0, node_test_1.describe)('@unit: init', () => {
19
- (0, node_test_1.test)('exits when options fail schema validation', async () => {
20
- const exitMock = node_test_1.mock.method(process, 'exit', (code) => {
21
- throw new ProcessExitError(Number(code ?? 0));
22
- });
11
+ (0, node_test_1.test)('returns failure when options fail schema validation', async () => {
23
12
  const shutdownMock = node_test_1.mock.method(Consts_1.APP_LOGGER, 'shutdownLoggerAsync', async () => undefined);
24
13
  const errorMock = node_test_1.mock.method(Consts_1.APP_LOGGER, 'error', () => undefined);
25
- await node_assert_1.default.rejects(() => (0, init_1.init)({ specsDir: 123 }), ProcessExitError);
26
- exitMock.mock.restore();
14
+ const result = await (0, init_1.init)({ specsDir: 123 });
15
+ node_assert_1.default.strictEqual(result.success, false);
16
+ node_assert_1.default.ok(result.error);
27
17
  shutdownMock.mock.restore();
28
18
  errorMock.mock.restore();
29
19
  });
@@ -9,6 +9,7 @@ const node_os_1 = require("node:os");
9
9
  const node_path_1 = require("node:path");
10
10
  const node_test_1 = require("node:test");
11
11
  const Consts_1 = require("../../../common/Consts");
12
+ const silenceLoggers_1 = require("../../../test/helpers/silenceLoggers");
12
13
  const initConfig_1 = require("../initConfig");
13
14
  const registerHandlebarTemplates_1 = require("../utils/registerHandlebarTemplates");
14
15
  (0, node_test_1.describe)('@unit: initConfig', () => {
@@ -30,7 +31,8 @@ const registerHandlebarTemplates_1 = require("../utils/registerHandlebarTemplate
30
31
  warnMock.mock.restore();
31
32
  infoMock.mock.restore();
32
33
  });
33
- (0, node_test_1.test)('writes example config when no specs are found', async () => {
34
+ (0, node_test_1.test)('writes example config when no specs are found', async (t) => {
35
+ (0, silenceLoggers_1.silenceAppLogger)(t);
34
36
  const dir = await (0, promises_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'init-config-'));
35
37
  const configPath = (0, node_path_1.join)(dir, 'new-openapi.config.json');
36
38
  const templates = (0, registerHandlebarTemplates_1.registerHandlebarTemplates)();
@@ -1,6 +1,7 @@
1
1
  import { OptionValues } from 'commander';
2
+ import { CLICommandResult } from '../types';
2
3
  /**
3
4
  * Фнукция изначальной настройки файлов конфигурации для последующего запуска генератора
4
5
  */
5
- export declare function init(options: OptionValues): Promise<void>;
6
+ export declare function init(options: OptionValues): Promise<CLICommandResult>;
6
7
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/initOpenApiConfig/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAWzC;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,YAAY,iBA0D/C"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/initOpenApiConfig/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAOzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAK5C;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2D3E"}
@@ -17,7 +17,7 @@ async function init(options) {
17
17
  if (!validationResult.success) {
18
18
  Consts_1.APP_LOGGER.error(LoggerMessages_1.LOGGER_MESSAGES.ERROR.GENERIC(validationResult.errors.join('\n')));
19
19
  await Consts_1.APP_LOGGER.shutdownLoggerAsync();
20
- process.exit(1);
20
+ return { success: false, error: validationResult.errors.join('\n') };
21
21
  }
22
22
  const validatedOptions = validationResult.data;
23
23
  const templates = (0, registerHandlebarTemplates_1.registerHandlebarTemplates)();
@@ -43,7 +43,6 @@ async function init(options) {
43
43
  await (0, initCustomRequest_1.initCustomRequest)({
44
44
  templates,
45
45
  useCancelableRequest: validatedOptions?.useCancelableRequest,
46
- useRequestRaw: validatedOptions?.useRequestRaw,
47
46
  customRequestPath: validatedOptions.request,
48
47
  useInteractiveMode: validatedOptions.useInteractiveMode,
49
48
  });
@@ -60,9 +59,10 @@ async function init(options) {
60
59
  await (0, initCustomRequest_1.initCustomRequest)({
61
60
  templates,
62
61
  useCancelableRequest: validatedOptions?.useCancelableRequest,
63
- useRequestRaw: validatedOptions?.useRequestRaw,
64
62
  customRequestPath: validatedOptions.request,
65
63
  useInteractiveMode: validatedOptions.useInteractiveMode,
66
64
  });
67
65
  }
66
+ await Consts_1.APP_LOGGER.shutdownLoggerAsync();
67
+ return { success: true };
68
68
  }
@@ -2,7 +2,6 @@ import { CLITemplates } from './Types';
2
2
  type InitCustomRequestParams = {
3
3
  templates: CLITemplates;
4
4
  useCancelableRequest?: boolean;
5
- useRequestRaw?: boolean;
6
5
  customRequestPath?: string;
7
6
  useInteractiveMode?: boolean;
8
7
  };
@@ -1 +1 @@
1
- {"version":3,"file":"initCustomRequest.d.ts","sourceRoot":"","sources":["../../../src/cli/initOpenApiConfig/initCustomRequest.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,KAAK,uBAAuB,GAAG;IAC3B,SAAS,EAAE,YAAY,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDtF"}
1
+ {"version":3,"file":"initCustomRequest.d.ts","sourceRoot":"","sources":["../../../src/cli/initOpenApiConfig/initCustomRequest.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,KAAK,uBAAuB,GAAG;IAC3B,SAAS,EAAE,YAAY,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDtF"}
@@ -12,7 +12,7 @@ const format_1 = require("../../common/utils/format");
12
12
  const pathHelpers_1 = require("../../common/utils/pathHelpers");
13
13
  const confirmDialog_1 = require("../interactive/confirmDialog");
14
14
  async function initCustomRequest(params) {
15
- const { templates, useCancelableRequest, useRequestRaw, customRequestPath, useInteractiveMode } = params;
15
+ const { templates, useCancelableRequest, customRequestPath, useInteractiveMode } = params;
16
16
  if (!customRequestPath) {
17
17
  Consts_1.APP_LOGGER.warn(LoggerMessages_1.LOGGER_MESSAGES.CUSTOM_REQUEST.PATH_NOT_PROVIDED);
18
18
  return;
@@ -25,7 +25,6 @@ async function initCustomRequest(params) {
25
25
  : false;
26
26
  const artifacts = {
27
27
  useCancelableRequest,
28
- useRequestRaw,
29
28
  };
30
29
  const file = (0, pathHelpers_1.resolveHelper)(process.cwd(), customRequestPath);
31
30
  const fileDir = path_1.default.dirname(file);
@@ -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 validateSpecFile_1 = require("../validateSpecFile");
11
12
  const validateSpecFiles_1 = require("../validateSpecFiles");
12
13
  const minimalOpenApi = {
@@ -26,6 +27,14 @@ const createSpecFile = (t, content) => {
26
27
  return filePath;
27
28
  };
28
29
  (0, node_test_1.describe)('@unit: validateSpecFiles', () => {
30
+ let restoreAppLogger;
31
+ (0, node_test_1.beforeEach)(() => {
32
+ restoreAppLogger = (0, silenceLoggers_1.installSilenceAppLogger)();
33
+ });
34
+ (0, node_test_1.afterEach)(() => {
35
+ restoreAppLogger?.();
36
+ restoreAppLogger = undefined;
37
+ });
29
38
  (0, node_test_1.test)('validateSpecFile returns true for valid OpenAPI spec', async (t) => {
30
39
  const specPath = createSpecFile(t, minimalOpenApi);
31
40
  const isValid = await (0, validateSpecFile_1.validateSpecFile)(specPath);
@@ -1 +1 @@
1
- {"version":3,"file":"buildConfig.d.ts","sourceRoot":"","sources":["../../../../src/cli/initOpenApiConfig/utils/buildConfig.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CA8ElK;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,WAAW,CAuEzH"}
1
+ {"version":3,"file":"buildConfig.d.ts","sourceRoot":"","sources":["../../../../src/cli/initOpenApiConfig/utils/buildConfig.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CA4ElK;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,WAAW,CAqEzH"}
@@ -28,7 +28,6 @@ async function buildConfig(validatedSpecs, useMultiOption, customRequest, perSpe
28
28
  interfacePrefix: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.interfacePrefix,
29
29
  typePrefix: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.typePrefix,
30
30
  useCancelableRequest: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useCancelableRequest,
31
- useRequestRaw: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useRequestRaw,
32
31
  useOptions: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useOptions,
33
32
  useSeparatedIndexes: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useSeparatedIndexes,
34
33
  useUnionTypes: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useUnionTypes,
@@ -66,7 +65,6 @@ async function buildConfig(validatedSpecs, useMultiOption, customRequest, perSpe
66
65
  interfacePrefix: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.interfacePrefix,
67
66
  typePrefix: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.typePrefix,
68
67
  useCancelableRequest: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useCancelableRequest,
69
- useRequestRaw: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useRequestRaw,
70
68
  useOptions: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useOptions,
71
69
  useSeparatedIndexes: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useSeparatedIndexes,
72
70
  useUnionTypes: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useUnionTypes,
@@ -113,7 +111,6 @@ function buildExampleConfig(useMultiOption, customRequest, perSpecRequest) {
113
111
  interfacePrefix: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.interfacePrefix,
114
112
  typePrefix: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.typePrefix,
115
113
  useCancelableRequest: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useCancelableRequest,
116
- useRequestRaw: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useRequestRaw,
117
114
  useOptions: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useOptions,
118
115
  useSeparatedIndexes: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useSeparatedIndexes,
119
116
  useUnionTypes: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useUnionTypes,
@@ -146,7 +143,6 @@ function buildExampleConfig(useMultiOption, customRequest, perSpecRequest) {
146
143
  interfacePrefix: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.interfacePrefix,
147
144
  typePrefix: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.typePrefix,
148
145
  useCancelableRequest: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useCancelableRequest,
149
- useRequestRaw: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useRequestRaw,
150
146
  useOptions: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useOptions,
151
147
  useSeparatedIndexes: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useSeparatedIndexes,
152
148
  useUnionTypes: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useUnionTypes,