@nestia/core 10.0.2 → 11.0.0-dev.20260305

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 (155) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +93 -93
  3. package/lib/adaptors/WebSocketAdaptor.js.map +1 -1
  4. package/lib/decorators/DynamicModule.js +54 -10
  5. package/lib/decorators/DynamicModule.js.map +1 -1
  6. package/lib/decorators/EncryptedBody.js +2 -2
  7. package/lib/decorators/EncryptedBody.js.map +1 -1
  8. package/lib/decorators/EncryptedController.d.ts +1 -1
  9. package/lib/decorators/EncryptedModule.d.ts +1 -1
  10. package/lib/decorators/EncryptedModule.js +54 -10
  11. package/lib/decorators/EncryptedModule.js.map +1 -1
  12. package/lib/decorators/EncryptedRoute.js +2 -2
  13. package/lib/decorators/EncryptedRoute.js.map +1 -1
  14. package/lib/decorators/HumanRoute.d.ts +1 -2
  15. package/lib/decorators/HumanRoute.js +1 -2
  16. package/lib/decorators/HumanRoute.js.map +1 -1
  17. package/lib/decorators/NoTransformConfigurationError.js +1 -1
  18. package/lib/decorators/NoTransformConfigurationError.js.map +1 -1
  19. package/lib/decorators/SwaggerCustomizer.d.ts +1 -1
  20. package/lib/decorators/TypedFormData.js.map +1 -1
  21. package/lib/decorators/TypedParam.js +1 -1
  22. package/lib/decorators/TypedParam.js.map +1 -1
  23. package/lib/decorators/internal/get_path_and_querify.js +1 -1
  24. package/lib/decorators/internal/get_path_and_querify.js.map +1 -1
  25. package/lib/decorators/internal/get_path_and_stringify.js +1 -1
  26. package/lib/decorators/internal/get_path_and_stringify.js.map +1 -1
  27. package/lib/decorators/internal/headers_to_object.js.map +1 -1
  28. package/lib/decorators/internal/validate_request_body.js +1 -1
  29. package/lib/decorators/internal/validate_request_body.js.map +1 -1
  30. package/lib/decorators/internal/validate_request_form_data.js +1 -1
  31. package/lib/decorators/internal/validate_request_form_data.js.map +1 -1
  32. package/lib/decorators/internal/validate_request_headers.js +1 -1
  33. package/lib/decorators/internal/validate_request_headers.js.map +1 -1
  34. package/lib/decorators/internal/validate_request_query.js +1 -1
  35. package/lib/decorators/internal/validate_request_query.js.map +1 -1
  36. package/lib/module.d.ts +1 -0
  37. package/lib/module.js +1 -0
  38. package/lib/module.js.map +1 -1
  39. package/lib/options/INestiaTransformProject.d.ts +1 -1
  40. package/lib/programmers/PlainBodyProgrammer.js +5 -8
  41. package/lib/programmers/PlainBodyProgrammer.js.map +1 -1
  42. package/lib/programmers/TypedBodyProgrammer.js +13 -21
  43. package/lib/programmers/TypedBodyProgrammer.js.map +1 -1
  44. package/lib/programmers/TypedFormDataBodyProgrammer.js +11 -20
  45. package/lib/programmers/TypedFormDataBodyProgrammer.js.map +1 -1
  46. package/lib/programmers/TypedHeadersProgrammer.js +4 -6
  47. package/lib/programmers/TypedHeadersProgrammer.js.map +1 -1
  48. package/lib/programmers/TypedParamProgrammer.js +2 -2
  49. package/lib/programmers/TypedParamProgrammer.js.map +1 -1
  50. package/lib/programmers/TypedQueryBodyProgrammer.js +9 -16
  51. package/lib/programmers/TypedQueryBodyProgrammer.js.map +1 -1
  52. package/lib/programmers/TypedQueryProgrammer.js +9 -16
  53. package/lib/programmers/TypedQueryProgrammer.js.map +1 -1
  54. package/lib/programmers/TypedQueryRouteProgrammer.js +6 -10
  55. package/lib/programmers/TypedQueryRouteProgrammer.js.map +1 -1
  56. package/lib/programmers/TypedRouteProgrammer.js +8 -13
  57. package/lib/programmers/TypedRouteProgrammer.js.map +1 -1
  58. package/lib/programmers/http/HttpAssertQuerifyProgrammer.d.ts +1 -1
  59. package/lib/programmers/http/HttpAssertQuerifyProgrammer.js +5 -7
  60. package/lib/programmers/http/HttpAssertQuerifyProgrammer.js.map +1 -1
  61. package/lib/programmers/http/HttpIsQuerifyProgrammer.d.ts +1 -1
  62. package/lib/programmers/http/HttpIsQuerifyProgrammer.js +5 -7
  63. package/lib/programmers/http/HttpIsQuerifyProgrammer.js.map +1 -1
  64. package/lib/programmers/http/HttpQuerifyProgrammer.d.ts +1 -1
  65. package/lib/programmers/http/HttpQuerifyProgrammer.js +13 -19
  66. package/lib/programmers/http/HttpQuerifyProgrammer.js.map +1 -1
  67. package/lib/programmers/http/HttpValidateQuerifyProgrammer.d.ts +1 -1
  68. package/lib/programmers/http/HttpValidateQuerifyProgrammer.js +6 -8
  69. package/lib/programmers/http/HttpValidateQuerifyProgrammer.js.map +1 -1
  70. package/lib/programmers/internal/CoreMetadataUtil.d.ts +3 -3
  71. package/lib/programmers/internal/CoreMetadataUtil.js.map +1 -1
  72. package/lib/transform.d.ts +1 -1
  73. package/lib/transform.js.map +1 -1
  74. package/lib/transformers/FileTransformer.js +2 -2
  75. package/lib/transformers/FileTransformer.js.map +1 -1
  76. package/lib/transformers/MethodTransformer.js.map +1 -1
  77. package/lib/transformers/ParameterDecoratorTransformer.js +1 -1
  78. package/lib/transformers/ParameterDecoratorTransformer.js.map +1 -1
  79. package/lib/transformers/TypedRouteTransformer.js +1 -1
  80. package/lib/transformers/TypedRouteTransformer.js.map +1 -1
  81. package/lib/transformers/WebSocketRouteTransformer.js +1 -1
  82. package/lib/transformers/WebSocketRouteTransformer.js.map +1 -1
  83. package/package.json +34 -26
  84. package/src/adaptors/WebSocketAdaptor.ts +429 -429
  85. package/src/decorators/DynamicModule.ts +44 -44
  86. package/src/decorators/EncryptedBody.ts +96 -97
  87. package/src/decorators/EncryptedController.ts +40 -40
  88. package/src/decorators/EncryptedModule.ts +98 -98
  89. package/src/decorators/EncryptedRoute.ts +212 -213
  90. package/src/decorators/HumanRoute.ts +21 -22
  91. package/src/decorators/NoTransformConfigurationError.ts +34 -34
  92. package/src/decorators/PlainBody.ts +76 -76
  93. package/src/decorators/SwaggerCustomizer.ts +97 -97
  94. package/src/decorators/SwaggerExample.ts +100 -100
  95. package/src/decorators/TypedBody.ts +57 -57
  96. package/src/decorators/TypedException.ts +147 -147
  97. package/src/decorators/TypedFormData.ts +187 -195
  98. package/src/decorators/TypedHeaders.ts +66 -66
  99. package/src/decorators/TypedParam.ts +77 -77
  100. package/src/decorators/TypedQuery.ts +234 -234
  101. package/src/decorators/TypedRoute.ts +196 -196
  102. package/src/decorators/WebSocketRoute.ts +242 -242
  103. package/src/decorators/internal/EncryptedConstant.ts +2 -2
  104. package/src/decorators/internal/IWebSocketRouteReflect.ts +23 -23
  105. package/src/decorators/internal/NoTransformConfigureError.ts +2 -2
  106. package/src/decorators/internal/get_path_and_querify.ts +94 -94
  107. package/src/decorators/internal/get_path_and_stringify.ts +110 -110
  108. package/src/decorators/internal/get_text_body.ts +16 -16
  109. package/src/decorators/internal/headers_to_object.ts +11 -11
  110. package/src/decorators/internal/is_request_body_undefined.ts +12 -12
  111. package/src/decorators/internal/load_controller.ts +45 -45
  112. package/src/decorators/internal/route_error.ts +43 -43
  113. package/src/decorators/internal/validate_request_body.ts +64 -64
  114. package/src/decorators/internal/validate_request_form_data.ts +67 -67
  115. package/src/decorators/internal/validate_request_headers.ts +76 -76
  116. package/src/decorators/internal/validate_request_query.ts +64 -64
  117. package/src/index.ts +5 -5
  118. package/src/module.ts +23 -22
  119. package/src/options/INestiaTransformOptions.ts +34 -34
  120. package/src/options/INestiaTransformProject.ts +10 -8
  121. package/src/options/IRequestBodyValidator.ts +20 -20
  122. package/src/options/IRequestFormDataProps.ts +27 -27
  123. package/src/options/IRequestHeadersValidator.ts +22 -22
  124. package/src/options/IRequestQueryValidator.ts +20 -20
  125. package/src/options/IResponseBodyQuerifier.ts +25 -25
  126. package/src/options/IResponseBodyStringifier.ts +30 -30
  127. package/src/programmers/PlainBodyProgrammer.ts +72 -70
  128. package/src/programmers/TypedBodyProgrammer.ts +144 -142
  129. package/src/programmers/TypedFormDataBodyProgrammer.ts +118 -118
  130. package/src/programmers/TypedHeadersProgrammer.ts +65 -63
  131. package/src/programmers/TypedParamProgrammer.ts +33 -33
  132. package/src/programmers/TypedQueryBodyProgrammer.ts +111 -109
  133. package/src/programmers/TypedQueryProgrammer.ts +113 -111
  134. package/src/programmers/TypedQueryRouteProgrammer.ts +104 -102
  135. package/src/programmers/TypedRouteProgrammer.ts +96 -94
  136. package/src/programmers/http/HttpAssertQuerifyProgrammer.ts +74 -72
  137. package/src/programmers/http/HttpIsQuerifyProgrammer.ts +77 -75
  138. package/src/programmers/http/HttpQuerifyProgrammer.ts +110 -108
  139. package/src/programmers/http/HttpValidateQuerifyProgrammer.ts +78 -76
  140. package/src/programmers/internal/CoreMetadataUtil.ts +21 -21
  141. package/src/transform.ts +35 -35
  142. package/src/transformers/FileTransformer.ts +109 -110
  143. package/src/transformers/MethodTransformer.ts +103 -103
  144. package/src/transformers/NodeTransformer.ts +23 -23
  145. package/src/transformers/ParameterDecoratorTransformer.ts +143 -143
  146. package/src/transformers/ParameterTransformer.ts +57 -57
  147. package/src/transformers/TypedRouteTransformer.ts +85 -85
  148. package/src/transformers/WebSocketRouteTransformer.ts +120 -120
  149. package/src/typings/Creator.ts +3 -3
  150. package/src/typings/get-function-location.d.ts +7 -7
  151. package/src/utils/ArrayUtil.ts +7 -7
  152. package/src/utils/ExceptionManager.ts +115 -115
  153. package/src/utils/Singleton.ts +16 -16
  154. package/src/utils/SourceFinder.ts +54 -54
  155. package/src/utils/VersioningStrategy.ts +27 -27
