@nestia/core 1.0.19 → 1.1.0-dev.20230413

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 (83) hide show
  1. package/README.md +1 -23
  2. package/lib/decorators/DynamicModule.d.ts +23 -23
  3. package/lib/decorators/DynamicModule.js +103 -103
  4. package/lib/decorators/EncryptedBody.d.ts +23 -23
  5. package/lib/decorators/EncryptedBody.js +125 -125
  6. package/lib/decorators/EncryptedController.d.ts +31 -31
  7. package/lib/decorators/EncryptedController.js +41 -41
  8. package/lib/decorators/EncryptedModule.d.ts +49 -49
  9. package/lib/decorators/EncryptedModule.js +161 -161
  10. package/lib/decorators/EncryptedRoute.d.ts +78 -78
  11. package/lib/decorators/EncryptedRoute.js +216 -216
  12. package/lib/decorators/PlainBody.d.ts +22 -22
  13. package/lib/decorators/PlainBody.js +82 -82
  14. package/lib/decorators/TypedBody.d.ts +16 -16
  15. package/lib/decorators/TypedBody.js +94 -94
  16. package/lib/decorators/TypedParam.d.ts +25 -25
  17. package/lib/decorators/TypedParam.js +61 -61
  18. package/lib/decorators/TypedQuery.d.ts +14 -14
  19. package/lib/decorators/TypedQuery.js +99 -99
  20. package/lib/decorators/TypedQuery.js.map +1 -1
  21. package/lib/decorators/TypedRoute.d.ts +72 -72
  22. package/lib/decorators/TypedRoute.js +185 -185
  23. package/lib/decorators/internal/EncryptedConstant.d.ts +1 -1
  24. package/lib/decorators/internal/EncryptedConstant.js +7 -7
  25. package/lib/decorators/internal/TransformError.d.ts +1 -1
  26. package/lib/decorators/internal/TransformError.js +10 -10
  27. package/lib/decorators/internal/get_path_and_stringify.d.ts +1 -1
  28. package/lib/decorators/internal/get_path_and_stringify.js +78 -78
  29. package/lib/decorators/internal/headers_to_object.d.ts +3 -3
  30. package/lib/decorators/internal/headers_to_object.js +49 -49
  31. package/lib/decorators/internal/load_controller.d.ts +2 -2
  32. package/lib/decorators/internal/load_controller.js +151 -152
  33. package/lib/decorators/internal/load_controller.js.map +1 -1
  34. package/lib/decorators/internal/route_error.d.ts +3 -3
  35. package/lib/decorators/internal/route_error.js +86 -86
  36. package/lib/decorators/internal/validate_request_body.d.ts +2 -2
  37. package/lib/decorators/internal/validate_request_body.js +57 -57
  38. package/lib/index.d.ts +3 -3
  39. package/lib/index.js +31 -31
  40. package/lib/module.d.ts +12 -12
  41. package/lib/module.js +28 -28
  42. package/lib/options/INestiaTransformOptions.d.ts +4 -4
  43. package/lib/options/INestiaTransformOptions.js +2 -2
  44. package/lib/options/INestiaTransformProject.d.ts +5 -5
  45. package/lib/options/INestiaTransformProject.js +2 -2
  46. package/lib/options/IRequestBodyValidator.d.ts +16 -16
  47. package/lib/options/IRequestBodyValidator.js +2 -2
  48. package/lib/options/IResponseBodyStringifier.d.ts +20 -20
  49. package/lib/options/IResponseBodyStringifier.js +2 -2
  50. package/lib/programmers/TypedBodyProgrammer.d.ts +5 -5
  51. package/lib/programmers/TypedBodyProgrammer.js +45 -45
  52. package/lib/programmers/TypedQueryProgrammer.d.ts +5 -5
  53. package/lib/programmers/TypedQueryProgrammer.js +260 -165
  54. package/lib/programmers/TypedQueryProgrammer.js.map +1 -1
  55. package/lib/programmers/TypedRouteProgrammer.d.ts +5 -5
  56. package/lib/programmers/TypedRouteProgrammer.js +47 -47
  57. package/lib/transform.d.ts +3 -3
  58. package/lib/transform.js +20 -20
  59. package/lib/transformers/FileTransformer.d.ts +5 -5
  60. package/lib/transformers/FileTransformer.js +32 -32
  61. package/lib/transformers/MethodDecoratorTransformer.d.ts +5 -5
  62. package/lib/transformers/MethodDecoratorTransformer.js +87 -87
  63. package/lib/transformers/MethodTransformer.d.ts +5 -5
  64. package/lib/transformers/MethodTransformer.js +54 -54
  65. package/lib/transformers/MethodTransformer.js.map +1 -1
  66. package/lib/transformers/NodeTransformer.d.ts +5 -5
  67. package/lib/transformers/NodeTransformer.js +20 -20
  68. package/lib/transformers/ParameterDecoratorTransformer.d.ts +5 -5
  69. package/lib/transformers/ParameterDecoratorTransformer.js +53 -53
  70. package/lib/transformers/ParameterTransformer.d.ts +5 -5
  71. package/lib/transformers/ParameterTransformer.js +33 -33
  72. package/lib/transformers/ParameterTransformer.js.map +1 -1
  73. package/lib/typings/Creator.d.ts +3 -3
  74. package/lib/typings/Creator.js +2 -2
  75. package/lib/utils/ExceptionManager.d.ts +64 -64
  76. package/lib/utils/ExceptionManager.js +112 -112
  77. package/lib/utils/Singleton.d.ts +1 -1
  78. package/lib/utils/Singleton.js +23 -23
  79. package/package.json +7 -5
  80. package/src/decorators/TypedQuery.ts +10 -8
  81. package/src/programmers/TypedQueryProgrammer.ts +104 -33
  82. package/src/transformers/MethodTransformer.ts +1 -1
  83. package/src/transformers/ParameterTransformer.ts +1 -1
