ts-openapi-codegen 2.1.0-beta.8 → 2.1.0-beta.9

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 (133) hide show
  1. package/README.md +4 -0
  2. package/README.rus.md +4 -0
  3. package/dist/cli/analyzeDiff/__tests__/analyzeDiff.cli.test.js +31 -24
  4. package/dist/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.d.ts +2 -0
  5. package/dist/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.d.ts.map +1 -0
  6. package/dist/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.js +47 -0
  7. package/dist/cli/analyzeDiff/__tests__/analyzeDiffRenameAndInvalidRegex.test.js +8 -7
  8. package/dist/cli/analyzeDiff/__tests__/analyzeDiffTypeCoercion.test.js +8 -7
  9. package/dist/cli/analyzeDiff/analyzeDiff.d.ts +14 -2
  10. package/dist/cli/analyzeDiff/analyzeDiff.d.ts.map +1 -1
  11. package/dist/cli/analyzeDiff/analyzeDiff.js +56 -13
  12. package/dist/cli/analyzeDiff/ciSummary.d.ts +6 -3
  13. package/dist/cli/analyzeDiff/ciSummary.d.ts.map +1 -1
  14. package/dist/cli/analyzeDiff/ciSummary.js +10 -6
  15. package/dist/cli/analyzeDiff/report.d.ts +0 -1
  16. package/dist/cli/analyzeDiff/report.d.ts.map +1 -1
  17. package/dist/cli/analyzeDiff/report.js +1 -3
  18. package/dist/cli/analyzeDiff/writeLegacyReport.d.ts +2 -0
  19. package/dist/cli/analyzeDiff/writeLegacyReport.d.ts.map +1 -1
  20. package/dist/cli/analyzeDiff/writeLegacyReport.js +2 -0
  21. package/dist/cli/analyzeUsage/core/Scanner.d.ts +8 -0
  22. package/dist/cli/analyzeUsage/core/Scanner.d.ts.map +1 -1
  23. package/dist/cli/analyzeUsage/core/Scanner.js +10 -0
  24. package/dist/cli/analyzeUsage/rules/ClientRule.d.ts +8 -0
  25. package/dist/cli/analyzeUsage/rules/ClientRule.d.ts.map +1 -1
  26. package/dist/cli/analyzeUsage/rules/ClientRule.js +10 -0
  27. package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts +8 -0
  28. package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts.map +1 -1
  29. package/dist/cli/analyzeUsage/rules/ServiceRule.js +10 -0
  30. package/dist/common/LoggerMessages.d.ts +5 -0
  31. package/dist/common/LoggerMessages.d.ts.map +1 -1
  32. package/dist/common/LoggerMessages.js +4 -0
  33. package/dist/core/OpenApiClient.d.ts +8 -0
  34. package/dist/core/OpenApiClient.d.ts.map +1 -1
  35. package/dist/core/OpenApiClient.js +16 -2
  36. package/dist/core/WriteClient.d.ts +52 -15
  37. package/dist/core/WriteClient.d.ts.map +1 -1
  38. package/dist/core/WriteClient.js +36 -4
  39. package/dist/core/semanticDiff/__tests__/analyzeOpenApiDiff.test.js +72 -0
  40. package/dist/core/semanticDiff/__tests__/semanticDiffReportSchema.test.js +20 -1
  41. package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts +58 -6
  42. package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts.map +1 -1
  43. package/dist/core/semanticDiff/analyzeOpenApiDiff.js +47 -19
  44. package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts +11 -1
  45. package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts.map +1 -1
  46. package/dist/core/semanticDiff/semanticDiffReportSchema.js +140 -50
  47. package/dist/core/types/DiffReport.model.d.ts +101 -0
  48. package/dist/core/types/DiffReport.model.d.ts.map +1 -0
  49. package/dist/core/types/DiffReport.model.js +5 -0
  50. package/dist/core/types/shared/Model.model.d.ts +36 -0
  51. package/dist/core/types/shared/Model.model.d.ts.map +1 -1
  52. package/dist/core/utils/__tests__/applyDiffReportToClient.test.js +182 -0
  53. package/dist/core/utils/__tests__/buildMiraclesFromSemanticChanges.test.d.ts +2 -0
  54. package/dist/core/utils/__tests__/buildMiraclesFromSemanticChanges.test.d.ts.map +1 -0
  55. package/dist/core/utils/__tests__/buildMiraclesFromSemanticChanges.test.js +77 -0
  56. package/dist/core/utils/__tests__/expandOpenApiRefsForSemanticDiff.test.d.ts +2 -0
  57. package/dist/core/utils/__tests__/expandOpenApiRefsForSemanticDiff.test.d.ts.map +1 -0
  58. package/dist/core/utils/__tests__/expandOpenApiRefsForSemanticDiff.test.js +159 -0
  59. package/dist/core/utils/__tests__/loadDiffReport.test.js +131 -0
  60. package/dist/core/utils/__tests__/modelHelpers.test.js +27 -9
  61. package/dist/core/utils/__tests__/prepareDtoModels.test.js +74 -2
  62. package/dist/core/utils/__tests__/resolveClassesModeTypes.test.d.ts +2 -0
  63. package/dist/core/utils/__tests__/resolveClassesModeTypes.test.d.ts.map +1 -0
  64. package/dist/core/utils/__tests__/resolveClassesModeTypes.test.js +111 -0
  65. package/dist/core/utils/__tests__/semanticChangesToDiffEntries.test.d.ts +2 -0
  66. package/dist/core/utils/__tests__/semanticChangesToDiffEntries.test.d.ts.map +1 -0
  67. package/dist/core/utils/__tests__/semanticChangesToDiffEntries.test.js +68 -0
  68. package/dist/core/utils/__tests__/serviceHelpers.test.js +10 -11
  69. package/dist/core/utils/__tests__/templateRendering.test.js +71 -0
  70. package/dist/core/utils/adapters/__tests__/semanticToStructural.test.d.ts +2 -0
  71. package/dist/core/utils/adapters/__tests__/semanticToStructural.test.d.ts.map +1 -0
  72. package/dist/core/utils/adapters/__tests__/semanticToStructural.test.js +63 -0
  73. package/dist/core/utils/adapters/extractMiraclesFromSemantic.d.ts +10 -0
  74. package/dist/core/utils/adapters/extractMiraclesFromSemantic.d.ts.map +1 -0
  75. package/dist/core/utils/adapters/extractMiraclesFromSemantic.js +13 -0
  76. package/dist/core/utils/adapters/index.d.ts +4 -0
  77. package/dist/core/utils/adapters/index.d.ts.map +1 -0
  78. package/dist/core/utils/adapters/index.js +8 -0
  79. package/dist/core/utils/adapters/semanticToStructural.d.ts +12 -0
  80. package/dist/core/utils/adapters/semanticToStructural.d.ts.map +1 -0
  81. package/dist/core/utils/adapters/semanticToStructural.js +36 -0
  82. package/dist/core/utils/applyDiffReportToClient.d.ts +13 -1
  83. package/dist/core/utils/applyDiffReportToClient.d.ts.map +1 -1
  84. package/dist/core/utils/applyDiffReportToClient.js +187 -107
  85. package/dist/core/utils/buildMiraclesFromSemanticChanges.d.ts +25 -0
  86. package/dist/core/utils/buildMiraclesFromSemanticChanges.d.ts.map +1 -0
  87. package/dist/core/utils/buildMiraclesFromSemanticChanges.js +146 -0
  88. package/dist/core/utils/expandOpenApiRefsForSemanticDiff.d.ts +23 -0
  89. package/dist/core/utils/expandOpenApiRefsForSemanticDiff.d.ts.map +1 -0
  90. package/dist/core/utils/expandOpenApiRefsForSemanticDiff.js +163 -0
  91. package/dist/core/utils/getOpenApiSpec.d.ts +18 -0
  92. package/dist/core/utils/getOpenApiSpec.d.ts.map +1 -1
  93. package/dist/core/utils/getOpenApiSpec.js +35 -0
  94. package/dist/core/utils/loadDiffReport.d.ts +11 -30
  95. package/dist/core/utils/loadDiffReport.d.ts.map +1 -1
  96. package/dist/core/utils/loadDiffReport.js +69 -3
  97. package/dist/core/utils/loadSemanticOpenApiSpec.d.ts +15 -0
  98. package/dist/core/utils/loadSemanticOpenApiSpec.d.ts.map +1 -0
  99. package/dist/core/utils/loadSemanticOpenApiSpec.js +61 -0
  100. package/dist/core/utils/modelHelpers.d.ts +13 -5
  101. package/dist/core/utils/modelHelpers.d.ts.map +1 -1
  102. package/dist/core/utils/modelHelpers.js +28 -23
  103. package/dist/core/utils/prepareDtoModels.d.ts +5 -0
  104. package/dist/core/utils/prepareDtoModels.d.ts.map +1 -1
  105. package/dist/core/utils/prepareDtoModels.js +55 -12
  106. package/dist/core/utils/resolveClassesModeTypes.d.ts +8 -0
  107. package/dist/core/utils/resolveClassesModeTypes.d.ts.map +1 -0
  108. package/dist/core/utils/resolveClassesModeTypes.js +77 -0
  109. package/dist/core/utils/semanticChangesToDiffEntries.d.ts +37 -0
  110. package/dist/core/utils/semanticChangesToDiffEntries.d.ts.map +1 -0
  111. package/dist/core/utils/semanticChangesToDiffEntries.js +99 -0
  112. package/dist/core/utils/semanticPointerToJsonPath.d.ts +7 -0
  113. package/dist/core/utils/semanticPointerToJsonPath.d.ts.map +1 -0
  114. package/dist/core/utils/semanticPointerToJsonPath.js +67 -0
  115. package/dist/core/utils/serviceHelpers.d.ts +6 -7
  116. package/dist/core/utils/serviceHelpers.d.ts.map +1 -1
  117. package/dist/core/utils/serviceHelpers.js +8 -25
  118. package/dist/core/utils/writeClientServices.d.ts +14 -14
  119. package/dist/core/utils/writeClientServices.d.ts.map +1 -1
  120. package/dist/core/utils/writeClientServices.js +4 -8
  121. package/dist/templatesCompiled/client/exportModels.d.ts +17 -11
  122. package/dist/templatesCompiled/client/exportModels.d.ts.map +1 -1
  123. package/dist/templatesCompiled/client/exportModels.js +96 -49
  124. package/dist/templatesCompiled/client/exportService.d.ts +13 -10
  125. package/dist/templatesCompiled/client/exportService.d.ts.map +1 -1
  126. package/dist/templatesCompiled/client/exportService.js +95 -67
  127. package/package.json +1 -3
  128. package/dist/cli/analyzeDiff/buildLegacyReport.d.ts +0 -17
  129. package/dist/cli/analyzeDiff/buildLegacyReport.d.ts.map +0 -1
  130. package/dist/cli/analyzeDiff/buildLegacyReport.js +0 -54
  131. package/dist/cli/analyzeDiff/diffEngine.d.ts +0 -54
  132. package/dist/cli/analyzeDiff/diffEngine.d.ts.map +0 -1
  133. package/dist/cli/analyzeDiff/diffEngine.js +0 -209