@@ -1,63 +1,65 @@
1
- import ts from "typescript";
2
- import { HttpAssertHeadersProgrammer } from "typia/lib/programmers/http/HttpAssertHeadersProgrammer";
3
- import { HttpIsHeadersProgrammer } from "typia/lib/programmers/http/HttpIsHeadersProgrammer";
4
- import { HttpValidateHeadersProgrammer } from "typia/lib/programmers/http/HttpValidateHeadersProgrammer";
5
- import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
6
-
7
- import { INestiaTransformContext } from "../options/INestiaTransformProject";
8
- import { IRequestHeadersValidator } from "../options/IRequestHeadersValidator";
9
-
10
- export namespace TypedHeadersProgrammer {
11
- export const generate = (props: {
12
- context: INestiaTransformContext;
13
- modulo: ts.LeftHandSideExpression;
14
- type: ts.Type;
15
- }): ts.Expression => {
16
- // GENERATE VALIDATION PLAN
17
- const parameter =
18
- (key: IRequestHeadersValidator<any>["type"]) =>
19
- (
20
- programmer: (next: {
21
- context: ITypiaContext;
22
- modulo: ts.LeftHandSideExpression;
23
- type: ts.Type;
24
- name: string | undefined;
25
- }) => ts.Expression,
26
- ) =>
27
- ts.factory.createObjectLiteralExpression([
28
- ts.factory.createPropertyAssignment(
29
- ts.factory.createIdentifier("type"),
30
- ts.factory.createStringLiteral(key),
31
- ),
32
- ts.factory.createPropertyAssignment(
33
- ts.factory.createIdentifier(key),
34
- programmer({
35
- context: {
36
- ...props.context,
37
- options: {
38
- numeric: false,
39
- finite: false,
40
- functional: false,
41
- },
42
- },
43
- modulo: props.modulo,
44
- type: props.type,
45
- name: undefined,
46
- }),
47
- ),
48
- ]);
49
-
50
- // RETURNS
51
- const category = props.context.options.validate;
52
- if (category === "is" || category === "equals")
53
- return parameter("is")(HttpIsHeadersProgrammer.write);
54
- else if (
55
- category === "validate" ||
56
- category === "validateEquals" ||
57
- category === "validateClone" ||
58
- category === "validatePrune"
59
- )
60
- return parameter("validate")(HttpValidateHeadersProgrammer.write);
61
- return parameter("assert")(HttpAssertHeadersProgrammer.write);
62
- };
63
- }
1
+ import {
2
+ HttpAssertHeadersProgrammer,
3
+ HttpIsHeadersProgrammer,
4
+ HttpValidateHeadersProgrammer,
5
+ ITypiaContext,
6
+ } from "@typia/core";
7
+ import ts from "typescript";
8
+
9
+ import { INestiaTransformContext } from "../options/INestiaTransformProject";
10
+ import { IRequestHeadersValidator } from "../options/IRequestHeadersValidator";
11
+
12
+ export namespace TypedHeadersProgrammer {
13
+ export const generate = (props: {
14
+ context: INestiaTransformContext;
15
+ modulo: ts.LeftHandSideExpression;
16
+ type: ts.Type;
17
+ }): ts.Expression => {
18
+ // GENERATE VALIDATION PLAN
19
+ const parameter =
20
+ (key: IRequestHeadersValidator<any>["type"]) =>
21
+ (
22
+ programmer: (next: {
23
+ context: ITypiaContext;
24
+ modulo: ts.LeftHandSideExpression;
25
+ type: ts.Type;
26
+ name: string | undefined;
27
+ }) => ts.Expression,
28
+ ) =>
29
+ ts.factory.createObjectLiteralExpression([
30
+ ts.factory.createPropertyAssignment(
31
+ ts.factory.createIdentifier("type"),
32
+ ts.factory.createStringLiteral(key),
33
+ ),
34
+ ts.factory.createPropertyAssignment(
35
+ ts.factory.createIdentifier(key),
36
+ programmer({
37
+ context: {
38
+ ...props.context,
39
+ options: {
40
+ numeric: false,
41
+ finite: false,
42
+ functional: false,
43
+ },
44
+ },
45
+ modulo: props.modulo,
46
+ type: props.type,
47
+ name: undefined,
48
+ }),
49
+ ),
50
+ ]);
51
+
52
+ // RETURNS
53
+ const category = props.context.options.validate;
54
+ if (category === "is" || category === "equals")
55
+ return parameter("is")(HttpIsHeadersProgrammer.write);
56
+ else if (
57
+ category === "validate" ||
58
+ category === "validateEquals" ||
59
+ category === "validateClone" ||
60
+ category === "validatePrune"
61
+ )
62
+ return parameter("validate")(HttpValidateHeadersProgrammer.write);
63
+ return parameter("assert")(HttpAssertHeadersProgrammer.write);
64
+ };
65
+ }
@@ -1,33 +1,33 @@
1
- import ts from "typescript";
2
- import { HttpParameterProgrammer } from "typia/lib/programmers/http/HttpParameterProgrammer";
3
-
4
- import { INestiaTransformContext } from "../options/INestiaTransformProject";
5
-
6
- export namespace TypedParamProgrammer {
7
- export const generate = (props: {
8
- context: INestiaTransformContext;
9
- modulo: ts.LeftHandSideExpression;
10
- arguments: readonly ts.Expression[];
11
- type: ts.Type;
12
- }): readonly ts.Expression[] => {
13
- // ALREADY BEING TRANSFORMED
14
- if (props.arguments.length !== 1) return props.arguments;
15
- return [
16
- props.arguments[0],
17
- HttpParameterProgrammer.write({
18
- context: {
19
- ...props.context,
20
- options: {
21
- numeric: true,
22
- },
23
- },
24
- modulo: props.modulo,
25
- type: props.type,
26
- name: undefined,
27
- }),
28
- ...(props.context.options?.validate?.startsWith("validate")
29
- ? [ts.factory.createTrue()]
30
- : []),
31
- ];
32
- };
33
- }
1
+ import { HttpParameterProgrammer } from "@typia/core";
2
+ import ts from "typescript";
3
+
4
+ import { INestiaTransformContext } from "../options/INestiaTransformProject";
5
+
6
+ export namespace TypedParamProgrammer {
7
+ export const generate = (props: {
8
+ context: INestiaTransformContext;
9
+ modulo: ts.LeftHandSideExpression;
10
+ arguments: readonly ts.Expression[];
11
+ type: ts.Type;
12
+ }): readonly ts.Expression[] => {
13
+ // ALREADY BEING TRANSFORMED
14
+ if (props.arguments.length !== 1) return props.arguments;
15
+ return [
16
+ props.arguments[0]!,
17
+ HttpParameterProgrammer.write({
18
+ context: {
19
+ ...props.context,
20
+ options: {
21
+ numeric: true,
22
+ },
23
+ },
24
+ modulo: props.modulo,
25
+ type: props.type,
26
+ name: undefined,
27
+ }),
28
+ ...(props.context.options?.validate?.startsWith("validate")
29
+ ? [ts.factory.createTrue()]
30
+ : []),
31
+ ];
32
+ };
33
+ }
@@ -1,109 +1,111 @@
1
- import ts from "typescript";
2
- import { MetadataCollection } from "typia/lib/factories/MetadataCollection";
3
- import { MetadataFactory } from "typia/lib/factories/MetadataFactory";
4
- import { HttpAssertQueryProgrammer } from "typia/lib/programmers/http/HttpAssertQueryProgrammer";
5
- import { HttpIsQueryProgrammer } from "typia/lib/programmers/http/HttpIsQueryProgrammer";
6
- import { HttpQueryProgrammer } from "typia/lib/programmers/http/HttpQueryProgrammer";
7
- import { HttpValidateQueryProgrammer } from "typia/lib/programmers/http/HttpValidateQueryProgrammer";
8
- import { LlmSchemaProgrammer } from "typia/lib/programmers/llm/LlmSchemaProgrammer";
9
- import { Metadata } from "typia/lib/schemas/metadata/Metadata";
10
- import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
11
- import { TransformerError } from "typia/lib/transformers/TransformerError";
12
- import { ValidationPipe } from "typia/lib/typings/ValidationPipe";
13
-
14
- import { INestiaTransformOptions } from "../options/INestiaTransformOptions";
15
- import { INestiaTransformContext } from "../options/INestiaTransformProject";
16
- import { IRequestQueryValidator } from "../options/IRequestQueryValidator";
17
-
18
- export namespace TypedQueryBodyProgrammer {
19
- export const generate = (props: {
20
- context: INestiaTransformContext;
21
- modulo: ts.LeftHandSideExpression;
22
- type: ts.Type;
23
- }): ts.ObjectLiteralExpression => {
24
- // VALIDATE TYPE
25
- if (props.context.options.llm) {
26
- const llm: INestiaTransformOptions.ILlm = props.context.options.llm;
27
- const result: ValidationPipe<Metadata, MetadataFactory.IError> =
28
- MetadataFactory.analyze({
29
- checker: props.context.checker,
30
- transformer: props.context.transformer,
31
- options: {
32
- escape: false,
33
- constant: true,
34
- absorb: true,
35
- validate: (meta, explore) => {
36
- const errors: string[] = HttpQueryProgrammer.validate(
37
- meta,
38
- explore,
39
- true,
40
- );
41
- errors.push(
42
- ...LlmSchemaProgrammer.validate({
43
- config: {
44
- strict: llm.strict,
45
- },
46
- metadata: meta,
47
- }),
48
- );
49
- return errors;
50
- },
51
- },
52
- collection: new MetadataCollection(),
53
- type: props.type,
54
- });
55
- if (result.success === false)
56
- throw TransformerError.from({
57
- code: props.modulo.getText(),
58
- errors: result.errors,
59
- });
60
- }
61
-
62
- // GENERATE VALIDATION PLAN
63
- const parameter =
64
- (key: IRequestQueryValidator<any>["type"]) =>
65
- (
66
- programmer: (next: {
67
- context: ITypiaContext;
68
- modulo: ts.LeftHandSideExpression;
69
- type: ts.Type;
70
- name: string | undefined;
71
- }) => ts.Expression,
72
- ) =>
73
- ts.factory.createObjectLiteralExpression([
74
- ts.factory.createPropertyAssignment(
75
- ts.factory.createIdentifier("type"),
76
- ts.factory.createStringLiteral(key),
77
- ),
78
- ts.factory.createPropertyAssignment(
79
- ts.factory.createIdentifier(key),
80
- programmer({
81
- context: {
82
- ...props.context,
83
- options: {
84
- numeric: false,
85
- finite: false,
86
- functional: false,
87
- },
88
- },
89
- modulo: props.modulo,
90
- type: props.type,
91
- name: undefined,
92
- }),
93
- ),
94
- ]);
95
-
96
- // RETURNS
97
- const category = props.context.options.validate;
98
- if (category === "is" || category === "equals")
99
- return parameter("is")(HttpIsQueryProgrammer.write);
100
- else if (
101
- category === "validate" ||
102
- category === "validateEquals" ||
103
- category === "validateClone" ||
104
- category === "validatePrune"
105
- )
106
- return parameter("validate")(HttpValidateQueryProgrammer.write);
107
- return parameter("assert")(HttpAssertQueryProgrammer.write);
108
- };
109
- }
1
+ import {
2
+ HttpAssertQueryProgrammer,
3
+ HttpIsQueryProgrammer,
4
+ HttpQueryProgrammer,
5
+ HttpValidateQueryProgrammer,
6
+ ITypiaContext,
7
+ LlmSchemaProgrammer,
8
+ MetadataCollection,
9
+ MetadataFactory,
10
+ MetadataSchema,
11
+ TransformerError,
12
+ } from "@typia/core";
13
+ import { ValidationPipe } from "@typia/interface";
14
+ import ts from "typescript";
15
+
16
+ import { INestiaTransformOptions } from "../options/INestiaTransformOptions";
17
+ import { INestiaTransformContext } from "../options/INestiaTransformProject";
18
+ import { IRequestQueryValidator } from "../options/IRequestQueryValidator";
19
+
20
+ export namespace TypedQueryBodyProgrammer {
21
+ export const generate = (props: {
22
+ context: INestiaTransformContext;
23
+ modulo: ts.LeftHandSideExpression;
24
+ type: ts.Type;
25
+ }): ts.ObjectLiteralExpression => {
26
+ // VALIDATE TYPE
27
+ if (props.context.options.llm) {
28
+ const llm: INestiaTransformOptions.ILlm = props.context.options.llm;
29
+ const result: ValidationPipe<MetadataSchema, MetadataFactory.IError> =
30
+ MetadataFactory.analyze({
31
+ checker: props.context.checker,
32
+ transformer: props.context.transformer,
33
+ options: {
34
+ escape: false,
35
+ constant: true,
36
+ absorb: true,
37
+ validate: (meta, explore) => {
38
+ const errors: string[] = HttpQueryProgrammer.validate(
39
+ meta,
40
+ explore,
41
+ true,
42
+ );
43
+ errors.push(
44
+ ...LlmSchemaProgrammer.validate({
45
+ config: {
46
+ strict: llm.strict ?? false,
47
+ },
48
+ metadata: meta,
49
+ }),
50
+ );
51
+ return errors;
52
+ },
53
+ },
54
+ components: new MetadataCollection(),
55
+ type: props.type,
56
+ });
57
+ if (result.success === false)
58
+ throw TransformerError.from({
59
+ code: props.modulo.getText(),
60
+ errors: result.errors,
61
+ });
62
+ }
63
+
64
+ // GENERATE VALIDATION PLAN
65
+ const parameter =
66
+ (key: IRequestQueryValidator<any>["type"]) =>
67
+ (
68
+ programmer: (next: {
69
+ context: ITypiaContext;
70
+ modulo: ts.LeftHandSideExpression;
71
+ type: ts.Type;
72
+ name: string | undefined;
73
+ }) => ts.Expression,
74
+ ) =>
75
+ ts.factory.createObjectLiteralExpression([
76
+ ts.factory.createPropertyAssignment(
77
+ ts.factory.createIdentifier("type"),
78
+ ts.factory.createStringLiteral(key),
79
+ ),
80
+ ts.factory.createPropertyAssignment(
81
+ ts.factory.createIdentifier(key),
82
+ programmer({
83
+ context: {
84
+ ...props.context,
85
+ options: {
86
+ numeric: false,
87
+ finite: false,
88
+ functional: false,
89
+ },
90
+ },
91
+ modulo: props.modulo,
92
+ type: props.type,
93
+ name: undefined,
94
+ }),
95
+ ),
96
+ ]);
97
+
98
+ // RETURNS
99
+ const category = props.context.options.validate;
100
+ if (category === "is" || category === "equals")
101
+ return parameter("is")(HttpIsQueryProgrammer.write);
102
+ else if (
103
+ category === "validate" ||
104
+ category === "validateEquals" ||
105
+ category === "validateClone" ||
106
+ category === "validatePrune"
107
+ )
108
+ return parameter("validate")(HttpValidateQueryProgrammer.write);
109
+ return parameter("assert")(HttpAssertQueryProgrammer.write);
110
+ };
111
+ }
@@ -1,111 +1,113 @@
1
- import ts from "typescript";
2
- import { MetadataCollection } from "typia/lib/factories/MetadataCollection";
3
- import { MetadataFactory } from "typia/lib/factories/MetadataFactory";
4
- import { HttpAssertQueryProgrammer } from "typia/lib/programmers/http/HttpAssertQueryProgrammer";
5
- import { HttpIsQueryProgrammer } from "typia/lib/programmers/http/HttpIsQueryProgrammer";
6
- import { HttpQueryProgrammer } from "typia/lib/programmers/http/HttpQueryProgrammer";
7
- import { HttpValidateQueryProgrammer } from "typia/lib/programmers/http/HttpValidateQueryProgrammer";
8
- import { LlmSchemaProgrammer } from "typia/lib/programmers/llm/LlmSchemaProgrammer";
9
- import { Metadata } from "typia/lib/schemas/metadata/Metadata";
10
- import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
11
- import { TransformerError } from "typia/lib/transformers/TransformerError";
12
- import { ValidationPipe } from "typia/lib/typings/ValidationPipe";
13
-
14
- import { INestiaTransformOptions } from "../options/INestiaTransformOptions";
15
- import { INestiaTransformContext } from "../options/INestiaTransformProject";
16
- import { IRequestQueryValidator } from "../options/IRequestQueryValidator";
17
-
18
- export namespace TypedQueryProgrammer {
19
- export const generate = (props: {
20
- context: INestiaTransformContext;
21
- modulo: ts.LeftHandSideExpression;
22
- type: ts.Type;
23
- }): ts.Expression => {
24
- // VALIDATE TYPE
25
- if (props.context.options.llm) {
26
- const llm: INestiaTransformOptions.ILlm = props.context.options.llm;
27
- const result: ValidationPipe<Metadata, MetadataFactory.IError> =
28
- MetadataFactory.analyze({
29
- checker: props.context.checker,
30
- transformer: props.context.transformer,
31
- options: {
32
- escape: false,
33
- constant: true,
34
- absorb: true,
35
- validate: (meta, explore) => {
36
- const errors: string[] = HttpQueryProgrammer.validate(
37
- meta,
38
- explore,
39
- true,
40
- );
41
- errors.push(
42
- ...LlmSchemaProgrammer.validate({
43
- config: {
44
- strict: llm.strict,
45
- },
46
- metadata: meta,
47
- }),
48
- );
49
- return errors;
50
- },
51
- },
52
- collection: new MetadataCollection(),
53
- type: props.type,
54
- });
55
- if (result.success === false)
56
- throw TransformerError.from({
57
- code: "@nestia.core.TypedQuery",
58
- errors: result.errors,
59
- });
60
- }
61
-
62
- // GENERATE VALIDATION PLAN
63
- const parameter =
64
- (key: IRequestQueryValidator<any>["type"]) =>
65
- (
66
- programmer: (next: {
67
- context: ITypiaContext;
68
- modulo: ts.LeftHandSideExpression;
69
- type: ts.Type;
70
- name: string | undefined;
71
- allowOptional: boolean;
72
- }) => ts.Expression,
73
- ) =>
74
- ts.factory.createObjectLiteralExpression([
75
- ts.factory.createPropertyAssignment(
76
- ts.factory.createIdentifier("type"),
77
- ts.factory.createStringLiteral(key),
78
- ),
79
- ts.factory.createPropertyAssignment(
80
- ts.factory.createIdentifier(key),
81
- programmer({
82
- context: {
83
- ...props.context,
84
- options: {
85
- numeric: false,
86
- finite: false,
87
- functional: false,
88
- },
89
- },
90
- modulo: props.modulo,
91
- type: props.type,
92
- name: undefined,
93
- allowOptional: true,
94
- }),
95
- ),
96
- ]);
97
-
98
- // RETURNS
99
- const category = props.context.options.validate;
100
- if (category === "is" || category === "equals")
101
- return parameter("is")(HttpIsQueryProgrammer.write);
102
- else if (
103
- category === "validate" ||
104
- category === "validateEquals" ||
105
- category === "validateClone" ||
106
- category === "validatePrune"
107
- )
108
- return parameter("validate")(HttpValidateQueryProgrammer.write);
109
- return parameter("assert")(HttpAssertQueryProgrammer.write);
110
- };
111
- }
1
+ import {
2
+ HttpAssertQueryProgrammer,
3
+ HttpIsQueryProgrammer,
4
+ HttpQueryProgrammer,
5
+ HttpValidateQueryProgrammer,
6
+ ITypiaContext,
7
+ LlmSchemaProgrammer,
8
+ MetadataCollection,
9
+ MetadataFactory,
10
+ MetadataSchema,
11
+ TransformerError,
12
+ } from "@typia/core";
13
+ import { ValidationPipe } from "@typia/interface";
14
+ import ts from "typescript";
15
+
16
+ import { INestiaTransformOptions } from "../options/INestiaTransformOptions";
17
+ import { INestiaTransformContext } from "../options/INestiaTransformProject";
18
+ import { IRequestQueryValidator } from "../options/IRequestQueryValidator";
19
+
20
+ export namespace TypedQueryProgrammer {
21
+ export const generate = (props: {
22
+ context: INestiaTransformContext;
23
+ modulo: ts.LeftHandSideExpression;
24
+ type: ts.Type;
25
+ }): ts.Expression => {
26
+ // VALIDATE TYPE
27
+ if (props.context.options.llm) {
28
+ const llm: INestiaTransformOptions.ILlm = props.context.options.llm;
29
+ const result: ValidationPipe<MetadataSchema, MetadataFactory.IError> =
30
+ MetadataFactory.analyze({
31
+ checker: props.context.checker,
32
+ transformer: props.context.transformer,
33
+ options: {
34
+ escape: false,
35
+ constant: true,
36
+ absorb: true,
37
+ validate: (meta, explore) => {
38
+ const errors: string[] = HttpQueryProgrammer.validate(
39
+ meta,
40
+ explore,
41
+ true,
42
+ );
43
+ errors.push(
44
+ ...LlmSchemaProgrammer.validate({
45
+ config: {
46
+ strict: llm.strict ?? false,
47
+ },
48
+ metadata: meta,
49
+ }),
50
+ );
51
+ return errors;
52
+ },
53
+ },
54
+ components: new MetadataCollection(),
55
+ type: props.type,
56
+ });
57
+ if (result.success === false)
58
+ throw TransformerError.from({
59
+ code: "@nestia.core.TypedQuery",
60
+ errors: result.errors,
61
+ });
62
+ }
63
+
64
+ // GENERATE VALIDATION PLAN
65
+ const parameter =
66
+ (key: IRequestQueryValidator<any>["type"]) =>
67
+ (
68
+ programmer: (next: {
69
+ context: ITypiaContext;
70
+ modulo: ts.LeftHandSideExpression;
71
+ type: ts.Type;
72
+ name: string | undefined;
73
+ allowOptional: boolean;
74
+ }) => ts.Expression,
75
+ ) =>
76
+ ts.factory.createObjectLiteralExpression([
77
+ ts.factory.createPropertyAssignment(
78
+ ts.factory.createIdentifier("type"),
79
+ ts.factory.createStringLiteral(key),
80
+ ),
81
+ ts.factory.createPropertyAssignment(
82
+ ts.factory.createIdentifier(key),
83
+ programmer({
84
+ context: {
85
+ ...props.context,
86
+ options: {
87
+ numeric: false,
88
+ finite: false,
89
+ functional: false,
90
+ },
91
+ },
92
+ modulo: props.modulo,
93
+ type: props.type,
94
+ name: undefined,
95
+ allowOptional: true,
96
+ }),
97
+ ),
98
+ ]);
99
+
100
+ // RETURNS
101
+ const category = props.context.options.validate;
102
+ if (category === "is" || category === "equals")
103
+ return parameter("is")(HttpIsQueryProgrammer.write);
104
+ else if (
105
+ category === "validate" ||
106
+ category === "validateEquals" ||
107
+ category === "validateClone" ||
108
+ category === "validatePrune"
109
+ )
110
+ return parameter("validate")(HttpValidateQueryProgrammer.write);
111
+ return parameter("assert")(HttpAssertQueryProgrammer.write);
112
+ };
113
+ }