@@ -57,32 +57,73 @@ export namespace TypedQueryProgrammer {
57
57
  for (const property of object.properties) {
58
58
  const key: Metadata = property.key;
59
59
  const value: Metadata = property.value;
60
+ validate(object)(key)(value, 0);
61
+ }
62
+ return object;
63
+ };
60
64
 
61
- if (
62
- (value.atomics.length ? 1 : 0) +
63
- (value.constants.length ? 1 : 0) +
64
- (value.templates.length ? 1 : 0) !==
65
- value.bucket()
66
- )
67
- throw new Error(
68
- ErrorMessages.property(object)(key)(
69
- "only atomic typed propertie are allowed.",
70
- ),
71
- );
72
- else if (value.atomics.length > 1 || value.constants.length > 1)
73
- throw new Error(
74
- ErrorMessages.property(object)(key)(
75
- "union type is not allowed.",
76
- ),
77
- );
78
- else if (value.nullable === true)
65
+ const validate =
66
+ (obj: MetadataObject) =>
67
+ (key: Metadata) =>
68
+ (value: Metadata, depth: number): string[] => {
69
+ if (value.nullable)
70
+ throw new Error(
71
+ ErrorMessages.property(obj)(key)(
72
+ "nullable type is not allowed. Use undefindable type instead.",
73
+ ),
74
+ );
75
+ else if (depth === 1 && value.required === false)
76
+ throw new Error(
77
+ ErrorMessages.property(obj)(key)(
78
+ "optional type is not allowed in array.",
79
+ ),
80
+ );
81
+ else if (
82
+ value.maps.length ||
83
+ value.sets.length ||
84
+ value.objects.length
85
+ )
86
+ throw new Error(
87
+ ErrorMessages.property(obj)(key)(
88
+ "object type is not allowed",
89
+ ),
90
+ );
91
+
92
+ const atom: string[] = [];
93
+ for (const type of value.atomics) atom.push(type);
94
+ for (const { type } of value.constants) atom.push(type);
95
+
96
+ if (depth === 0) {
97
+ if (atom.length && (value.arrays.length || value.arrays.length))
79
98
  throw new Error(
80
- ErrorMessages.property(object)(key)(
81
- "property type cannot be null. Use undefined instead.",
99
+ ErrorMessages.property(obj)(key)(
100
+ "union type is not allowed",
82
101
  ),
83
102
  );
84
- }
85
- return object;
103
+ for (const elem of value.arrays)
104
+ atom.push(...validate(obj)(key)(elem, depth + 1));
105
+ for (const tuple of value.tuples)
106
+ for (const elem of tuple)
107
+ atom.push(...validate(obj)(key)(elem, depth + 1));
108
+ } else if (value.arrays.length || value.tuples.length)
109
+ throw new Error(
110
+ ErrorMessages.property(obj)(key)(
111
+ "double-array type is not allowed",
112
+ ),
113
+ );
114
+
115
+ const size: number = new Set(atom).size;
116
+ if (size === 0)
117
+ throw new Error(
118
+ ErrorMessages.property(obj)(key)("unknown type"),
119
+ );
120
+ else if (size > 1)
121
+ throw new Error(
122
+ ErrorMessages.property(obj)(key)(
123
+ "union type is not allowed",
124
+ ),
125
+ );
126
+ return atom;
86
127
  };
