@tsoa-next/cli 7.1.0 → 7.3.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.
Files changed (62) hide show
  1. package/README.MD +8 -2
  2. package/dist/cli.d.ts +4 -1
  3. package/dist/cli.js +91 -21
  4. package/dist/cli.js.map +1 -1
  5. package/dist/metadataGeneration/controllerGenerator.js +7 -7
  6. package/dist/metadataGeneration/controllerGenerator.js.map +1 -1
  7. package/dist/metadataGeneration/exceptions.js +8 -2
  8. package/dist/metadataGeneration/exceptions.js.map +1 -1
  9. package/dist/metadataGeneration/extension.js +25 -1
  10. package/dist/metadataGeneration/extension.js.map +1 -1
  11. package/dist/metadataGeneration/initializer-value.d.ts +8 -2
  12. package/dist/metadataGeneration/initializer-value.js +18 -9
  13. package/dist/metadataGeneration/initializer-value.js.map +1 -1
  14. package/dist/metadataGeneration/metadataGenerator.js +3 -1
  15. package/dist/metadataGeneration/metadataGenerator.js.map +1 -1
  16. package/dist/metadataGeneration/methodGenerator.d.ts +2 -0
  17. package/dist/metadataGeneration/methodGenerator.js +60 -21
  18. package/dist/metadataGeneration/methodGenerator.js.map +1 -1
  19. package/dist/metadataGeneration/parameterGenerator.d.ts +3 -0
  20. package/dist/metadataGeneration/parameterGenerator.js +93 -26
  21. package/dist/metadataGeneration/parameterGenerator.js.map +1 -1
  22. package/dist/metadataGeneration/transformer/propertyTransformer.js +2 -1
  23. package/dist/metadataGeneration/transformer/propertyTransformer.js.map +1 -1
  24. package/dist/metadataGeneration/transformer/referenceTransformer.js +4 -2
  25. package/dist/metadataGeneration/transformer/referenceTransformer.js.map +1 -1
  26. package/dist/metadataGeneration/typeResolver.d.ts +10 -2
  27. package/dist/metadataGeneration/typeResolver.js +165 -37
  28. package/dist/metadataGeneration/typeResolver.js.map +1 -1
  29. package/dist/module/generate-routes.js +1 -1
  30. package/dist/module/generate-routes.js.map +1 -1
  31. package/dist/routeGeneration/defaultRouteGenerator.js.map +1 -1
  32. package/dist/routeGeneration/routeGenerator.js +3 -0
  33. package/dist/routeGeneration/routeGenerator.js.map +1 -1
  34. package/dist/routeGeneration/templates/express.hbs +17 -32
  35. package/dist/routeGeneration/templates/hapi.hbs +25 -22
  36. package/dist/routeGeneration/templates/koa.hbs +21 -21
  37. package/dist/swagger/specGenerator.d.ts +7 -0
  38. package/dist/swagger/specGenerator.js +81 -3
  39. package/dist/swagger/specGenerator.js.map +1 -1
  40. package/dist/swagger/specGenerator2.d.ts +5 -1
  41. package/dist/swagger/specGenerator2.js +112 -65
  42. package/dist/swagger/specGenerator2.js.map +1 -1
  43. package/dist/swagger/specGenerator3.d.ts +8 -7
  44. package/dist/swagger/specGenerator3.js +82 -50
  45. package/dist/swagger/specGenerator3.js.map +1 -1
  46. package/dist/swagger/specGenerator31.d.ts +1 -0
  47. package/dist/swagger/specGenerator31.js +3 -0
  48. package/dist/swagger/specGenerator31.js.map +1 -1
  49. package/dist/utils/decoratorUtils.d.ts +9 -6
  50. package/dist/utils/decoratorUtils.js +163 -21
  51. package/dist/utils/decoratorUtils.js.map +1 -1
  52. package/dist/utils/jsDocUtils.js +6 -3
  53. package/dist/utils/jsDocUtils.js.map +1 -1
  54. package/dist/utils/jsonUtils.d.ts +1 -1
  55. package/dist/utils/pathUtils.js +32 -5
  56. package/dist/utils/pathUtils.js.map +1 -1
  57. package/dist/utils/validateDecoratorUtils.d.ts +9 -0
  58. package/dist/utils/validateDecoratorUtils.js +225 -0
  59. package/dist/utils/validateDecoratorUtils.js.map +1 -0
  60. package/dist/utils/validatorUtils.js +15 -8
  61. package/dist/utils/validatorUtils.js.map +1 -1
  62. package/package.json +9 -8