@@ -1,6 +1,14 @@
1
1
  import type { ProjectContext } from '../core/ProjectContext';
2
2
  import type { Contract, Finding, Rule, Stats } from '../types';
3
+ /** Правило проверки вызовов методов сгенерированных сервисов в потребителях API. */
3
4
  export declare class ServiceRule implements Rule {
5
+ /**
6
+ * Проверяет вызовы методов сервисов и соответствие их сигнатурам.
7
+ * @param context контекст проекта
8
+ * @param contract контракт сгенерированного API
9
+ * @param stats накопительная статистика использования
10
+ * @returns список найденных проблем
11
+ */
4
12
  check(context: ProjectContext, contract: Contract, stats: Stats): Promise<Finding[]>;
5
13
  private getExpectedParameterType;
6
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceRule.d.ts","sourceRoot":"","sources":["../../../../src/cli/analyzeUsage/rules/ServiceRule.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAG/D,qBAAa,WAAY,YAAW,IAAI;IAC9B,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA8E1F,OAAO,CAAC,wBAAwB;CASnC"}
1
+ {"version":3,"file":"ServiceRule.d.ts","sourceRoot":"","sources":["../../../../src/cli/analyzeUsage/rules/ServiceRule.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAG/D,oFAAoF;AACpF,qBAAa,WAAY,YAAW,IAAI;IACpC;;;;;;OAMG;IACG,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAgF1F,OAAO,CAAC,wBAAwB;CASnC"}
@@ -3,7 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ServiceRule = void 0;
4
4
  const ts_morph_1 = require("ts-morph");
5
5
  const fuzzy_1 = require("../utils/fuzzy");
6
+ /** Правило проверки вызовов методов сгенерированных сервисов в потребителях API. */
6
7
  class ServiceRule {
8
+ /**
9
+ * Проверяет вызовы методов сервисов и соответствие их сигнатурам.
10
+ * @param context контекст проекта
11
+ * @param contract контракт сгенерированного API
12
+ * @param stats накопительная статистика использования
13
+ * @returns список найденных проблем
14
+ */
7
15
  async check(context, contract, stats) {
8
16
  const findings = [];
9
17
  const checker = context.getTypeChecker();
@@ -58,6 +66,8 @@ class ServiceRule {
58
66
  if (!expectedType)
59
67
  continue;
60
68
  const providedType = checker.getTypeAtLocation(args[i]);
69
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
70
+ // @ts-ignore
61
71
  if (!providedType.isAssignableTo(expectedType)) {
62
72
  findings.push({
63
73
  id: 'SERVICE_ARGUMENT_TYPE_MISMATCH',
@@ -2,6 +2,7 @@
2
2
  * Константы с текстовыми сообщениями для Logger
3
3
  * Все тексты для логирования должны быть вынесены сюда для централизованного управления
4
4
  */
5
+ /** Коды ошибок CLI для централизованного логирования. */
5
6
  export declare const LOGGER_ERROR_CODES: {
6
7
  readonly CONFIG_FILE_MISSING: "CONFIG_FILE_MISSING";
7
8
  readonly CONFIG_FILE_NOT_FOUND_AT: "CONFIG_FILE_NOT_FOUND_AT";
@@ -14,11 +15,13 @@ export declare const LOGGER_ERROR_CODES: {
14
15
  readonly PRETTIER_FORMAT_FAILED: "PRETTIER_FORMAT_FAILED";
15
16
  readonly ESLINT_FIX_FAILED: "ESLINT_FIX_FAILED";
16
17
  };
18
+ /** Тип кода ошибки CLI. */
17
19
  export type TLoggerErrorCode = keyof typeof LOGGER_ERROR_CODES;
18
20
  /**
19
21
  * Человекочитаемые рекомендации для пользователя CLI по коду ошибки
20
22
  */
21
23
  export declare const LOGGER_ERROR_RECOMMENDATIONS: Record<TLoggerErrorCode, string>;
24
+ /** Централизованные текстовые сообщения для Logger. */
22
25
  export declare const LOGGER_MESSAGES: {
23
26
  readonly GENERATION: {
24
27
  readonly STARTED: (count: number) => string;
@@ -174,6 +177,8 @@ export declare const LOGGER_MESSAGES: {
174
177
  readonly NOT_FOUND: (reportPath: string) => string;
175
178
  readonly STALE: (reportPath: string) => string;
176
179
  readonly EMPTY: (reportPath: string) => string;
180
+ readonly LOADED: (reportPath: string, diffCount: number, miracleCount: number) => string;
181
+ readonly USE_HISTORY_NO_REPORT: (reportPath: string) => string;
177
182
  readonly READ_FAILED: (reportPath: string, message: string) => string;
178
183
  };
179
184
  readonly TEMPLATES: {
@@ -1 +1 @@
1
- {"version":3,"file":"LoggerMessages.d.ts","sourceRoot":"","sources":["../../src/common/LoggerMessages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LoggerMessages.d.ts","sourceRoot":"","sources":["../../src/common/LoggerMessages.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ exports.LOGGER_MESSAGES = exports.LOGGER_ERROR_RECOMMENDATIONS = exports.LOGGER_
5
5
  * Константы с текстовыми сообщениями для Logger
6
6
  * Все тексты для логирования должны быть вынесены сюда для централизованного управления
7
7
  */
8
+ /** Коды ошибок CLI для централизованного логирования. */
8
9
  exports.LOGGER_ERROR_CODES = {
9
10
  CONFIG_FILE_MISSING: 'CONFIG_FILE_MISSING',
10
11
  CONFIG_FILE_NOT_FOUND_AT: 'CONFIG_FILE_NOT_FOUND_AT',
@@ -32,6 +33,7 @@ exports.LOGGER_ERROR_RECOMMENDATIONS = {
32
33
  PRETTIER_FORMAT_FAILED: 'Проверьте синтаксис сгенерированного фрагмента и настройки Prettier (включая опцию prettierConfigPath). При необходимости укажите корректный путь к конфигу или поправьте файл конфигурации.',
33
34
  ESLINT_FIX_FAILED: 'Проверьте, что пути tsconfigPath и eslintConfigPath корректны, ESLint установлен в проекте, и что сгенерированные файлы доступны для чтения и записи.',
34
35
  };
36
+ /** Централизованные текстовые сообщения для Logger. */
35
37
  exports.LOGGER_MESSAGES = {
36
38
  // ========== Generation Messages (OpenApiClient) ==========
37
39
  GENERATION: {
@@ -162,6 +164,8 @@ exports.LOGGER_MESSAGES = {
162
164
  NOT_FOUND: (reportPath) => `[openapi-codegen] Diff report not found at "${reportPath}". Skipping history annotations.`,
163
165
  STALE: (reportPath) => `[openapi-codegen] Diff report "${reportPath}" is older than the input spec. Skipping history annotations.`,
164
166
  EMPTY: (reportPath) => `[openapi-codegen] Diff report "${reportPath}" has no entries. Skipping history annotations.`,
167
+ LOADED: (reportPath, diffCount, miracleCount) => `[openapi-codegen] Loaded diff report "${reportPath}" (${diffCount} change(s), ${miracleCount} miracle(s)).`,
168
+ USE_HISTORY_NO_REPORT: (reportPath) => `[openapi-codegen] useHistory is enabled but no diff report was loaded from "${reportPath}". Skipping history annotations.`,
165
169
  READ_FAILED: (reportPath, message) => `[openapi-codegen] Failed to read diff report "${reportPath}": ${message}`,
166
170
  },
167
171
  TEMPLATES: {
@@ -1,11 +1,15 @@
1
1
  import { TRawOptions } from '../common/TRawOptions';
2
2
  import { WriteClient } from './WriteClient';
3
+ /**
4
+ * Оркестратор генерации OpenAPI-клиента: парсинг спецификации, применение diff-отчёта и запись артефактов.
5
+ */
3
6
  export declare class OpenApiClient {
4
7
  private static readonly CACHE_FINGERPRINT_VERSION;
5
8
  private static readonly DEFAULT_CACHE_FILENAME;
6
9
  private _writeClient;
7
10
  /** ESLint paths from top-level rawOptions (not per items[] entry). */
8
11
  private eslintFixOptions;
12
+ /** Экземпляр WriteClient для записи сгенерированных файлов. */
9
13
  get writeClient(): WriteClient;
10
14
  private normalizeOptions;
11
15
  private addDefaultValues;
@@ -28,6 +32,10 @@ export declare class OpenApiClient {
28
32
  private runBatchEslintFixIfEnabled;
29
33
  private loadDiffReportIfNeeded;
30
34
  private applyDiffReportIfNeeded;
35
+ /**
36
+ * Запускает генерацию клиента по опциям CLI или конфигурации.
37
+ * @param rawOptions сырые опции генерации
38
+ */
31
39
  generate(rawOptions: TRawOptions): Promise<void>;
32
40
  }
33
41
  //# sourceMappingURL=OpenApiClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OpenApiClient.d.ts","sourceRoot":"","sources":["../../src/core/OpenApiClient.ts"],"names":[],"mappings":"AAMA,OAAO,EAAgB,WAAW,EAAsB,MAAM,uBAAuB,CAAC;AA0BtF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAK;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAiC;IAC/E,OAAO,CAAC,YAAY,CAA4B;IAChD,sEAAsE;IACtE,OAAO,CAAC,gBAAgB,CAAyB;IAEjD,IAAW,WAAW,gBAKrB;IAED,OAAO,CAAC,gBAAgB;IAkFxB,OAAO,CAAC,gBAAgB;IA2CxB,OAAO,CAAC,cAAc;YAaR,mBAAmB;YASnB,2BAA2B;YA+B3B,oBAAoB;IA8DlC,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,yBAAyB;IAOjC,OAAO,CAAC,+BAA+B;YAiBzB,cAAc;IAsL5B,OAAO,CAAC,WAAW;YAaL,mBAAmB;YAiCnB,UAAU;IAUxB;;;OAGG;YACW,0BAA0B;YAwC1B,sBAAsB;IASpC,OAAO,CAAC,uBAAuB;IAczB,QAAQ,CAAC,UAAU,EAAE,WAAW;CAYzC"}
1
+ {"version":3,"file":"OpenApiClient.d.ts","sourceRoot":"","sources":["../../src/core/OpenApiClient.ts"],"names":[],"mappings":"AAMA,OAAO,EAAgB,WAAW,EAAsB,MAAM,uBAAuB,CAAC;AA2BtF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;GAEG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAK;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAiC;IAC/E,OAAO,CAAC,YAAY,CAA4B;IAChD,sEAAsE;IACtE,OAAO,CAAC,gBAAgB,CAAyB;IAEjD,+DAA+D;IAC/D,IAAW,WAAW,gBAKrB;IAED,OAAO,CAAC,gBAAgB;IAkFxB,OAAO,CAAC,gBAAgB;IA2CxB,OAAO,CAAC,cAAc;YAaR,mBAAmB;YASnB,2BAA2B;YA+B3B,oBAAoB;IA8DlC,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,yBAAyB;IAOjC,OAAO,CAAC,+BAA+B;YAiBzB,cAAc;IA0L5B,OAAO,CAAC,WAAW;YAaL,mBAAmB;YAiCnB,UAAU;IAUxB;;;OAGG;YACW,0BAA0B;YAwC1B,sBAAsB;IASpC,OAAO,CAAC,uBAAuB;IAe/B;;;OAGG;IACG,QAAQ,CAAC,UAAU,EAAE,WAAW;CAYzC"}
@@ -27,13 +27,18 @@ const loadDiffReport_1 = require("./utils/loadDiffReport");
27
27
  const postProcessClient_1 = require("./utils/postProcessClient");
28
28
  const prepareDtoModels_1 = require("./utils/prepareDtoModels");
29
29
  const registerHandlebarTemplates_1 = require("./utils/registerHandlebarTemplates");
30
+ const resolveClassesModeTypes_1 = require("./utils/resolveClassesModeTypes");
30
31
  const WriteClient_1 = require("./WriteClient");
32
+ /**
33
+ * Оркестратор генерации OpenAPI-клиента: парсинг спецификации, применение diff-отчёта и запись артефактов.
34
+ */
31
35
  class OpenApiClient {
32
36
  static CACHE_FINGERPRINT_VERSION = 1;
33
37
  static DEFAULT_CACHE_FILENAME = '.openapi-codegen-cache.json';
34
38
  _writeClient = null;
35
39
  /** ESLint paths from top-level rawOptions (not per items[] entry). */
36
40
  eslintFixOptions = {};
41
+ /** Экземпляр WriteClient для записи сгенерированных файлов. */
37
42
  get writeClient() {
38
43
  if (!this._writeClient) {
39
44
  throw new Error('WriteClient must be initialized');
@@ -361,6 +366,10 @@ class OpenApiClient {
361
366
  diffReport,
362
367
  inputPath: absoluteInput,
363
368
  });
369
+ if (useHistory && !diffReportData) {
370
+ const reportPath = diffReport || Consts_1.DEFAULT_ANALYZE_DIFF_REPORT_PATH;
371
+ this.writeClient.logger.warn(LoggerMessages_1.LOGGER_MESSAGES.DIFF_REPORT.USE_HISTORY_NO_REPORT(reportPath));
372
+ }
364
373
  this.writeClient.logger.info(LoggerMessages_1.LOGGER_MESSAGES.OPENAPI.DEFINING_VERSION);
365
374
  switch (openApiVersion) {
366
375
  case getOpenApiVersion_1.OpenApiVersion.V2: {
@@ -375,7 +384,7 @@ class OpenApiClient {
375
384
  context,
376
385
  });
377
386
  const clientFinal = (0, postProcessClient_1.postProcessClient)(clientWithDiff);
378
- const clientPrepared = modelsMode === ModelsMode_enum_1.ModelsMode.CLASSES ? (0, prepareDtoModels_1.prepareDtoModels)(clientFinal) : clientFinal;
387
+ const clientPrepared = modelsMode === ModelsMode_enum_1.ModelsMode.CLASSES ? (0, resolveClassesModeTypes_1.resolveClassesModeTypes)((0, prepareDtoModels_1.prepareDtoModels)(clientFinal)) : clientFinal;
379
388
  this.writeClient.logger.info(LoggerMessages_1.LOGGER_MESSAGES.OPENAPI.WRITING_V2);
380
389
  await this.writeClient.writeClient({
381
390
  client: clientPrepared,
@@ -408,7 +417,7 @@ class OpenApiClient {
408
417
  context,
409
418
  });
410
419
  const clientFinal = (0, postProcessClient_1.postProcessClient)(clientWithDiff);
411
- const clientPrepared = modelsMode === ModelsMode_enum_1.ModelsMode.CLASSES ? (0, prepareDtoModels_1.prepareDtoModels)(clientFinal) : clientFinal;
420
+ const clientPrepared = modelsMode === ModelsMode_enum_1.ModelsMode.CLASSES ? (0, resolveClassesModeTypes_1.resolveClassesModeTypes)((0, prepareDtoModels_1.prepareDtoModels)(clientFinal)) : clientFinal;
412
421
  this.writeClient.logger.info(LoggerMessages_1.LOGGER_MESSAGES.OPENAPI.WRITING_V3);
413
422
  await this.writeClient.writeClient({
414
423
  client: clientPrepared,
@@ -546,8 +555,13 @@ class OpenApiClient {
546
555
  openApiVersion: params.openApiVersion,
547
556
  diffReport: params.diffReport,
548
557
  prefix: params.context.prefix,
558
+ context: params.context,
549
559
  });
550
560
  }
561
+ /**
562
+ * Запускает генерацию клиента по опциям CLI или конфигурации.
563
+ * @param rawOptions сырые опции генерации
564
+ */
551
565
  async generate(rawOptions) {
552
566
  const logger = new Logger_1.Logger({
553
567
  level: rawOptions.logLevel ?? Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.logLevel,
@@ -20,17 +20,23 @@ import { writeClientServicesIndex } from './utils/writeClientServicesIndex';
20
20
  import { writeClientSimpleIndex } from './utils/writeClientSimpleIndex';
21
21
  import { WriteFileIfChangedResult } from './utils/writeFileIfChanged';
22
22
  /**
23
- * @param client Client object with all the models, services, etc.
24
- * @param templates Templates wrapper with all loaded Handlebars templates
25
- * @param outputPaths The relative location of the output directory
26
- * @param httpClient The selected httpClient (fetch, xhr or node)
27
- * @param useOptions Use options or arguments functions
28
- * @param useUnionTypes Use union types instead of enums
29
- * @param excludeCoreServiceFiles The generation of the core and services is excluded
30
- * @param request: Path to custom request file
31
- * @param useCancelableRequest Use cancelable request type.
32
- * @param useSeparatedIndexes Use separate index files for the core, models, schemas, and services
33
- * @param validationLibrary Validation library to use for schema validation
23
+ * Параметры записи OpenAPI-клиента на диск.
24
+ * @property client клиент со всеми моделями и сервисами
25
+ * @property templates загруженные Handlebars-шаблоны
26
+ * @property outputPaths относительные пути выходных директорий
27
+ * @property httpClient выбранный HTTP-клиент
28
+ * @property useOptions использовать options-функции вместо аргументов
29
+ * @property useUnionTypes использовать union types вместо enum
30
+ * @property excludeCoreServiceFiles исключить генерацию core и services
31
+ * @property [request] путь к кастомному request-файлу
32
+ * @property [customExecutorPath] путь к кастомному executor
33
+ * @property [useCancelableRequest] использовать cancelable request type
34
+ * @property [useSeparatedIndexes] писать отдельные index-файлы для core, models, schemas и services
35
+ * @property [validationLibrary] библиотека валидации схем
36
+ * @property emptySchemaStrategy стратегия обработки пустых схем
37
+ * @property [modelsMode] режим генерации моделей
38
+ * @property [useProjectPrettier] форматировать через Prettier проекта
39
+ * @property [useEslintFix] применять ESLint fix к сгенерированным файлам
34
40
  */
35
41
  type TWriteClientProps = {
36
42
  client: Client;
@@ -53,7 +59,7 @@ type TAPIClientGeneratorConfig = Omit<TWriteClientProps, 'httpClient' | 'useOpti
53
59
  schemaModels: Model[];
54
60
  };
55
61
  /**
56
- * The client which is writing all items and keep the parameters to write index file
62
+ * Клиент записи сгенерированных артефактов и сборки index-файлов.
57
63
  */
58
64
  export declare class WriteClient {
59
65
  private config;
@@ -64,24 +70,44 @@ export declare class WriteClient {
64
70
  /** Output directory globs for the temporary tsconfig include. */
65
71
  private lintIncludeGlobs;
66
72
  private _logger;
73
+ /**
74
+ * @param [logger] логгер записи клиента
75
+ */
67
76
  constructor(logger?: Logger);
68
77
  /**
69
- * Write our OpenAPI client, using the given templates at the given output
78
+ * Записывает OpenAPI-клиент по шаблонам в выходные директории.
79
+ * @param options параметры записи клиента
70
80
  */
71
81
  writeClient(options: TWriteClientProps): Promise<void>;
72
82
  private writeModelsAndFinalize;
73
83
  /**
74
- * Method keeps all options that is need to create index file
75
- * @param config
84
+ * Сохраняет конфигурацию генератора для последующей сборки index-файла.
85
+ * @param config конфигурация генератора клиента
76
86
  */
77
87
  buildClientGeneratorConfigMap(config: TAPIClientGeneratorConfig): void;
88
+ /** Собирает и записывает полный index клиента. */
78
89
  combineAndWrite(): Promise<void>;
90
+ /** Собирает и записывает упрощённый index клиента. */
79
91
  combineAndWrightSimple(): Promise<void>;
92
+ /** Логгер записи клиента. */
80
93
  get logger(): Logger;
94
+ /**
95
+ * Записывает выходной файл, если содержимое изменилось.
96
+ * @param filePath путь к файлу
97
+ * @param content содержимое файла
98
+ * @returns результат записи: written или unchanged
99
+ */
81
100
  writeOutputFile(filePath: string, content: string): Promise<WriteFileIfChangedResult>;
101
+ /**
102
+ * Регистрирует ожидаемый выходной файл без записи содержимого.
103
+ * @param filePath путь к файлу
104
+ */
82
105
  registerOutputFile(filePath: string): void;
106
+ /** Возвращает множество ожидаемых выходных файлов. */
83
107
  getExpectedOutputFiles(): Set<string>;
108
+ /** Возвращает список ожидаемых выходных файлов. */
84
109
  getExpectedOutputFilesArray(): string[];
110
+ /** Возвращает статистику записи файлов. */
85
111
  getWriteStats(): {
86
112
  written: number;
87
113
  unchanged: number;
@@ -112,16 +138,27 @@ export declare class WriteClient {
112
138
  private isSameModel;
113
139
  private isSameShema;
114
140
  private isSomeService;
141
+ /** Делегирует запись core-части клиента. */
115
142
  writeClientCore: typeof writeClientCore;
143
+ /** Делегирует запись index core-части. */
116
144
  writeClientCoreIndex: typeof writeClientCoreIndex;
145
+ /** Делегирует запись полного index клиента. */
117
146
  writeClientFullIndex: typeof writeClientFullIndex;
147
+ /** Делегирует запись моделей клиента. */
118
148
  writeClientModels: typeof writeClientModels;
149
+ /** Делегирует запись index моделей. */
119
150
  writeClientModelsIndex: typeof writeClientModelsIndex;
151
+ /** Делегирует запись схем клиента. */
120
152
  writeClientSchemas: typeof writeClientSchemas;
153
+ /** Делегирует запись index схем. */
121
154
  writeClientSchemasIndex: typeof writeClientSchemasIndex;
155
+ /** Делегирует запись сервисов клиента. */
122
156
  writeClientServices: typeof writeClientServices;
157
+ /** Делегирует запись index сервисов. */
123
158
  writeClientServicesIndex: typeof writeClientServicesIndex;
159
+ /** Делегирует запись упрощённого index клиента. */
124
160
  writeClientSimpleIndex: typeof writeClientSimpleIndex;
161
+ /** Делегирует запись executor клиента. */
125
162
  writeClientExecutor: typeof writeClientExecutor;
126
163
  }
127
164
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"WriteClient.d.ts","sourceRoot":"","sources":["../../src/core/WriteClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAM1C,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAIxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAsB,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAE1F;;;;;;;;;;;;GAYG;AACH,KAAK,iBAAiB,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,uBAAuB,EAAE,OAAO,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,KAAK,yBAAyB,GAAG,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,sBAAsB,GAAG,qBAAqB,CAAC,GAAG;IACjJ,YAAY,EAAE,KAAK,EAAE,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAuD;IACrE,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,UAAU,CAAgC;IAClD,wEAAwE;IACxE,OAAO,CAAC,eAAe,CAAqB;IAC5C,iEAAiE;IACjE,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,CAAC,EAAE,MAAM;IAU3B;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;YAiI9C,sBAAsB;IAwDpC;;;OAGG;IACH,6BAA6B,CAAC,MAAM,EAAE,yBAAyB;IAUzD,eAAe;IAKf,sBAAsB;IAK5B,IAAW,MAAM,WAEhB;IAEY,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAO3F,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI1C,sBAAsB,IAAI,GAAG,CAAC,MAAM,CAAC;IAIrC,2BAA2B,IAAI,MAAM,EAAE;IAIvC,aAAa,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAI9D;;;;;OAKG;IACI,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAKrE;;OAEG;IACI,cAAc,IAAI;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE;IAOpE,0EAA0E;IACnE,gBAAgB,IAAI,IAAI;IAK/B,OAAO,CAAC,yBAAyB;IAyCjC,OAAO,CAAC,mBAAmB;YAkEb,gBAAgB;YAUhB,uBAAuB;IAMrC,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,aAAa;IAId,eAAe,yBAAmB;IAClC,oBAAoB,8BAAwB;IAC5C,oBAAoB,8BAAwB;IAC5C,iBAAiB,2BAAqB;IACtC,sBAAsB,gCAA0B;IAChD,kBAAkB,4BAAsB;IACxC,uBAAuB,iCAA2B;IAClD,mBAAmB,6BAAuB;IAC1C,wBAAwB,kCAA4B;IACpD,sBAAsB,gCAA0B;IAChD,mBAAmB,6BAAuB;CACpD"}
1
+ {"version":3,"file":"WriteClient.d.ts","sourceRoot":"","sources":["../../src/core/WriteClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAM1C,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAIxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAsB,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAE1F;;;;;;;;;;;;;;;;;;GAkBG;AACH,KAAK,iBAAiB,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,uBAAuB,EAAE,OAAO,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,KAAK,yBAAyB,GAAG,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,sBAAsB,GAAG,qBAAqB,CAAC,GAAG;IACjJ,YAAY,EAAE,KAAK,EAAE,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAuD;IACrE,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,UAAU,CAAgC;IAClD,wEAAwE;IACxE,OAAO,CAAC,eAAe,CAAqB;IAC5C,iEAAiE;IACjE,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,OAAO,CAAS;IAExB;;OAEG;gBACS,MAAM,CAAC,EAAE,MAAM;IAU3B;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;YAkI9C,sBAAsB;IAwDpC;;;OAGG;IACH,6BAA6B,CAAC,MAAM,EAAE,yBAAyB;IAU/D,kDAAkD;IAC5C,eAAe;IAKrB,sDAAsD;IAChD,sBAAsB;IAK5B,6BAA6B;IAC7B,IAAW,MAAM,WAEhB;IAED;;;;;OAKG;IACU,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAOlG;;;OAGG;IACI,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIjD,sDAAsD;IAC/C,sBAAsB,IAAI,GAAG,CAAC,MAAM,CAAC;IAI5C,mDAAmD;IAC5C,2BAA2B,IAAI,MAAM,EAAE;IAI9C,2CAA2C;IACpC,aAAa,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAI9D;;;;;OAKG;IACI,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAKrE;;OAEG;IACI,cAAc,IAAI;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE;IAOpE,0EAA0E;IACnE,gBAAgB,IAAI,IAAI;IAK/B,OAAO,CAAC,yBAAyB;IAyCjC,OAAO,CAAC,mBAAmB;YAkEb,gBAAgB;YAUhB,uBAAuB;IAMrC,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,aAAa;IAIrB,4CAA4C;IACrC,eAAe,yBAAmB;IACzC,0CAA0C;IACnC,oBAAoB,8BAAwB;IACnD,+CAA+C;IACxC,oBAAoB,8BAAwB;IACnD,yCAAyC;IAClC,iBAAiB,2BAAqB;IAC7C,uCAAuC;IAChC,sBAAsB,gCAA0B;IACvD,sCAAsC;IAC/B,kBAAkB,4BAAsB;IAC/C,oCAAoC;IAC7B,uBAAuB,iCAA2B;IACzD,0CAA0C;IACnC,mBAAmB,6BAAuB;IACjD,wCAAwC;IACjC,wBAAwB,kCAA4B;IAC3D,mDAAmD;IAC5C,sBAAsB,gCAA0B;IACvD,0CAA0C;IACnC,mBAAmB,6BAAuB;CACpD"}
@@ -23,7 +23,7 @@ const writeClientServicesIndex_1 = require("./utils/writeClientServicesIndex");
23
23
  const writeClientSimpleIndex_1 = require("./utils/writeClientSimpleIndex");
24
24
  const writeFileIfChanged_1 = require("./utils/writeFileIfChanged");
25
25
  /**
26
- * The client which is writing all items and keep the parameters to write index file
26
+ * Клиент записи сгенерированных артефактов и сборки index-файлов.
27
27
  */
28
28
  class WriteClient {
29
29
  config = new Map();
@@ -34,6 +34,9 @@ class WriteClient {
34
34
  /** Output directory globs for the temporary tsconfig include. */
35
35
  lintIncludeGlobs = new Set();
36
36
  _logger;
37
+ /**
38
+ * @param [logger] логгер записи клиента
39
+ */
37
40
  constructor(logger) {
38
41
  this._logger =
39
42
  logger ||
@@ -44,7 +47,8 @@ class WriteClient {
44
47
  });
45
48
  }
46
49
  /**
47
- * Write our OpenAPI client, using the given templates at the given output
50
+ * Записывает OpenAPI-клиент по шаблонам в выходные директории.
51
+ * @param options параметры записи клиента
48
52
  */
49
53
  async writeClient(options) {
50
54
  const { client, templates, outputPaths, httpClient, useOptions, useUnionTypes, excludeCoreServiceFiles = false, request, customExecutorPath, useCancelableRequest = false, useSeparatedIndexes = false, validationLibrary = ValidationLibrary_enum_1.ValidationLibrary.NONE, emptySchemaStrategy, modelsMode, prettierConfigPath, } = options;
@@ -77,6 +81,7 @@ class WriteClient {
77
81
  useOptions,
78
82
  useCancelableRequest,
79
83
  prettierConfigPath,
84
+ modelsMode,
80
85
  });
81
86
  await this.writeClientServicesIndex({
82
87
  services: client.services,
@@ -195,8 +200,8 @@ class WriteClient {
195
200
  });
196
201
  }
197
202
  /**
198
- * Method keeps all options that is need to create index file
199
- * @param config
203
+ * Сохраняет конфигурацию генератора для последующей сборки index-файла.
204
+ * @param config конфигурация генератора клиента
200
205
  */
201
206
  buildClientGeneratorConfigMap(config) {
202
207
  const { outputPaths } = config;
@@ -208,32 +213,48 @@ class WriteClient {
208
213
  this.config.set(outputPaths.output, Array.of(config));
209
214
  }
210
215
  }
216
+ /** Собирает и записывает полный index клиента. */
211
217
  async combineAndWrite() {
212
218
  const result = this.buildClientIndexMap();
213
219
  await this.finalizeAndWrite(result);
214
220
  }
221
+ /** Собирает и записывает упрощённый index клиента. */
215
222
  async combineAndWrightSimple() {
216
223
  const result = this.buildSimpleClientIndexMap();
217
224
  await this.simpledFinalizeAndWrite(result);
218
225
  }
226
+ /** Логгер записи клиента. */
219
227
  get logger() {
220
228
  return this._logger;
221
229
  }
230
+ /**
231
+ * Записывает выходной файл, если содержимое изменилось.
232
+ * @param filePath путь к файлу
233
+ * @param content содержимое файла
234
+ * @returns результат записи: written или unchanged
235
+ */
222
236
  async writeOutputFile(filePath, content) {
223
237
  this.expectedOutputFiles.add((0, pathHelpers_1.resolveHelper)(process.cwd(), filePath));
224
238
  const result = await (0, writeFileIfChanged_1.writeFileIfChanged)(filePath, content);
225
239
  this.writeStats[result] += 1;
226
240
  return result;
227
241
  }
242
+ /**
243
+ * Регистрирует ожидаемый выходной файл без записи содержимого.
244
+ * @param filePath путь к файлу
245
+ */
228
246
  registerOutputFile(filePath) {
229
247
  this.expectedOutputFiles.add((0, pathHelpers_1.resolveHelper)(process.cwd(), filePath));
230
248
  }
249
+ /** Возвращает множество ожидаемых выходных файлов. */
231
250
  getExpectedOutputFiles() {
232
251
  return this.expectedOutputFiles;
233
252
  }
253
+ /** Возвращает список ожидаемых выходных файлов. */
234
254
  getExpectedOutputFilesArray() {
235
255
  return Array.from(this.expectedOutputFiles);
236
256
  }
257
+ /** Возвращает статистику записи файлов. */
237
258
  getWriteStats() {
238
259
  return { ...this.writeStats };
239
260
  }
@@ -406,16 +427,27 @@ class WriteClient {
406
427
  isSomeService(a, name, pkg) {
407
428
  return a.name === name && a.package === pkg;
408
429
  }
430
+ /** Делегирует запись core-части клиента. */
409
431
  writeClientCore = writeClientCore_1.writeClientCore;
432
+ /** Делегирует запись index core-части. */
410
433
  writeClientCoreIndex = writeClientCoreIndex_1.writeClientCoreIndex;
434
+ /** Делегирует запись полного index клиента. */
411
435
  writeClientFullIndex = writeClientFullIndex_1.writeClientFullIndex;
436
+ /** Делегирует запись моделей клиента. */
412
437
  writeClientModels = writeClientModels_1.writeClientModels;
438
+ /** Делегирует запись index моделей. */
413
439
  writeClientModelsIndex = writeClientModelsIndex_1.writeClientModelsIndex;
440
+ /** Делегирует запись схем клиента. */
414
441
  writeClientSchemas = writeClientSchemas_1.writeClientSchemas;
442
+ /** Делегирует запись index схем. */
415
443
  writeClientSchemasIndex = writeClientSchemasIndex_1.writeClientSchemasIndex;
444
+ /** Делегирует запись сервисов клиента. */
416
445
  writeClientServices = writeClientServices_1.writeClientServices;
446
+ /** Делегирует запись index сервисов. */
417
447
  writeClientServicesIndex = writeClientServicesIndex_1.writeClientServicesIndex;
448
+ /** Делегирует запись упрощённого index клиента. */
418
449
  writeClientSimpleIndex = writeClientSimpleIndex_1.writeClientSimpleIndex;
450
+ /** Делегирует запись executor клиента. */
419
451
  writeClientExecutor = writeClientExecutor_1.writeClientExecutor;
420
452
  }
421
453
  exports.WriteClient = WriteClient;
@@ -44,6 +44,78 @@ const analyzeOpenApiDiff_1 = require("../analyzeOpenApiDiff");
44
44
  node_assert_1.default.ok(report.changes.some(change => change.type === 'model.removed'));
45
45
  node_assert_1.default.ok(report.changes.some(change => change.type === 'operation.removed'));
46
46
  });
47
+ (0, node_test_1.test)('includes from/to on property type and enum value changes', () => {
48
+ const oldSpec = {
49
+ openapi: '3.0.0',
50
+ paths: {},
51
+ components: {
52
+ schemas: {
53
+ User: {
54
+ type: 'object',
55
+ properties: {
56
+ age: { type: 'number' },
57
+ role: { enum: ['user', 'admin'] },
58
+ },
59
+ },
60
+ },
61
+ },
62
+ };
63
+ const newSpec = {
64
+ openapi: '3.0.0',
65
+ paths: {},
66
+ components: {
67
+ schemas: {
68
+ User: {
69
+ type: 'object',
70
+ properties: {
71
+ age: { type: 'integer' },
72
+ role: { enum: ['admin'] },
73
+ },
74
+ },
75
+ },
76
+ },
77
+ };
78
+ const report = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec);
79
+ const typeChange = report.changes.find(change => change.type === 'model.property.type.changed' && change.path.includes('/age'));
80
+ const roleTypeChange = report.changes.find(change => change.type === 'model.property.type.changed' && change.path.includes('/role'));
81
+ node_assert_1.default.strictEqual(typeChange?.from, 'number');
82
+ node_assert_1.default.strictEqual(typeChange?.to, 'integer');
83
+ node_assert_1.default.strictEqual(roleTypeChange?.from, 'enum(admin|user)');
84
+ node_assert_1.default.strictEqual(roleTypeChange?.to, 'enum(admin)');
85
+ });
86
+ (0, node_test_1.test)('includes operation metadata on operation.removed', () => {
87
+ const oldSpec = {
88
+ openapi: '3.0.0',
89
+ paths: {
90
+ '/pets': {
91
+ get: {
92
+ operationId: 'listPets',
93
+ summary: 'List pets',
94
+ description: 'Returns pets',
95
+ tags: ['pets'],
96
+ responses: {
97
+ '200': { description: 'ok' },
98
+ },
99
+ },
100
+ },
101
+ },
102
+ components: { schemas: {} },
103
+ };
104
+ const newSpec = {
105
+ openapi: '3.0.0',
106
+ paths: {},
107
+ components: { schemas: {} },
108
+ };
109
+ const report = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)(oldSpec, newSpec);
110
+ const removed = report.changes.find(change => change.type === 'operation.removed');
111
+ node_assert_1.default.ok(removed);
112
+ node_assert_1.default.deepStrictEqual(removed?.from, {
113
+ operationId: 'listPets',
114
+ summary: 'List pets',
115
+ description: 'Returns pets',
116
+ tags: ['pets'],
117
+ });
118
+ });
47
119
  (0, node_test_1.test)('detects property required/type changes and enum changes', () => {
48
120
  const oldSpec = {
49
121
  openapi: '3.0.0',
@@ -5,11 +5,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const node_assert_1 = __importDefault(require("node:assert"));
7
7
  const node_test_1 = require("node:test");
8
+ const DiffReport_model_1 = require("../../types/DiffReport.model");
9
+ const adapters_1 = require("../../utils/adapters");
8
10
  const analyzeOpenApiDiff_1 = require("../analyzeOpenApiDiff");
9
11
  const semanticDiffReportSchema_1 = require("../semanticDiffReportSchema");
10
12
  (0, node_test_1.describe)('@unit: semanticDiffReportSchema', () => {
11
13
  (0, node_test_1.test)('validates report produced by analyzeOpenApiDiff', () => {
12
- const report = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)({
14
+ const semanticReport = (0, analyzeOpenApiDiff_1.analyzeOpenApiDiff)({
13
15
  openapi: '3.0.0',
14
16
  paths: {
15
17
  '/ping': {
@@ -35,6 +37,23 @@ const semanticDiffReportSchema_1 = require("../semanticDiffReportSchema");
35
37
  },
36
38
  components: { schemas: {} },
37
39
  });
40
+ const report = {
41
+ schemaVersion: DiffReport_model_1.UNIFIED_DIFF_REPORT_SCHEMA_VERSION,
42
+ timestamp: '2026-01-01T00:00:00.000Z',
43
+ metadata: {
44
+ base: 'old',
45
+ target: 'new',
46
+ baseHash: 'old-hash',
47
+ targetHash: 'new-hash',
48
+ },
49
+ semantic: {
50
+ changes: semanticReport.changes,
51
+ governance: semanticReport.governance,
52
+ recommendation: semanticReport.recommendation,
53
+ summary: semanticReport.summary,
54
+ },
55
+ structural: (0, adapters_1.adaptSemanticToStructural)(semanticReport),
56
+ };
38
57
  const validation = (0, semanticDiffReportSchema_1.validateSemanticDiffReportSchema)(report);
39
58
  node_assert_1.default.strictEqual(validation.valid, true, validation.errors.join('\n'));
40
59
  });