87
128
 
88
129
  const decode =
@@ -143,20 +184,50 @@ export namespace TypedQueryProgrammer {
143
184
  const key: string = property.key.constants[0]!.values[0] as string;
144
185
  const value: Metadata = property.value;
145
186
 
146
- const type: Atomic.Literal = value.atomics.length
147
- ? value.atomics[0]!
187
+ const [type, isArray]: [Atomic.Literal, boolean] = value.atomics
188
+ .length
189
+ ? [value.atomics[0], false]
148
190
  : value.constants.length
149
- ? value.constants[0]!.type
150
- : "string";
191
+ ? [value.constants[0]!.type, false]
192
+ : (() => {
193
+ const meta = value.arrays[0] ?? value.tuples[0][0];
194
+ return meta.atomics.length
195
+ ? [meta.atomics[0], true]
196
+ : [meta.constants[0]!.type, true];
197
+ })();
151
198
  return ts.factory.createPropertyAssignment(
152
199
  key,
153
- decode_value(importer)(type)(
154
- ts.factory.createCallExpression(
155
- ts.factory.createIdentifier("input.get"),
156
- undefined,
157
- [ts.factory.createStringLiteral(key)],
158
- ),
159
- ),
200
+ isArray
201
+ ? ts.factory.createCallExpression(
202
+ IdentifierFactory.join(
203
+ ts.factory.createCallExpression(
204
+ ts.factory.createIdentifier("input.getAll"),
205
+ undefined,
206
+ [ts.factory.createStringLiteral(key)],
207
+ ),
208
+ "map",
209
+ ),
210
+ undefined,
211
+ [
212
+ ts.factory.createArrowFunction(
213
+ undefined,
214
+ undefined,
215
+ [IdentifierFactory.parameter("elem")],
216
+ undefined,
217
+ undefined,
218
+ decode_value(importer)(type)(
219
+ ts.factory.createIdentifier("elem"),
220
+ ),
221
+ ),
222
+ ],
223
+ )
224
+ : decode_value(importer)(type)(
225
+ ts.factory.createCallExpression(
226
+ ts.factory.createIdentifier("input.get"),
227
+ undefined,
228
+ [ts.factory.createStringLiteral(key)],
229
+ ),
230
+ ),
160
231
  );
161
232
  };
162
233
 
@@ -43,7 +43,7 @@ export namespace MethodTransformer {
43
43
  method.body,
44
44
  );
45
45
  // eslint-disable-next-line
46
- return ts.factory.updateMethodDeclaration(
46
+ return (ts.factory.updateMethodDeclaration as any)(
47
47
  method,
48
48
  decorators.map((deco) =>
49
49
  MethodDecoratorTransformer.transform(project, escaped, deco),
@@ -37,7 +37,7 @@ export namespace ParameterTransformer {
37
37
  param.initializer,
38
38
  );
39
39
  // eslint-disable-next-line
40
- return ts.factory.updateParameterDeclaration(
40
+ return (ts.factory.updateParameterDeclaration as any)(
41
41
  param,
42
42
  decorators.map((deco) =>
43
43
  ParameterDecoratorTransformer.transform(project, type, deco),