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.
- package/README.md +4 -0
- package/README.rus.md +4 -0
- package/dist/cli/analyzeDiff/__tests__/analyzeDiff.cli.test.js +31 -24
- package/dist/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.d.ts +2 -0
- package/dist/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.d.ts.map +1 -0
- package/dist/cli/analyzeDiff/__tests__/analyzeDiffLomMiracles.test.js +47 -0
- package/dist/cli/analyzeDiff/__tests__/analyzeDiffRenameAndInvalidRegex.test.js +8 -7
- package/dist/cli/analyzeDiff/__tests__/analyzeDiffTypeCoercion.test.js +8 -7
- package/dist/cli/analyzeDiff/analyzeDiff.d.ts +14 -2
- package/dist/cli/analyzeDiff/analyzeDiff.d.ts.map +1 -1
- package/dist/cli/analyzeDiff/analyzeDiff.js +56 -13
- package/dist/cli/analyzeDiff/ciSummary.d.ts +6 -3
- package/dist/cli/analyzeDiff/ciSummary.d.ts.map +1 -1
- package/dist/cli/analyzeDiff/ciSummary.js +10 -6
- package/dist/cli/analyzeDiff/report.d.ts +0 -1
- package/dist/cli/analyzeDiff/report.d.ts.map +1 -1
- package/dist/cli/analyzeDiff/report.js +1 -3
- package/dist/cli/analyzeDiff/writeLegacyReport.d.ts +2 -0
- package/dist/cli/analyzeDiff/writeLegacyReport.d.ts.map +1 -1
- package/dist/cli/analyzeDiff/writeLegacyReport.js +2 -0
- package/dist/cli/analyzeUsage/core/Scanner.d.ts +8 -0
- package/dist/cli/analyzeUsage/core/Scanner.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/core/Scanner.js +10 -0
- package/dist/cli/analyzeUsage/rules/ClientRule.d.ts +8 -0
- package/dist/cli/analyzeUsage/rules/ClientRule.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/rules/ClientRule.js +10 -0
- package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts +8 -0
- package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts.map +1 -1
- package/dist/cli/analyzeUsage/rules/ServiceRule.js +10 -0
- package/dist/common/LoggerMessages.d.ts +5 -0
- package/dist/common/LoggerMessages.d.ts.map +1 -1
- package/dist/common/LoggerMessages.js +4 -0
- package/dist/core/OpenApiClient.d.ts +8 -0
- package/dist/core/OpenApiClient.d.ts.map +1 -1
- package/dist/core/OpenApiClient.js +16 -2
- package/dist/core/WriteClient.d.ts +52 -15
- package/dist/core/WriteClient.d.ts.map +1 -1
- package/dist/core/WriteClient.js +36 -4
- package/dist/core/semanticDiff/__tests__/analyzeOpenApiDiff.test.js +72 -0
- package/dist/core/semanticDiff/__tests__/semanticDiffReportSchema.test.js +20 -1
- package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts +58 -6
- package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts.map +1 -1
- package/dist/core/semanticDiff/analyzeOpenApiDiff.js +47 -19
- package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts +11 -1
- package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts.map +1 -1
- package/dist/core/semanticDiff/semanticDiffReportSchema.js +140 -50
- package/dist/core/types/DiffReport.model.d.ts +101 -0
- package/dist/core/types/DiffReport.model.d.ts.map +1 -0
- package/dist/core/types/DiffReport.model.js +5 -0
- package/dist/core/types/shared/Model.model.d.ts +36 -0
- package/dist/core/types/shared/Model.model.d.ts.map +1 -1
- package/dist/core/utils/__tests__/applyDiffReportToClient.test.js +182 -0
- package/dist/core/utils/__tests__/buildMiraclesFromSemanticChanges.test.d.ts +2 -0
- package/dist/core/utils/__tests__/buildMiraclesFromSemanticChanges.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/buildMiraclesFromSemanticChanges.test.js +77 -0
- package/dist/core/utils/__tests__/expandOpenApiRefsForSemanticDiff.test.d.ts +2 -0
- package/dist/core/utils/__tests__/expandOpenApiRefsForSemanticDiff.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/expandOpenApiRefsForSemanticDiff.test.js +159 -0
- package/dist/core/utils/__tests__/loadDiffReport.test.js +131 -0
- package/dist/core/utils/__tests__/modelHelpers.test.js +27 -9
- package/dist/core/utils/__tests__/prepareDtoModels.test.js +74 -2
- package/dist/core/utils/__tests__/resolveClassesModeTypes.test.d.ts +2 -0
- package/dist/core/utils/__tests__/resolveClassesModeTypes.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/resolveClassesModeTypes.test.js +111 -0
- package/dist/core/utils/__tests__/semanticChangesToDiffEntries.test.d.ts +2 -0
- package/dist/core/utils/__tests__/semanticChangesToDiffEntries.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/semanticChangesToDiffEntries.test.js +68 -0
- package/dist/core/utils/__tests__/serviceHelpers.test.js +10 -11
- package/dist/core/utils/__tests__/templateRendering.test.js +71 -0
- package/dist/core/utils/adapters/__tests__/semanticToStructural.test.d.ts +2 -0
- package/dist/core/utils/adapters/__tests__/semanticToStructural.test.d.ts.map +1 -0
- package/dist/core/utils/adapters/__tests__/semanticToStructural.test.js +63 -0
- package/dist/core/utils/adapters/extractMiraclesFromSemantic.d.ts +10 -0
- package/dist/core/utils/adapters/extractMiraclesFromSemantic.d.ts.map +1 -0
- package/dist/core/utils/adapters/extractMiraclesFromSemantic.js +13 -0
- package/dist/core/utils/adapters/index.d.ts +4 -0
- package/dist/core/utils/adapters/index.d.ts.map +1 -0
- package/dist/core/utils/adapters/index.js +8 -0
- package/dist/core/utils/adapters/semanticToStructural.d.ts +12 -0
- package/dist/core/utils/adapters/semanticToStructural.d.ts.map +1 -0
- package/dist/core/utils/adapters/semanticToStructural.js +36 -0
- package/dist/core/utils/applyDiffReportToClient.d.ts +13 -1
- package/dist/core/utils/applyDiffReportToClient.d.ts.map +1 -1
- package/dist/core/utils/applyDiffReportToClient.js +187 -107
- package/dist/core/utils/buildMiraclesFromSemanticChanges.d.ts +25 -0
- package/dist/core/utils/buildMiraclesFromSemanticChanges.d.ts.map +1 -0
- package/dist/core/utils/buildMiraclesFromSemanticChanges.js +146 -0
- package/dist/core/utils/expandOpenApiRefsForSemanticDiff.d.ts +23 -0
- package/dist/core/utils/expandOpenApiRefsForSemanticDiff.d.ts.map +1 -0
- package/dist/core/utils/expandOpenApiRefsForSemanticDiff.js +163 -0
- package/dist/core/utils/getOpenApiSpec.d.ts +18 -0
- package/dist/core/utils/getOpenApiSpec.d.ts.map +1 -1
- package/dist/core/utils/getOpenApiSpec.js +35 -0
- package/dist/core/utils/loadDiffReport.d.ts +11 -30
- package/dist/core/utils/loadDiffReport.d.ts.map +1 -1
- package/dist/core/utils/loadDiffReport.js +69 -3
- package/dist/core/utils/loadSemanticOpenApiSpec.d.ts +15 -0
- package/dist/core/utils/loadSemanticOpenApiSpec.d.ts.map +1 -0
- package/dist/core/utils/loadSemanticOpenApiSpec.js +61 -0
- package/dist/core/utils/modelHelpers.d.ts +13 -5
- package/dist/core/utils/modelHelpers.d.ts.map +1 -1
- package/dist/core/utils/modelHelpers.js +28 -23
- package/dist/core/utils/prepareDtoModels.d.ts +5 -0
- package/dist/core/utils/prepareDtoModels.d.ts.map +1 -1
- package/dist/core/utils/prepareDtoModels.js +55 -12
- package/dist/core/utils/resolveClassesModeTypes.d.ts +8 -0
- package/dist/core/utils/resolveClassesModeTypes.d.ts.map +1 -0
- package/dist/core/utils/resolveClassesModeTypes.js +77 -0
- package/dist/core/utils/semanticChangesToDiffEntries.d.ts +37 -0
- package/dist/core/utils/semanticChangesToDiffEntries.d.ts.map +1 -0
- package/dist/core/utils/semanticChangesToDiffEntries.js +99 -0
- package/dist/core/utils/semanticPointerToJsonPath.d.ts +7 -0
- package/dist/core/utils/semanticPointerToJsonPath.d.ts.map +1 -0
- package/dist/core/utils/semanticPointerToJsonPath.js +67 -0
- package/dist/core/utils/serviceHelpers.d.ts +6 -7
- package/dist/core/utils/serviceHelpers.d.ts.map +1 -1
- package/dist/core/utils/serviceHelpers.js +8 -25
- package/dist/core/utils/writeClientServices.d.ts +14 -14
- package/dist/core/utils/writeClientServices.d.ts.map +1 -1
- package/dist/core/utils/writeClientServices.js +4 -8
- package/dist/templatesCompiled/client/exportModels.d.ts +17 -11
- package/dist/templatesCompiled/client/exportModels.d.ts.map +1 -1
- package/dist/templatesCompiled/client/exportModels.js +96 -49
- package/dist/templatesCompiled/client/exportService.d.ts +13 -10
- package/dist/templatesCompiled/client/exportService.d.ts.map +1 -1
- package/dist/templatesCompiled/client/exportService.js +95 -67
- package/package.json +1 -3
- package/dist/cli/analyzeDiff/buildLegacyReport.d.ts +0 -17
- package/dist/cli/analyzeDiff/buildLegacyReport.d.ts.map +0 -1
- package/dist/cli/analyzeDiff/buildLegacyReport.js +0 -54
- package/dist/cli/analyzeDiff/diffEngine.d.ts +0 -54
- package/dist/cli/analyzeDiff/diffEngine.d.ts.map +0 -1
- 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;
|
|
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":"AAAA;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;CAWrB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAezE,CAAC;AAEF,eAAO,MAAM,eAAe;;kCAGH,MAAM;;oDAEY,MAAM;2CACf,MAAM,YAAY,MAAM;;wCAE3B,MAAM,aAAa,MAAM;wDACT,MAAM;oCAG1B,MAAM;qCACL,MAAM;qDACU,MAAM;;;;;;;;;;wCAcnB,MAAM;2CACH,MAAM;;;;sCAIX,MAAM;2CACD,MAAM;4CACL,MAAM;;0CAER,MAAM;;4DAEY,MAAM;;wCAE1B,MAAM;gDACE,MAAM;;gDAEN,MAAM;kDACJ,MAAM;;;;;yCAKf,MAAM;;;;oCAMX,MAAM;yCACD,MAAM,WAAW,MAAM;4CACpB,MAAM;;;;;;;;;0DAeQ,MAAM;;sCAE1B,MAAM;;;+CAKG,MAAM;;;4CAKT,MAAM;2CACP,MAAM;;yCAER,MAAM;wCACP,MAAM;wCACN,MAAM;4CACF,MAAM;;4CAEN,MAAM;iDACD,MAAM;;;;;;;8BASzB,MAAM;kCACF,MAAM;0CACE,MAAM;kCACd,MAAM,SAAS,MAAM,WAAW,MAAM,WAAW,MAAM;yCAChD,MAAM;wCACP,MAAM;wCACN,MAAM;8CACA,MAAM;mDACD,MAAM,SAAS,MAAM;oCACpC,MAAM,cAAc,MAAM;;6CAEjB,MAAM;sDACG,MAAM;iDACX;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE;8CAI7F,MAAM;mCAEvB;YACJ,OAAO,EAAE;gBAAE,QAAQ,EAAE,MAAM,CAAC;gBAAC,WAAW,EAAE,MAAM,CAAC;gBAAC,aAAa,EAAE,MAAM,CAAA;aAAE,CAAC;YAC1E,UAAU,EAAE;gBAAE,OAAO,EAAE;oBAAE,MAAM,EAAE,MAAM,CAAC;oBAAC,QAAQ,EAAE,MAAM,CAAC;oBAAC,IAAI,EAAE,MAAM,CAAA;iBAAE,CAAA;aAAE,CAAC;SAC/E,cACW,MAAM;0CAGG;YAAE,cAAc,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAC;gBAAC,UAAU,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,MAAM,EAAE,CAAA;aAAE,CAAA;SAAE;sCAEjG;YAAE,UAAU,EAAE;gBAAE,OAAO,EAAE;oBAAE,MAAM,EAAE,MAAM,CAAC;oBAAC,QAAQ,EAAE,MAAM,CAAC;oBAAC,IAAI,EAAE,MAAM,CAAA;iBAAE,CAAA;aAAE,CAAA;SAAE;iDAEpE,MAAM;;0CAEb,MAAM;4CACJ,MAAM;qCACb,MAAM;yCACF,MAAM;iDACE,MAAM;yCACd;YAAE,YAAY,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE;0CAExE,MAAM;0CACN,MAAM;yCACP,MAAM;;;yCAIN,MAAM;qCACV,MAAM;qCACN,MAAM;
|
|
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;
|
|
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
|
-
*
|
|
24
|
-
* @
|
|
25
|
-
* @
|
|
26
|
-
* @
|
|
27
|
-
* @
|
|
28
|
-
* @
|
|
29
|
-
* @
|
|
30
|
-
* @
|
|
31
|
-
* @
|
|
32
|
-
* @
|
|
33
|
-
* @
|
|
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
|
-
*
|
|
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
|
-
*
|
|
78
|
+
* Записывает OpenAPI-клиент по шаблонам в выходные директории.
|
|
79
|
+
* @param options параметры записи клиента
|
|
70
80
|
*/
|
|
71
81
|
writeClient(options: TWriteClientProps): Promise<void>;
|
|
72
82
|
private writeModelsAndFinalize;
|
|
73
83
|
/**
|
|
74
|
-
*
|
|
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
|
|
1
|
+
{"version":3,"file":"WriteClient.d.ts","sourceRoot":"","sources":["../../src/core/WriteClient.ts"],"names":[],"mappings":"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"}
|
package/dist/core/WriteClient.js
CHANGED
|
@@ -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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
|
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
|
});
|