@@ -41,35 +41,73 @@ exports.getSecurites = getSecurites;
41
41
  exports.isDecorator = isDecorator;
42
42
  exports.getPath = getPath;
43
43
  exports.getProduces = getProduces;
44
+ exports.getCanonicalDecoratorName = getCanonicalDecoratorName;
44
45
  const ts = __importStar(require("typescript"));
45
46
  const initializer_value_1 = require("../metadataGeneration/initializer-value");
47
+ const TSOA_DECORATOR_MODULES = ['@tsoa-next/runtime', 'tsoa-next'];
48
+ const TSOA_DECORATOR_NAMES = new Set([
49
+ 'Body',
50
+ 'BodyProp',
51
+ 'Consumes',
52
+ 'Delete',
53
+ 'Deprecated',
54
+ 'Example',
55
+ 'Extension',
56
+ 'FormField',
57
+ 'Get',
58
+ 'Head',
59
+ 'Header',
60
+ 'Hidden',
61
+ 'Inject',
62
+ 'Middlewares',
63
+ 'NoSecurity',
64
+ 'OperationId',
65
+ 'Options',
66
+ 'Patch',
67
+ 'Path',
68
+ 'Post',
69
+ 'Produces',
70
+ 'Put',
71
+ 'Queries',
72
+ 'Query',
73
+ 'Request',
74
+ 'RequestProp',
75
+ 'Res',
76
+ 'Response',
77
+ 'Route',
78
+ 'Security',
79
+ 'SuccessResponse',
80
+ 'Tags',
81
+ 'UploadedFile',
82
+ 'UploadedFiles',
83
+ 'Validate',
84
+ ]);
46
85
  function tsHasDecorators(tsNamespace) {
47
86
  return typeof tsNamespace.canHaveDecorators === 'function';
48
87
  }
