@nestia/core 11.2.0 → 12.0.0-dev.20260520.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 (171) hide show
  1. package/MIGRATION.md +169 -0
  2. package/lib/adaptors/WebSocketAdaptor.js +7 -3
  3. package/lib/adaptors/WebSocketAdaptor.js.map +1 -1
  4. package/lib/decorators/DynamicModule.js.map +1 -1
  5. package/lib/decorators/EncryptedBody.js.map +1 -1
  6. package/lib/decorators/EncryptedController.js.map +1 -1
  7. package/lib/decorators/EncryptedModule.js.map +1 -1
  8. package/lib/decorators/EncryptedRoute.js.map +1 -1
  9. package/lib/decorators/HumanRoute.js.map +1 -1
  10. package/lib/decorators/NoTransformConfigurationError.js +5 -2
  11. package/lib/decorators/NoTransformConfigurationError.js.map +1 -1
  12. package/lib/decorators/PlainBody.js.map +1 -1
  13. package/lib/decorators/SwaggerCustomizer.js.map +1 -1
  14. package/lib/decorators/SwaggerExample.js.map +1 -1
  15. package/lib/decorators/TypedBody.js.map +1 -1
  16. package/lib/decorators/TypedException.js.map +1 -1
  17. package/lib/decorators/TypedFormData.js.map +1 -1
  18. package/lib/decorators/TypedHeaders.js.map +1 -1
  19. package/lib/decorators/TypedParam.js +5 -2
  20. package/lib/decorators/TypedParam.js.map +1 -1
  21. package/lib/decorators/TypedQuery.js.map +1 -1
  22. package/lib/decorators/TypedRoute.js.map +1 -1
  23. package/lib/decorators/WebSocketRoute.js.map +1 -1
  24. package/lib/decorators/doNotThrowTransformError.js.map +1 -1
  25. package/lib/decorators/internal/get_path_and_querify.js +5 -2
  26. package/lib/decorators/internal/get_path_and_querify.js.map +1 -1
  27. package/lib/decorators/internal/get_path_and_stringify.js +5 -2
  28. package/lib/decorators/internal/get_path_and_stringify.js.map +1 -1
  29. package/lib/decorators/internal/get_text_body.js.map +1 -1
  30. package/lib/decorators/internal/headers_to_object.js.map +1 -1
  31. package/lib/decorators/internal/is_request_body_undefined.js.map +1 -1
  32. package/lib/decorators/internal/load_controller.js +48 -16
  33. package/lib/decorators/internal/load_controller.js.map +1 -1
  34. package/lib/decorators/internal/route_error.js +3 -3
  35. package/lib/decorators/internal/route_error.js.map +1 -1
  36. package/lib/decorators/internal/validate_request_body.js +5 -2
  37. package/lib/decorators/internal/validate_request_body.js.map +1 -1
  38. package/lib/decorators/internal/validate_request_form_data.js +5 -2
  39. package/lib/decorators/internal/validate_request_form_data.js.map +1 -1
  40. package/lib/decorators/internal/validate_request_headers.js +5 -2
  41. package/lib/decorators/internal/validate_request_headers.js.map +1 -1
  42. package/lib/decorators/internal/validate_request_query.js +30 -4
  43. package/lib/decorators/internal/validate_request_query.js.map +1 -1
  44. package/lib/index.js.map +1 -1
  45. package/lib/transform.d.ts +2 -5
  46. package/lib/transform.js +48 -28
  47. package/lib/transform.js.map +1 -1
  48. package/lib/utils/ArrayUtil.js.map +1 -1
  49. package/lib/utils/ExceptionManager.js.map +1 -1
  50. package/lib/utils/Singleton.js.map +1 -1
  51. package/lib/utils/SourceFinder.js.map +1 -1
  52. package/lib/utils/VersioningStrategy.js.map +1 -1
  53. package/native/cmd/ttsc-nestia/build.go +434 -0
  54. package/native/cmd/ttsc-nestia/cleanup.go +408 -0
  55. package/native/cmd/ttsc-nestia/core_querify.go +227 -0
  56. package/native/cmd/ttsc-nestia/core_transform.go +1713 -0
  57. package/native/cmd/ttsc-nestia/core_websocket.go +115 -0
  58. package/native/cmd/ttsc-nestia/main.go +72 -0
  59. package/native/cmd/ttsc-nestia/path_rewrite.go +285 -0
  60. package/native/cmd/ttsc-nestia/printer.go +244 -0
  61. package/native/cmd/ttsc-nestia/rewrite.go +662 -0
  62. package/native/cmd/ttsc-nestia/sdk_metadata_json.go +327 -0
  63. package/native/cmd/ttsc-nestia/sdk_transform.go +1541 -0
  64. package/native/cmd/ttsc-nestia/transform.go +387 -0
  65. package/native/cmd/ttsc-nestia/typia_fast.go +326 -0
  66. package/native/cmd/ttsc-nestia/typia_replacement.go +24 -0
  67. package/native/go.mod +32 -0
  68. package/native/go.sum +54 -0
  69. package/native/plugin/plan.go +102 -0
  70. package/native/transform.cjs +21 -0
  71. package/package.json +27 -22
  72. package/src/decorators/NoTransformConfigurationError.ts +5 -2
  73. package/src/decorators/internal/load_controller.ts +50 -19
  74. package/src/decorators/internal/validate_request_query.ts +21 -2
  75. package/src/transform.ts +82 -35
  76. package/lib/decorators/internal/NoTransformConfigureError.d.ts +0 -1
  77. package/lib/decorators/internal/NoTransformConfigureError.js +0 -7
  78. package/lib/decorators/internal/NoTransformConfigureError.js.map +0 -1
  79. package/lib/options/INestiaTransformOptions.d.ts +0 -13
  80. package/lib/options/INestiaTransformOptions.js +0 -3
  81. package/lib/options/INestiaTransformOptions.js.map +0 -1
  82. package/lib/options/INestiaTransformProject.d.ts +0 -5
  83. package/lib/options/INestiaTransformProject.js +0 -3
  84. package/lib/options/INestiaTransformProject.js.map +0 -1
  85. package/lib/programmers/PlainBodyProgrammer.d.ts +0 -9
  86. package/lib/programmers/PlainBodyProgrammer.js +0 -58
  87. package/lib/programmers/PlainBodyProgrammer.js.map +0 -1
  88. package/lib/programmers/TypedBodyProgrammer.d.ts +0 -9
  89. package/lib/programmers/TypedBodyProgrammer.js +0 -94
  90. package/lib/programmers/TypedBodyProgrammer.js.map +0 -1
  91. package/lib/programmers/TypedFormDataBodyProgrammer.d.ts +0 -9
  92. package/lib/programmers/TypedFormDataBodyProgrammer.js +0 -65
  93. package/lib/programmers/TypedFormDataBodyProgrammer.js.map +0 -1
  94. package/lib/programmers/TypedHeadersProgrammer.d.ts +0 -9
  95. package/lib/programmers/TypedHeadersProgrammer.js +0 -38
  96. package/lib/programmers/TypedHeadersProgrammer.js.map +0 -1
  97. package/lib/programmers/TypedParamProgrammer.d.ts +0 -10
  98. package/lib/programmers/TypedParamProgrammer.js +0 -32
  99. package/lib/programmers/TypedParamProgrammer.js.map +0 -1
  100. package/lib/programmers/TypedQueryBodyProgrammer.d.ts +0 -9
  101. package/lib/programmers/TypedQueryBodyProgrammer.js +0 -74
  102. package/lib/programmers/TypedQueryBodyProgrammer.js.map +0 -1
  103. package/lib/programmers/TypedQueryProgrammer.d.ts +0 -9
  104. package/lib/programmers/TypedQueryProgrammer.js +0 -75
  105. package/lib/programmers/TypedQueryProgrammer.js.map +0 -1
  106. package/lib/programmers/TypedQueryRouteProgrammer.d.ts +0 -9
  107. package/lib/programmers/TypedQueryRouteProgrammer.js +0 -75
  108. package/lib/programmers/TypedQueryRouteProgrammer.js.map +0 -1
  109. package/lib/programmers/TypedRouteProgrammer.d.ts +0 -9
  110. package/lib/programmers/TypedRouteProgrammer.js +0 -79
  111. package/lib/programmers/TypedRouteProgrammer.js.map +0 -1
  112. package/lib/programmers/http/HttpAssertQuerifyProgrammer.d.ts +0 -9
  113. package/lib/programmers/http/HttpAssertQuerifyProgrammer.js +0 -39
  114. package/lib/programmers/http/HttpAssertQuerifyProgrammer.js.map +0 -1
  115. package/lib/programmers/http/HttpIsQuerifyProgrammer.d.ts +0 -9
  116. package/lib/programmers/http/HttpIsQuerifyProgrammer.js +0 -36
  117. package/lib/programmers/http/HttpIsQuerifyProgrammer.js.map +0 -1
  118. package/lib/programmers/http/HttpQuerifyProgrammer.d.ts +0 -9
  119. package/lib/programmers/http/HttpQuerifyProgrammer.js +0 -50
  120. package/lib/programmers/http/HttpQuerifyProgrammer.js.map +0 -1
  121. package/lib/programmers/http/HttpValidateQuerifyProgrammer.d.ts +0 -9
  122. package/lib/programmers/http/HttpValidateQuerifyProgrammer.js +0 -40
  123. package/lib/programmers/http/HttpValidateQuerifyProgrammer.js.map +0 -1
  124. package/lib/programmers/internal/CoreMetadataUtil.d.ts +0 -5
  125. package/lib/programmers/internal/CoreMetadataUtil.js +0 -19
  126. package/lib/programmers/internal/CoreMetadataUtil.js.map +0 -1
  127. package/lib/transformers/FileTransformer.d.ts +0 -5
  128. package/lib/transformers/FileTransformer.js +0 -80
  129. package/lib/transformers/FileTransformer.js.map +0 -1
  130. package/lib/transformers/MethodTransformer.d.ts +0 -8
  131. package/lib/transformers/MethodTransformer.js +0 -58
  132. package/lib/transformers/MethodTransformer.js.map +0 -1
  133. package/lib/transformers/NodeTransformer.d.ts +0 -8
  134. package/lib/transformers/NodeTransformer.js +0 -24
  135. package/lib/transformers/NodeTransformer.js.map +0 -1
  136. package/lib/transformers/ParameterDecoratorTransformer.d.ts +0 -9
  137. package/lib/transformers/ParameterDecoratorTransformer.js +0 -104
  138. package/lib/transformers/ParameterDecoratorTransformer.js.map +0 -1
  139. package/lib/transformers/ParameterTransformer.d.ts +0 -8
  140. package/lib/transformers/ParameterTransformer.js +0 -37
  141. package/lib/transformers/ParameterTransformer.js.map +0 -1
  142. package/lib/transformers/TypedRouteTransformer.d.ts +0 -9
  143. package/lib/transformers/TypedRouteTransformer.js +0 -68
  144. package/lib/transformers/TypedRouteTransformer.js.map +0 -1
  145. package/lib/transformers/WebSocketRouteTransformer.d.ts +0 -9
  146. package/lib/transformers/WebSocketRouteTransformer.js +0 -72
  147. package/lib/transformers/WebSocketRouteTransformer.js.map +0 -1
  148. package/src/decorators/internal/NoTransformConfigureError.ts +0 -2
  149. package/src/options/INestiaTransformOptions.ts +0 -34
  150. package/src/options/INestiaTransformProject.ts +0 -10
  151. package/src/programmers/PlainBodyProgrammer.ts +0 -72
  152. package/src/programmers/TypedBodyProgrammer.ts +0 -148
  153. package/src/programmers/TypedFormDataBodyProgrammer.ts +0 -118
  154. package/src/programmers/TypedHeadersProgrammer.ts +0 -65
  155. package/src/programmers/TypedParamProgrammer.ts +0 -33
  156. package/src/programmers/TypedQueryBodyProgrammer.ts +0 -113
  157. package/src/programmers/TypedQueryProgrammer.ts +0 -115
  158. package/src/programmers/TypedQueryRouteProgrammer.ts +0 -107
  159. package/src/programmers/TypedRouteProgrammer.ts +0 -103
  160. package/src/programmers/http/HttpAssertQuerifyProgrammer.ts +0 -74
  161. package/src/programmers/http/HttpIsQuerifyProgrammer.ts +0 -77
  162. package/src/programmers/http/HttpQuerifyProgrammer.ts +0 -110
  163. package/src/programmers/http/HttpValidateQuerifyProgrammer.ts +0 -78
  164. package/src/programmers/internal/CoreMetadataUtil.ts +0 -21
  165. package/src/transformers/FileTransformer.ts +0 -109
  166. package/src/transformers/MethodTransformer.ts +0 -103
  167. package/src/transformers/NodeTransformer.ts +0 -23
  168. package/src/transformers/ParameterDecoratorTransformer.ts +0 -143
  169. package/src/transformers/ParameterTransformer.ts +0 -57
  170. package/src/transformers/TypedRouteTransformer.ts +0 -85
  171. package/src/transformers/WebSocketRouteTransformer.ts +0 -120
