nest-scramble 1.3.0 → 1.4.1

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.
@@ -3,6 +3,7 @@ export interface ControllerInfo {
3
3
  name: string;
4
4
  path: string;
5
5
  methods: MethodInfo[];
6
+ hasGuards?: boolean;
6
7
  }
7
8
  export interface MethodInfo {
8
9
  name: string;
@@ -10,11 +11,13 @@ export interface MethodInfo {
10
11
  route: string;
11
12
  parameters: ParameterInfo[];
12
13
  returnType: AnalyzedType;
14
+ hasGuards?: boolean;
13
15
  }
14
16
  export interface ParameterInfo {
15
17
  name: string;
16
18
  type: AnalyzedType;
17
19
  decorator?: string;
20
+ parameterLocation?: 'path' | 'query' | 'header' | 'body';
18
21
  }
19
22
  export declare class ScannerService {
20
23
  private project;
@@ -1 +1 @@
1
- {"version":3,"file":"ScannerService.d.ts","sourceRoot":"","sources":["../../src/scanner/ScannerService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAC;AAEjE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,UAAU,EAAE,YAAY,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,WAAW,CAAqB;IAExC;;;;OAIG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE;IAsErD,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,qBAAqB;IA4B7B,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,iBAAiB;CAiC1B"}
1
+ {"version":3,"file":"ScannerService.d.ts","sourceRoot":"","sources":["../../src/scanner/ScannerService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAC;AAEjE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC1D;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,WAAW,CAAqB;IAExC;;;;OAIG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE;IAsErD,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,qBAAqB;IAqC7B,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,iBAAiB;CA0D1B"}
@@ -97,6 +97,14 @@ class ScannerService {
97
97
  if (!controllerDecorator)
98
98
  return null;
99
99
  const controllerPath = this.extractDecoratorArgument(controllerDecorator) || '';
100
+ // Check for class-level @UseGuards() decorator
101
+ const hasGuards = cls.getDecorators().some(decorator => {
102
+ const callExpression = decorator.getCallExpression();
103
+ if (!callExpression)
104
+ return false;
105
+ const expression = callExpression.getExpression();
106
+ return ts_morph_1.Node.isIdentifier(expression) && expression.getText() === 'UseGuards';
107
+ });
100
108
  const methods = [];
101
109
  for (const method of cls.getMethods()) {
102
110
  const methodInfo = this.extractMethodInfo(method);
@@ -108,6 +116,7 @@ class ScannerService {
108
116
  name: cls.getName() || 'UnknownController',
109
117
  path: controllerPath,
110
118
  methods,
119
+ hasGuards,
111
120
  };
112
121
  }
113
122
  extractDecoratorArgument(decorator) {
@@ -140,11 +149,36 @@ class ScannerService {
140
149
  const expression = callExpression.getExpression();
141
150
  const httpMethod = expression.getText().toUpperCase();
142
151
  const route = this.extractDecoratorArgument(httpDecorator) || '';
143
- const parameters = method.getParameters().map(param => ({
144
- name: param.getName(),
145
- type: this.dtoAnalyzer.analyzeType(param.getType()),
146
- decorator: param.getDecorators().map(d => d.getText()).join(' '),
147
- }));
152
+ // Check for @UseGuards() decorator
153
+ const hasGuards = method.getDecorators().some(decorator => {
154
+ const callExpression = decorator.getCallExpression();
155
+ if (!callExpression)
156
+ return false;
157
+ const expression = callExpression.getExpression();
158
+ return ts_morph_1.Node.isIdentifier(expression) && expression.getText() === 'UseGuards';
159
+ });
160
+ const parameters = method.getParameters().map(param => {
161
+ const decoratorText = param.getDecorators().map(d => d.getText()).join(' ');
162
+ let parameterLocation;
163
+ if (decoratorText.includes('@Body')) {
164
+ parameterLocation = 'body';
165
+ }
166
+ else if (decoratorText.includes('@Param')) {
167
+ parameterLocation = 'path';
168
+ }
169
+ else if (decoratorText.includes('@Query')) {
170
+ parameterLocation = 'query';
171
+ }
172
+ else if (decoratorText.includes('@Headers')) {
173
+ parameterLocation = 'header';
174
+ }
175
+ return {
176
+ name: param.getName(),
177
+ type: this.dtoAnalyzer.analyzeType(param.getType()),
178
+ decorator: decoratorText,
179
+ parameterLocation,
180
+ };
181
+ });
148
182
  const returnType = this.dtoAnalyzer.analyzeType(method.getReturnType());
149
183
  return {
150
184
  name: method.getName(),
@@ -152,6 +186,7 @@ class ScannerService {
152
186
  route,
153
187
  parameters,
154
188
  returnType,
189
+ hasGuards,
155
190
  };
156
191
  }
157
192
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ScannerService.js","sourceRoot":"","sources":["../../src/scanner/ScannerService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScannerService.js","sourceRoot":"","sources":["../../src/scanner/ScannerService.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,12 @@ export interface AnalyzedType {
6
6
  isOptional: boolean;
7
7
  properties?: PropertyInfo[];
8
8
  unionTypes?: string[];
9
+ enumValues?: string[];
9
10
  }
10
11
  export interface PropertyInfo {
11
12
  name: string;
12
13
  type: AnalyzedType;
14
+ description?: string;
13
15
  }
14
16
  export declare class DtoAnalyzer {
15
17
  private visited;
@@ -1 +1 @@
1
- {"version":3,"file":"DtoAnalyzer.d.ts","sourceRoot":"","sources":["../../src/utils/DtoAnalyzer.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EAAgD,IAAI,EAAE,MAAM,UAAU,CAAC;AAE9E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAqB;IAEpC;;;;;OAKG;IACH,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,UAAQ,GAAG,YAAY;IAmEzD,OAAO,CAAC,iBAAiB;CAkB1B"}
1
+ {"version":3,"file":"DtoAnalyzer.d.ts","sourceRoot":"","sources":["../../src/utils/DtoAnalyzer.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EAAgD,IAAI,EAAE,MAAM,UAAU,CAAC;AAE9E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAqB;IAEpC;;;;;OAKG;IACH,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,UAAQ,GAAG,YAAY;IAyHzD,OAAO,CAAC,iBAAiB;CA6B1B"}
@@ -26,20 +26,68 @@ class DtoAnalyzer {
26
26
  this.visited.add(typeText);
27
27
  try {
28
28
  const symbol = type.getSymbol();
29
+ // Unwrap Promise<T> to get T
30
+ if (typeText.startsWith('Promise<') && typeText.endsWith('>')) {
31
+ const typeArgs = type.getTypeArguments();
32
+ if (typeArgs.length > 0) {
33
+ return this.analyzeType(typeArgs[0], isOptional);
34
+ }
35
+ }
29
36
  // Check if it's an array
30
37
  const arrayElementType = type.getArrayElementType();
31
38
  if (arrayElementType) {
32
39
  const elementAnalysis = this.analyzeType(arrayElementType);
33
40
  return {
34
- type: typeText,
41
+ type: elementAnalysis.type || typeText,
35
42
  isArray: true,
36
43
  isOptional,
37
44
  properties: elementAnalysis.properties,
38
45
  };
39
46
  }
47
+ // Check if it's an enum
48
+ if (symbol) {
49
+ const declarations = symbol.getDeclarations();
50
+ for (const decl of declarations) {
51
+ if (ts_morph_1.Node.isEnumDeclaration(decl)) {
52
+ const enumValues = decl.getMembers().map(member => {
53
+ const initializer = member.getInitializer();
54
+ if (initializer && ts_morph_1.Node.isStringLiteral(initializer)) {
55
+ return initializer.getLiteralValue();
56
+ }
57
+ return member.getName();
58
+ });
59
+ return {
60
+ type: decl.getName() || symbol.getName() || typeText,
61
+ isArray: false,
62
+ isOptional,
63
+ enumValues,
64
+ };
65
+ }
66
+ }
67
+ }
40
68
  // Check if it's a union type
41
69
  const unionTypes = type.getUnionTypes();
42
70
  if (unionTypes.length > 1) {
71
+ // Check if it's a string literal union (acts like an enum)
72
+ const literalValues = [];
73
+ let allLiterals = true;
74
+ for (const unionType of unionTypes) {
75
+ if (unionType.isStringLiteral()) {
76
+ literalValues.push(unionType.getLiteralValue());
77
+ }
78
+ else {
79
+ allLiterals = false;
80
+ break;
81
+ }
82
+ }
83
+ if (allLiterals && literalValues.length > 0) {
84
+ return {
85
+ type: 'string',
86
+ isArray: false,
87
+ isOptional,
88
+ enumValues: literalValues,
89
+ };
90
+ }
43
91
  return {
44
92
  type: typeText,
45
93
  isArray: false,
@@ -53,8 +101,10 @@ class DtoAnalyzer {
53
101
  for (const decl of declarations) {
54
102
  if (ts_morph_1.Node.isClassDeclaration(decl) || ts_morph_1.Node.isInterfaceDeclaration(decl)) {
55
103
  const properties = this.extractProperties(decl);
104
+ // Use the class/interface name instead of full type text
105
+ const className = decl.getName() || symbol.getName() || typeText;
56
106
  return {
57
- type: typeText,
107
+ type: className,
58
108
  isArray: false,
59
109
  isOptional,
60
110
  properties,
@@ -81,9 +131,19 @@ class DtoAnalyzer {
81
131
  const type = prop.getType();
82
132
  const isOptional = prop.hasQuestionToken ? prop.hasQuestionToken() : false;
83
133
  const analyzedType = this.analyzeType(type, isOptional);
134
+ // Extract JSDoc description
135
+ const jsDocs = prop.getJsDocs();
136
+ let description;
137
+ if (jsDocs.length > 0) {
138
+ const comment = jsDocs[0].getDescription().trim();
139
+ if (comment) {
140
+ description = comment;
141
+ }
142
+ }
84
143
  properties.push({
85
144
  name,
86
145
  type: analyzedType,
146
+ description,
87
147
  });
88
148
  }
89
149
  return properties;
@@ -1 +1 @@
1
- {"version":3,"file":"DtoAnalyzer.js","sourceRoot":"","sources":["../../src/utils/DtoAnalyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DtoAnalyzer.js","sourceRoot":"","sources":["../../src/utils/DtoAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ interface OpenApiSpec {
13
13
  paths: Record<string, Record<string, any>>;
14
14
  components: {
15
15
  schemas: Record<string, any>;
16
+ securitySchemes?: Record<string, any>;
16
17
  };
17
18
  }
18
19
  export declare class OpenApiTransformer {
@@ -30,8 +31,11 @@ export declare class OpenApiTransformer {
30
31
  transform(controllers: ControllerInfo[], title?: string, version?: string, baseUrl?: string): OpenApiSpec;
31
32
  private buildPath;
32
33
  private createOperation;
34
+ private getSuccessStatusCode;
35
+ private getSuccessDescription;
33
36
  private analyzedTypeToSchema;
34
37
  private generateCodeSamples;
38
+ private generateSmartExample;
35
39
  private typeStringToSchema;
36
40
  }
37
41
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"OpenApiTransformer.d.ts","sourceRoot":"","sources":["../../src/utils/OpenApiTransformer.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EAAE,cAAc,EAAc,MAAM,2BAA2B,CAAC;AAGvE,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,OAAO,EAAE,KAAK,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC9B,CAAC;CACH;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,SAA0B;IAI7C;;;;;;;OAOG;IACH,SAAS,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE,KAAK,SAAe,EAAE,OAAO,SAAU,EAAE,OAAO,SAA0B,GAAG,WAAW;IAqCjI,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,eAAe;IA2DvB,OAAO,CAAC,oBAAoB;IA0C5B,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,kBAAkB;CAsB3B"}
1
+ {"version":3,"file":"OpenApiTransformer.d.ts","sourceRoot":"","sources":["../../src/utils/OpenApiTransformer.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EAAE,cAAc,EAAc,MAAM,2BAA2B,CAAC;AAGvE,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,OAAO,EAAE,KAAK,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACvC,CAAC;CACH;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,SAA0B;IAI7C;;;;;;;OAOG;IACH,SAAS,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE,KAAK,SAAe,EAAE,OAAO,SAAU,EAAE,OAAO,SAA0B,GAAG,WAAW;IA6CjI,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,eAAe;IAqHvB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,oBAAoB;IAyE5B,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,oBAAoB;IA4G5B,OAAO,CAAC,kBAAkB;CAsB3B"}
@@ -20,7 +20,7 @@ class OpenApiTransformer {
20
20
  for (const controller of controllers) {
21
21
  for (const method of controller.methods) {
22
22
  const fullPath = this.buildPath(controller.path, method.route);
23
- const operation = this.createOperation(method);
23
+ const operation = this.createOperation(method, controller.hasGuards);
24
24
  if (!paths[fullPath]) {
25
25
  paths[fullPath] = {};
26
26
  }
@@ -42,6 +42,14 @@ class OpenApiTransformer {
42
42
  paths,
43
43
  components: {
44
44
  schemas: this.schemas,
45
+ securitySchemes: {
46
+ bearerAuth: {
47
+ type: 'http',
48
+ scheme: 'bearer',
49
+ bearerFormat: 'JWT',
50
+ description: 'Enter your Bearer token in the format: Bearer <token>',
51
+ },
52
+ },
45
53
  },
46
54
  };
47
55
  }
@@ -49,24 +57,56 @@ class OpenApiTransformer {
49
57
  const parts = [controllerPath, methodRoute].filter(p => p);
50
58
  return '/' + parts.join('/').replace(/\/+/g, '/');
51
59
  }
52
- createOperation(method) {
60
+ createOperation(method, controllerHasGuards) {
61
+ // Determine success status code based on HTTP method
62
+ const successStatusCode = this.getSuccessStatusCode(method.httpMethod);
63
+ const successDescription = this.getSuccessDescription(method.httpMethod);
53
64
  const operation = {
54
65
  summary: method.name,
55
66
  responses: {
56
- '200': {
57
- description: 'Success',
67
+ [successStatusCode]: {
68
+ description: successDescription,
58
69
  content: {
59
70
  'application/json': {
60
71
  schema: this.analyzedTypeToSchema(method.returnType),
61
72
  },
62
73
  },
63
74
  },
75
+ '400': {
76
+ description: 'Bad Request',
77
+ content: {
78
+ 'application/json': {
79
+ schema: {
80
+ type: 'object',
81
+ properties: {
82
+ statusCode: { type: 'number', example: 400 },
83
+ message: { type: 'string', example: 'Bad Request' },
84
+ error: { type: 'string', example: 'Validation failed' },
85
+ },
86
+ },
87
+ },
88
+ },
89
+ },
90
+ '500': {
91
+ description: 'Internal Server Error',
92
+ content: {
93
+ 'application/json': {
94
+ schema: {
95
+ type: 'object',
96
+ properties: {
97
+ statusCode: { type: 'number', example: 500 },
98
+ message: { type: 'string', example: 'Internal server error' },
99
+ },
100
+ },
101
+ },
102
+ },
103
+ },
64
104
  },
65
105
  };
66
106
  // Add parameters
67
107
  const parameters = [];
68
108
  for (const param of method.parameters) {
69
- if (param.decorator?.includes('@Body')) {
109
+ if (param.parameterLocation === 'body') {
70
110
  operation.requestBody = {
71
111
  required: true,
72
112
  content: {
@@ -76,7 +116,7 @@ class OpenApiTransformer {
76
116
  },
77
117
  };
78
118
  }
79
- else if (param.decorator?.includes('@Query')) {
119
+ else if (param.parameterLocation === 'query') {
80
120
  // For query params, if it's an object, add properties as query params
81
121
  if (param.type.properties) {
82
122
  for (const prop of param.type.properties) {
@@ -85,11 +125,21 @@ class OpenApiTransformer {
85
125
  in: 'query',
86
126
  schema: this.analyzedTypeToSchema(prop.type),
87
127
  required: !prop.type.isOptional,
128
+ description: prop.description,
88
129
  });
89
130
  }
90
131
  }
132
+ else {
133
+ // Single query parameter
134
+ parameters.push({
135
+ name: param.name,
136
+ in: 'query',
137
+ schema: this.analyzedTypeToSchema(param.type),
138
+ required: !param.type.isOptional,
139
+ });
140
+ }
91
141
  }
92
- else if (param.decorator?.includes('@Param')) {
142
+ else if (param.parameterLocation === 'path') {
93
143
  parameters.push({
94
144
  name: param.name,
95
145
  in: 'path',
@@ -97,14 +147,58 @@ class OpenApiTransformer {
97
147
  schema: this.analyzedTypeToSchema(param.type),
98
148
  });
99
149
  }
150
+ else if (param.parameterLocation === 'header') {
151
+ parameters.push({
152
+ name: param.name,
153
+ in: 'header',
154
+ schema: this.analyzedTypeToSchema(param.type),
155
+ required: !param.type.isOptional,
156
+ });
157
+ }
100
158
  }
101
159
  if (parameters.length > 0) {
102
160
  operation.parameters = parameters;
103
161
  }
162
+ // Add security requirements if method or controller has guards
163
+ if (method.hasGuards || controllerHasGuards) {
164
+ operation.security = [
165
+ {
166
+ bearerAuth: [],
167
+ },
168
+ ];
169
+ }
104
170
  // Add code samples
105
171
  operation['x-code-samples'] = this.generateCodeSamples(method);
106
172
  return operation;
107
173
  }
174
+ getSuccessStatusCode(httpMethod) {
175
+ switch (httpMethod.toUpperCase()) {
176
+ case 'POST':
177
+ return '201';
178
+ case 'GET':
179
+ case 'PUT':
180
+ case 'PATCH':
181
+ case 'DELETE':
182
+ default:
183
+ return '200';
184
+ }
185
+ }
186
+ getSuccessDescription(httpMethod) {
187
+ switch (httpMethod.toUpperCase()) {
188
+ case 'POST':
189
+ return 'Created';
190
+ case 'GET':
191
+ return 'Success';
192
+ case 'PUT':
193
+ return 'Updated';
194
+ case 'PATCH':
195
+ return 'Partially Updated';
196
+ case 'DELETE':
197
+ return 'Deleted';
198
+ default:
199
+ return 'Success';
200
+ }
201
+ }
108
202
  analyzedTypeToSchema(type) {
109
203
  if (type.isArray) {
110
204
  return {
@@ -112,6 +206,13 @@ class OpenApiTransformer {
112
206
  items: this.analyzedTypeToSchema({ ...type, isArray: false }),
113
207
  };
114
208
  }
209
+ if (type.enumValues && type.enumValues.length > 0) {
210
+ return {
211
+ type: 'string',
212
+ enum: type.enumValues,
213
+ example: type.enumValues[0],
214
+ };
215
+ }
115
216
  if (type.unionTypes) {
116
217
  return {
117
218
  oneOf: type.unionTypes.map(t => this.typeStringToSchema(t)),
@@ -123,15 +224,33 @@ class OpenApiTransformer {
123
224
  const properties = {};
124
225
  const required = [];
125
226
  for (const prop of type.properties) {
126
- properties[prop.name] = this.analyzedTypeToSchema(prop.type);
227
+ const propSchema = this.analyzedTypeToSchema(prop.type);
228
+ // Add description from JSDoc if available
229
+ if (prop.description) {
230
+ propSchema.description = prop.description;
231
+ }
232
+ // Add smart example based on property name (only for non-ref schemas)
233
+ if (!propSchema.$ref && !propSchema.example) {
234
+ propSchema.example = this.generateSmartExample(prop.name, prop.type.type, prop.type.enumValues);
235
+ }
236
+ properties[prop.name] = propSchema;
127
237
  if (!prop.type.isOptional) {
128
238
  required.push(prop.name);
129
239
  }
130
240
  }
241
+ // Create the schema with examples at the schema level
242
+ const schemaExample = {};
243
+ for (const prop of type.properties) {
244
+ // Include all required fields in example
245
+ if (!prop.type.isOptional) {
246
+ schemaExample[prop.name] = this.generateSmartExample(prop.name, prop.type.type, prop.type.enumValues);
247
+ }
248
+ }
131
249
  this.schemas[schemaName] = {
132
250
  type: 'object',
133
251
  properties,
134
252
  required: required.length > 0 ? required : undefined,
253
+ example: schemaExample,
135
254
  };
136
255
  }
137
256
  return {
@@ -160,22 +279,107 @@ class OpenApiTransformer {
160
279
  });
161
280
  return samples;
162
281
  }
282
+ generateSmartExample(propertyName, propertyType, enumValues) {
283
+ const lowerName = propertyName.toLowerCase();
284
+ const lowerType = propertyType.toLowerCase();
285
+ // If enum values are provided, return the first one
286
+ if (enumValues && enumValues.length > 0) {
287
+ return enumValues[0];
288
+ }
289
+ // Email patterns
290
+ if (lowerName.includes('email')) {
291
+ return 'user@example.com';
292
+ }
293
+ // Name patterns
294
+ if (lowerName.includes('name') || lowerName === 'title') {
295
+ return 'John Doe';
296
+ }
297
+ // Phone patterns
298
+ if (lowerName.includes('phone') || lowerName.includes('mobile')) {
299
+ return '+1234567890';
300
+ }
301
+ // Address patterns
302
+ if (lowerName.includes('address') || lowerName.includes('street')) {
303
+ return '123 Main St';
304
+ }
305
+ if (lowerName.includes('city')) {
306
+ return 'New York';
307
+ }
308
+ if (lowerName.includes('country')) {
309
+ return 'United States';
310
+ }
311
+ if (lowerName.includes('zip') || lowerName.includes('postal')) {
312
+ return '10001';
313
+ }
314
+ // ID patterns
315
+ if (lowerName === 'id' || lowerName.endsWith('id')) {
316
+ return 1;
317
+ }
318
+ // Age pattern
319
+ if (lowerName === 'age') {
320
+ return 25;
321
+ }
322
+ // Price/Amount patterns
323
+ if (lowerName.includes('price') || lowerName.includes('amount') || lowerName.includes('cost')) {
324
+ return 99.99;
325
+ }
326
+ // URL patterns
327
+ if (lowerName.includes('url') || lowerName.includes('link')) {
328
+ return 'https://example.com';
329
+ }
330
+ // Description/Content patterns
331
+ if (lowerName.includes('description') || lowerName.includes('content') || lowerName.includes('text')) {
332
+ return 'Sample description text';
333
+ }
334
+ // Password pattern
335
+ if (lowerName.includes('password')) {
336
+ return 'SecurePassword123!';
337
+ }
338
+ // Username pattern
339
+ if (lowerName.includes('username')) {
340
+ return 'johndoe';
341
+ }
342
+ // Status pattern
343
+ if (lowerName.includes('status')) {
344
+ return 'active';
345
+ }
346
+ // Role pattern
347
+ if (lowerName.includes('role')) {
348
+ return 'user';
349
+ }
350
+ // Date patterns
351
+ if (lowerName.includes('date') || lowerName.includes('createdat') || lowerName.includes('updatedat')) {
352
+ return '2024-01-01T00:00:00.000Z';
353
+ }
354
+ // Type-based fallbacks
355
+ if (lowerType.includes('number') || lowerType.includes('int') || lowerType.includes('float')) {
356
+ return 0;
357
+ }
358
+ if (lowerType.includes('boolean')) {
359
+ return true;
360
+ }
361
+ if (lowerType.includes('date')) {
362
+ return '2024-01-01T00:00:00.000Z';
363
+ }
364
+ // Default to string
365
+ return 'sample value';
366
+ }
163
367
  typeStringToSchema(type) {
164
368
  const lowerType = type.toLowerCase();
165
369
  if (lowerType.includes('string')) {
166
- return { type: 'string' };
370
+ return { type: 'string', example: 'sample string' };
167
371
  }
168
372
  if (lowerType.includes('number') || lowerType.includes('int') || lowerType.includes('float')) {
169
- return { type: 'number' };
373
+ return { type: 'number', example: 0 };
170
374
  }
171
375
  if (lowerType.includes('boolean')) {
172
- return { type: 'boolean' };
376
+ return { type: 'boolean', example: true };
173
377
  }
174
378
  if (lowerType.includes('date')) {
175
- return { type: 'string', format: 'date-time' };
379
+ return { type: 'string', format: 'date-time', example: '2024-01-01T00:00:00.000Z' };
176
380
  }
177
381
  // Default to string
178
- return { type: 'string' };
382
+ return { type: 'string', example: 'value' };
179
383
  }
180
384
  }
181
385
  exports.OpenApiTransformer = OpenApiTransformer;
@@ -1 +1 @@
1
- {"version":3,"file":"OpenApiTransformer.js","sourceRoot":"","sources":["../../src/utils/OpenApiTransformer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenApiTransformer.js","sourceRoot":"","sources":["../../src/utils/OpenApiTransformer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Example Controller demonstrating full metadata extraction
3
+ * This controller showcases all the new features:
4
+ * - Request Body schemas with @Body()
5
+ * - Response schemas with proper return types
6
+ * - Status codes (POST=201, GET=200, etc.)
7
+ * - Query and Path parameters
8
+ * - JSDoc descriptions
9
+ */
10
+
11
+ import { Controller, Get, Post, Put, Delete, Body, Param, Query } from '@nestjs/common';
12
+ import {
13
+ CreateUserDto,
14
+ UpdateUserDto,
15
+ UserResponseDto,
16
+ PaginationQueryDto,
17
+ PaginatedResponseDto,
18
+ } from './example-dto';
19
+
20
+ @Controller('users')
21
+ export class UsersController {
22
+ /**
23
+ * Get all users with pagination
24
+ * @returns Paginated list of users
25
+ */
26
+ @Get()
27
+ findAll(@Query() query: PaginationQueryDto): Promise<PaginatedResponseDto<UserResponseDto>> {
28
+ // Implementation here
29
+ return Promise.resolve({
30
+ data: [],
31
+ total: 0,
32
+ page: 1,
33
+ limit: 10,
34
+ totalPages: 0,
35
+ });
36
+ }
37
+
38
+ /**
39
+ * Get a single user by ID
40
+ * @param id User ID
41
+ * @returns User details
42
+ */
43
+ @Get(':id')
44
+ findOne(@Param('id') id: string): Promise<UserResponseDto> {
45
+ // Implementation here
46
+ return Promise.resolve({} as UserResponseDto);
47
+ }
48
+
49
+ /**
50
+ * Create a new user
51
+ * @param createUserDto User creation data
52
+ * @returns Created user details
53
+ */
54
+ @Post()
55
+ create(@Body() createUserDto: CreateUserDto): Promise<UserResponseDto> {
56
+ // Implementation here
57
+ return Promise.resolve({} as UserResponseDto);
58
+ }
59
+
60
+ /**
61
+ * Update an existing user
62
+ * @param id User ID
63
+ * @param updateUserDto User update data
64
+ * @returns Updated user details
65
+ */
66
+ @Put(':id')
67
+ update(
68
+ @Param('id') id: string,
69
+ @Body() updateUserDto: UpdateUserDto,
70
+ ): Promise<UserResponseDto> {
71
+ // Implementation here
72
+ return Promise.resolve({} as UserResponseDto);
73
+ }
74
+
75
+ /**
76
+ * Delete a user
77
+ * @param id User ID
78
+ * @returns Deletion confirmation
79
+ */
80
+ @Delete(':id')
81
+ remove(@Param('id') id: string): Promise<{ message: string }> {
82
+ // Implementation here
83
+ return Promise.resolve({ message: 'User deleted successfully' });
84
+ }
85
+ }
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Example DTOs demonstrating full metadata extraction
3
+ * These DTOs showcase JSDoc comments, required fields, and nested structures
4
+ */
5
+
6
+ export enum UserRole {
7
+ ADMIN = 'admin',
8
+ USER = 'user',
9
+ GUEST = 'guest',
10
+ }
11
+
12
+ export class CreateUserDto {
13
+ /**
14
+ * User's full name
15
+ */
16
+ name: string;
17
+
18
+ /**
19
+ * User's email address (must be unique)
20
+ */
21
+ email: string;
22
+
23
+ /**
24
+ * User's password (min 8 characters)
25
+ */
26
+ password: string;
27
+
28
+ /**
29
+ * User's role in the system
30
+ */
31
+ role: UserRole;
32
+
33
+ /**
34
+ * User's age (optional)
35
+ */
36
+ age?: number;
37
+
38
+ /**
39
+ * User's phone number (optional)
40
+ */
41
+ phone?: string;
42
+ }
43
+
44
+ export class UpdateUserDto {
45
+ /**
46
+ * User's full name (optional for updates)
47
+ */
48
+ name?: string;
49
+
50
+ /**
51
+ * User's email address (optional for updates)
52
+ */
53
+ email?: string;
54
+
55
+ /**
56
+ * User's role in the system (optional for updates)
57
+ */
58
+ role?: UserRole;
59
+
60
+ /**
61
+ * User's age (optional)
62
+ */
63
+ age?: number;
64
+ }
65
+
66
+ export class AddressDto {
67
+ /**
68
+ * Street address
69
+ */
70
+ street: string;
71
+
72
+ /**
73
+ * City name
74
+ */
75
+ city: string;
76
+
77
+ /**
78
+ * Country name
79
+ */
80
+ country: string;
81
+
82
+ /**
83
+ * Postal/ZIP code (optional)
84
+ */
85
+ zipCode?: string;
86
+ }
87
+
88
+ export class UserResponseDto {
89
+ /**
90
+ * Unique user identifier
91
+ */
92
+ id: number;
93
+
94
+ /**
95
+ * User's full name
96
+ */
97
+ name: string;
98
+
99
+ /**
100
+ * User's email address
101
+ */
102
+ email: string;
103
+
104
+ /**
105
+ * User's role in the system
106
+ */
107
+ role: UserRole;
108
+
109
+ /**
110
+ * User's age
111
+ */
112
+ age?: number;
113
+
114
+ /**
115
+ * User's phone number
116
+ */
117
+ phone?: string;
118
+
119
+ /**
120
+ * User's address information
121
+ */
122
+ address?: AddressDto;
123
+
124
+ /**
125
+ * Timestamp when the user was created
126
+ */
127
+ createdAt: Date;
128
+
129
+ /**
130
+ * Timestamp when the user was last updated
131
+ */
132
+ updatedAt: Date;
133
+ }
134
+
135
+ export class PaginationQueryDto {
136
+ /**
137
+ * Page number (starts from 1)
138
+ */
139
+ page?: number;
140
+
141
+ /**
142
+ * Number of items per page
143
+ */
144
+ limit?: number;
145
+
146
+ /**
147
+ * Sort field name
148
+ */
149
+ sortBy?: string;
150
+
151
+ /**
152
+ * Sort order (asc or desc)
153
+ */
154
+ order?: 'asc' | 'desc';
155
+ }
156
+
157
+ export class PaginatedResponseDto<T> {
158
+ /**
159
+ * Array of items for the current page
160
+ */
161
+ data: T[];
162
+
163
+ /**
164
+ * Total number of items across all pages
165
+ */
166
+ total: number;
167
+
168
+ /**
169
+ * Current page number
170
+ */
171
+ page: number;
172
+
173
+ /**
174
+ * Number of items per page
175
+ */
176
+ limit: number;
177
+
178
+ /**
179
+ * Total number of pages
180
+ */
181
+ totalPages: number;
182
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nest-scramble",
3
- "version": "1.3.0",
3
+ "version": "1.4.1",
4
4
  "description": "A next-generation, decorator-free API documentation engine and intelligent mock server for NestJS, engineered by Mohamed Mustafa",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Test file to verify DTO schema generation
3
+ * This file demonstrates the expected behavior
4
+ */
5
+
6
+ // Simple DTO with basic types
7
+ class CreateProductDto {
8
+ name: string;
9
+ price: number;
10
+ description: string;
11
+ inStock: boolean;
12
+ category?: string;
13
+ }
14
+
15
+ // Response DTO
16
+ class ProductResponseDto {
17
+ id: number;
18
+ name: string;
19
+ price: number;
20
+ description: string;
21
+ inStock: boolean;
22
+ category?: string;
23
+ createdAt: Date;
24
+ }
25
+
26
+ // Expected OpenAPI Schema Output:
27
+ const expectedSchema = {
28
+ components: {
29
+ schemas: {
30
+ CreateProductDto: {
31
+ type: 'object',
32
+ properties: {
33
+ name: { type: 'string', example: 'John Doe' },
34
+ price: { type: 'number', example: 99.99 },
35
+ description: { type: 'string', example: 'Sample description text' },
36
+ inStock: { type: 'boolean', example: true },
37
+ category: { type: 'string', example: 'sample value' },
38
+ },
39
+ required: ['name', 'price', 'description', 'inStock'],
40
+ example: {
41
+ name: 'John Doe',
42
+ price: 99.99,
43
+ description: 'Sample description text',
44
+ inStock: true,
45
+ },
46
+ },
47
+ ProductResponseDto: {
48
+ type: 'object',
49
+ properties: {
50
+ id: { type: 'number', example: 1 },
51
+ name: { type: 'string', example: 'John Doe' },
52
+ price: { type: 'number', example: 99.99 },
53
+ description: { type: 'string', example: 'Sample description text' },
54
+ inStock: { type: 'boolean', example: true },
55
+ category: { type: 'string', example: 'sample value' },
56
+ createdAt: { type: 'string', format: 'date-time', example: '2024-01-01T00:00:00.000Z' },
57
+ },
58
+ required: ['id', 'name', 'price', 'description', 'inStock', 'createdAt'],
59
+ example: {
60
+ id: 1,
61
+ name: 'John Doe',
62
+ price: 99.99,
63
+ description: 'Sample description text',
64
+ inStock: true,
65
+ createdAt: '2024-01-01T00:00:00.000Z',
66
+ },
67
+ },
68
+ },
69
+ },
70
+ };
71
+
72
+ // Expected endpoint with request body:
73
+ const expectedEndpoint = {
74
+ '/products': {
75
+ post: {
76
+ summary: 'create',
77
+ requestBody: {
78
+ required: true,
79
+ content: {
80
+ 'application/json': {
81
+ schema: {
82
+ $ref: '#/components/schemas/CreateProductDto',
83
+ },
84
+ },
85
+ },
86
+ },
87
+ responses: {
88
+ '201': {
89
+ description: 'Created',
90
+ content: {
91
+ 'application/json': {
92
+ schema: {
93
+ $ref: '#/components/schemas/ProductResponseDto',
94
+ },
95
+ },
96
+ },
97
+ },
98
+ },
99
+ },
100
+ },
101
+ };
102
+
103
+ export { CreateProductDto, ProductResponseDto, expectedSchema, expectedEndpoint };