49
- function getDecorators(node, isMatching) {
88
+ function getDecorators(node, isMatching, typeChecker) {
50
89
  // beginning in ts4.8 node.decorator is undefined, use getDecorators instead.
51
90
  const decorators = tsHasDecorators(ts) && ts.canHaveDecorators(node) ? ts.getDecorators(node) : [];
52
91
  if (!decorators || !decorators.length) {
53
92
  return [];
54
93
  }
55
94
  return decorators
56
- .map((e) => {
57
- while (e.expression !== undefined) {
58
- e = e.expression;
59
- }
60
- return e;
61
- })
62
- .filter(isMatching);
95
+ .map(decorator => getDecoratorIdentifier(decorator))
96
+ .filter((identifier) => !!identifier)
97
+ .filter(identifier => {
98
+ const canonicalName = typeChecker ? getCanonicalDecoratorName(identifier, typeChecker) : undefined;
99
+ return isMatching(identifier, canonicalName);
100
+ });
63
101
  }
64
- function getNodeFirstDecoratorName(node, isMatching) {
65
- const decorators = getDecorators(node, isMatching);
102
+ function getNodeFirstDecoratorName(node, isMatching, typeChecker) {
103
+ const decorators = getDecorators(node, isMatching, typeChecker);
66
104
  if (!decorators || !decorators.length) {
67
105
  return;
68
106
  }
69
- return decorators[0].text;
107
+ return typeChecker ? getCanonicalDecoratorName(decorators[0], typeChecker) : decorators[0].text;
70
108
  }
71
109
  function getNodeFirstDecoratorValue(node, typeChecker, isMatching) {
72
- const decorators = getDecorators(node, isMatching);
110
+ const decorators = getDecorators(node, isMatching, typeChecker);
73
111
  if (!decorators || !decorators.length) {
74
112
  return;
75
113
  }
@@ -77,8 +115,10 @@ function getNodeFirstDecoratorValue(node, typeChecker, isMatching) {
77
115
  return values && values[0];
78
116
  }
79
117
  function getDecoratorValues(decorator, typeChecker) {
80
- const expression = decorator.parent;
81
- const expArguments = expression.arguments;
118
+ if (!ts.isCallExpression(decorator.parent)) {
119
+ return [];
120
+ }
121
+ const expArguments = decorator.parent.arguments;
82
122
  if (!expArguments || !expArguments.length) {
83
123
  return [];
84
124
  }
@@ -87,12 +127,14 @@ function getDecoratorValues(decorator, typeChecker) {
87
127
  function getSecurites(decorator, typeChecker) {
88
128
  const [first, second] = getDecoratorValues(decorator, typeChecker);
89
129
  if (isObject(first)) {
90
- return first;
130
+ return toSecurity(first);
91
131
  }
92
- return { [first]: second || [] };
132
+ const securityName = typeof first === 'string' ? first : '';
133
+ const scopes = Array.isArray(second) ? second.filter((scope) => typeof scope === 'string') : [];
134
+ return { [securityName]: scopes };
93
135
  }
94
- function isDecorator(node, isMatching) {
95
- const decorators = getDecorators(node, isMatching);
136
+ function isDecorator(node, isMatching, typeChecker) {
137
+ const decorators = getDecorators(node, isMatching, typeChecker);
96
138
  if (!decorators || !decorators.length) {
97
139
  return false;
98
140
  }
@@ -103,16 +145,116 @@ function isObject(v) {
103
145
  }
104
146
  function getPath(decorator, typeChecker) {
105
147
  const [path] = getDecoratorValues(decorator, typeChecker);
106
- if (path === undefined) {
148
+ if (typeof path !== 'string') {
107
149
  return '';
108
150
  }
109
151
  return path;
110
152
  }
111
153
  function getProduces(node, typeChecker) {
112
- const producesDecorators = getDecorators(node, identifier => identifier.text === 'Produces');
154
+ const producesDecorators = getDecorators(node, (_identifier, canonicalName) => canonicalName === 'Produces', typeChecker);
113
155
  if (!producesDecorators || !producesDecorators.length) {
114
156
  return [];
115
157
  }
116
- return producesDecorators.map(decorator => getDecoratorValues(decorator, typeChecker)[0]);
158
+ return producesDecorators
159
+ .map(decorator => getDecoratorValues(decorator, typeChecker)[0])
160
+ .filter((value) => typeof value === 'string');
161
+ }
162
+ function toSecurity(value) {
163
+ return Object.fromEntries(Object.entries(value).map(([key, scopes]) => [key, Array.isArray(scopes) ? scopes.filter((scope) => typeof scope === 'string') : []]));
164
+ }
165
+ function getDecoratorIdentifier(decorator) {
166
+ let expression = decorator.expression;
167
+ while (ts.isCallExpression(expression) || ts.isPropertyAccessExpression(expression) || ts.isElementAccessExpression(expression) || ts.isParenthesizedExpression(expression)) {
168
+ expression = expression.expression;
169
+ }
170
+ return ts.isIdentifier(expression) ? expression : undefined;
171
+ }
172
+ function getCanonicalDecoratorName(identifier, typeChecker) {
173
+ const symbol = typeChecker.getSymbolAtLocation(identifier);
174
+ if (!symbol) {
175
+ return undefined;
176
+ }
177
+ const resolvedSymbol = resolveAliasedSymbol(symbol, typeChecker);
178
+ const symbolIsRuntimeDecorator = isRuntimeDecoratorSymbol(symbol) || isRuntimeDecoratorSymbol(resolvedSymbol);
179
+ if (!symbolIsRuntimeDecorator) {
180
+ return getImportedDecoratorName(symbol);
181
+ }
182
+ const candidateName = resolvedSymbol.getName();
183
+ if (TSOA_DECORATOR_NAMES.has(candidateName)) {
184
+ return candidateName;
185
+ }
186
+ return getImportedDecoratorName(symbol);
187
+ }
188
+ function resolveAliasedSymbol(symbol, typeChecker) {
189
+ const visited = new Set();
190
+ let current = symbol;
191
+ while ((current.flags & ts.SymbolFlags.Alias) !== 0 && !visited.has(current)) {
192
+ visited.add(current);
193
+ const aliased = typeChecker.getAliasedSymbol(current);
194
+ if (!aliased || aliased === current) {
195
+ break;
196
+ }
197
+ current = aliased;
198
+ }
199
+ return current;
200
+ }
201
+ function isRuntimeDecoratorSymbol(symbol) {
202
+ const declarations = symbol.declarations || (symbol.valueDeclaration ? [symbol.valueDeclaration] : []);
203
+ return declarations.some(declaration => {
204
+ const moduleSpecifier = getModuleSpecifierText(declaration);
205
+ if (moduleSpecifier && isTsoaDecoratorModuleSpecifier(moduleSpecifier)) {
206
+ return true;
207
+ }
208
+ const sourceFileName = declaration.getSourceFile().fileName.replace(/\\/g, '/').toLowerCase();
209
+ return (sourceFileName.includes('/packages/runtime/src/decorators/') ||
210
+ sourceFileName.includes('/packages/runtime/dist/decorators/') ||
211
+ sourceFileName.includes('/packages/tsoa/src/') ||
212
+ sourceFileName.includes('/node_modules/@tsoa-next/runtime/') ||
213
+ sourceFileName.includes('/node_modules/tsoa-next/'));
214
+ });
215
+ }
216
+ function isTsoaDecoratorModuleSpecifier(moduleSpecifier) {
217
+ return TSOA_DECORATOR_MODULES.some(prefix => moduleSpecifier === prefix || moduleSpecifier.startsWith(`${prefix}/`));
218
+ }
219
+ function getModuleSpecifierText(declaration) {
220
+ if (ts.isImportSpecifier(declaration)) {
221
+ const importDeclaration = declaration.parent.parent.parent;
222
+ if (ts.isImportDeclaration(importDeclaration) && ts.isStringLiteral(importDeclaration.moduleSpecifier)) {
223
+ return importDeclaration.moduleSpecifier.text;
224
+ }
225
+ }
226
+ if (ts.isExportSpecifier(declaration)) {
227
+ const exportDeclaration = declaration.parent.parent;
228
+ if (ts.isExportDeclaration(exportDeclaration) && exportDeclaration.moduleSpecifier && ts.isStringLiteral(exportDeclaration.moduleSpecifier)) {
229
+ return exportDeclaration.moduleSpecifier.text;
230
+ }
231
+ }
232
+ return undefined;
233
+ }
234
+ function getImportedDecoratorName(symbol) {
235
+ const declarations = symbol.declarations || (symbol.valueDeclaration ? [symbol.valueDeclaration] : []);
236
+ for (const declaration of declarations) {
237
+ if (ts.isImportSpecifier(declaration)) {
238
+ const moduleSpecifier = getModuleSpecifierText(declaration);
239
+ if (!moduleSpecifier || !isTsoaDecoratorModuleSpecifier(moduleSpecifier)) {
240
+ continue;
241
+ }
242
+ const importedName = declaration.propertyName?.text ?? declaration.name.text;
243
+ if (TSOA_DECORATOR_NAMES.has(importedName)) {
244
+ return importedName;
245
+ }
246
+ }
247
+ if (ts.isExportSpecifier(declaration)) {
248
+ const moduleSpecifier = getModuleSpecifierText(declaration);
249
+ if (!moduleSpecifier || !isTsoaDecoratorModuleSpecifier(moduleSpecifier)) {
250
+ continue;
251
+ }
252
+ const exportedName = declaration.propertyName?.text ?? declaration.name.text;
253
+ if (TSOA_DECORATOR_NAMES.has(exportedName)) {
254
+ return exportedName;
255
+ }
256
+ }
257
+ }
258
+ return undefined;
117
259
  }
118
260
  //# sourceMappingURL=decoratorUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"decoratorUtils.js","sourceRoot":"","sources":["../../src/utils/decoratorUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decoratorUtils.js","sourceRoot":"","sources":["../../src/utils/decoratorUtils.ts"],"names":[],"mappings":"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"}
@@ -42,8 +42,11 @@ exports.isExistJSDocTag = isExistJSDocTag;
42
42
  exports.commentToString = commentToString;
43
43
  const ts = __importStar(require("typescript"));
44
44
  const exceptions_1 = require("../metadataGeneration/exceptions");
45
+ function getJsDocs(node) {
46
+ return node.jsDoc ?? [];
47
+ }
45
48
  function getJSDocDescription(node) {
46
- const jsDocs = node.jsDoc;
49
+ const jsDocs = getJsDocs(node);
47
50
  if (!jsDocs || !jsDocs.length) {
48
51
  return undefined;
49
52
  }
@@ -71,7 +74,7 @@ function getJSDocComments(node, tagName) {
71
74
  }
72
75
  function getJSDocTagNames(node, requireTagName = false) {
73
76
  let tags;
74
- if (node.kind === ts.SyntaxKind.Parameter) {
77
+ if (ts.isParameter(node) && ts.isIdentifier(node.name)) {
75
78
  const parameterName = node.name.text;
76
79
  tags = getJSDocTags(node.parent, tag => {
77
80
  if (ts.isJSDocParameterTag(tag)) {
@@ -93,7 +96,7 @@ function getJSDocTagNames(node, requireTagName = false) {
93
96
  });
94
97
  }
95
98
  function getJSDocTags(node, isMatching) {
96
- const jsDocs = node.jsDoc;
99
+ const jsDocs = getJsDocs(node);
97
100
  if (!jsDocs || jsDocs.length === 0) {
98
101
  return [];
99
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jsDocUtils.js","sourceRoot":"","sources":["../../src/utils/jsDocUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jsDocUtils.js","sourceRoot":"","sources":["../../src/utils/jsDocUtils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- export declare function safeFromJson(json: string): any;
1
+ export declare function safeFromJson(json: string): unknown;
@@ -16,13 +16,10 @@ function normalisePath(path, withPrefix, withSuffix, skipPrefixAndSuffixIfEmpty
16
16
  if (!path || typeof path !== 'string') {
17
17
  path = '' + path;
18
18
  }
19
- // normalise beginning and end of the path
20
- let normalised = path.replace(/^[/\\\s]+|[/\\\s]+$/g, '');
19
+ let normalised = trimPathDelimiters(path);
21
20
  normalised = withPrefix ? withPrefix + normalised : normalised;
22
21
  normalised = withSuffix ? normalised + withSuffix : normalised;
23
- // normalise / signs amount in all path
24
- normalised = normalised.replace(/[/\\\s]+/g, '/');
25
- return normalised;
22
+ return collapsePathDelimiters(normalised);
26
23
  }
27
24
  function convertColonPathParams(path) {
28
25
  if (!path || typeof path !== 'string') {
@@ -34,4 +31,34 @@ function convertColonPathParams(path) {
34
31
  function convertBracesPathParams(path) {
35
32
  return path.replace(/{(\w*)}/g, ':$1');
36
33
  }
34
+ function trimPathDelimiters(path) {
35
+ let start = 0;
36
+ let end = path.length;
37
+ while (start < end && isPathDelimiter(path[start])) {
38
+ start++;
39
+ }
40
+ while (end > start && isPathDelimiter(path[end - 1])) {
41
+ end--;
42
+ }
43
+ return path.slice(start, end);
44
+ }
45
+ function collapsePathDelimiters(path) {
46
+ const normalisedChars = [];
47
+ let previousWasDelimiter = false;
48
+ for (const character of path) {
49
+ if (isPathDelimiter(character)) {
50
+ if (!previousWasDelimiter) {
51
+ normalisedChars.push('/');
52
+ previousWasDelimiter = true;
53
+ }
54
+ continue;
55
+ }
56
+ normalisedChars.push(character);
57
+ previousWasDelimiter = false;
58
+ }
59
+ return normalisedChars.join('');
60
+ }
61
+ function isPathDelimiter(character) {
62
+ return character === '/' || character === '\\' || character.trim() === '';
63
+ }
37
64
  //# sourceMappingURL=pathUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pathUtils.js","sourceRoot":"","sources":["../../src/utils/pathUtils.ts"],"names":[],"mappings":";;AAMA,sCAcC;AAED,wDAOC;AAED,0DAEC;AAjCD;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,IAAY,EAAE,UAAmB,EAAE,UAAmB,EAAE,0BAA0B,GAAG,IAAI;IACrH,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,0BAA0B,EAAE,CAAC;QAC1D,OAAO,EAAE,CAAA;IACX,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,IAAI,GAAG,EAAE,GAAG,IAAI,CAAA;IAClB,CAAC;IACD,0CAA0C;IAC1C,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAA;IACzD,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAA;IAC9D,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAA;IAC9D,uCAAuC;IACvC,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;IACjD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAgB,sBAAsB,CAAC,IAAY;IACjD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACpD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAgB,uBAAuB,CAAC,IAAY;IAClD,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;AACxC,CAAC"}
1
+ {"version":3,"file":"pathUtils.js","sourceRoot":"","sources":["../../src/utils/pathUtils.ts"],"names":[],"mappings":";;AAMA,sCAaC;AAED,wDAOC;AAED,0DAEC;AAhCD;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,IAAY,EAAE,UAAmB,EAAE,UAAmB,EAAE,0BAA0B,GAAG,IAAI;IACrH,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,0BAA0B,EAAE,CAAC;QAC1D,OAAO,EAAE,CAAA;IACX,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,IAAI,GAAG,EAAE,GAAG,IAAI,CAAA;IAClB,CAAC;IAED,IAAI,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;IACzC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAA;IAC9D,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAA;IAE9D,OAAO,sBAAsB,CAAC,UAAU,CAAC,CAAA;AAC3C,CAAC;AAED,SAAgB,sBAAsB,CAAC,IAAY;IACjD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACpD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAgB,uBAAuB,CAAC,IAAY;IAClD,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;AACxC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAA;IAErB,OAAO,KAAK,GAAG,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACnD,KAAK,EAAE,CAAA;IACT,CAAC;IAED,OAAO,GAAG,GAAG,KAAK,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,EAAE,CAAA;IACP,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AAC/B,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IAC1C,MAAM,eAAe,GAAa,EAAE,CAAA;IACpC,IAAI,oBAAoB,GAAG,KAAK,CAAA;IAEhC,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,IAAI,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC1B,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACzB,oBAAoB,GAAG,IAAI,CAAA;YAC7B,CAAC;YACD,SAAQ;QACV,CAAC;QAED,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC/B,oBAAoB,GAAG,KAAK,CAAA;IAC9B,CAAC;IAED,OAAO,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACjC,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB;IACxC,OAAO,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;AAC3E,CAAC"}
@@ -0,0 +1,9 @@
1
+ import * as ts from 'typescript';
2
+ import { Tsoa } from '@tsoa-next/runtime';
3
+ type ValidateDecoratorParseResult = {
4
+ validationStrategy: Tsoa.ValidationStrategy;
5
+ externalValidator: Tsoa.ExternalValidatorDescriptor;
6
+ };
7
+ export declare function getParameterExternalValidator(parameter: ts.ParameterDeclaration, parameterIn: Tsoa.Parameter['in'], typeChecker: ts.TypeChecker): ValidateDecoratorParseResult | undefined;
8
+ export declare function assertValidateDecoratorTargets(program: ts.Program, typeChecker: ts.TypeChecker): void;
9
+ export {};
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getParameterExternalValidator = getParameterExternalValidator;
37
+ exports.assertValidateDecoratorTargets = assertValidateDecoratorTargets;
38
+ const ts = __importStar(require("typescript"));
39
+ const decoratorUtils_1 = require("./decoratorUtils");
40
+ const exceptions_1 = require("../metadataGeneration/exceptions");
41
+ const SUPPORTED_VALIDATE_TARGETS = new Set(['body', 'body-prop', 'query', 'queries', 'path', 'header', 'formData']);
42
+ const VALIDATOR_MODULE_KIND_MAP = {
43
+ 'io-ts': 'io-ts',
44
+ 'io-ts-types': 'io-ts',
45
+ joi: 'joi',
46
+ superstruct: 'superstruct',
47
+ yup: 'yup',
48
+ zod: 'zod',
49
+ };
50
+ function isExternalValidatorKind(value) {
51
+ return value === 'zod' || value === 'joi' || value === 'yup' || value === 'superstruct' || value === 'io-ts';
52
+ }
53
+ function getValidateDecorator(parameter, typeChecker) {
54
+ const decorators = (0, decoratorUtils_1.getDecorators)(parameter, (_identifier, canonicalName) => canonicalName === 'Validate', typeChecker);
55
+ if (decorators.length > 1) {
56
+ throw new exceptions_1.GenerateMetadataError('Only one @Validate decorator is allowed per parameter.', parameter);
57
+ }
58
+ const decoratorIdentifier = decorators[0];
59
+ if (!decoratorIdentifier) {
60
+ return undefined;
61
+ }
62
+ let current = decoratorIdentifier;
63
+ while (current && !ts.isDecorator(current)) {
64
+ current = current.parent;
65
+ }
66
+ return current;
67
+ }
68
+ function getModuleKindFromImportDeclaration(declaration) {
69
+ let current = declaration.parent;
70
+ while (current && !ts.isImportDeclaration(current)) {
71
+ current = current.parent;
72
+ }
73
+ if (current && ts.isImportDeclaration(current) && ts.isStringLiteral(current.moduleSpecifier)) {
74
+ return VALIDATOR_MODULE_KIND_MAP[current.moduleSpecifier.text];
75
+ }
76
+ return undefined;
77
+ }
78
+ function getSymbolDeclarations(symbol) {
79
+ return symbol.declarations || (symbol.valueDeclaration ? [symbol.valueDeclaration] : []);
80
+ }
81
+ function inferValidatorKindFromDeclaration(declaration, typeChecker, visited) {
82
+ const fromImport = getModuleKindFromImportDeclaration(declaration);
83
+ if (fromImport) {
84
+ return fromImport;
85
+ }
86
+ if (ts.isVariableDeclaration(declaration) || ts.isPropertyAssignment(declaration) || ts.isBindingElement(declaration) || ts.isParameter(declaration)) {
87
+ if (declaration.initializer) {
88
+ return inferValidatorKindFromExpression(declaration.initializer, typeChecker, visited);
89
+ }
90
+ }
91
+ return undefined;
92
+ }
93
+ function inferValidatorKindFromDeclarations(declarations, typeChecker, visited) {
94
+ for (const declaration of declarations) {
95
+ const inferredKind = inferValidatorKindFromDeclaration(declaration, typeChecker, visited);
96
+ if (inferredKind) {
97
+ return inferredKind;
98
+ }
99
+ }
100
+ return undefined;
101
+ }
102
+ function inferValidatorKindFromSymbol(symbol, typeChecker, visited) {
103
+ if (!symbol || visited.has(symbol)) {
104
+ return undefined;
105
+ }
106
+ visited.add(symbol);
107
+ const directKind = inferValidatorKindFromDeclarations(getSymbolDeclarations(symbol), typeChecker, visited);
108
+ if (directKind) {
109
+ return directKind;
110
+ }
111
+ const isAliasSymbol = Boolean(symbol.flags & ts.SymbolFlags.Alias);
112
+ const resolvedSymbol = isAliasSymbol ? typeChecker.getAliasedSymbol(symbol) : symbol;
113
+ if (resolvedSymbol !== symbol) {
114
+ const aliasedKind = inferValidatorKindFromSymbol(resolvedSymbol, typeChecker, visited);
115
+ if (aliasedKind) {
116
+ return aliasedKind;
117
+ }
118
+ }
119
+ return inferValidatorKindFromDeclarations(getSymbolDeclarations(resolvedSymbol), typeChecker, visited);
120
+ }
121
+ function inferValidatorKindFromExpression(expression, typeChecker, visited = new Set()) {
122
+ if (ts.isParenthesizedExpression(expression) || ts.isAsExpression(expression) || ts.isTypeAssertionExpression(expression) || ts.isNonNullExpression(expression)) {
123
+ return inferValidatorKindFromExpression(expression.expression, typeChecker, visited);
124
+ }
125
+ if (ts.isPropertyAccessExpression(expression)) {
126
+ const propertySymbol = typeChecker.getSymbolAtLocation(expression.name);
127
+ const fromProperty = inferValidatorKindFromSymbol(propertySymbol, typeChecker, visited);
128
+ if (fromProperty) {
129
+ return fromProperty;
130
+ }
131
+ return inferValidatorKindFromExpression(expression.expression, typeChecker, visited);
132
+ }
133
+ if (ts.isElementAccessExpression(expression)) {
134
+ return inferValidatorKindFromExpression(expression.expression, typeChecker, visited);
135
+ }
136
+ if (ts.isCallExpression(expression) || ts.isNewExpression(expression)) {
137
+ return inferValidatorKindFromExpression(expression.expression, typeChecker, visited);
138
+ }
139
+ if (ts.isIdentifier(expression)) {
140
+ return inferValidatorKindFromSymbol(typeChecker.getSymbolAtLocation(expression), typeChecker, visited);
141
+ }
142
+ return undefined;
143
+ }
144
+ function parseValidateKindAndSchemaArgument(expression, parameter, typeChecker) {
145
+ const args = [...expression.arguments];
146
+ if (args.length === 0) {
147
+ throw new exceptions_1.GenerateMetadataError('@Validate requires a schema argument.', parameter);
148
+ }
149
+ if (args.length === 1) {
150
+ const [arg] = args;
151
+ if (ts.isObjectLiteralExpression(arg)) {
152
+ const kindProperty = getValidateKindProperty(arg);
153
+ const schemaProperty = getValidateSchemaProperty(arg);
154
+ if (!kindProperty || !schemaProperty || !ts.isStringLiteral(kindProperty.initializer) || !isExternalValidatorKind(kindProperty.initializer.text)) {
155
+ throw new exceptions_1.GenerateMetadataError('@Validate({ kind, schema }) requires a supported string kind and a schema property.', arg);
156
+ }
157
+ return {
158
+ kind: kindProperty.initializer.text,
159
+ strategy: 'external',
160
+ };
161
+ }
162
+ if (ts.isStringLiteral(arg) && isExternalValidatorKind(arg.text)) {
163
+ throw new exceptions_1.GenerateMetadataError(`@Validate('${arg.text}', schema) requires a schema argument.`, arg);
164
+ }
165
+ const inferredKind = inferValidatorKindFromExpression(arg, typeChecker);
166
+ if (!inferredKind) {
167
+ throw new exceptions_1.GenerateMetadataError('@Validate(schema) could not infer the validator kind. Use @Validate(kind, schema) instead.', arg);
168
+ }
169
+ return {
170
+ kind: inferredKind,
171
+ strategy: 'external',
172
+ };
173
+ }
174
+ if (args.length === 2) {
175
+ const [kindArg, schemaArg] = args;
176
+ if (!ts.isStringLiteral(kindArg) || !isExternalValidatorKind(kindArg.text) || !schemaArg) {
177
+ throw new exceptions_1.GenerateMetadataError('@Validate(kind, schema) requires a supported string kind and schema argument.', expression);
178
+ }
179
+ return {
180
+ kind: kindArg.text,
181
+ strategy: 'external',
182
+ };
183
+ }
184
+ throw new exceptions_1.GenerateMetadataError('@Validate accepts only (schema), (kind, schema), or ({ kind, schema }).', expression);
185
+ }
186
+ function getValidateKindProperty(objectLiteral) {
187
+ return objectLiteral.properties.find((property) => ts.isPropertyAssignment(property) && ts.isIdentifier(property.name) && property.name.text === 'kind');
188
+ }
189
+ function getValidateSchemaProperty(objectLiteral) {
190
+ return objectLiteral.properties.find((property) => (ts.isPropertyAssignment(property) || ts.isShorthandPropertyAssignment(property)) &&
191
+ ts.isIdentifier(property.name) &&
192
+ property.name.text === 'schema');
193
+ }
194
+ function getParameterExternalValidator(parameter, parameterIn, typeChecker) {
195
+ const decorator = getValidateDecorator(parameter, typeChecker);
196
+ if (!decorator) {
197
+ return undefined;
198
+ }
199
+ if (!SUPPORTED_VALIDATE_TARGETS.has(parameterIn)) {
200
+ throw new exceptions_1.GenerateMetadataError(`@Validate is not supported on '${parameterIn}' parameters in this release.`, parameter);
201
+ }
202
+ if (!ts.isCallExpression(decorator.expression)) {
203
+ throw new exceptions_1.GenerateMetadataError('@Validate must be called as a decorator function.', decorator);
204
+ }
205
+ return {
206
+ validationStrategy: 'external',
207
+ externalValidator: parseValidateKindAndSchemaArgument(decorator.expression, parameter, typeChecker),
208
+ };
209
+ }
210
+ function assertValidateDecoratorTargets(program, typeChecker) {
211
+ const visit = (node) => {
212
+ const validateDecorators = (0, decoratorUtils_1.getDecorators)(node, (_identifier, canonicalName) => canonicalName === 'Validate', typeChecker);
213
+ if (validateDecorators.length > 0) {
214
+ if (!ts.isParameter(node)) {
215
+ throw new exceptions_1.GenerateMetadataError('@Validate is currently supported only on controller method parameters.', node);
216
+ }
217
+ if (!ts.isMethodDeclaration(node.parent)) {
218
+ throw new exceptions_1.GenerateMetadataError('@Validate is currently supported only on method parameters.', node);
219
+ }
220
+ }
221
+ ts.forEachChild(node, visit);
222
+ };
223
+ program.getSourceFiles().forEach(sourceFile => visit(sourceFile));
224
+ }
225
+ //# sourceMappingURL=validateDecoratorUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateDecoratorUtils.js","sourceRoot":"","sources":["../../src/utils/validateDecoratorUtils.ts"],"names":[],"mappings":"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"}