klasik 2.5.1 → 2.6.0
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 +102 -6
- package/dist/bin/go-schema-gen +0 -0
- package/dist/builders/class-builder.d.ts +2 -0
- package/dist/builders/class-builder.d.ts.map +1 -1
- package/dist/builders/class-builder.js.map +1 -1
- package/dist/cli/commands/generate-crd.d.ts +1 -0
- package/dist/cli/commands/generate-crd.d.ts.map +1 -1
- package/dist/cli/commands/generate-crd.js +2 -0
- package/dist/cli/commands/generate-crd.js.map +1 -1
- package/dist/cli/commands/generate-go.d.ts +1 -0
- package/dist/cli/commands/generate-go.d.ts.map +1 -1
- package/dist/cli/commands/generate-go.js +2 -0
- package/dist/cli/commands/generate-go.js.map +1 -1
- package/dist/cli/commands/generate-jsonschema.d.ts +1 -0
- package/dist/cli/commands/generate-jsonschema.d.ts.map +1 -1
- package/dist/cli/commands/generate-jsonschema.js +2 -0
- package/dist/cli/commands/generate-jsonschema.js.map +1 -1
- package/dist/cli/commands/generate.d.ts +2 -0
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +4 -0
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/utils/options.d.ts +8 -0
- package/dist/cli/utils/options.d.ts.map +1 -1
- package/dist/cli/utils/options.js +16 -0
- package/dist/cli/utils/options.js.map +1 -1
- package/dist/generator/generator.d.ts.map +1 -1
- package/dist/generator/generator.js +4 -0
- package/dist/generator/generator.js.map +1 -1
- package/dist/generators/api-client-generator.d.ts +14 -0
- package/dist/generators/api-client-generator.d.ts.map +1 -1
- package/dist/generators/api-client-generator.js +94 -0
- package/dist/generators/api-client-generator.js.map +1 -1
- package/dist/generators/parameter-style-builder.d.ts +87 -0
- package/dist/generators/parameter-style-builder.d.ts.map +1 -0
- package/dist/generators/parameter-style-builder.js +164 -0
- package/dist/generators/parameter-style-builder.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/class-validator-plugin.d.ts +3 -0
- package/dist/plugins/class-validator-plugin.d.ts.map +1 -1
- package/dist/plugins/class-validator-plugin.js +45 -3
- package/dist/plugins/class-validator-plugin.js.map +1 -1
- package/dist/plugins/nestjs-graphql-plugin.d.ts +58 -0
- package/dist/plugins/nestjs-graphql-plugin.d.ts.map +1 -0
- package/dist/plugins/nestjs-graphql-plugin.js +182 -0
- package/dist/plugins/nestjs-graphql-plugin.js.map +1 -0
- package/dist/plugins/zod-validator-plugin.d.ts +3 -0
- package/dist/plugins/zod-validator-plugin.d.ts.map +1 -1
- package/dist/plugins/zod-validator-plugin.js +21 -1
- package/dist/plugins/zod-validator-plugin.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Parameter Style Builder
|
|
4
|
+
*
|
|
5
|
+
* Utility class for handling different API method parameter styles.
|
|
6
|
+
* Supports object-flat and positional parameter styles.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ParameterStyleBuilder = void 0;
|
|
10
|
+
const name_utils_1 = require("../utils/name-utils");
|
|
11
|
+
/**
|
|
12
|
+
* Parameter style builder for generating method signatures and interfaces
|
|
13
|
+
*/
|
|
14
|
+
class ParameterStyleBuilder {
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.options = options;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Detect parameter name collisions for object-flat style
|
|
20
|
+
*
|
|
21
|
+
* In object-flat style, all parameters go into a single object,
|
|
22
|
+
* so we need to ensure no two parameters have the same name after camelCase conversion.
|
|
23
|
+
*
|
|
24
|
+
* @param operation - The operation to check
|
|
25
|
+
* @returns Collision report with errors if collisions found
|
|
26
|
+
*/
|
|
27
|
+
detectCollisions(operation) {
|
|
28
|
+
const seen = new Map();
|
|
29
|
+
const errors = [];
|
|
30
|
+
// Check all parameters
|
|
31
|
+
for (const param of operation.parameters) {
|
|
32
|
+
const camelName = (0, name_utils_1.toCamelCase)(param.name);
|
|
33
|
+
if (seen.has(camelName)) {
|
|
34
|
+
const existing = seen.get(camelName);
|
|
35
|
+
// Collision found - always error
|
|
36
|
+
errors.push(`Parameter name collision in operation '${operation.operationId}':\n` +
|
|
37
|
+
` - '${existing.originalName}' (${existing.location} parameter, type: ${this.typeToString(existing.type)})\n` +
|
|
38
|
+
` - '${param.name}' (${param.in} parameter, type: ${this.typeToString(param.type)})\n` +
|
|
39
|
+
`Both parameters normalize to '${camelName}'.\n\n` +
|
|
40
|
+
`Solutions:\n` +
|
|
41
|
+
` 1. Rename one parameter in your OpenAPI spec\n` +
|
|
42
|
+
` 2. Use --parameter-style positional to preserve original behavior`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
seen.set(camelName, {
|
|
46
|
+
name: camelName,
|
|
47
|
+
originalName: param.name,
|
|
48
|
+
location: param.in,
|
|
49
|
+
type: param.type,
|
|
50
|
+
required: param.required,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
hasCollisions: errors.length > 0,
|
|
56
|
+
errors,
|
|
57
|
+
parameterMap: seen,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Generate parameter interface for object-flat style
|
|
62
|
+
*
|
|
63
|
+
* Creates a TypeScript interface for the params object.
|
|
64
|
+
* Note: requestBody is NOT included in this interface - it's a separate parameter.
|
|
65
|
+
*
|
|
66
|
+
* @param operation - The operation to generate interface for
|
|
67
|
+
* @returns TypeScript interface code
|
|
68
|
+
*/
|
|
69
|
+
generateParameterInterface(operation) {
|
|
70
|
+
const interfaceName = `${(0, name_utils_1.toPascalCase)(operation.operationId)}Params`;
|
|
71
|
+
const lines = [];
|
|
72
|
+
// Add JSDoc
|
|
73
|
+
lines.push(`/**`);
|
|
74
|
+
lines.push(` * Parameters for ${operation.operationId} operation`);
|
|
75
|
+
if (operation.summary) {
|
|
76
|
+
lines.push(` * ${operation.summary}`);
|
|
77
|
+
}
|
|
78
|
+
lines.push(` */`);
|
|
79
|
+
// Interface declaration
|
|
80
|
+
lines.push(`export interface ${interfaceName} {`);
|
|
81
|
+
// Add each parameter (excluding requestBody - it's separate!)
|
|
82
|
+
for (const param of operation.parameters) {
|
|
83
|
+
const paramName = (0, name_utils_1.toCamelCase)(param.name);
|
|
84
|
+
const typeStr = this.typeReferenceToString(param.type);
|
|
85
|
+
const optional = !param.required ? '?' : '';
|
|
86
|
+
// Add param comment
|
|
87
|
+
if (param.description) {
|
|
88
|
+
lines.push(` /** ${param.description} */`);
|
|
89
|
+
}
|
|
90
|
+
lines.push(` ${paramName}${optional}: ${typeStr};`);
|
|
91
|
+
}
|
|
92
|
+
lines.push(`}`);
|
|
93
|
+
lines.push(''); // Empty line after interface
|
|
94
|
+
return lines.join('\n');
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Generate parameter extraction code for method body
|
|
98
|
+
*
|
|
99
|
+
* For object-flat style, this generates destructuring code.
|
|
100
|
+
* For positional style, no extraction is needed.
|
|
101
|
+
*
|
|
102
|
+
* @param operation - The operation
|
|
103
|
+
* @param style - The parameter style
|
|
104
|
+
* @returns Array of code lines
|
|
105
|
+
*/
|
|
106
|
+
generateParameterExtraction(operation, style) {
|
|
107
|
+
const lines = [];
|
|
108
|
+
if (style === 'positional') {
|
|
109
|
+
// No extraction needed - parameters are already named correctly
|
|
110
|
+
return lines;
|
|
111
|
+
}
|
|
112
|
+
// object-flat style
|
|
113
|
+
if (operation.parameters.length > 0) {
|
|
114
|
+
// Generate destructuring
|
|
115
|
+
// Use `params || {}` to handle optional params when all parameters are optional
|
|
116
|
+
const paramNames = operation.parameters.map(p => (0, name_utils_1.toCamelCase)(p.name));
|
|
117
|
+
lines.push(`const { ${paramNames.join(', ')} } = params || {};`);
|
|
118
|
+
lines.push(''); // Empty line after extraction
|
|
119
|
+
}
|
|
120
|
+
// Note: requestBody is NOT extracted from params - it's a separate parameter
|
|
121
|
+
return lines;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Convert a TypeReference to a TypeScript type string
|
|
125
|
+
*
|
|
126
|
+
* @param type - The type reference
|
|
127
|
+
* @returns TypeScript type string
|
|
128
|
+
*/
|
|
129
|
+
typeReferenceToString(type) {
|
|
130
|
+
switch (type.kind) {
|
|
131
|
+
case 'primitive':
|
|
132
|
+
return type.name || 'any';
|
|
133
|
+
case 'array':
|
|
134
|
+
if (!type.elementType)
|
|
135
|
+
return 'any[]';
|
|
136
|
+
return `Array<${this.typeReferenceToString(type.elementType)}>`;
|
|
137
|
+
case 'reference':
|
|
138
|
+
case 'object':
|
|
139
|
+
return type.name || 'any';
|
|
140
|
+
case 'union':
|
|
141
|
+
if (!type.unionTypes || type.unionTypes.length === 0)
|
|
142
|
+
return 'any';
|
|
143
|
+
return type.unionTypes.map(t => this.typeReferenceToString(t)).join(' | ');
|
|
144
|
+
case 'dictionary':
|
|
145
|
+
if (!type.additionalProperties)
|
|
146
|
+
return 'Record<string, any>';
|
|
147
|
+
return `Record<string, ${this.typeReferenceToString(type.additionalProperties)}>`;
|
|
148
|
+
case 'unknown':
|
|
149
|
+
default:
|
|
150
|
+
return 'any';
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Convert a TypeReference to a string for error messages
|
|
155
|
+
*
|
|
156
|
+
* @param type - The type reference
|
|
157
|
+
* @returns Human-readable type string
|
|
158
|
+
*/
|
|
159
|
+
typeToString(type) {
|
|
160
|
+
return this.typeReferenceToString(type);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
exports.ParameterStyleBuilder = ParameterStyleBuilder;
|
|
164
|
+
//# sourceMappingURL=parameter-style-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-style-builder.js","sourceRoot":"","sources":["../../src/generators/parameter-style-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export { ImportManager } from './builders/import-manager';
|
|
|
19
19
|
export { GeneratorPlugin, PluginRegistry, PluginRunner, } from './plugins/plugin-interface';
|
|
20
20
|
export { ClassTransformerPlugin } from './plugins/class-transformer-plugin';
|
|
21
21
|
export { NestJSSwaggerPlugin } from './plugins/nestjs-swagger-plugin';
|
|
22
|
+
export { NestJSGraphQLPlugin } from './plugins/nestjs-graphql-plugin';
|
|
22
23
|
export { ClassValidatorPlugin } from './plugins/class-validator-plugin';
|
|
23
24
|
export * from './utils/name-utils';
|
|
24
25
|
export { Configuration, ConfigurationParameters } from './config/configuration';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG/E,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGzF,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGvF,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D,OAAO,EACL,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAGxE,cAAc,oBAAoB,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG/E,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGzF,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGvF,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D,OAAO,EACL,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAGxE,cAAc,oBAAoB,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -19,7 +19,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
19
19
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.Configuration = exports.ClassValidatorPlugin = exports.NestJSSwaggerPlugin = exports.ClassTransformerPlugin = exports.PluginRunner = exports.PluginRegistry = exports.ImportManager = exports.ClassBuilder = exports.SwaggerConversionError = exports.SwaggerConverter = exports.RefInlinerError = exports.RefInliner = exports.RefResolverError = exports.RefResolver = exports.SpecLoader = exports.JsonSchemaParser = exports.CRDToIRConverter = exports.CRDParser = exports.OpenAPIParser = exports.Generator = void 0;
|
|
22
|
+
exports.Configuration = exports.ClassValidatorPlugin = exports.NestJSGraphQLPlugin = exports.NestJSSwaggerPlugin = exports.ClassTransformerPlugin = exports.PluginRunner = exports.PluginRegistry = exports.ImportManager = exports.ClassBuilder = exports.SwaggerConversionError = exports.SwaggerConverter = exports.RefInlinerError = exports.RefInliner = exports.RefResolverError = exports.RefResolver = exports.SpecLoader = exports.JsonSchemaParser = exports.CRDToIRConverter = exports.CRDParser = exports.OpenAPIParser = exports.Generator = void 0;
|
|
23
23
|
// Core generator
|
|
24
24
|
var generator_1 = require("./generator/generator");
|
|
25
25
|
Object.defineProperty(exports, "Generator", { enumerable: true, get: function () { return generator_1.Generator; } });
|
|
@@ -61,6 +61,8 @@ var class_transformer_plugin_1 = require("./plugins/class-transformer-plugin");
|
|
|
61
61
|
Object.defineProperty(exports, "ClassTransformerPlugin", { enumerable: true, get: function () { return class_transformer_plugin_1.ClassTransformerPlugin; } });
|
|
62
62
|
var nestjs_swagger_plugin_1 = require("./plugins/nestjs-swagger-plugin");
|
|
63
63
|
Object.defineProperty(exports, "NestJSSwaggerPlugin", { enumerable: true, get: function () { return nestjs_swagger_plugin_1.NestJSSwaggerPlugin; } });
|
|
64
|
+
var nestjs_graphql_plugin_1 = require("./plugins/nestjs-graphql-plugin");
|
|
65
|
+
Object.defineProperty(exports, "NestJSGraphQLPlugin", { enumerable: true, get: function () { return nestjs_graphql_plugin_1.NestJSGraphQLPlugin; } });
|
|
64
66
|
var class_validator_plugin_1 = require("./plugins/class-validator-plugin");
|
|
65
67
|
Object.defineProperty(exports, "ClassValidatorPlugin", { enumerable: true, get: function () { return class_validator_plugin_1.ClassValidatorPlugin; } });
|
|
66
68
|
// Utils
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;AAEH,iBAAiB;AACjB,mDAAkD;AAAzC,sGAAA,SAAS,OAAA;AAGlB,WAAW;AACX,6CAA2B;AAE3B,UAAU;AACV,2DAA4F;AAAnF,+GAAA,aAAa,OAAA;AACtB,mDAA8E;AAArE,uGAAA,SAAS,OAAA;AAClB,iDAAuE;AAA9D,6GAAA,gBAAgB,OAAA;AACzB,mEAAyF;AAAhF,sHAAA,gBAAgB,OAAA;AAEzB,UAAU;AACV,qDAA2F;AAAlF,yGAAA,UAAU,OAAA;AACnB,uDAA2F;AAAlF,2GAAA,WAAW,OAAA;AAAsB,gHAAA,gBAAgB,OAAA;AAC1D,qDAAuF;AAA9E,yGAAA,UAAU,OAAA;AAAqB,8GAAA,eAAe,OAAA;AAEvD,aAAa;AACb,oEAIwC;AAHtC,qHAAA,gBAAgB,OAAA;AAEhB,2HAAA,sBAAsB,OAAA;AAGxB,WAAW;AACX,0DAAwD;AAA/C,6GAAA,YAAY,OAAA;AACrB,4DAA0D;AAAjD,+GAAA,aAAa,OAAA;AAEtB,gBAAgB;AAChB,+DAIoC;AAFlC,kHAAA,cAAc,OAAA;AACd,gHAAA,YAAY,OAAA;AAGd,mBAAmB;AACnB,+EAA4E;AAAnE,kIAAA,sBAAsB,OAAA;AAC/B,yEAAsE;AAA7D,4HAAA,mBAAmB,OAAA;AAC5B,2EAAwE;AAA/D,8HAAA,oBAAoB,OAAA;AAE7B,QAAQ;AACR,qDAAmC;AAEnC,gBAAgB;AAChB,wDAAgF;AAAvE,8GAAA,aAAa,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;AAEH,iBAAiB;AACjB,mDAAkD;AAAzC,sGAAA,SAAS,OAAA;AAGlB,WAAW;AACX,6CAA2B;AAE3B,UAAU;AACV,2DAA4F;AAAnF,+GAAA,aAAa,OAAA;AACtB,mDAA8E;AAArE,uGAAA,SAAS,OAAA;AAClB,iDAAuE;AAA9D,6GAAA,gBAAgB,OAAA;AACzB,mEAAyF;AAAhF,sHAAA,gBAAgB,OAAA;AAEzB,UAAU;AACV,qDAA2F;AAAlF,yGAAA,UAAU,OAAA;AACnB,uDAA2F;AAAlF,2GAAA,WAAW,OAAA;AAAsB,gHAAA,gBAAgB,OAAA;AAC1D,qDAAuF;AAA9E,yGAAA,UAAU,OAAA;AAAqB,8GAAA,eAAe,OAAA;AAEvD,aAAa;AACb,oEAIwC;AAHtC,qHAAA,gBAAgB,OAAA;AAEhB,2HAAA,sBAAsB,OAAA;AAGxB,WAAW;AACX,0DAAwD;AAA/C,6GAAA,YAAY,OAAA;AACrB,4DAA0D;AAAjD,+GAAA,aAAa,OAAA;AAEtB,gBAAgB;AAChB,+DAIoC;AAFlC,kHAAA,cAAc,OAAA;AACd,gHAAA,YAAY,OAAA;AAGd,mBAAmB;AACnB,+EAA4E;AAAnE,kIAAA,sBAAsB,OAAA;AAC/B,yEAAsE;AAA7D,4HAAA,mBAAmB,OAAA;AAC5B,yEAAsE;AAA7D,4HAAA,mBAAmB,OAAA;AAC5B,2EAAwE;AAA/D,8HAAA,oBAAoB,OAAA;AAE7B,QAAQ;AACR,qDAAmC;AAEnC,gBAAgB;AAChB,wDAAgF;AAAvE,8GAAA,aAAa,OAAA"}
|
|
@@ -33,6 +33,9 @@ export declare class ClassValidatorPlugin implements GeneratorPlugin {
|
|
|
33
33
|
private addPrimitiveValidator;
|
|
34
34
|
/**
|
|
35
35
|
* Add format-based validators (email, url, uuid, etc.)
|
|
36
|
+
*
|
|
37
|
+
* Maps OpenAPI format values to appropriate class-validator decorators.
|
|
38
|
+
* See: https://swagger.io/docs/specification/data-models/data-types/
|
|
36
39
|
*/
|
|
37
40
|
private addFormatValidators;
|
|
38
41
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-validator-plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/class-validator-plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAGnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,qBAAa,oBAAqB,YAAW,eAAe;IAC1D,IAAI,SAAqB;IACzB,QAAQ,SAAM;IAEd;;;OAGG;IAEH;;OAEG;IACH,gBAAgB,CACd,QAAQ,EAAE,mBAAmB,EAC7B,WAAW,EAAE,kBAAkB,EAC/B,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,iBAAiB,GACzB,IAAI;IAoBP;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IASrE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsDzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuB7B
|
|
1
|
+
{"version":3,"file":"class-validator-plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/class-validator-plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAGnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,qBAAa,oBAAqB,YAAW,eAAe;IAC1D,IAAI,SAAqB;IACzB,QAAQ,SAAM;IAEd;;;OAGG;IAEH;;OAEG;IACH,gBAAgB,CACd,QAAQ,EAAE,mBAAmB,EAC7B,WAAW,EAAE,kBAAkB,EAC/B,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,iBAAiB,GACzB,IAAI;IAoBP;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IASrE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsDzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAkF3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAiGhC"}
|
|
@@ -110,12 +110,16 @@ class ClassValidatorPlugin {
|
|
|
110
110
|
}
|
|
111
111
|
/**
|
|
112
112
|
* Add format-based validators (email, url, uuid, etc.)
|
|
113
|
+
*
|
|
114
|
+
* Maps OpenAPI format values to appropriate class-validator decorators.
|
|
115
|
+
* See: https://swagger.io/docs/specification/data-models/data-types/
|
|
113
116
|
*/
|
|
114
117
|
addFormatValidators(property, propertyDef, context) {
|
|
115
118
|
if (!propertyDef.format) {
|
|
116
119
|
return;
|
|
117
120
|
}
|
|
118
121
|
switch (propertyDef.format.toLowerCase()) {
|
|
122
|
+
// String formats
|
|
119
123
|
case 'email':
|
|
120
124
|
context.importManager.addImport('class-validator', 'IsEmail');
|
|
121
125
|
property.addDecorator({ name: 'IsEmail', arguments: [] });
|
|
@@ -129,12 +133,50 @@ class ClassValidatorPlugin {
|
|
|
129
133
|
context.importManager.addImport('class-validator', 'IsUUID');
|
|
130
134
|
property.addDecorator({ name: 'IsUUID', arguments: [] });
|
|
131
135
|
break;
|
|
136
|
+
// Date formats - use IsDateString/IsISO8601 for string types (OpenAPI date-time is always a string)
|
|
132
137
|
case 'date':
|
|
133
138
|
case 'date-time':
|
|
134
|
-
context.importManager.addImport('class-validator', '
|
|
135
|
-
property.addDecorator({ name: '
|
|
139
|
+
context.importManager.addImport('class-validator', 'IsDateString');
|
|
140
|
+
property.addDecorator({ name: 'IsDateString', arguments: [] });
|
|
141
|
+
break;
|
|
142
|
+
// Binary/encoded formats
|
|
143
|
+
case 'byte':
|
|
144
|
+
// Base64-encoded string
|
|
145
|
+
context.importManager.addImport('class-validator', 'IsBase64');
|
|
146
|
+
property.addDecorator({ name: 'IsBase64', arguments: [] });
|
|
147
|
+
break;
|
|
148
|
+
case 'binary':
|
|
149
|
+
// Binary data - no specific string validator needed
|
|
150
|
+
// This is typically handled as file upload, not validated as string
|
|
151
|
+
break;
|
|
152
|
+
// Network formats
|
|
153
|
+
case 'hostname':
|
|
154
|
+
context.importManager.addImport('class-validator', 'IsFQDN');
|
|
155
|
+
property.addDecorator({ name: 'IsFQDN', arguments: [] });
|
|
156
|
+
break;
|
|
157
|
+
case 'ipv4':
|
|
158
|
+
context.importManager.addImport('class-validator', 'IsIP');
|
|
159
|
+
property.addDecorator({ name: 'IsIP', arguments: ["'4'"] });
|
|
160
|
+
break;
|
|
161
|
+
case 'ipv6':
|
|
162
|
+
context.importManager.addImport('class-validator', 'IsIP');
|
|
163
|
+
property.addDecorator({ name: 'IsIP', arguments: ["'6'"] });
|
|
164
|
+
break;
|
|
165
|
+
// Integer formats (for number types)
|
|
166
|
+
case 'int32':
|
|
167
|
+
case 'int64':
|
|
168
|
+
context.importManager.addImport('class-validator', 'IsInt');
|
|
169
|
+
property.addDecorator({ name: 'IsInt', arguments: [] });
|
|
170
|
+
break;
|
|
171
|
+
// Float formats - @IsNumber is already added by type validator
|
|
172
|
+
case 'float':
|
|
173
|
+
case 'double':
|
|
174
|
+
// No additional decorator needed - @IsNumber covers this
|
|
175
|
+
break;
|
|
176
|
+
// Password hint - no validation beyond string type
|
|
177
|
+
case 'password':
|
|
178
|
+
// Just a hint for UI/docs, no special validation
|
|
136
179
|
break;
|
|
137
|
-
// Other formats could be added here
|
|
138
180
|
}
|
|
139
181
|
}
|
|
140
182
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-validator-plugin.js","sourceRoot":"","sources":["../../src/plugins/class-validator-plugin.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAYH,MAAa,oBAAoB;IAAjC;QACE,SAAI,GAAG,iBAAiB,CAAC;QACzB,aAAQ,GAAG,EAAE,CAAC,CAAC,+CAA+C;
|
|
1
|
+
{"version":3,"file":"class-validator-plugin.js","sourceRoot":"","sources":["../../src/plugins/class-validator-plugin.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAYH,MAAa,oBAAoB;IAAjC;QACE,SAAI,GAAG,iBAAiB,CAAC;QACzB,aAAQ,GAAG,EAAE,CAAC,CAAC,+CAA+C;IA8ThE,CAAC;IA5TC;;;OAGG;IAEH;;OAEG;IACH,gBAAgB,CACd,QAA6B,EAC7B,WAA+B,EAC/B,MAAwB,EACxB,OAA0B;QAE1B,wCAAwC;QACxC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC1B,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;YACjE,QAAQ,CAAC,YAAY,CAAC;gBACpB,IAAI,EAAE,YAAY;gBAClB,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;QACL,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAEvD,mDAAmD;QACnD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAEzD,0DAA0D;QAC1D,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,WAAgB,EAAE,OAA0B;QAC5D,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;YAC9B,WAAW,CAAC,YAAY,GAAG,EAAE,CAAC;QAChC,CAAC;QAED,WAAW,CAAC,YAAY,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;QACxD,WAAW,CAAC,YAAY,CAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC;IAC3D,CAAC;IAED;;OAEG;IACK,iBAAiB,CACvB,QAA6B,EAC7B,WAA+B,EAC/B,OAA0B;QAE1B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;QAE9B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,WAAW;gBACd,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAK,EAAE,OAAO,CAAC,CAAC;gBAC1D,MAAM;YAER,KAAK,OAAO;gBACV,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;gBAC9D,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBAE1D,4DAA4D;gBAC5D,IAAI,IAAI,CAAC,WAAW;oBAChB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;oBAClF,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;oBACrE,QAAQ,CAAC,YAAY,CAAC;wBACpB,IAAI,EAAE,gBAAgB;wBACtB,SAAS,EAAE,CAAC,gBAAgB,CAAC;qBAC9B,CAAC,CAAC;oBAEH,6DAA6D;gBAC/D,CAAC;gBACD,MAAM;YAER,KAAK,WAAW,CAAC;YACjB,KAAK,QAAQ;gBACX,qBAAqB;gBACrB,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;gBACrE,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBACjE,MAAM;YAER,KAAK,YAAY;gBACf,gCAAgC;gBAChC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;gBAC/D,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3D,MAAM;YAER,KAAK,OAAO;gBACV,oDAAoD;gBACpD,uDAAuD;gBACvD,MAAM;YAER,KAAK,SAAS,CAAC;YACf;gBACE,wBAAwB;gBACxB,MAAM;QACV,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAC3B,QAA6B,EAC7B,QAAgB,EAChB,OAA0B;QAE1B,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;gBAC/D,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3D,MAAM;YAER,KAAK,QAAQ;gBACX,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;gBAC/D,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3D,MAAM;YAER,KAAK,SAAS;gBACZ,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;gBAChE,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC5D,MAAM;QACV,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,mBAAmB,CACzB,QAA6B,EAC7B,WAA+B,EAC/B,OAA0B;QAE1B,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,QAAQ,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YACzC,iBAAiB;YACjB,KAAK,OAAO;gBACV,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;gBAC9D,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC1D,MAAM;YAER,KAAK,KAAK,CAAC;YACX,KAAK,KAAK;gBACR,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;gBAC5D,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBACxD,MAAM;YAER,KAAK,MAAM;gBACT,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;gBAC7D,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBACzD,MAAM;YAER,oGAAoG;YACpG,KAAK,MAAM,CAAC;YACZ,KAAK,WAAW;gBACd,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;gBACnE,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC/D,MAAM;YAER,yBAAyB;YACzB,KAAK,MAAM;gBACT,wBAAwB;gBACxB,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;gBAC/D,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3D,MAAM;YAER,KAAK,QAAQ;gBACX,oDAAoD;gBACpD,oEAAoE;gBACpE,MAAM;YAER,kBAAkB;YAClB,KAAK,UAAU;gBACb,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;gBAC7D,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBACzD,MAAM;YAER,KAAK,MAAM;gBACT,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;gBAC3D,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC5D,MAAM;YAER,KAAK,MAAM;gBACT,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;gBAC3D,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC5D,MAAM;YAER,qCAAqC;YACrC,KAAK,OAAO,CAAC;YACb,KAAK,OAAO;gBACV,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;gBAC5D,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBACxD,MAAM;YAER,+DAA+D;YAC/D,KAAK,OAAO,CAAC;YACb,KAAK,QAAQ;gBACX,yDAAyD;gBACzD,MAAM;YAER,mDAAmD;YACnD,KAAK,UAAU;gBACb,iDAAiD;gBACjD,MAAM;QACV,CAAC;IACH,CAAC;IAED;;OAEG;IACK,uBAAuB,CAC7B,QAA6B,EAC7B,WAA+B,EAC/B,OAA0B;QAE1B,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;QAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,sBAAsB;QACtB,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YAC1D,QAAQ,CAAC,YAAY,CAAC;gBACpB,IAAI,EAAE,KAAK;gBACX,SAAS,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;aAC5C,CAAC,CAAC;QACL,CAAC;QAED,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YAC1D,QAAQ,CAAC,YAAY,CAAC;gBACpB,IAAI,EAAE,KAAK;gBACX,SAAS,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;aAC5C,CAAC,CAAC;QACL,CAAC;QAED,4BAA4B;QAC5B,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;YAChE,QAAQ,CAAC,YAAY,CAAC;gBACpB,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;aAC9C,CAAC,CAAC;QACL,CAAC;QAED,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;YAChE,QAAQ,CAAC,YAAY,CAAC;gBACpB,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;aAC9C,CAAC,CAAC;QACL,CAAC;QAED,6BAA6B;QAC7B,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;YAE9D,2EAA2E;YAC3E,4CAA4C;YAC5C,8CAA8C;YAC9C,yCAAyC;YACzC,IAAI,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtC,yDAAyD;gBACzD,iEAAiE;gBACjE,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO;qBACvC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;qBACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACxB,QAAQ,CAAC,YAAY,CAAC;oBACpB,IAAI,EAAE,SAAS;oBACf,SAAS,EAAE,CAAC,eAAe,cAAc,IAAI,CAAC;iBAC/C,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,oDAAoD;gBACpD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACzD,QAAQ,CAAC,YAAY,CAAC;oBACpB,IAAI,EAAE,SAAS;oBACf,SAAS,EAAE,CAAC,IAAI,OAAO,GAAG,CAAC;iBAC5B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,WAAW,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;YACnE,QAAQ,CAAC,YAAY,CAAC;gBACpB,IAAI,EAAE,cAAc;gBACpB,SAAS,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;aAC7C,CAAC,CAAC;QACL,CAAC;QAED,IAAI,WAAW,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;YACnE,QAAQ,CAAC,YAAY,CAAC;gBACpB,IAAI,EAAE,cAAc;gBACpB,SAAS,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;aAC7C,CAAC,CAAC;QACL,CAAC;QAED,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;YAC5B,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;YAClE,QAAQ,CAAC,YAAY,CAAC;gBACpB,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AAhUD,oDAgUC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NestJS GraphQL Plugin
|
|
3
|
+
*
|
|
4
|
+
* Adds @ObjectType() and @Field() decorators from @nestjs/graphql
|
|
5
|
+
* Properly handles types, descriptions, nullability, and deprecation
|
|
6
|
+
*/
|
|
7
|
+
import { ClassDeclaration, PropertyDeclaration } from 'ts-morph';
|
|
8
|
+
import { GeneratorPlugin } from './plugin-interface';
|
|
9
|
+
import { SchemaDefinition, PropertyDefinition, SchemaIR } from '../ir/types';
|
|
10
|
+
import { GenerationContext } from '../builders/class-builder';
|
|
11
|
+
export declare class NestJSGraphQLPlugin implements GeneratorPlugin {
|
|
12
|
+
name: string;
|
|
13
|
+
priority: number;
|
|
14
|
+
/**
|
|
15
|
+
* Add @nestjs/graphql imports before generation
|
|
16
|
+
*/
|
|
17
|
+
beforeGeneration(context: GenerationContext, ir: SchemaIR): void;
|
|
18
|
+
/**
|
|
19
|
+
* Decorate class with @ObjectType()
|
|
20
|
+
*/
|
|
21
|
+
decorateClass(classDecl: ClassDeclaration, schema: SchemaDefinition, context: GenerationContext): void;
|
|
22
|
+
/**
|
|
23
|
+
* Decorate property with @Field(() => Type, { options })
|
|
24
|
+
*/
|
|
25
|
+
decorateProperty(property: PropertyDeclaration, propertyDef: PropertyDefinition, schema: SchemaDefinition, context: GenerationContext): void;
|
|
26
|
+
/**
|
|
27
|
+
* Add @nestjs/graphql to package.json
|
|
28
|
+
*/
|
|
29
|
+
modifyPackageJson(packageJson: any, context: GenerationContext): void;
|
|
30
|
+
/**
|
|
31
|
+
* Get GraphQL field type string
|
|
32
|
+
* Returns null for types that should be skipped
|
|
33
|
+
*/
|
|
34
|
+
private getGraphQLFieldType;
|
|
35
|
+
/**
|
|
36
|
+
* Map primitive types to GraphQL scalar types
|
|
37
|
+
*/
|
|
38
|
+
private getPrimitiveGraphQLType;
|
|
39
|
+
/**
|
|
40
|
+
* Add imports for GraphQL scalar types that need explicit imports.
|
|
41
|
+
* Uses word-boundary matching to avoid false positives with class names
|
|
42
|
+
* like "Interview" or "IDCard".
|
|
43
|
+
*/
|
|
44
|
+
private addTypeImports;
|
|
45
|
+
/**
|
|
46
|
+
* Build @Field options object
|
|
47
|
+
*/
|
|
48
|
+
private buildFieldOptions;
|
|
49
|
+
/**
|
|
50
|
+
* Build the options string for @Field decorator
|
|
51
|
+
*/
|
|
52
|
+
private buildOptionsString;
|
|
53
|
+
/**
|
|
54
|
+
* Escape special characters for template literals
|
|
55
|
+
*/
|
|
56
|
+
private escapeForTemplate;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=nestjs-graphql-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nestjs-graphql-plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/nestjs-graphql-plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAElB,QAAQ,EACT,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,qBAAa,mBAAoB,YAAW,eAAe;IACzD,IAAI,SAAoB;IACxB,QAAQ,SAAO;IAEf;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI;IAKhE;;OAEG;IACH,aAAa,CACX,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,iBAAiB,GACzB,IAAI;IAkBP;;OAEG;IACH,gBAAgB,CACd,QAAQ,EAAE,mBAAmB,EAC7B,WAAW,EAAE,kBAAkB,EAC/B,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,iBAAiB,GACzB,IAAI;IAoBP;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAQrE;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAyBzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAM1B"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* NestJS GraphQL Plugin
|
|
4
|
+
*
|
|
5
|
+
* Adds @ObjectType() and @Field() decorators from @nestjs/graphql
|
|
6
|
+
* Properly handles types, descriptions, nullability, and deprecation
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.NestJSGraphQLPlugin = void 0;
|
|
10
|
+
class NestJSGraphQLPlugin {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.name = 'nestjs-graphql';
|
|
13
|
+
this.priority = 100;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Add @nestjs/graphql imports before generation
|
|
17
|
+
*/
|
|
18
|
+
beforeGeneration(context, ir) {
|
|
19
|
+
context.importManager.addImport('@nestjs/graphql', 'ObjectType');
|
|
20
|
+
context.importManager.addImport('@nestjs/graphql', 'Field');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Decorate class with @ObjectType()
|
|
24
|
+
*/
|
|
25
|
+
decorateClass(classDecl, schema, context) {
|
|
26
|
+
// Skip enums and unions - only decorate object types
|
|
27
|
+
if (schema.type !== 'object') {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const args = [];
|
|
31
|
+
if (schema.description) {
|
|
32
|
+
const escaped = this.escapeForTemplate(schema.description);
|
|
33
|
+
args.push(`{ description: \`${escaped}\` }`);
|
|
34
|
+
}
|
|
35
|
+
classDecl.addDecorator({
|
|
36
|
+
name: 'ObjectType',
|
|
37
|
+
arguments: args,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Decorate property with @Field(() => Type, { options })
|
|
42
|
+
*/
|
|
43
|
+
decorateProperty(property, propertyDef, schema, context) {
|
|
44
|
+
const fieldType = this.getGraphQLFieldType(propertyDef.type, propertyDef.format);
|
|
45
|
+
if (!fieldType) {
|
|
46
|
+
// Skip types that can't be represented in GraphQL (dictionary, union, unknown)
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// Add type-specific imports
|
|
50
|
+
this.addTypeImports(fieldType, context);
|
|
51
|
+
// Build options
|
|
52
|
+
const options = this.buildFieldOptions(propertyDef);
|
|
53
|
+
const optionsStr = options ? `, ${this.buildOptionsString(options)}` : '';
|
|
54
|
+
property.addDecorator({
|
|
55
|
+
name: 'Field',
|
|
56
|
+
arguments: [`() => ${fieldType}${optionsStr}`],
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Add @nestjs/graphql to package.json
|
|
61
|
+
*/
|
|
62
|
+
modifyPackageJson(packageJson, context) {
|
|
63
|
+
if (!packageJson.dependencies) {
|
|
64
|
+
packageJson.dependencies = {};
|
|
65
|
+
}
|
|
66
|
+
packageJson.dependencies['@nestjs/graphql'] = '^12.0.0';
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get GraphQL field type string
|
|
70
|
+
* Returns null for types that should be skipped
|
|
71
|
+
*/
|
|
72
|
+
getGraphQLFieldType(type, format) {
|
|
73
|
+
switch (type.kind) {
|
|
74
|
+
case 'primitive':
|
|
75
|
+
return this.getPrimitiveGraphQLType(type.name, format);
|
|
76
|
+
case 'array':
|
|
77
|
+
if (!type.elementType) {
|
|
78
|
+
return '[String]';
|
|
79
|
+
}
|
|
80
|
+
const elementType = this.getGraphQLFieldType(type.elementType);
|
|
81
|
+
if (!elementType) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
return `[${elementType}]`;
|
|
85
|
+
case 'reference':
|
|
86
|
+
case 'object':
|
|
87
|
+
return type.name || 'String';
|
|
88
|
+
case 'dictionary':
|
|
89
|
+
case 'union':
|
|
90
|
+
case 'unknown':
|
|
91
|
+
default:
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Map primitive types to GraphQL scalar types
|
|
97
|
+
*/
|
|
98
|
+
getPrimitiveGraphQLType(name, format) {
|
|
99
|
+
switch (name) {
|
|
100
|
+
case 'string':
|
|
101
|
+
if (format === 'uuid') {
|
|
102
|
+
return 'ID';
|
|
103
|
+
}
|
|
104
|
+
return 'String';
|
|
105
|
+
case 'number':
|
|
106
|
+
if (format === 'int32' || format === 'int64') {
|
|
107
|
+
return 'Int';
|
|
108
|
+
}
|
|
109
|
+
return 'Float';
|
|
110
|
+
case 'boolean':
|
|
111
|
+
return 'Boolean';
|
|
112
|
+
default:
|
|
113
|
+
return 'String';
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Add imports for GraphQL scalar types that need explicit imports.
|
|
118
|
+
* Uses word-boundary matching to avoid false positives with class names
|
|
119
|
+
* like "Interview" or "IDCard".
|
|
120
|
+
*/
|
|
121
|
+
addTypeImports(fieldType, context) {
|
|
122
|
+
if (/\bInt\b/.test(fieldType)) {
|
|
123
|
+
context.importManager.addImport('@nestjs/graphql', 'Int');
|
|
124
|
+
}
|
|
125
|
+
if (/\bFloat\b/.test(fieldType)) {
|
|
126
|
+
context.importManager.addImport('@nestjs/graphql', 'Float');
|
|
127
|
+
}
|
|
128
|
+
if (/\bID\b/.test(fieldType)) {
|
|
129
|
+
context.importManager.addImport('@nestjs/graphql', 'ID');
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Build @Field options object
|
|
134
|
+
*/
|
|
135
|
+
buildFieldOptions(propertyDef) {
|
|
136
|
+
const options = {};
|
|
137
|
+
// Nullable - when not required or explicitly nullable
|
|
138
|
+
if (!propertyDef.required || propertyDef.nullable) {
|
|
139
|
+
options.nullable = true;
|
|
140
|
+
}
|
|
141
|
+
// Description
|
|
142
|
+
if (propertyDef.description) {
|
|
143
|
+
options.description = this.escapeForTemplate(propertyDef.description);
|
|
144
|
+
}
|
|
145
|
+
// Deprecated
|
|
146
|
+
if (propertyDef.metadata.deprecated) {
|
|
147
|
+
options.deprecationReason = 'Deprecated';
|
|
148
|
+
}
|
|
149
|
+
if (Object.keys(options).length === 0) {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
return options;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Build the options string for @Field decorator
|
|
156
|
+
*/
|
|
157
|
+
buildOptionsString(options) {
|
|
158
|
+
const entries = [];
|
|
159
|
+
for (const [key, value] of Object.entries(options)) {
|
|
160
|
+
let valueStr;
|
|
161
|
+
if (typeof value === 'string') {
|
|
162
|
+
valueStr = `\`${value}\``;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
valueStr = JSON.stringify(value);
|
|
166
|
+
}
|
|
167
|
+
entries.push(`${key}: ${valueStr}`);
|
|
168
|
+
}
|
|
169
|
+
return `{ ${entries.join(', ')} }`;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Escape special characters for template literals
|
|
173
|
+
*/
|
|
174
|
+
escapeForTemplate(text) {
|
|
175
|
+
return text
|
|
176
|
+
.replace(/\\/g, '\\\\')
|
|
177
|
+
.replace(/`/g, '\\`')
|
|
178
|
+
.replace(/\$/g, '\\$');
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
exports.NestJSGraphQLPlugin = NestJSGraphQLPlugin;
|
|
182
|
+
//# sourceMappingURL=nestjs-graphql-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nestjs-graphql-plugin.js","sourceRoot":"","sources":["../../src/plugins/nestjs-graphql-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,6 +47,9 @@ export declare class ZodValidatorPlugin implements GeneratorPlugin {
|
|
|
47
47
|
private buildPrimitiveSchema;
|
|
48
48
|
/**
|
|
49
49
|
* Apply format-specific validations
|
|
50
|
+
*
|
|
51
|
+
* Maps OpenAPI/JSON Schema format values to Zod validation methods.
|
|
52
|
+
* See: https://swagger.io/docs/specification/data-models/data-types/
|
|
50
53
|
*/
|
|
51
54
|
private applyFormatValidations;
|
|
52
55
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod-validator-plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/zod-validator-plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAKL,QAAQ,EACT,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IACxD,IAAI,SAAmB;IACvB,QAAQ,SAAM;IAEd;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI;IAmB/D;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAOtE;;OAEG;IACH,OAAO,CAAC,eAAe;IAqDvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAwBtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0B3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAyCvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuB5B
|
|
1
|
+
{"version":3,"file":"zod-validator-plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/zod-validator-plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAKL,QAAQ,EACT,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IACxD,IAAI,SAAmB;IACvB,QAAQ,SAAM;IAEd;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI;IAmB/D;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAOtE;;OAEG;IACH,OAAO,CAAC,eAAe;IAqDvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAwBtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0B3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAyCvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuB5B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IA8D9B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA6DlC;;OAEG;IACH,OAAO,CAAC,cAAc;IA6BtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqC1B;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,OAAO,CAAC,WAAW;CAIpB"}
|