@@ -1,148 +0,0 @@
1
- import {
2
- AssertProgrammer,
3
- ITypiaContext,
4
- IsProgrammer,
5
- JsonMetadataFactory,
6
- LlmSchemaProgrammer,
7
- MiscAssertCloneProgrammer,
8
- MiscAssertPruneProgrammer,
9
- MiscValidateCloneProgrammer,
10
- MiscValidatePruneProgrammer,
11
- ValidateProgrammer,
12
- } from "@typia/core";
13
- import ts from "typescript";
14
-
15
- import { INestiaTransformContext } from "../options/INestiaTransformProject";
16
- import { IRequestBodyValidator } from "../options/IRequestBodyValidator";
17
-
18
- export namespace TypedBodyProgrammer {
19
- export const generate = (props: {
20
- context: INestiaTransformContext;
21
- modulo: ts.LeftHandSideExpression;
22
- type: ts.Type;
23
- }): ts.ObjectLiteralExpression => {
24
- // VALIDATE TYPE
25
- JsonMetadataFactory.analyze({
26
- method: "@nestia.core.TypedBody",
27
- checker: props.context.checker,
28
- transformer: props.context.transformer,
29
- type: props.type,
30
- validate: props.context.options.llm
31
- ? (next) =>
32
- LlmSchemaProgrammer.validate({
33
- config: {
34
- strict:
35
- typeof props.context.options.llm === "boolean"
36
- ? false
37
- : (props.context.options.llm?.strict ?? false),
38
- },
39
- metadata: next.metadata,
40
- explore: next.explore,
41
- })
42
- : undefined,
43
- });
44
-
45
- // GENERATE VALIDATION PLAN
46
- const check =
47
- (key: IRequestBodyValidator<any>["type"]) =>
48
- (equals: boolean) =>
49
- (
50
- programmer: (next: {
51
- context: ITypiaContext;
52
- modulo: ts.LeftHandSideExpression;
53
- config: {
54
- equals: boolean;
55
- guard: boolean;
56
- };
57
- type: ts.Type;
58
- name: string | undefined;
59
- }) => ts.Expression,
60
- ) =>
61
- ts.factory.createObjectLiteralExpression([
62
- ts.factory.createPropertyAssignment(
63
- ts.factory.createIdentifier("type"),
64
- ts.factory.createStringLiteral(key),
65
- ),
66
- ts.factory.createPropertyAssignment(
67
- ts.factory.createIdentifier(key),
68
- programmer({
69
- context: {
70
- ...props.context,
71
- options: {
72
- numeric: false,
73
- finite: false,
74
- functional: false,
75
- },
76
- },
77
- modulo: props.modulo,
78
- config: {
79
- equals,
80
- guard: false,
81
- },
82
- type: props.type,
83
- name: undefined,
84
- }),
85
- ),
86
- ]);
87
- const misc =
88
- (key: IRequestBodyValidator<any>["type"]) =>
89
- (
90
- programmer: (next: {
91
- context: ITypiaContext;
92
- modulo: ts.LeftHandSideExpression;
93
- type: ts.Type;
94
- name: string | undefined;
95
- }) => ts.Expression,
96
- ) =>
97
- ts.factory.createObjectLiteralExpression([
98
- ts.factory.createPropertyAssignment(
99
- ts.factory.createIdentifier("type"),
100
- ts.factory.createStringLiteral(key),
101
- ),
102
- ts.factory.createPropertyAssignment(
103
- ts.factory.createIdentifier(key),
104
- programmer({
105
- context: {
106
- ...props.context,
107
- options: {
108
- numeric: false,
109
- finite: false,
110
- functional: false,
111
- },
112
- },
113
- modulo: props.modulo,
114
- type: props.type,
115
- name: undefined,
116
- }),
117
- ),
118
- ]);
119
-
120
- //----
121
- // RETURNS
122
- //----
123
- const category = props.context.options.validate;
124
- // NORMAL
125
- if (category === "assert")
126
- return check("assert")(false)(AssertProgrammer.write);
127
- else if (category === "is") return check("is")(false)(IsProgrammer.write);
128
- // STRICT
129
- else if (category === "validateEquals")
130
- return check("validate")(true)(ValidateProgrammer.write);
131
- else if (category === "equals")
132
- return check("is")(true)(IsProgrammer.write);
133
- else if (category === "assertEquals")
134
- return check("assert")(true)(AssertProgrammer.write);
135
- // CLONE
136
- else if (category === "assertClone")
137
- return misc("assert")(MiscAssertCloneProgrammer.write);
138
- else if (category === "validateClone")
139
- return misc("validate")(MiscValidateCloneProgrammer.write);
140
- // PRUNE
141
- else if (category === "assertPrune")
142
- return misc("assert")(MiscAssertPruneProgrammer.write);
143
- else if (category === "validatePrune")
144
- return misc("validate")(MiscValidatePruneProgrammer.write);
145
- // DEFAULT
146
- return check("validate")(false)(ValidateProgrammer.write);
147
- };
148
- }
@@ -1,118 +0,0 @@
1
- import {
2
- HttpAssertFormDataProgrammer,
3
- HttpFormDataProgrammer,
4
- HttpIsFormDataProgrammer,
5
- HttpValidateFormDataProgrammer,
6
- ITypiaContext,
7
- LiteralFactory,
8
- MetadataCollection,
9
- MetadataFactory,
10
- MetadataSchema,
11
- TransformerError,
12
- } from "@typia/core";
13
- import ts from "typescript";
14
-
15
- import { INestiaTransformContext } from "../options/INestiaTransformProject";
16
- import { IRequestFormDataProps } from "../options/IRequestFormDataProps";
17
-
18
- export namespace TypedFormDataBodyProgrammer {
19
- export const generate = (props: {
20
- context: INestiaTransformContext;
21
- modulo: ts.LeftHandSideExpression;
22
- type: ts.Type;
23
- }): ts.ObjectLiteralExpression => {
24
- // VALIDATE TYPE
25
- const storage: MetadataCollection = new MetadataCollection();
26
- const result = MetadataFactory.analyze({
27
- checker: props.context.checker,
28
- transformer: props.context.transformer,
29
- options: {
30
- escape: false,
31
- constant: true,
32
- absorb: true,
33
- validate: HttpFormDataProgrammer.validate,
34
- },
35
- type: props.type,
36
- components: storage,
37
- });
38
- if (result.success === false)
39
- throw TransformerError.from({
40
- code: "nestia.core.TypedFormData.Body",
41
- errors: result.errors,
42
- });
43
-
44
- const files: IRequestFormDataProps.IFile[] =
45
- result.data.objects[0]!.type.properties.filter(
46
- (p) =>
47
- isFile(p.value) || p.value.arrays.some((a) => isFile(a.type.value)),
48
- ).map((p) => ({
49
- name: p.key.constants[0]!.values[0]!.value as string,
50
- limit: !!p.value.natives.length ? 1 : null,
51
- }));
52
-
53
- // GENERATE VALIDATION PLAN
54
- const parameter =
55
- (key: IRequestFormDataProps<any>["validator"]["type"]) =>
56
- (
57
- programmer: (next: {
58
- context: ITypiaContext;
59
- modulo: ts.LeftHandSideExpression;
60
- type: ts.Type;
61
- name: string | undefined;
62
- }) => ts.Expression,
63
- ) =>
64
- ts.factory.createObjectLiteralExpression(
65
- [
66
- ts.factory.createPropertyAssignment(
67
- ts.factory.createIdentifier("files"),
68
- LiteralFactory.write(files),
69
- ),
70
- ts.factory.createPropertyAssignment(
71
- ts.factory.createIdentifier("validator"),
72
- ts.factory.createObjectLiteralExpression(
73
- [
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
- true,
96
- ),
97
- ),
98
- ],
99
- true,
100
- );
101
-
102
- // RETURNS
103
- const category = props.context.options.validate;
104
- if (category === "is" || category === "equals")
105
- return parameter("is")(HttpIsFormDataProgrammer.write);
106
- else if (
107
- category === "validate" ||
108
- category === "validateEquals" ||
109
- category === "validateClone" ||
110
- category === "validatePrune"
111
- )
112
- return parameter("validate")(HttpValidateFormDataProgrammer.write);
113
- return parameter("assert")(HttpAssertFormDataProgrammer.write);
114
- };
115
- }
116
-
117
- const isFile = (meta: MetadataSchema) =>
118
- meta.natives.some(({ name }) => name === "File" || name === "Blob");
@@ -1,65 +0,0 @@
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 +0,0 @@
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,113 +0,0 @@
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 | true =
29
- props.context.options.llm;
30
- const result: ValidationPipe<MetadataSchema, MetadataFactory.IError> =
31
- MetadataFactory.analyze({
32
- checker: props.context.checker,
33
- transformer: props.context.transformer,
34
- options: {
35
- escape: false,
36
- constant: true,
37
- absorb: true,
38
- validate: (next) => {
39
- const errors: string[] = HttpQueryProgrammer.validate({
40
- metadata: next.metadata,
41
- explore: next.explore,
42
- allowOptional: true,
43
- });
44
- errors.push(
45
- ...LlmSchemaProgrammer.validate({
46
- config: {
47
- strict: llm === true ? false : (llm.strict ?? false),
48
- },
49
- metadata: next.metadata,
50
- explore: next.explore,
51
- }),
52
- );
53
- return errors;
54
- },
55
- },
56
- components: new MetadataCollection(),
57
- type: props.type,
58
- });
59
- if (result.success === false)
60
- throw TransformerError.from({
61
- code: props.modulo.getText(),
62
- errors: result.errors,
63
- });
64
- }
65
-
66
- // GENERATE VALIDATION PLAN
67
- const parameter =
68
- (key: IRequestQueryValidator<any>["type"]) =>
69
- (
70
- programmer: (next: {
71
- context: ITypiaContext;
72
- modulo: ts.LeftHandSideExpression;
73
- type: ts.Type;
74
- name: string | undefined;
75
- }) => ts.Expression,
76
- ) =>
77
- ts.factory.createObjectLiteralExpression([
78
- ts.factory.createPropertyAssignment(
79
- ts.factory.createIdentifier("type"),
80
- ts.factory.createStringLiteral(key),
81
- ),
82
- ts.factory.createPropertyAssignment(
83
- ts.factory.createIdentifier(key),
84
- programmer({
85
- context: {
86
- ...props.context,
87
- options: {
88
- numeric: false,
89
- finite: false,
90
- functional: false,
91
- },
92
- },
93
- modulo: props.modulo,
94
- type: props.type,
95
- name: undefined,
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
- }
@@ -1,115 +0,0 @@
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 | true =
29
- props.context.options.llm;
30
- const result: ValidationPipe<MetadataSchema, MetadataFactory.IError> =
31
- MetadataFactory.analyze({
32
- checker: props.context.checker,
33
- transformer: props.context.transformer,
34
- options: {
35
- escape: false,
36
- constant: true,
37
- absorb: true,
38
- validate: (next) => {
39
- const errors: string[] = HttpQueryProgrammer.validate({
40
- metadata: next.metadata,
41
- explore: next.explore,
42
- allowOptional: true,
43
- });
44
- errors.push(
45
- ...LlmSchemaProgrammer.validate({
46
- config: {
47
- strict: llm === true ? false : (llm.strict ?? false),
48
- },
49
- metadata: next.metadata,
50
- explore: next.explore,
51
- }),
52
- );
53
- return errors;
54
- },
55
- },
56
- components: new MetadataCollection(),
57
- type: props.type,
58
- });
59
- if (result.success === false)
60
- throw TransformerError.from({
61
- code: "@nestia.core.TypedQuery",
62
- errors: result.errors,
63
- });
64
- }
65
-
66
- // GENERATE VALIDATION PLAN
67
- const parameter =
68
- (key: IRequestQueryValidator<any>["type"]) =>
69
- (
70
- programmer: (next: {
71
- context: ITypiaContext;
72
- modulo: ts.LeftHandSideExpression;
73
- type: ts.Type;
74
- name: string | undefined;
75
- allowOptional: boolean;
76
- }) => ts.Expression,
77
- ) =>
78
- ts.factory.createObjectLiteralExpression([
79
- ts.factory.createPropertyAssignment(
80
- ts.factory.createIdentifier("type"),
81
- ts.factory.createStringLiteral(key),
82
- ),
83
- ts.factory.createPropertyAssignment(
84
- ts.factory.createIdentifier(key),
85
- programmer({
86
- context: {
87
- ...props.context,
88
- options: {
89
- numeric: false,
90
- finite: false,
91
- functional: false,
92
- },
93
- },
94
- modulo: props.modulo,
95
- type: props.type,
96
- name: undefined,
97
- allowOptional: true,
98
- }),
99
- ),
100
- ]);
101
-
102
- // RETURNS
103
- const category = props.context.options.validate;
104
- if (category === "is" || category === "equals")
105
- return parameter("is")(HttpIsQueryProgrammer.write);
106
- else if (
107
- category === "validate" ||
108
- category === "validateEquals" ||
109
- category === "validateClone" ||
110
- category === "validatePrune"
111
- )
112
- return parameter("validate")(HttpValidateQueryProgrammer.write);
113
- return parameter("assert")(HttpAssertQueryProgrammer.write);
114
- };
115
- }
@@ -1,107 +0,0 @@
1
- import {
2
- HttpQueryProgrammer,
3
- ITypiaContext,
4
- LlmParametersProgrammer,
5
- MetadataCollection,
6
- MetadataFactory,
7
- MetadataSchema,
8
- TransformerError,
9
- } from "@typia/core";
10
- import { ValidationPipe } from "@typia/interface";
11
- import ts from "typescript";
12
-
13
- import { INestiaTransformOptions } from "../options/INestiaTransformOptions";
14
- import { INestiaTransformContext } from "../options/INestiaTransformProject";
15
- import { HttpAssertQuerifyProgrammer } from "./http/HttpAssertQuerifyProgrammer";
16
- import { HttpIsQuerifyProgrammer } from "./http/HttpIsQuerifyProgrammer";
17
- import { HttpQuerifyProgrammer } from "./http/HttpQuerifyProgrammer";
18
- import { HttpValidateQuerifyProgrammer } from "./http/HttpValidateQuerifyProgrammer";
19
-
20
- export namespace TypedQueryRouteProgrammer {
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 | true =
29
- props.context.options.llm;
30
- const result: ValidationPipe<MetadataSchema, MetadataFactory.IError> =
31
- MetadataFactory.analyze({
32
- checker: props.context.checker,
33
- transformer: props.context.transformer,
34
- options: {
35
- escape: false,
36
- constant: true,
37
- absorb: true,
38
- validate: (next) => {
39
- const errors: string[] = HttpQueryProgrammer.validate({
40
- metadata: next.metadata,
41
- explore: next.explore,
42
- allowOptional: true,
43
- });
44
- if (next.metadata.size() !== 0)
45
- errors.push(
46
- ...LlmParametersProgrammer.validate({
47
- config: {
48
- strict: llm === true ? false : (llm.strict ?? false),
49
- },
50
- metadata: next.metadata,
51
- explore: next.explore,
52
- }),
53
- );
54
- return errors;
55
- },
56
- },
57
- components: new MetadataCollection(),
58
- type: props.type,
59
- });
60
- if (result.success === false)
61
- throw TransformerError.from({
62
- code: props.modulo.getText(),
63
- errors: result.errors,
64
- });
65
- }
66
-
67
- // GENERATE STRINGIFY PLAN
68
- const parameter = (
69
- key: string,
70
- programmer: (next: {
71
- context: ITypiaContext;
72
- modulo: ts.LeftHandSideExpression;
73
- type: ts.Type;
74
- }) => ts.ArrowFunction,
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: {}, // use default option
87
- },
88
- modulo: props.modulo,
89
- type: props.type,
90
- }),
91
- ),
92
- ]);
93
-
94
- // RETURNS
95
- if (props.context.options.stringify === "is")
96
- return parameter("is", HttpIsQuerifyProgrammer.write);
97
- else if (props.context.options.stringify === "validate")
98
- return parameter("validate", HttpValidateQuerifyProgrammer.write);
99
- else if (props.context.options.stringify === "stringify")
100
- return parameter("stringify", HttpQuerifyProgrammer.write);
101
- else if (props.context.options.stringify === null)
102
- return ts.factory.createNull();
103
-
104
- // ASSERT IS DEFAULT
105
- return parameter("assert", HttpAssertQuerifyProgrammer.write);
106
- };
107
- }