ts-openapi-codegen 2.1.0-beta.5 → 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.
- package/README.md +3 -0
- package/README.rus.md +3 -0
- package/dist/cli/analyzeDiff/__tests__/analyzeDiff.cli.test.js +9 -0
- package/dist/cli/analyzeDiff/__tests__/analyzeDiffRenameAndInvalidRegex.test.js +9 -0
- package/dist/cli/analyzeDiff/__tests__/analyzeDiffTypeCoercion.test.js +9 -0
- package/dist/cli/analyzeUsage/analyzeUsage.d.ts +4 -0
- package/dist/cli/analyzeUsage/analyzeUsage.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/analyzeUsage.js +62 -0
- package/dist/cli/analyzeUsage/core/Analyzer.d.ts +9 -0
- package/dist/cli/analyzeUsage/core/Analyzer.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/core/Analyzer.js +29 -0
- package/dist/cli/analyzeUsage/core/ProjectContext.d.ts +10 -0
- package/dist/cli/analyzeUsage/core/ProjectContext.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/core/ProjectContext.js +63 -0
- package/dist/cli/analyzeUsage/core/Scanner.d.ts +15 -0
- package/dist/cli/analyzeUsage/core/Scanner.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/core/Scanner.js +115 -0
- package/dist/cli/analyzeUsage/rules/ClientRule.d.ts +6 -0
- package/dist/cli/analyzeUsage/rules/ClientRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/ClientRule.js +78 -0
- package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts +7 -0
- package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/CoverageRule.js +63 -0
- package/dist/cli/analyzeUsage/rules/DiagnosticsRule.d.ts +6 -0
- package/dist/cli/analyzeUsage/rules/DiagnosticsRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/DiagnosticsRule.js +60 -0
- package/dist/cli/analyzeUsage/rules/ImportRule.d.ts +6 -0
- package/dist/cli/analyzeUsage/rules/ImportRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/ImportRule.js +52 -0
- package/dist/cli/analyzeUsage/rules/ModelRule.d.ts +6 -0
- package/dist/cli/analyzeUsage/rules/ModelRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/ModelRule.js +38 -0
- package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts +6 -0
- package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/SchemaRule.js +48 -0
- package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts +7 -0
- package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/ServiceRule.js +92 -0
- package/dist/cli/analyzeUsage/types.d.ts +52 -0
- package/dist/cli/analyzeUsage/types.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/types.js +2 -0
- package/dist/cli/analyzeUsage/utils/fuzzy.d.ts +5 -0
- package/dist/cli/analyzeUsage/utils/fuzzy.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/utils/fuzzy.js +38 -0
- package/dist/cli/analyzeUsage/utils/report.d.ts +16 -0
- package/dist/cli/analyzeUsage/utils/report.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/utils/report.js +85 -0
- package/dist/cli/checkAndUpdateConfig/__tests__/checkConfig.test.d.ts +2 -0
- package/dist/cli/checkAndUpdateConfig/__tests__/checkConfig.test.d.ts.map +1 -0
- package/dist/cli/checkAndUpdateConfig/__tests__/checkConfig.test.js +53 -0
- package/dist/cli/checkAndUpdateConfig/__tests__/updateConfig.test.d.ts +2 -0
- package/dist/cli/checkAndUpdateConfig/__tests__/updateConfig.test.d.ts.map +1 -0
- package/dist/cli/checkAndUpdateConfig/__tests__/updateConfig.test.js +52 -0
- package/dist/cli/checkAndUpdateConfig/checkConfig.d.ts +2 -1
- package/dist/cli/checkAndUpdateConfig/checkConfig.d.ts.map +1 -1
- package/dist/cli/checkAndUpdateConfig/checkConfig.js +8 -4
- package/dist/cli/checkAndUpdateConfig/updateConfig.d.ts +2 -1
- package/dist/cli/checkAndUpdateConfig/updateConfig.d.ts.map +1 -1
- package/dist/cli/checkAndUpdateConfig/updateConfig.js +6 -3
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/prepareConfigData.test.d.ts +2 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/prepareConfigData.test.d.ts.map +1 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/prepareConfigData.test.js +20 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/removeDefaultConfigValues.test.d.ts +2 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/removeDefaultConfigValues.test.d.ts.map +1 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/removeDefaultConfigValues.test.js +35 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/validateAndMigrateConfigData.test.d.ts +2 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/validateAndMigrateConfigData.test.d.ts.map +1 -0
- package/dist/cli/checkAndUpdateConfig/utils/__tests__/validateAndMigrateConfigData.test.js +59 -0
- package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.d.ts.map +1 -1
- package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.js +19 -1
- package/dist/cli/generateOpenApiClient/__tests__/generateOpenApiClient.strict.test.js +18 -9
- package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts +2 -5
- package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts.map +1 -1
- package/dist/cli/generateOpenApiClient/generateOpenApiClient.js +12 -16
- package/dist/cli/index.js +41 -7
- package/dist/cli/initOpenApiConfig/__tests__/init.test.d.ts +2 -0
- package/dist/cli/initOpenApiConfig/__tests__/init.test.d.ts.map +1 -0
- package/dist/cli/initOpenApiConfig/__tests__/init.test.js +20 -0
- package/dist/cli/initOpenApiConfig/__tests__/initConfig.test.d.ts +2 -0
- package/dist/cli/initOpenApiConfig/__tests__/initConfig.test.d.ts.map +1 -0
- package/dist/cli/initOpenApiConfig/__tests__/initConfig.test.js +49 -0
- package/dist/cli/initOpenApiConfig/init.d.ts +2 -1
- package/dist/cli/initOpenApiConfig/init.d.ts.map +1 -1
- package/dist/cli/initOpenApiConfig/init.js +3 -1
- package/dist/cli/initOpenApiConfig/utils/__tests__/buildConfig.test.d.ts +2 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/buildConfig.test.d.ts.map +1 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/buildConfig.test.js +99 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/findSpecFiles.test.d.ts +2 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/findSpecFiles.test.d.ts.map +1 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/findSpecFiles.test.js +45 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/validateSpecFiles.test.d.ts +2 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/validateSpecFiles.test.d.ts.map +1 -0
- package/dist/cli/initOpenApiConfig/utils/__tests__/validateSpecFiles.test.js +61 -0
- package/dist/cli/previewChanges/previewChanges.d.ts +2 -1
- package/dist/cli/previewChanges/previewChanges.d.ts.map +1 -1
- package/dist/cli/previewChanges/previewChanges.js +6 -6
- package/dist/cli/previewChanges/utils/__tests__/compareFiles.test.d.ts +2 -0
- package/dist/cli/previewChanges/utils/__tests__/compareFiles.test.d.ts.map +1 -0
- package/dist/cli/previewChanges/utils/__tests__/compareFiles.test.js +52 -0
- package/dist/cli/previewChanges/utils/__tests__/isDirectoryEmpty.test.d.ts +2 -0
- package/dist/cli/previewChanges/utils/__tests__/isDirectoryEmpty.test.d.ts.map +1 -0
- package/dist/cli/previewChanges/utils/__tests__/isDirectoryEmpty.test.js +43 -0
- package/dist/cli/previewChanges/utils/__tests__/readDirectoryRecursive.test.d.ts +2 -0
- package/dist/cli/previewChanges/utils/__tests__/readDirectoryRecursive.test.d.ts.map +1 -0
- package/dist/cli/previewChanges/utils/__tests__/readDirectoryRecursive.test.js +32 -0
- package/dist/cli/previewChanges/utils/__tests__/updateOutputPaths.test.d.ts +2 -0
- package/dist/cli/previewChanges/utils/__tests__/updateOutputPaths.test.d.ts.map +1 -0
- package/dist/cli/previewChanges/utils/__tests__/updateOutputPaths.test.js +68 -0
- package/dist/cli/schemas/__tests__/checkConfigAndUpdate.test.d.ts +2 -0
- package/dist/cli/schemas/__tests__/checkConfigAndUpdate.test.d.ts.map +1 -0
- package/dist/cli/schemas/__tests__/checkConfigAndUpdate.test.js +36 -0
- package/dist/cli/schemas/__tests__/generateOptionsSchema.test.d.ts +2 -0
- package/dist/cli/schemas/__tests__/generateOptionsSchema.test.d.ts.map +1 -0
- package/dist/cli/schemas/__tests__/generateOptionsSchema.test.js +59 -0
- package/dist/cli/schemas/__tests__/initOptionsSchema.test.d.ts +2 -0
- package/dist/cli/schemas/__tests__/initOptionsSchema.test.d.ts.map +1 -0
- package/dist/cli/schemas/__tests__/initOptionsSchema.test.js +43 -0
- package/dist/cli/schemas/__tests__/previewChangesSchema.test.d.ts +2 -0
- package/dist/cli/schemas/__tests__/previewChangesSchema.test.d.ts.map +1 -0
- package/dist/cli/schemas/__tests__/previewChangesSchema.test.js +31 -0
- package/dist/cli/schemas/analyzeUsage.d.ts +13 -0
- package/dist/cli/schemas/analyzeUsage.d.ts.map +1 -0
- package/dist/cli/schemas/analyzeUsage.js +38 -0
- package/dist/cli/schemas/generate.d.ts +7 -0
- package/dist/cli/schemas/generate.d.ts.map +1 -1
- package/dist/cli/schemas/generate.js +4 -0
- package/dist/cli/schemas/index.d.ts +2 -2
- package/dist/cli/schemas/index.d.ts.map +1 -1
- package/dist/cli/schemas/index.js +1 -1
- package/dist/cli/types.d.ts +6 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/common/Consts.d.ts +1 -0
- package/dist/common/Consts.d.ts.map +1 -1
- package/dist/common/Consts.js +6 -1
- package/dist/common/Logger.js +2 -2
- package/dist/common/LoggerMessages.d.ts +59 -12
- package/dist/common/LoggerMessages.d.ts.map +1 -1
- package/dist/common/LoggerMessages.js +62 -15
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts +7 -0
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.js +5 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts +14 -0
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.js +6 -1
- package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.js +1 -1
- package/dist/core/OpenApiClient.d.ts +12 -1
- package/dist/core/OpenApiClient.d.ts.map +1 -1
- package/dist/core/OpenApiClient.js +192 -10
- package/dist/core/WriteClient.d.ts +11 -0
- package/dist/core/WriteClient.d.ts.map +1 -1
- package/dist/core/WriteClient.js +23 -2
- package/dist/core/plugins/getBuiltinPlugins.d.ts.map +1 -1
- package/dist/core/plugins/loadGeneratorPlugins.d.ts.map +1 -1
- package/dist/core/plugins/loadGeneratorPlugins.js +1 -1
- package/dist/core/types/shared/Client.model.d.ts +1 -1
- package/dist/core/types/shared/Client.model.d.ts.map +1 -1
- package/dist/core/types/shared/Model.model.d.ts +1 -1
- package/dist/core/types/shared/Model.model.d.ts.map +1 -1
- package/dist/core/utils/GenerationCache.d.ts +18 -0
- package/dist/core/utils/GenerationCache.d.ts.map +1 -0
- package/dist/core/utils/GenerationCache.js +41 -0
- package/dist/core/utils/__tests__/GenerationCache.test.d.ts +2 -0
- package/dist/core/utils/__tests__/GenerationCache.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/GenerationCache.test.js +37 -0
- package/dist/core/utils/__tests__/loadDiffReport.test.d.ts +2 -0
- package/dist/core/utils/__tests__/loadDiffReport.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/loadDiffReport.test.js +97 -0
- package/dist/core/utils/__tests__/prepareDtoModels.test.js +95 -0
- package/dist/core/utils/__tests__/templateRendering.test.d.ts +2 -0
- package/dist/core/utils/__tests__/templateRendering.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/templateRendering.test.js +119 -0
- package/dist/core/utils/__tests__/writeFileIfChanged.test.d.ts +2 -0
- package/dist/core/utils/__tests__/writeFileIfChanged.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/writeFileIfChanged.test.js +30 -0
- package/dist/core/utils/loadDiffReport.d.ts.map +1 -1
- package/dist/core/utils/loadDiffReport.js +5 -4
- package/dist/core/utils/precompileTemplates.js +3 -2
- package/dist/core/utils/prepareDtoModels.d.ts.map +1 -1
- package/dist/core/utils/prepareDtoModels.js +1 -7
- package/dist/core/utils/writeClientCore.d.ts.map +1 -1
- package/dist/core/utils/writeClientCore.js +18 -16
- package/dist/core/utils/writeClientCoreIndex.d.ts.map +1 -1
- package/dist/core/utils/writeClientCoreIndex.js +14 -4
- package/dist/core/utils/writeClientExecutor.d.ts.map +1 -1
- package/dist/core/utils/writeClientExecutor.js +4 -4
- package/dist/core/utils/writeClientFullIndex.js +4 -4
- package/dist/core/utils/writeClientModels.d.ts.map +1 -1
- package/dist/core/utils/writeClientModels.js +10 -10
- package/dist/core/utils/writeClientModelsIndex.d.ts +1 -1
- package/dist/core/utils/writeClientModelsIndex.d.ts.map +1 -1
- package/dist/core/utils/writeClientModelsIndex.js +14 -4
- package/dist/core/utils/writeClientSchemas.d.ts.map +1 -1
- package/dist/core/utils/writeClientSchemas.js +7 -7
- package/dist/core/utils/writeClientSchemasIndex.d.ts.map +1 -1
- package/dist/core/utils/writeClientSchemasIndex.js +14 -4
- package/dist/core/utils/writeClientServices.d.ts.map +1 -1
- package/dist/core/utils/writeClientServices.js +6 -6
- package/dist/core/utils/writeClientServicesIndex.d.ts.map +1 -1
- package/dist/core/utils/writeClientServicesIndex.js +14 -4
- package/dist/core/utils/writeClientSimpleIndex.js +4 -4
- package/dist/core/utils/writeFileIfChanged.d.ts +3 -0
- package/dist/core/utils/writeFileIfChanged.d.ts.map +1 -0
- package/dist/core/utils/writeFileIfChanged.js +22 -0
- package/dist/test/helpers/silenceLoggers.d.ts +11 -0
- package/dist/test/helpers/silenceLoggers.d.ts.map +1 -0
- package/dist/test/helpers/silenceLoggers.js +88 -0
- package/package.json +4 -4
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
7
|
+
const promises_1 = require("node:fs/promises");
|
|
8
|
+
const node_os_1 = require("node:os");
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
10
|
+
const node_test_1 = require("node:test");
|
|
11
|
+
const Consts_1 = require("../../../common/Consts");
|
|
12
|
+
const HttpClient_enum_1 = require("../../../core/types/enums/HttpClient.enum");
|
|
13
|
+
const updateConfig_1 = require("../updateConfig");
|
|
14
|
+
const flatConfig = {
|
|
15
|
+
input: './test/spec/v3.json',
|
|
16
|
+
output: './test/generated',
|
|
17
|
+
httpClient: HttpClient_enum_1.HttpClient.FETCH,
|
|
18
|
+
};
|
|
19
|
+
async function writeConfig(dir, content) {
|
|
20
|
+
const configPath = (0, node_path_1.join)(dir, 'openapi.config.json');
|
|
21
|
+
await (0, promises_1.writeFile)(configPath, JSON.stringify(content, null, 2), 'utf8');
|
|
22
|
+
return configPath;
|
|
23
|
+
}
|
|
24
|
+
(0, node_test_1.describe)('@unit: updateConfig', () => {
|
|
25
|
+
(0, node_test_1.test)('returns failure when options fail schema validation', async () => {
|
|
26
|
+
const shutdownMock = node_test_1.mock.method(Consts_1.APP_LOGGER, 'shutdownLoggerAsync', async () => undefined);
|
|
27
|
+
const errorMock = node_test_1.mock.method(Consts_1.APP_LOGGER, 'error', () => undefined);
|
|
28
|
+
const result = await (0, updateConfig_1.updateConfig)({ openapiConfig: 123 });
|
|
29
|
+
node_assert_1.default.strictEqual(result.success, false);
|
|
30
|
+
node_assert_1.default.ok(result.error);
|
|
31
|
+
shutdownMock.mock.restore();
|
|
32
|
+
errorMock.mock.restore();
|
|
33
|
+
});
|
|
34
|
+
(0, node_test_1.test)('returns failure when config file is missing', async () => {
|
|
35
|
+
const dir = await (0, promises_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'update-config-'));
|
|
36
|
+
const configPath = (0, node_path_1.join)(dir, 'missing.json');
|
|
37
|
+
const shutdownMock = node_test_1.mock.method(Consts_1.APP_LOGGER, 'shutdownLoggerAsync', async () => undefined);
|
|
38
|
+
const result = await (0, updateConfig_1.updateConfig)({ openapiConfig: configPath });
|
|
39
|
+
node_assert_1.default.strictEqual(result.success, false);
|
|
40
|
+
node_assert_1.default.ok(result.error);
|
|
41
|
+
shutdownMock.mock.restore();
|
|
42
|
+
});
|
|
43
|
+
(0, node_test_1.test)('logs up to date when config is current', async () => {
|
|
44
|
+
const dir = await (0, promises_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'update-config-'));
|
|
45
|
+
const configPath = await writeConfig(dir, flatConfig);
|
|
46
|
+
const infoMock = node_test_1.mock.method(Consts_1.APP_LOGGER, 'info', () => undefined);
|
|
47
|
+
const result = await (0, updateConfig_1.updateConfig)({ openapiConfig: configPath });
|
|
48
|
+
node_assert_1.default.strictEqual(result.success, true);
|
|
49
|
+
node_assert_1.default.strictEqual(infoMock.mock.callCount(), 1);
|
|
50
|
+
infoMock.mock.restore();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
@@ -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 checkConfig('./openapi-config.json');
|
|
11
12
|
*/
|
|
12
|
-
export declare function checkConfig(options: OptionValues): Promise<
|
|
13
|
+
export declare function checkConfig(options: OptionValues): Promise<CLICommandResult>;
|
|
13
14
|
//# sourceMappingURL=checkConfig.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkConfig.d.ts","sourceRoot":"","sources":["../../../src/cli/checkAndUpdateConfig/checkConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"checkConfig.d.ts","sourceRoot":"","sources":["../../../src/cli/checkAndUpdateConfig/checkConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAOzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAK5C;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoDlF"}
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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<
|
|
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;
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
53
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
54
|
+
return { success: false, error: message };
|
|
52
55
|
}
|
|
53
56
|
}
|
|
54
57
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepareConfigData.test.d.ts","sourceRoot":"","sources":["../../../../../src/cli/checkAndUpdateConfig/utils/__tests__/prepareConfigData.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
7
|
+
const node_test_1 = require("node:test");
|
|
8
|
+
const prepareConfigData_1 = require("../prepareConfigData");
|
|
9
|
+
(0, node_test_1.describe)('@unit: prepareConfigData', () => {
|
|
10
|
+
(0, node_test_1.test)('serializes and formats config as JSON string', async () => {
|
|
11
|
+
const formatted = await (0, prepareConfigData_1.prepareConfigData)({
|
|
12
|
+
input: './test/spec/v3.json',
|
|
13
|
+
output: './generated',
|
|
14
|
+
});
|
|
15
|
+
node_assert_1.default.match(formatted, /"input":\s*"\.\/test\/spec\/v3\.json"/);
|
|
16
|
+
node_assert_1.default.match(formatted, /"output":\s*"\.\/generated"/);
|
|
17
|
+
node_assert_1.default.ok(formatted.trim().startsWith('{'));
|
|
18
|
+
node_assert_1.default.ok(formatted.trim().endsWith('}'));
|
|
19
|
+
});
|
|
20
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removeDefaultConfigValues.test.d.ts","sourceRoot":"","sources":["../../../../../src/cli/checkAndUpdateConfig/utils/__tests__/removeDefaultConfigValues.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
7
|
+
const node_test_1 = require("node:test");
|
|
8
|
+
const Consts_1 = require("../../../../common/Consts");
|
|
9
|
+
const HttpClient_enum_1 = require("../../../../core/types/enums/HttpClient.enum");
|
|
10
|
+
const removeDefaultConfigValues_1 = require("../removeDefaultConfigValues");
|
|
11
|
+
(0, node_test_1.describe)('@unit: removeDefaultConfigValues', () => {
|
|
12
|
+
(0, node_test_1.test)('removes keys that match COMMON_DEFAULT_OPTIONS_VALUES', () => {
|
|
13
|
+
const cleaned = (0, removeDefaultConfigValues_1.removeDefaultConfigValues)({
|
|
14
|
+
input: './spec.json',
|
|
15
|
+
output: './generated',
|
|
16
|
+
httpClient: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.httpClient,
|
|
17
|
+
sortByRequired: Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.sortByRequired,
|
|
18
|
+
});
|
|
19
|
+
node_assert_1.default.deepStrictEqual(cleaned, {
|
|
20
|
+
input: './spec.json',
|
|
21
|
+
output: './generated',
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
(0, node_test_1.test)('keeps custom values that differ from defaults', () => {
|
|
25
|
+
const cleaned = (0, removeDefaultConfigValues_1.removeDefaultConfigValues)({
|
|
26
|
+
input: './spec.json',
|
|
27
|
+
output: './generated',
|
|
28
|
+
httpClient: HttpClient_enum_1.HttpClient.AXIOS,
|
|
29
|
+
interfacePrefix: 'Api',
|
|
30
|
+
});
|
|
31
|
+
node_assert_1.default.strictEqual(cleaned.httpClient, HttpClient_enum_1.HttpClient.AXIOS);
|
|
32
|
+
node_assert_1.default.strictEqual(cleaned.interfacePrefix, 'Api');
|
|
33
|
+
node_assert_1.default.strictEqual(cleaned.input, './spec.json');
|
|
34
|
+
});
|
|
35
|
+
});
|
package/dist/cli/checkAndUpdateConfig/utils/__tests__/validateAndMigrateConfigData.test.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateAndMigrateConfigData.test.d.ts","sourceRoot":"","sources":["../../../../../src/cli/checkAndUpdateConfig/utils/__tests__/validateAndMigrateConfigData.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
7
|
+
const node_test_1 = require("node:test");
|
|
8
|
+
const Consts_1 = require("../../../../common/Consts");
|
|
9
|
+
const HttpClient_enum_1 = require("../../../../core/types/enums/HttpClient.enum");
|
|
10
|
+
const validateAndMigrateConfigData_1 = require("../validateAndMigrateConfigData");
|
|
11
|
+
const flatConfig = {
|
|
12
|
+
input: './test/spec/v3.json',
|
|
13
|
+
output: './generated',
|
|
14
|
+
httpClient: HttpClient_enum_1.HttpClient.FETCH,
|
|
15
|
+
};
|
|
16
|
+
(0, node_test_1.describe)('@unit: validateAndMigrateConfigData', () => {
|
|
17
|
+
(0, node_test_1.test)('accepts current flat object config', () => {
|
|
18
|
+
const result = (0, validateAndMigrateConfigData_1.validateAndMigrateConfigData)({ ...flatConfig });
|
|
19
|
+
node_assert_1.default.strictEqual(result.isActualConfigVersion, true);
|
|
20
|
+
node_assert_1.default.strictEqual(result.migratedData.input, flatConfig.input);
|
|
21
|
+
node_assert_1.default.strictEqual(result.migratedData.output, flatConfig.output);
|
|
22
|
+
});
|
|
23
|
+
(0, node_test_1.test)('marks deprecated array format as outdated', () => {
|
|
24
|
+
const warnMock = node_test_1.mock.method(Consts_1.APP_LOGGER, 'warn', () => undefined);
|
|
25
|
+
const legacyArray = [
|
|
26
|
+
{ input: './a.json', output: './generated/a', httpClient: HttpClient_enum_1.HttpClient.AXIOS, useOptions: true },
|
|
27
|
+
{ input: './b.json', output: './generated/b', httpClient: HttpClient_enum_1.HttpClient.AXIOS, useOptions: true },
|
|
28
|
+
];
|
|
29
|
+
const result = (0, validateAndMigrateConfigData_1.validateAndMigrateConfigData)(legacyArray);
|
|
30
|
+
node_assert_1.default.strictEqual(result.isActualConfigVersion, false);
|
|
31
|
+
node_assert_1.default.ok(Array.isArray(result.migratedData.items));
|
|
32
|
+
node_assert_1.default.strictEqual(result.migratedData.items.length, 2);
|
|
33
|
+
node_assert_1.default.strictEqual(warnMock.mock.callCount(), 1);
|
|
34
|
+
warnMock.mock.restore();
|
|
35
|
+
});
|
|
36
|
+
(0, node_test_1.test)('migrates multi-options config with items', () => {
|
|
37
|
+
const multiConfig = {
|
|
38
|
+
items: [
|
|
39
|
+
{ input: './api/v1.json', output: './generated/v1' },
|
|
40
|
+
{ input: './api/v2.json', output: './generated/v2' },
|
|
41
|
+
],
|
|
42
|
+
httpClient: HttpClient_enum_1.HttpClient.AXIOS,
|
|
43
|
+
};
|
|
44
|
+
const result = (0, validateAndMigrateConfigData_1.validateAndMigrateConfigData)(multiConfig);
|
|
45
|
+
node_assert_1.default.ok(result.migratedData.items);
|
|
46
|
+
node_assert_1.default.strictEqual(result.migratedData.items.length, 2);
|
|
47
|
+
node_assert_1.default.strictEqual(result.migratedData.httpClient, HttpClient_enum_1.HttpClient.AXIOS);
|
|
48
|
+
});
|
|
49
|
+
(0, node_test_1.test)('detects default values when config matches defaults', () => {
|
|
50
|
+
const withDefaults = {
|
|
51
|
+
...flatConfig,
|
|
52
|
+
httpClient: HttpClient_enum_1.HttpClient.FETCH,
|
|
53
|
+
sortByRequired: false,
|
|
54
|
+
};
|
|
55
|
+
const result = (0, validateAndMigrateConfigData_1.validateAndMigrateConfigData)(withDefaults);
|
|
56
|
+
node_assert_1.default.strictEqual(result.hasDefaultValues, true);
|
|
57
|
+
node_assert_1.default.strictEqual(result.migratedData.httpClient, undefined);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
@@ -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;
|
|
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.
|
|
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
|
-
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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;
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
}
|