ts-openapi-codegen 2.0.0-beta.1 → 2.0.0-beta.3
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 +71 -55
- package/README.rus.md +71 -54
- package/dist/cli/generate/runGenerateOpenApi.d.ts.map +1 -1
- package/dist/cli/generate/runGenerateOpenApi.js +30 -9
- package/dist/cli/index.js +2 -1
- package/dist/cli/schemas/base.d.ts +17 -0
- package/dist/cli/schemas/base.d.ts.map +1 -0
- package/dist/cli/schemas/base.js +19 -0
- package/dist/cli/schemas/checkConfig.d.ts +6 -0
- package/dist/cli/schemas/checkConfig.d.ts.map +1 -0
- package/dist/cli/schemas/checkConfig.js +5 -0
- package/dist/cli/schemas/generate.d.ts +32 -0
- package/dist/cli/schemas/generate.d.ts.map +1 -0
- package/dist/cli/schemas/generate.js +56 -0
- package/dist/cli/schemas/index.d.ts +7 -0
- package/dist/cli/schemas/index.d.ts.map +1 -0
- package/dist/cli/schemas/index.js +21 -0
- package/dist/cli/schemas/init.d.ts +8 -0
- package/dist/cli/schemas/init.d.ts.map +1 -0
- package/dist/cli/schemas/init.js +9 -0
- package/dist/cli/schemas/updateConfig.d.ts +6 -0
- package/dist/cli/schemas/updateConfig.d.ts.map +1 -0
- package/dist/cli/schemas/updateConfig.js +5 -0
- package/dist/cli/validation/errorFormatter.d.ts +6 -0
- package/dist/cli/validation/errorFormatter.d.ts.map +1 -0
- package/dist/cli/validation/errorFormatter.js +113 -0
- package/dist/cli/validation/index.d.ts +3 -0
- package/dist/cli/validation/index.d.ts.map +1 -0
- package/dist/cli/validation/index.js +18 -0
- package/dist/cli/validation/validateCLIOptions.d.ts +27 -0
- package/dist/cli/validation/validateCLIOptions.d.ts.map +1 -0
- package/dist/cli/validation/validateCLIOptions.js +38 -0
- package/dist/common/Consts.d.ts.map +1 -1
- package/dist/common/Consts.js +2 -1
- package/dist/common/TRawOptions.d.ts +4 -36
- package/dist/common/TRawOptions.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.js +10 -4
- package/dist/common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas.js +7 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.d.ts.map +1 -0
- package/dist/common/VersionedSchema/{UnifiedOptionsVersioned → AllVersionedSchemas}/UnifiedOptionsSchemaV1.js +2 -2
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.d.ts +7 -0
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.d.ts.map +1 -0
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.js +42 -0
- package/dist/common/VersionedSchema/CommonSchemas.d.ts +1 -0
- package/dist/common/VersionedSchema/CommonSchemas.d.ts.map +1 -1
- package/dist/common/VersionedSchema/CommonSchemas.js +8 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsMigrationPlan.d.ts.map +1 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsMigrationPlan.js +9 -16
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsMigrationPlans.d.ts.map +1 -1
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsMigrationPlans.js +2 -5
- package/dist/common/VersionedSchema/Utils/createFieldTransformationMigration.d.ts +32 -0
- package/dist/common/VersionedSchema/Utils/createFieldTransformationMigration.d.ts.map +1 -0
- package/dist/common/VersionedSchema/Utils/createFieldTransformationMigration.js +40 -0
- package/dist/common/VersionedSchema/Utils/getLatestVersionFromMigrationPlans.d.ts +16 -0
- package/dist/common/VersionedSchema/Utils/getLatestVersionFromMigrationPlans.d.ts.map +1 -0
- package/dist/common/VersionedSchema/Utils/getLatestVersionFromMigrationPlans.js +23 -0
- package/dist/common/defaultOptions.d.ts.map +1 -1
- package/dist/common/defaultOptions.js +2 -1
- package/dist/common/schemas/configSchemas.d.ts +91 -0
- package/dist/common/schemas/configSchemas.d.ts.map +1 -0
- package/dist/common/schemas/configSchemas.js +131 -0
- package/dist/common/utils/__tests__/convertArrayToObject.test.js +5 -6
- package/dist/common/utils/convertArrayToObject.d.ts.map +1 -1
- package/dist/common/utils/convertArrayToObject.js +1 -2
- package/dist/core/OpenApiClient.d.ts.map +1 -1
- package/dist/core/OpenApiClient.js +42 -5
- package/dist/core/WriteClient.d.ts +3 -12
- package/dist/core/WriteClient.d.ts.map +1 -1
- package/dist/core/WriteClient.js +20 -22
- package/dist/core/__tests__/WriteClient.test.js +6 -1
- package/dist/core/types/enums/ValidationLibrary.enum.d.ts +8 -0
- package/dist/core/types/enums/ValidationLibrary.enum.d.ts.map +1 -0
- package/dist/core/types/enums/ValidationLibrary.enum.js +11 -0
- package/dist/core/utils/__mocks__/templates.d.ts.map +1 -1
- package/dist/core/utils/__mocks__/templates.js +4 -0
- package/dist/core/utils/__tests__/writeClientSchemas.test.js +2 -0
- package/dist/core/utils/precompileTemplates.js +6 -0
- package/dist/core/utils/registerHandlebarHelpers.d.ts.map +1 -1
- package/dist/core/utils/registerHandlebarHelpers.js +74 -0
- package/dist/core/utils/registerHandlebarTemplates.d.ts +6 -0
- package/dist/core/utils/registerHandlebarTemplates.d.ts.map +1 -1
- package/dist/core/utils/registerHandlebarTemplates.js +84 -0
- package/dist/core/utils/writeClientSchemas.d.ts +2 -0
- package/dist/core/utils/writeClientSchemas.d.ts.map +1 -1
- package/dist/core/utils/writeClientSchemas.js +14 -2
- package/dist/templatesCompiled/client/joi/exportSchema.d.ts +11 -0
- package/dist/templatesCompiled/client/joi/exportSchema.d.ts.map +1 -0
- package/dist/templatesCompiled/client/joi/exportSchema.js +71 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchema.d.ts +22 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchema.d.ts.map +1 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchema.js +129 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaArray.d.ts +16 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaArray.d.ts.map +1 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaArray.js +84 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaComposition.d.ts +18 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaComposition.d.ts.map +1 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaComposition.js +96 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaDictionary.d.ts +14 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaDictionary.d.ts.map +1 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaDictionary.js +72 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaEnum.d.ts +14 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaEnum.d.ts.map +1 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaEnum.js +74 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaGeneric.d.ts +35 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaGeneric.d.ts.map +1 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaGeneric.js +201 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaInterface.d.ts +14 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaInterface.d.ts.map +1 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaInterface.js +50 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaReference.d.ts +9 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaReference.d.ts.map +1 -0
- package/dist/templatesCompiled/client/joi/partials/joiSchemaReference.js +25 -0
- package/dist/templatesCompiled/client/jsonschema/exportSchema.d.ts +11 -0
- package/dist/templatesCompiled/client/jsonschema/exportSchema.d.ts.map +1 -0
- package/dist/templatesCompiled/client/jsonschema/exportSchema.js +69 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchema.d.ts +22 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchema.d.ts.map +1 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchema.js +129 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaArray.d.ts +16 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaArray.d.ts.map +1 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaArray.js +74 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaComposition.d.ts +16 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaComposition.d.ts.map +1 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaComposition.js +84 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaDictionary.d.ts +13 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaDictionary.d.ts.map +1 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaDictionary.js +56 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaEnum.d.ts +12 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaEnum.d.ts.map +1 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaEnum.js +49 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaGeneric.d.ts +29 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaGeneric.d.ts.map +1 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaGeneric.js +175 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaInterface.d.ts +15 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaInterface.d.ts.map +1 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaInterface.js +63 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaReference.d.ts +9 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaReference.d.ts.map +1 -0
- package/dist/templatesCompiled/client/jsonschema/partials/jsonschemaSchemaReference.js +25 -0
- package/dist/templatesCompiled/client/yup/exportSchema.d.ts +11 -0
- package/dist/templatesCompiled/client/yup/exportSchema.d.ts.map +1 -0
- package/dist/templatesCompiled/client/yup/exportSchema.js +73 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchema.d.ts +22 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchema.d.ts.map +1 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchema.js +129 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaArray.d.ts +16 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaArray.d.ts.map +1 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaArray.js +84 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaComposition.d.ts +18 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaComposition.d.ts.map +1 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaComposition.js +96 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaDictionary.d.ts +14 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaDictionary.d.ts.map +1 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaDictionary.js +72 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaEnum.d.ts +14 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaEnum.d.ts.map +1 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaEnum.js +74 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaGeneric.d.ts +34 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaGeneric.d.ts.map +1 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaGeneric.js +201 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaInterface.d.ts +14 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaInterface.d.ts.map +1 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaInterface.js +50 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaReference.d.ts +9 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaReference.d.ts.map +1 -0
- package/dist/templatesCompiled/client/yup/partials/yupSchemaReference.js +25 -0
- package/dist/templatesCompiled/client/zod/exportSchema.d.ts +11 -0
- package/dist/templatesCompiled/client/zod/exportSchema.d.ts.map +1 -0
- package/dist/templatesCompiled/client/zod/exportSchema.js +67 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchema.d.ts +22 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchema.d.ts.map +1 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchema.js +129 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaArray.d.ts +14 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaArray.d.ts.map +1 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaArray.js +65 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaComposition.d.ts +15 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaComposition.d.ts.map +1 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaComposition.js +70 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaDictionary.d.ts +12 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaDictionary.d.ts.map +1 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaDictionary.js +53 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaEnum.d.ts +15 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaEnum.d.ts.map +1 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaEnum.js +86 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaGeneric.d.ts +34 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaGeneric.d.ts.map +1 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaGeneric.js +193 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaInterface.d.ts +14 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaInterface.d.ts.map +1 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaInterface.js +50 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaReference.d.ts +9 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaReference.d.ts.map +1 -0
- package/dist/templatesCompiled/client/zod/partials/zodSchemaReference.js +25 -0
- package/package.json +14 -4
- package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsMigrationPlan.d.ts +0 -3
- package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsMigrationPlan.d.ts.map +0 -1
- package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsMigrationPlan.js +0 -28
- package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsSchemaV1.d.ts.map +0 -1
- package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsVersionedSchemas.d.ts +0 -3
- package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsVersionedSchemas.d.ts.map +0 -1
- package/dist/common/VersionedSchema/UnifiedOptionsVersioned/UnifiedOptionsVersionedSchemas.js +0 -10
- /package/dist/common/VersionedSchema/{UnifiedOptionsVersioned → AllVersionedSchemas}/UnifiedOptionsSchemaV1.d.ts +0 -0
package/README.md
CHANGED
|
@@ -64,7 +64,6 @@ openapi generate --input ./spec.json --output ./dist
|
|
|
64
64
|
| `--useOptions` | - | boolean | `false` | Use options instead of arguments |
|
|
65
65
|
| `--useUnionTypes` | - | boolean | `false` | Use union types instead of enums |
|
|
66
66
|
| `--excludeCoreServiceFiles` | - | boolean | `false` | Exclude generation of core and service files |
|
|
67
|
-
| `--includeSchemasFiles` | - | boolean | `false` | Enable generation of model validation schemas |
|
|
68
67
|
| `--request` | - | string | - | Path to custom request file |
|
|
69
68
|
| `--interfacePrefix` | - | string | `I` | Prefix for interface models |
|
|
70
69
|
| `--enumPrefix` | - | string | `E` | Prefix for enum models |
|
|
@@ -74,6 +73,7 @@ openapi generate --input ./spec.json --output ./dist
|
|
|
74
73
|
| `--useSeparatedIndexes` | - | boolean | `false` | Use separate index files for core, models, schemas, and services |
|
|
75
74
|
| `--logLevel` | `-l` | string | `error` | Logging level: `info`, `warn`, or `error` |
|
|
76
75
|
| `--logTarget` | `-t` | string | `console` | Logging target: `console` or `file` |
|
|
76
|
+
| `--validationLibrary` | - | string | `none` | Validation library for schema generation: `none`, `zod`, `joi`, `yup`, or `jsonschema` |
|
|
77
77
|
|
|
78
78
|
**Examples:**
|
|
79
79
|
```bash
|
|
@@ -93,7 +93,6 @@ openapi generate \
|
|
|
93
93
|
--httpClient fetch \
|
|
94
94
|
--useOptions \
|
|
95
95
|
--useUnionTypes \
|
|
96
|
-
--includeSchemasFiles \
|
|
97
96
|
--logLevel info
|
|
98
97
|
```
|
|
99
98
|
|
|
@@ -143,7 +142,6 @@ Instead of passing all options via CLI, you can use a configuration file. Create
|
|
|
143
142
|
"useOptions": false,
|
|
144
143
|
"useUnionTypes": false,
|
|
145
144
|
"excludeCoreServiceFiles": false,
|
|
146
|
-
"includeSchemasFiles": false,
|
|
147
145
|
"interfacePrefix": "I",
|
|
148
146
|
"enumPrefix": "E",
|
|
149
147
|
"typePrefix": "T",
|
|
@@ -160,7 +158,6 @@ Instead of passing all options via CLI, you can use a configuration file. Create
|
|
|
160
158
|
"output": "./dist",
|
|
161
159
|
"client": "fetch",
|
|
162
160
|
"excludeCoreServiceFiles": true,
|
|
163
|
-
"includeSchemasFiles": true,
|
|
164
161
|
"items": [
|
|
165
162
|
{
|
|
166
163
|
"input": "./first.yml"
|
|
@@ -201,7 +198,6 @@ Instead of passing all options via CLI, you can use a configuration file. Create
|
|
|
201
198
|
| `useOptions` | boolean | `false` | Use options instead of arguments |
|
|
202
199
|
| `useUnionTypes` | boolean | `false` | Use union types instead of enums |
|
|
203
200
|
| `excludeCoreServiceFiles` | boolean | `false` | Exclude core and service files generation |
|
|
204
|
-
| `includeSchemasFiles` | boolean | `false` | Enable model validation schemas generation |
|
|
205
201
|
| `request` | string | - | Path to custom request file |
|
|
206
202
|
| `interfacePrefix` | string | `I` | Prefix for interface models |
|
|
207
203
|
| `enumPrefix` | string | `E` | Prefix for enum models |
|
|
@@ -210,6 +206,7 @@ Instead of passing all options via CLI, you can use a configuration file. Create
|
|
|
210
206
|
| `sortByRequired` | boolean | `false` | Extended sorting strategy for arguments |
|
|
211
207
|
| `useSeparatedIndexes` | boolean | `false` | Use separate index files |
|
|
212
208
|
| `items` | array | - | Array of configurations (for multi-options format) |
|
|
209
|
+
| `validationLibrary` | string | `none` | Validation library for schema generation: `none`, `zod`, `joi`, `yup`, or `jsonschema` |
|
|
213
210
|
|
|
214
211
|
**Note:** You can use the `init-openapi-config` command to generate a template configuration file.
|
|
215
212
|
|
|
@@ -369,11 +366,19 @@ const order: Order = {
|
|
|
369
366
|
}
|
|
370
367
|
```
|
|
371
368
|
|
|
372
|
-
###
|
|
369
|
+
### Validation schemas `--validationLibrary`
|
|
373
370
|
By default, the OpenAPI generator only exports interfaces for your models. These interfaces will help you during
|
|
374
|
-
development, but will not be available in JavaScript during runtime. However,
|
|
375
|
-
that can be useful during runtime, for instance: `maxLength` of a string or a `pattern` to match, etc.
|
|
376
|
-
|
|
371
|
+
development, but will not be available in JavaScript during runtime. However, OpenAPI allows you to define properties
|
|
372
|
+
that can be useful during runtime, for instance: `maxLength` of a string or a `pattern` to match, etc.
|
|
373
|
+
|
|
374
|
+
The `--validationLibrary` parameter allows you to generate runtime validation schemas using popular validation libraries:
|
|
375
|
+
- **none** (default) - No validation schemas generated
|
|
376
|
+
- **zod** - Generate Zod validation schemas
|
|
377
|
+
- **joi** - Generate Joi validation schemas
|
|
378
|
+
- **yup** - Generate Yup validation schemas
|
|
379
|
+
- **jsonschema** - Generate JSON Schema validation schemas
|
|
380
|
+
|
|
381
|
+
Let's say we have the following model:
|
|
377
382
|
|
|
378
383
|
```json
|
|
379
384
|
{
|
|
@@ -407,77 +412,88 @@ we have the following model:
|
|
|
407
412
|
}
|
|
408
413
|
```
|
|
409
414
|
|
|
410
|
-
|
|
415
|
+
**With Zod (`--validationLibrary zod`):**
|
|
411
416
|
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
417
|
+
```ts
|
|
418
|
+
import { z } from 'zod';
|
|
419
|
+
|
|
420
|
+
export const MyModelSchema = z.object({
|
|
421
|
+
key: z.string().max(64).regex(/^[a-zA-Z0-9_]*$/),
|
|
422
|
+
name: z.string().max(255),
|
|
423
|
+
enabled: z.boolean().readonly().optional(),
|
|
424
|
+
modified: z.string().datetime().readonly().optional(),
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
export type MyModel = z.infer<typeof MyModelSchema>;
|
|
428
|
+
|
|
429
|
+
export function validateMyModel(data: unknown): MyModel {
|
|
430
|
+
return MyModelSchema.parse(data);
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
export function safeValidateMyModel(data: unknown): { success: true; data: MyModel } | { success: false; error: z.ZodError } {
|
|
434
|
+
const result = MyModelSchema.safeParse(data);
|
|
435
|
+
if (result.success) {
|
|
436
|
+
return { success: true, data: result.data };
|
|
437
|
+
}
|
|
438
|
+
return { success: false, error: result.error };
|
|
418
439
|
}
|
|
419
440
|
```
|
|
420
441
|
|
|
421
|
-
|
|
422
|
-
if we wanted to create some form where a user could create such a model. In that form you would iterate
|
|
423
|
-
over the properties to render form fields based on their type and validate the input based on the `maxLength`
|
|
424
|
-
or `pattern` property. This requires us to have this information somewhere... For this we can use the
|
|
425
|
-
flag `--includeSchemasFiles` to generate a runtime model next to the normal interface:
|
|
442
|
+
**With Joi (`--validationLibrary joi`):**
|
|
426
443
|
|
|
427
|
-
```
|
|
428
|
-
|
|
444
|
+
```ts
|
|
445
|
+
import Joi from 'joi';
|
|
446
|
+
|
|
447
|
+
export const MyModelSchema = Joi.object({
|
|
448
|
+
key: Joi.string().max(64).pattern(/^[a-zA-Z0-9_]*$/).required(),
|
|
449
|
+
name: Joi.string().max(255).required(),
|
|
450
|
+
enabled: Joi.boolean().readonly(),
|
|
451
|
+
modified: Joi.string().isoDate().readonly(),
|
|
452
|
+
});
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
**With Yup (`--validationLibrary yup`):**
|
|
456
|
+
|
|
457
|
+
```ts
|
|
458
|
+
import * as yup from 'yup';
|
|
459
|
+
|
|
460
|
+
export const MyModelSchema = yup.object({
|
|
461
|
+
key: yup.string().max(64).matches(/^[a-zA-Z0-9_]*$/).required(),
|
|
462
|
+
name: yup.string().max(255).required(),
|
|
463
|
+
enabled: yup.boolean().readonly(),
|
|
464
|
+
modified: yup.string().datetime().readonly(),
|
|
465
|
+
});
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
**With JSON Schema (`--validationLibrary jsonschema`):**
|
|
469
|
+
|
|
470
|
+
```ts
|
|
471
|
+
export const MyModelSchema = {
|
|
472
|
+
type: 'object',
|
|
473
|
+
required: ['key', 'name'],
|
|
429
474
|
properties: {
|
|
430
475
|
key: {
|
|
431
476
|
type: 'string',
|
|
432
|
-
isRequired: true,
|
|
433
477
|
maxLength: 64,
|
|
434
478
|
pattern: '^[a-zA-Z0-9_]*$',
|
|
435
479
|
},
|
|
436
480
|
name: {
|
|
437
481
|
type: 'string',
|
|
438
|
-
isRequired: true,
|
|
439
482
|
maxLength: 255,
|
|
440
483
|
},
|
|
441
484
|
enabled: {
|
|
442
485
|
type: 'boolean',
|
|
443
|
-
|
|
486
|
+
readOnly: true,
|
|
444
487
|
},
|
|
445
488
|
modified: {
|
|
446
489
|
type: 'string',
|
|
447
|
-
isReadOnly: true,
|
|
448
490
|
format: 'date-time',
|
|
491
|
+
readOnly: true,
|
|
449
492
|
},
|
|
450
493
|
},
|
|
451
494
|
};
|
|
452
495
|
```
|
|
453
|
-
|
|
454
|
-
These runtime object are prefixed with a `$` character and expose all the interesting attributes of a model
|
|
455
|
-
and its properties. We can now use this object to generate the form:
|
|
456
|
-
|
|
457
|
-
```typescript jsx
|
|
458
|
-
import { $MyModel } from './generated';
|
|
459
|
-
|
|
460
|
-
// Some pseudo code to iterate over the properties and return a form field
|
|
461
|
-
// the form field could be some abstract component that renders the correct
|
|
462
|
-
// field type and validation rules based on the given input.
|
|
463
|
-
const formFields = Object.entries($MyModel.properties).map(([key, value]) => (
|
|
464
|
-
<FormField
|
|
465
|
-
name={key}
|
|
466
|
-
type={value.type}
|
|
467
|
-
format={value.format}
|
|
468
|
-
maxLength={value.maxLength}
|
|
469
|
-
pattern={value.pattern}
|
|
470
|
-
isReadOnly={value.isReadOnly}
|
|
471
|
-
/>
|
|
472
|
-
));
|
|
473
|
-
|
|
474
|
-
const MyForm = () => (
|
|
475
|
-
<form>
|
|
476
|
-
{formFields}
|
|
477
|
-
</form>
|
|
478
|
-
);
|
|
479
|
-
|
|
480
|
-
```
|
|
496
|
+
These validation schemas can be used for form generation, input validation, and runtime type checking in your application.
|
|
481
497
|
|
|
482
498
|
### Cancelable promise `--useCancelableRequest`
|
|
483
499
|
By default, the OpenAPI generator generates services for accessing the API that use non-cancellable requests. Therefore, we have added the ability to switch the generator to generate canceled API requests. To do this, use the flag `--useCancelableRequest`.
|
package/README.rus.md
CHANGED
|
@@ -63,7 +63,6 @@ openapi generate --input ./spec.json --output ./dist
|
|
|
63
63
|
| `--useOptions` | - | boolean | `false` | Использовать опции вместо аргументов |
|
|
64
64
|
| `--useUnionTypes` | - | boolean | `false` | Использовать union типы вместо enums |
|
|
65
65
|
| `--excludeCoreServiceFiles` | - | boolean | `false` | Исключить генерацию core и сервисных файлов |
|
|
66
|
-
| `--includeSchemasFiles` | - | boolean | `false` | Включить генерацию схем валидации моделей |
|
|
67
66
|
| `--request` | - | string | - | Путь к пользовательскому файлу запросов |
|
|
68
67
|
| `--interfacePrefix` | - | string | `I` | Префикс для интерфейсов моделей |
|
|
69
68
|
| `--enumPrefix` | - | string | `E` | Префикс для enum моделей |
|
|
@@ -73,6 +72,7 @@ openapi generate --input ./spec.json --output ./dist
|
|
|
73
72
|
| `--useSeparatedIndexes` | - | boolean | `false` | Использовать отдельные index файлы для core, models, schemas и services |
|
|
74
73
|
| `--logLevel` | `-l` | string | `error` | Уровень логирования: `info`, `warn`, или `error` |
|
|
75
74
|
| `--logTarget` | `-t` | string | `console` | Цель логирования: `console` или `file` |
|
|
75
|
+
| `--validationLibrary` | - | string | `none` | Библиотека валидации для генерации схем: `none`, `zod`, `joi`, `yup`, или `jsonschema` |
|
|
76
76
|
|
|
77
77
|
**Примеры:**
|
|
78
78
|
```bash
|
|
@@ -92,7 +92,6 @@ openapi generate \
|
|
|
92
92
|
--httpClient fetch \
|
|
93
93
|
--useOptions \
|
|
94
94
|
--useUnionTypes \
|
|
95
|
-
--includeSchemasFiles \
|
|
96
95
|
--logLevel info
|
|
97
96
|
```
|
|
98
97
|
|
|
@@ -142,7 +141,6 @@ openapi init-openapi-config --openapi-config ./my-config.json
|
|
|
142
141
|
"useOptions": false,
|
|
143
142
|
"useUnionTypes": false,
|
|
144
143
|
"excludeCoreServiceFiles": false,
|
|
145
|
-
"includeSchemasFiles": false,
|
|
146
144
|
"interfacePrefix": "I",
|
|
147
145
|
"enumPrefix": "E",
|
|
148
146
|
"typePrefix": "T",
|
|
@@ -159,7 +157,6 @@ openapi init-openapi-config --openapi-config ./my-config.json
|
|
|
159
157
|
"output": "./dist",
|
|
160
158
|
"client": "fetch",
|
|
161
159
|
"excludeCoreServiceFiles": true,
|
|
162
|
-
"includeSchemasFiles": true,
|
|
163
160
|
"items": [
|
|
164
161
|
{
|
|
165
162
|
"input": "./first.yml"
|
|
@@ -200,7 +197,6 @@ openapi init-openapi-config --openapi-config ./my-config.json
|
|
|
200
197
|
| `useOptions` | boolean | `false` | Использовать опции вместо аргументов |
|
|
201
198
|
| `useUnionTypes` | boolean | `false` | Использовать union типы вместо enums |
|
|
202
199
|
| `excludeCoreServiceFiles` | boolean | `false` | Исключить генерацию core и сервисных файлов |
|
|
203
|
-
| `includeSchemasFiles` | boolean | `false` | Включить генерацию схем валидации моделей |
|
|
204
200
|
| `request` | string | - | Путь к пользовательскому файлу запросов |
|
|
205
201
|
| `interfacePrefix` | string | `I` | Префикс для интерфейсов моделей |
|
|
206
202
|
| `enumPrefix` | string | `E` | Префикс для enum моделей |
|
|
@@ -209,6 +205,7 @@ openapi init-openapi-config --openapi-config ./my-config.json
|
|
|
209
205
|
| `sortByRequired` | boolean | `false` | Расширенная стратегия сортировки для аргументов |
|
|
210
206
|
| `useSeparatedIndexes` | boolean | `false` | Использовать отдельные index файлы |
|
|
211
207
|
| `items` | array | - | Массив конфигураций (для формата multi-options) |
|
|
208
|
+
| `validationLibrary` | string | `none` | Библиотека валидации для генерации схем: `none`, `zod`, `joi`, `yup`, или `jsonschema` |
|
|
212
209
|
|
|
213
210
|
**Примечание:** Вы можете использовать команду `init-openapi-config` для генерации шаблона файла конфигурации.
|
|
214
211
|
|
|
@@ -368,11 +365,19 @@ const order: Order = {
|
|
|
368
365
|
}
|
|
369
366
|
```
|
|
370
367
|
|
|
371
|
-
###
|
|
368
|
+
### Схемы проверки `--validationLibrary`
|
|
372
369
|
По умолчанию генератор OpenAPI экспортирует только интерфейсы для ваших моделей. Эти интерфейсы помогут вам во время
|
|
373
|
-
разработки, но не будут доступны в JavaScript во время выполнения. Однако
|
|
374
|
-
которые могут быть полезны во время выполнения, например: `maxLength` строки или `pattern` для сопоставления и т.д.
|
|
375
|
-
|
|
370
|
+
разработки, но не будут доступны в JavaScript во время выполнения. Однако OpenAPI позволяет определять свойства,
|
|
371
|
+
которые могут быть полезны во время выполнения, например: `maxLength` строки или `pattern` для сопоставления и т.д.
|
|
372
|
+
|
|
373
|
+
Параметр `--validationLibrary` позволяет генерировать схемы валидации времени выполнения с использованием популярных библиотек валидации:
|
|
374
|
+
- **none** (по умолчанию) - Схемы валидации не генерируются
|
|
375
|
+
- **zod** - Генерация схем валидации Zod
|
|
376
|
+
- **joi** - Генерация схем валидации Joi
|
|
377
|
+
- **yup** - Генерация схем валидации Yup
|
|
378
|
+
- **jsonschema** - Генерация схем валидации JSON Schema
|
|
379
|
+
|
|
380
|
+
Допустим, у нас есть следующая модель:
|
|
376
381
|
|
|
377
382
|
```json
|
|
378
383
|
{
|
|
@@ -406,77 +411,89 @@ const order: Order = {
|
|
|
406
411
|
}
|
|
407
412
|
```
|
|
408
413
|
|
|
409
|
-
|
|
414
|
+
**С Zod (`--validationLibrary zod`):**
|
|
410
415
|
|
|
411
|
-
```
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
416
|
+
```ts
|
|
417
|
+
import { z } from 'zod';
|
|
418
|
+
|
|
419
|
+
export const MyModelSchema = z.object({
|
|
420
|
+
key: z.string().max(64).regex(/^[a-zA-Z0-9_]*$/),
|
|
421
|
+
name: z.string().max(255),
|
|
422
|
+
enabled: z.boolean().readonly().optional(),
|
|
423
|
+
modified: z.string().datetime().readonly().optional(),
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
export type MyModel = z.infer<typeof MyModelSchema>;
|
|
427
|
+
|
|
428
|
+
export function validateMyModel(data: unknown): MyModel {
|
|
429
|
+
return MyModelSchema.parse(data);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
export function safeValidateMyModel(data: unknown): { success: true; data: MyModel } | { success: false; error: z.ZodError } {
|
|
433
|
+
const result = MyModelSchema.safeParse(data);
|
|
434
|
+
if (result.success) {
|
|
435
|
+
return { success: true, data: result.data };
|
|
436
|
+
}
|
|
437
|
+
return { success: false, error: result.error };
|
|
417
438
|
}
|
|
418
439
|
```
|
|
419
440
|
|
|
420
|
-
|
|
421
|
-
если мы хотим создать форму, где пользователь может создать такую модель. В этой форме вы будете итерироваться
|
|
422
|
-
по свойствам для рендеринга полей формы на основе их типа и валидации ввода на основе свойства `maxLength`
|
|
423
|
-
или `pattern`. Для этого нам нужно где-то хранить эту информацию... Для этого мы можем использовать
|
|
424
|
-
флаг `--includeSchemasFiles` для генерации runtime модели рядом с обычным интерфейсом:
|
|
441
|
+
**С Joi (`--validationLibrary joi`):**
|
|
425
442
|
|
|
426
|
-
```
|
|
427
|
-
|
|
443
|
+
```ts
|
|
444
|
+
import Joi from 'joi';
|
|
445
|
+
|
|
446
|
+
export const MyModelSchema = Joi.object({
|
|
447
|
+
key: Joi.string().max(64).pattern(/^[a-zA-Z0-9_]*$/).required(),
|
|
448
|
+
name: Joi.string().max(255).required(),
|
|
449
|
+
enabled: Joi.boolean().readonly(),
|
|
450
|
+
modified: Joi.string().isoDate().readonly(),
|
|
451
|
+
});
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
**С Yup (`--validationLibrary yup`):**
|
|
455
|
+
|
|
456
|
+
```ts
|
|
457
|
+
import * as yup from 'yup';
|
|
458
|
+
|
|
459
|
+
export const MyModelSchema = yup.object({
|
|
460
|
+
key: yup.string().max(64).matches(/^[a-zA-Z0-9_]*$/).required(),
|
|
461
|
+
name: yup.string().max(255).required(),
|
|
462
|
+
enabled: yup.boolean().readonly(),
|
|
463
|
+
modified: yup.string().datetime().readonly(),
|
|
464
|
+
});
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
**С JSON Schema (`--validationLibrary jsonschema`):**
|
|
468
|
+
|
|
469
|
+
```ts
|
|
470
|
+
export const MyModelSchema = {
|
|
471
|
+
type: 'object',
|
|
472
|
+
required: ['key', 'name'],
|
|
428
473
|
properties: {
|
|
429
474
|
key: {
|
|
430
475
|
type: 'string',
|
|
431
|
-
isRequired: true,
|
|
432
476
|
maxLength: 64,
|
|
433
477
|
pattern: '^[a-zA-Z0-9_]*$',
|
|
434
478
|
},
|
|
435
479
|
name: {
|
|
436
480
|
type: 'string',
|
|
437
|
-
isRequired: true,
|
|
438
481
|
maxLength: 255,
|
|
439
482
|
},
|
|
440
483
|
enabled: {
|
|
441
484
|
type: 'boolean',
|
|
442
|
-
|
|
485
|
+
readOnly: true,
|
|
443
486
|
},
|
|
444
487
|
modified: {
|
|
445
488
|
type: 'string',
|
|
446
|
-
isReadOnly: true,
|
|
447
489
|
format: 'date-time',
|
|
490
|
+
readOnly: true,
|
|
448
491
|
},
|
|
449
492
|
},
|
|
450
493
|
};
|
|
451
494
|
```
|
|
452
495
|
|
|
453
|
-
Эти
|
|
454
|
-
и её свойств. Теперь мы можем использовать этот объект для генерации формы:
|
|
455
|
-
|
|
456
|
-
```typescript jsx
|
|
457
|
-
import { $MyModel } from './generated';
|
|
458
|
-
|
|
459
|
-
// Псевдокод для итерации по свойствам и возврата поля формы
|
|
460
|
-
// поле формы может быть абстрактным компонентом, который рендерит правильный
|
|
461
|
-
// тип поля и правила валидации на основе заданного ввода.
|
|
462
|
-
const formFields = Object.entries($MyModel.properties).map(([key, value]) => (
|
|
463
|
-
<FormField
|
|
464
|
-
name={key}
|
|
465
|
-
type={value.type}
|
|
466
|
-
format={value.format}
|
|
467
|
-
maxLength={value.maxLength}
|
|
468
|
-
pattern={value.pattern}
|
|
469
|
-
isReadOnly={value.isReadOnly}
|
|
470
|
-
/>
|
|
471
|
-
));
|
|
472
|
-
|
|
473
|
-
const MyForm = () => (
|
|
474
|
-
<form>
|
|
475
|
-
{formFields}
|
|
476
|
-
</form>
|
|
477
|
-
);
|
|
478
|
-
|
|
479
|
-
```
|
|
496
|
+
Эти схемы валидации могут быть использованы для генерации форм, валидации ввода и проверки типов во время выполнения в вашем приложении.
|
|
480
497
|
|
|
481
498
|
### Отменяемый promise `--useCancelableRequest`
|
|
482
499
|
По умолчанию генератор OpenAPI генерирует сервисы для доступа к API, которые используют неотменяемые запросы. Поэтому мы добавили возможность переключить генератор на генерацию отменяемых API запросов. Для этого используйте флаг `--useCancelableRequest`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runGenerateOpenApi.d.ts","sourceRoot":"","sources":["../../../src/cli/generate/runGenerateOpenApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"runGenerateOpenApi.d.ts","sourceRoot":"","sources":["../../../src/cli/generate/runGenerateOpenApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAgBzC;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D7E"}
|
|
@@ -37,12 +37,15 @@ exports.runGenerateOpenApi = runGenerateOpenApi;
|
|
|
37
37
|
const Consts_1 = require("../../common/Consts");
|
|
38
38
|
const defaultOptions_1 = require("../../common/defaultOptions");
|
|
39
39
|
const Enums_1 = require("../../common/Enums");
|
|
40
|
+
const LoggerMessages_1 = require("../../common/LoggerMessages");
|
|
40
41
|
const convertArrayToObject_1 = require("../../common/utils/convertArrayToObject");
|
|
41
42
|
const loadConfigIfExists_1 = require("../../common/utils/loadConfigIfExists");
|
|
42
43
|
const AllMigrationPlans_1 = require("../../common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans");
|
|
43
44
|
const AllVersionedSchemas_1 = require("../../common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas");
|
|
44
45
|
const migrateDataToLatestSchemaVersion_1 = require("../../common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion");
|
|
45
46
|
const OpenAPI = __importStar(require("../../core"));
|
|
47
|
+
const generate_1 = require("../schemas/generate");
|
|
48
|
+
const validation_1 = require("../validation");
|
|
46
49
|
/**
|
|
47
50
|
* Запускает генерацию OpenAPI клиента
|
|
48
51
|
* Поддерживает как конфиг-файл, так и параметры из CLI
|
|
@@ -50,17 +53,35 @@ const OpenAPI = __importStar(require("../../core"));
|
|
|
50
53
|
async function runGenerateOpenApi(options) {
|
|
51
54
|
const { openapiConfig, ...clientOptions } = options;
|
|
52
55
|
try {
|
|
53
|
-
|
|
56
|
+
// Валидация опций через Zod
|
|
57
|
+
const validationResult = (0, validation_1.validateCLIOptions)(generate_1.generateOptionsSchema, {
|
|
58
|
+
openapiConfig,
|
|
59
|
+
...clientOptions,
|
|
60
|
+
});
|
|
61
|
+
if (!validationResult.success) {
|
|
62
|
+
Consts_1.APP_LOGGER.error(validationResult.error);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
const validatedOptions = validationResult.data;
|
|
66
|
+
// Если есть минимальные опции (input и output), используем их
|
|
67
|
+
const hasMinimumRequiredOptions = !!validatedOptions.input && !!validatedOptions.output;
|
|
54
68
|
if (hasMinimumRequiredOptions) {
|
|
55
|
-
|
|
69
|
+
// Используем старую Joi валидацию для обратной совместимости
|
|
70
|
+
// В будущем можно заменить на Zod
|
|
71
|
+
const { error: defaultValuesError, value } = defaultOptions_1.defaultOptions.validate({
|
|
72
|
+
input: validatedOptions.input,
|
|
73
|
+
output: validatedOptions.output,
|
|
74
|
+
...clientOptions,
|
|
75
|
+
});
|
|
56
76
|
if (defaultValuesError) {
|
|
57
77
|
await OpenAPI.generate(value);
|
|
58
78
|
process.exit(0);
|
|
59
79
|
}
|
|
60
80
|
}
|
|
61
|
-
const configData = (0, loadConfigIfExists_1.loadConfigIfExists)(openapiConfig);
|
|
81
|
+
const configData = (0, loadConfigIfExists_1.loadConfigIfExists)(validatedOptions.openapiConfig);
|
|
62
82
|
if (!configData) {
|
|
63
|
-
Consts_1.APP_LOGGER.error(
|
|
83
|
+
Consts_1.APP_LOGGER.error(LoggerMessages_1.LOGGER_MESSAGES.CONFIG.FILE_MISSING);
|
|
84
|
+
process.exit(1);
|
|
64
85
|
}
|
|
65
86
|
const preparedOptions = (0, convertArrayToObject_1.convertArrayToObject)(configData);
|
|
66
87
|
// Use unified migration system for all schema types
|
|
@@ -71,15 +92,15 @@ async function runGenerateOpenApi(options) {
|
|
|
71
92
|
migrationMode: Enums_1.EMigrationMode.GENERATE_OPENAPI,
|
|
72
93
|
});
|
|
73
94
|
if (!migratedOptions) {
|
|
74
|
-
Consts_1.APP_LOGGER.error(
|
|
75
|
-
|
|
76
|
-
else {
|
|
77
|
-
const { value } = migratedOptions;
|
|
78
|
-
await OpenAPI.generate(value);
|
|
95
|
+
Consts_1.APP_LOGGER.error(LoggerMessages_1.LOGGER_MESSAGES.CONFIG.CONVERSION_FAILED);
|
|
96
|
+
process.exit(1);
|
|
79
97
|
}
|
|
98
|
+
const { value } = migratedOptions;
|
|
99
|
+
await OpenAPI.generate(value);
|
|
80
100
|
process.exit(0);
|
|
81
101
|
}
|
|
82
102
|
catch (error) {
|
|
83
103
|
Consts_1.APP_LOGGER.error(error.message);
|
|
104
|
+
process.exit(1);
|
|
84
105
|
}
|
|
85
106
|
}
|
package/dist/cli/index.js
CHANGED
|
@@ -11,6 +11,7 @@ const Enums_1 = require("../common/Enums");
|
|
|
11
11
|
const UpdateNotifier_1 = require("../common/UpdateNotifier");
|
|
12
12
|
const pathHelpers_1 = require("../common/utils/pathHelpers");
|
|
13
13
|
const HttpClient_enum_1 = require("../core/types/enums/HttpClient.enum");
|
|
14
|
+
const ValidationLibrary_enum_1 = require("../core/types/enums/ValidationLibrary.enum");
|
|
14
15
|
const checkConfig_1 = require("./checkAndUpdateConfig/checkConfig");
|
|
15
16
|
const updateConfig_1 = require("./checkAndUpdateConfig/updateConfig");
|
|
16
17
|
const runGenerateOpenApi_1 = require("./generate/runGenerateOpenApi");
|
|
@@ -46,7 +47,6 @@ program
|
|
|
46
47
|
.option('--useOptions', 'Use options instead of arguments (default: false)')
|
|
47
48
|
.option('--useUnionTypes', 'Use union types instead of enums (default: false)')
|
|
48
49
|
.option('--excludeCoreServiceFiles', 'The generation of the core and services is excluded (default: false)')
|
|
49
|
-
.option('--includeSchemasFiles', 'The generation of model validation schemes is enabled (default: false)')
|
|
50
50
|
.option('--request <value>', 'Path to custom request file')
|
|
51
51
|
.option('--interfacePrefix <value>', 'Prefix for interface model(default: "I")', 'I')
|
|
52
52
|
.option('--enumPrefix <value>', 'Prefix for enum model(default: "E")', 'E')
|
|
@@ -56,6 +56,7 @@ program
|
|
|
56
56
|
.addOption(new commander_1.Option('-t, --logTarget <target>', 'Target of logging').choices([...Object.values(Enums_1.ELogOutput)]).default(Enums_1.ELogOutput.CONSOLE))
|
|
57
57
|
.option('-s, --sortByRequired', 'Property sorting strategy: simplified or extended')
|
|
58
58
|
.option('--useSeparatedIndexes', 'Use separate index files for the core, models, schemas, and services.')
|
|
59
|
+
.addOption(new commander_1.Option('--validationLibrary <value>', 'Validation library to use for schema validation').choices([...Object.values(ValidationLibrary_enum_1.ValidationLibrary)]).default(ValidationLibrary_enum_1.ValidationLibrary.NONE))
|
|
59
60
|
.hook('preAction', async () => {
|
|
60
61
|
await updateNotifier.checkAndNotify();
|
|
61
62
|
})
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ELogLevel, ELogOutput } from '../../common/Enums';
|
|
3
|
+
import { HttpClient } from '../../core/types/enums/HttpClient.enum';
|
|
4
|
+
/**
|
|
5
|
+
* Базовая схема с общими опциями для всех команд
|
|
6
|
+
*/
|
|
7
|
+
export declare const baseCLIOptionsSchema: z.ZodObject<{
|
|
8
|
+
openapiConfig: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
export type BaseCLIOptions = z.infer<typeof baseCLIOptionsSchema>;
|
|
11
|
+
/**
|
|
12
|
+
* Enum схемы для типизированных значений
|
|
13
|
+
*/
|
|
14
|
+
export declare const httpClientSchema: z.ZodEnum<typeof HttpClient>;
|
|
15
|
+
export declare const logLevelSchema: z.ZodEnum<typeof ELogLevel>;
|
|
16
|
+
export declare const logTargetSchema: z.ZodEnum<typeof ELogOutput>;
|
|
17
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/cli/schemas/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,oBAAoB;;iBAE/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,gBAAgB,8BAA2B,CAAC;AACzD,eAAO,MAAM,cAAc,6BAA0B,CAAC;AACtD,eAAO,MAAM,eAAe,8BAA2B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logTargetSchema = exports.logLevelSchema = exports.httpClientSchema = exports.baseCLIOptionsSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const Consts_1 = require("../../common/Consts");
|
|
6
|
+
const Enums_1 = require("../../common/Enums");
|
|
7
|
+
const HttpClient_enum_1 = require("../../core/types/enums/HttpClient.enum");
|
|
8
|
+
/**
|
|
9
|
+
* Базовая схема с общими опциями для всех команд
|
|
10
|
+
*/
|
|
11
|
+
exports.baseCLIOptionsSchema = zod_1.z.object({
|
|
12
|
+
openapiConfig: zod_1.z.string().optional().default(Consts_1.DEFAULT_OPENAPI_CONFIG_FILENAME),
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Enum схемы для типизированных значений
|
|
16
|
+
*/
|
|
17
|
+
exports.httpClientSchema = zod_1.z.nativeEnum(HttpClient_enum_1.HttpClient);
|
|
18
|
+
exports.logLevelSchema = zod_1.z.nativeEnum(Enums_1.ELogLevel);
|
|
19
|
+
exports.logTargetSchema = zod_1.z.nativeEnum(Enums_1.ELogOutput);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const checkConfigOptionsSchema: z.ZodObject<{
|
|
3
|
+
openapiConfig: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
4
|
+
}, z.core.$strip>;
|
|
5
|
+
export type CheckConfigOptions = z.infer<typeof checkConfigOptionsSchema>;
|
|
6
|
+
//# sourceMappingURL=checkConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkConfig.d.ts","sourceRoot":"","sources":["../../../src/cli/schemas/checkConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,wBAAwB;;iBAAuB,CAAC;AAE7D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Схема для команды generate
|
|
4
|
+
* Основана на baseFlatOptionsSchema, но с добавлением:
|
|
5
|
+
* - openapiConfig (из baseCLIOptionsSchema)
|
|
6
|
+
* - опциональными input/output (валидируются условно)
|
|
7
|
+
*/
|
|
8
|
+
export declare const generateOptionsSchema: z.ZodObject<{
|
|
9
|
+
openapiConfig: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
10
|
+
outputCore: z.ZodOptional<z.ZodString>;
|
|
11
|
+
outputServices: z.ZodOptional<z.ZodString>;
|
|
12
|
+
outputModels: z.ZodOptional<z.ZodString>;
|
|
13
|
+
outputSchemas: z.ZodOptional<z.ZodString>;
|
|
14
|
+
interfacePrefix: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
15
|
+
enumPrefix: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
16
|
+
typePrefix: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
17
|
+
httpClient: z.ZodOptional<z.ZodEnum<typeof import("../..").HttpClient>>;
|
|
18
|
+
useOptions: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
19
|
+
useUnionTypes: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
20
|
+
excludeCoreServiceFiles: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
21
|
+
request: z.ZodOptional<z.ZodString>;
|
|
22
|
+
useCancelableRequest: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
23
|
+
logLevel: z.ZodOptional<z.ZodEnum<typeof import("../../common/Enums").ELogLevel>>;
|
|
24
|
+
logTarget: z.ZodOptional<z.ZodEnum<typeof import("../../common/Enums").ELogOutput>>;
|
|
25
|
+
sortByRequired: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
26
|
+
useSeparatedIndexes: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
27
|
+
validationLibrary: z.ZodOptional<z.ZodEnum<typeof import("../../core/types/enums/ValidationLibrary.enum").ValidationLibrary>>;
|
|
28
|
+
input: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodString>>;
|
|
29
|
+
output: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodString>>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
export type GenerateOptions = z.infer<typeof generateOptionsSchema>;
|
|
32
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/schemas/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAgBxB;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;iBAwC5B,CAAC;AAEP,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|