@nestia/core 10.0.1 → 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,75 +1,77 @@
1
- import ts from "typescript";
2
- import { IdentifierFactory } from "typia/lib/factories/IdentifierFactory";
3
- import { StatementFactory } from "typia/lib/factories/StatementFactory";
4
- import { IsProgrammer } from "typia/lib/programmers/IsProgrammer";
5
- import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
6
-
7
- import { HttpQuerifyProgrammer } from "./HttpQuerifyProgrammer";
8
-
9
- export namespace HttpIsQuerifyProgrammer {
10
- export const write = (props: {
11
- context: ITypiaContext;
12
- modulo: ts.LeftHandSideExpression;
13
- type: ts.Type;
14
- }): ts.ArrowFunction =>
15
- ts.factory.createArrowFunction(
16
- undefined,
17
- undefined,
18
- [IdentifierFactory.parameter("input")],
19
- undefined,
20
- undefined,
21
- ts.factory.createBlock([
22
- StatementFactory.constant({
23
- name: "is",
24
- value: IsProgrammer.write({
25
- config: {
26
- equals: false,
27
- },
28
- context: {
29
- ...props.context,
30
- options: {
31
- ...props.context.options,
32
- functional: false,
33
- numeric: false,
34
- },
35
- },
36
- modulo: props.modulo,
37
- type: props.type,
38
- name: undefined,
39
- }),
40
- }),
41
- StatementFactory.constant({
42
- name: "stringify",
43
- value: HttpQuerifyProgrammer.write({
44
- context: {
45
- ...props.context,
46
- options: {
47
- ...props.context.options,
48
- functional: false,
49
- numeric: false,
50
- },
51
- },
52
- modulo: props.modulo,
53
- type: props.type,
54
- }),
55
- }),
56
- ts.factory.createReturnStatement(
57
- ts.factory.createConditionalExpression(
58
- ts.factory.createCallExpression(
59
- ts.factory.createIdentifier("is"),
60
- undefined,
61
- [ts.factory.createIdentifier("input")],
62
- ),
63
- undefined,
64
- ts.factory.createCallExpression(
65
- ts.factory.createIdentifier("stringify"),
66
- undefined,
67
- [ts.factory.createIdentifier("input")],
68
- ),
69
- undefined,
70
- ts.factory.createNull(),
71
- ),
72
- ),
73
- ]),
74
- );
75
- }
1
+ import {
2
+ ITypiaContext,
3
+ IdentifierFactory,
4
+ IsProgrammer,
5
+ StatementFactory,
6
+ } from "@typia/core";
7
+ import ts from "typescript";
8
+
9
+ import { HttpQuerifyProgrammer } from "./HttpQuerifyProgrammer";
10
+
11
+ export namespace HttpIsQuerifyProgrammer {
12
+ export const write = (props: {
13
+ context: ITypiaContext;
14
+ modulo: ts.LeftHandSideExpression;
15
+ type: ts.Type;
16
+ }): ts.ArrowFunction =>
17
+ ts.factory.createArrowFunction(
18
+ undefined,
19
+ undefined,
20
+ [IdentifierFactory.parameter("input")],
21
+ undefined,
22
+ undefined,
23
+ ts.factory.createBlock([
24
+ StatementFactory.constant({
25
+ name: "is",
26
+ value: IsProgrammer.write({
27
+ config: {
28
+ equals: false,
29
+ },
30
+ context: {
31
+ ...props.context,
32
+ options: {
33
+ ...props.context.options,
34
+ functional: false,
35
+ numeric: false,
36
+ },
37
+ },
38
+ modulo: props.modulo,
39
+ type: props.type,
40
+ name: undefined,
41
+ }),
42
+ }),
43
+ StatementFactory.constant({
44
+ name: "stringify",
45
+ value: HttpQuerifyProgrammer.write({
46
+ context: {
47
+ ...props.context,
48
+ options: {
49
+ ...props.context.options,
50
+ functional: false,
51
+ numeric: false,
52
+ },
53
+ },
54
+ modulo: props.modulo,
55
+ type: props.type,
56
+ }),
57
+ }),
58
+ ts.factory.createReturnStatement(
59
+ ts.factory.createConditionalExpression(
60
+ ts.factory.createCallExpression(
61
+ ts.factory.createIdentifier("is"),
62
+ undefined,
63
+ [ts.factory.createIdentifier("input")],
64
+ ),
65
+ undefined,
66
+ ts.factory.createCallExpression(
67
+ ts.factory.createIdentifier("stringify"),
68
+ undefined,
69
+ [ts.factory.createIdentifier("input")],
70
+ ),
71
+ undefined,
72
+ ts.factory.createNull(),
73
+ ),
74
+ ),
75
+ ]),
76
+ );
77
+ }
@@ -1,108 +1,110 @@
1
- import ts from "typescript";
2
- import { IdentifierFactory } from "typia/lib/factories/IdentifierFactory";
3
- import { MetadataCollection } from "typia/lib/factories/MetadataCollection";
4
- import { MetadataFactory } from "typia/lib/factories/MetadataFactory";
5
- import { StatementFactory } from "typia/lib/factories/StatementFactory";
6
- import { FunctionProgrammer } from "typia/lib/programmers/helpers/FunctionProgrammer";
7
- import { HttpQueryProgrammer } from "typia/lib/programmers/http/HttpQueryProgrammer";
8
- import { Metadata } from "typia/lib/schemas/metadata/Metadata";
9
- import { MetadataObject } from "typia/lib/schemas/metadata/MetadataObject";
10
- import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
11
- import { TransformerError } from "typia/lib/transformers/TransformerError";
12
-
13
- export namespace HttpQuerifyProgrammer {
14
- export const write = (props: {
15
- context: ITypiaContext;
16
- modulo: ts.LeftHandSideExpression;
17
- type: ts.Type;
18
- }): ts.ArrowFunction => {
19
- // GET OBJECT TYPE
20
- const functor: FunctionProgrammer = new FunctionProgrammer(
21
- props.modulo.getText(),
22
- );
23
- const collection: MetadataCollection = new MetadataCollection();
24
- const result = MetadataFactory.analyze({
25
- checker: props.context.checker,
26
- transformer: props.context.transformer,
27
- options: {
28
- escape: false,
29
- constant: true,
30
- absorb: true,
31
- validate: HttpQueryProgrammer.validate,
32
- },
33
- type: props.type,
34
- collection,
35
- });
36
- if (result.success === false)
37
- throw TransformerError.from({
38
- code: functor.method,
39
- errors: result.errors,
40
- });
41
-
42
- const object: MetadataObject = result.data.objects[0]!;
43
- return ts.factory.createArrowFunction(
44
- undefined,
45
- undefined,
46
- [IdentifierFactory.parameter("input")],
47
- undefined,
48
- undefined,
49
- ts.factory.createBlock(
50
- [
51
- ...functor.declare(),
52
- StatementFactory.constant({
53
- name: "output",
54
- value: ts.factory.createNewExpression(
55
- ts.factory.createIdentifier("URLSearchParams"),
56
- undefined,
57
- [],
58
- ),
59
- }),
60
- ...object.type.properties.map((p) =>
61
- ts.factory.createExpressionStatement(
62
- decode(p.key.constants[0]!.values[0].value as string)(p.value),
63
- ),
64
- ),
65
- ts.factory.createReturnStatement(
66
- ts.factory.createIdentifier("output"),
67
- ),
68
- ],
69
- true,
70
- ),
71
- );
72
- };
73
-
74
- const decode =
75
- (key: string) =>
76
- (value: Metadata): ts.CallExpression =>
77
- !!value.arrays.length
78
- ? ts.factory.createCallExpression(
79
- IdentifierFactory.access(
80
- IdentifierFactory.access(
81
- ts.factory.createIdentifier("input"),
82
- key,
83
- ),
84
- "forEach",
85
- ),
86
- undefined,
87
- [
88
- ts.factory.createArrowFunction(
89
- undefined,
90
- undefined,
91
- [IdentifierFactory.parameter("elem")],
92
- undefined,
93
- undefined,
94
- append(key)(ts.factory.createIdentifier("elem")),
95
- ),
96
- ],
97
- )
98
- : append(key)(
99
- IdentifierFactory.access(ts.factory.createIdentifier("input"), key),
100
- );
101
-
102
- const append = (key: string) => (elem: ts.Expression) =>
103
- ts.factory.createCallExpression(
104
- IdentifierFactory.access(ts.factory.createIdentifier("output"), "append"),
105
- undefined,
106
- [ts.factory.createStringLiteral(key), elem],
107
- );
108
- }
1
+ import {
2
+ FunctionProgrammer,
3
+ HttpQueryProgrammer,
4
+ ITypiaContext,
5
+ IdentifierFactory,
6
+ MetadataCollection,
7
+ MetadataFactory,
8
+ MetadataObject,
9
+ MetadataSchema,
10
+ StatementFactory,
11
+ TransformerError,
12
+ } from "@typia/core";
13
+ import ts from "typescript";
14
+
15
+ export namespace HttpQuerifyProgrammer {
16
+ export const write = (props: {
17
+ context: ITypiaContext;
18
+ modulo: ts.LeftHandSideExpression;
19
+ type: ts.Type;
20
+ }): ts.ArrowFunction => {
21
+ // GET OBJECT TYPE
22
+ const functor: FunctionProgrammer = new FunctionProgrammer(
23
+ props.modulo.getText(),
24
+ );
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: HttpQueryProgrammer.validate,
34
+ },
35
+ type: props.type,
36
+ components: storage,
37
+ });
38
+ if (result.success === false)
39
+ throw TransformerError.from({
40
+ code: functor.method,
41
+ errors: result.errors,
42
+ });
43
+
44
+ const object: MetadataObject = result.data.objects[0]!;
45
+ return ts.factory.createArrowFunction(
46
+ undefined,
47
+ undefined,
48
+ [IdentifierFactory.parameter("input")],
49
+ undefined,
50
+ undefined,
51
+ ts.factory.createBlock(
52
+ [
53
+ ...functor.declare(),
54
+ StatementFactory.constant({
55
+ name: "output",
56
+ value: ts.factory.createNewExpression(
57
+ ts.factory.createIdentifier("URLSearchParams"),
58
+ undefined,
59
+ [],
60
+ ),
61
+ }),
62
+ ...object.type.properties.map((p) =>
63
+ ts.factory.createExpressionStatement(
64
+ decode(p.key.constants[0]!.values[0]!.value as string)(p.value),
65
+ ),
66
+ ),
67
+ ts.factory.createReturnStatement(
68
+ ts.factory.createIdentifier("output"),
69
+ ),
70
+ ],
71
+ true,
72
+ ),
73
+ );
74
+ };
75
+
76
+ const decode =
77
+ (key: string) =>
78
+ (value: MetadataSchema): ts.CallExpression =>
79
+ !!value.arrays.length
80
+ ? ts.factory.createCallExpression(
81
+ IdentifierFactory.access(
82
+ IdentifierFactory.access(
83
+ ts.factory.createIdentifier("input"),
84
+ key,
85
+ ),
86
+ "forEach",
87
+ ),
88
+ undefined,
89
+ [
90
+ ts.factory.createArrowFunction(
91
+ undefined,
92
+ undefined,
93
+ [IdentifierFactory.parameter("elem")],
94
+ undefined,
95
+ undefined,
96
+ append(key)(ts.factory.createIdentifier("elem")),
97
+ ),
98
+ ],
99
+ )
100
+ : append(key)(
101
+ IdentifierFactory.access(ts.factory.createIdentifier("input"), key),
102
+ );
103
+
104
+ const append = (key: string) => (elem: ts.Expression) =>
105
+ ts.factory.createCallExpression(
106
+ IdentifierFactory.access(ts.factory.createIdentifier("output"), "append"),
107
+ undefined,
108
+ [ts.factory.createStringLiteral(key), elem],
109
+ );
110
+ }
@@ -1,76 +1,78 @@
1
- import ts from "typescript";
2
- import { IdentifierFactory } from "typia/lib/factories/IdentifierFactory";
3
- import { StatementFactory } from "typia/lib/factories/StatementFactory";
4
- import { ValidateProgrammer } from "typia/lib/programmers/ValidateProgrammer";
5
- import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
6
-
7
- import { HttpQuerifyProgrammer } from "./HttpQuerifyProgrammer";
8
-
9
- export namespace HttpValidateQuerifyProgrammer {
10
- export const write = (props: {
11
- context: ITypiaContext;
12
- modulo: ts.LeftHandSideExpression;
13
- type: ts.Type;
14
- }): ts.ArrowFunction =>
15
- ts.factory.createArrowFunction(
16
- undefined,
17
- undefined,
18
- [IdentifierFactory.parameter("input")],
19
- undefined,
20
- undefined,
21
- ts.factory.createBlock([
22
- StatementFactory.constant({
23
- name: "validate",
24
- value: ValidateProgrammer.write({
25
- config: {
26
- equals: false,
27
- },
28
- context: {
29
- ...props.context,
30
- options: {
31
- ...props.context.options,
32
- functional: false,
33
- numeric: true,
34
- },
35
- },
36
- modulo: props.modulo,
37
- type: props.type,
38
- name: undefined,
39
- }),
40
- }),
41
- StatementFactory.constant({
42
- name: "query",
43
- value: HttpQuerifyProgrammer.write({
44
- context: {
45
- ...props.context,
46
- options: {
47
- ...props.context.options,
48
- functional: false,
49
- numeric: false,
50
- },
51
- },
52
- modulo: props.modulo,
53
- type: props.type,
54
- }),
55
- }),
56
- StatementFactory.constant({
57
- name: "output",
58
- value: ts.factory.createCallExpression(
59
- ts.factory.createIdentifier("query"),
60
- undefined,
61
- [ts.factory.createIdentifier("input")],
62
- ),
63
- }),
64
- ts.factory.createReturnStatement(
65
- ts.factory.createAsExpression(
66
- ts.factory.createCallExpression(
67
- ts.factory.createIdentifier("validate"),
68
- undefined,
69
- [ts.factory.createIdentifier("output")],
70
- ),
71
- ts.factory.createTypeReferenceNode("any"),
72
- ),
73
- ),
74
- ]),
75
- );
76
- }
1
+ import {
2
+ ITypiaContext,
3
+ IdentifierFactory,
4
+ StatementFactory,
5
+ ValidateProgrammer,
6
+ } from "@typia/core";
7
+ import ts from "typescript";
8
+
9
+ import { HttpQuerifyProgrammer } from "./HttpQuerifyProgrammer";
10
+
11
+ export namespace HttpValidateQuerifyProgrammer {
12
+ export const write = (props: {
13
+ context: ITypiaContext;
14
+ modulo: ts.LeftHandSideExpression;
15
+ type: ts.Type;
16
+ }): ts.ArrowFunction =>
17
+ ts.factory.createArrowFunction(
18
+ undefined,
19
+ undefined,
20
+ [IdentifierFactory.parameter("input")],
21
+ undefined,
22
+ undefined,
23
+ ts.factory.createBlock([
24
+ StatementFactory.constant({
25
+ name: "validate",
26
+ value: ValidateProgrammer.write({
27
+ config: {
28
+ equals: false,
29
+ },
30
+ context: {
31
+ ...props.context,
32
+ options: {
33
+ ...props.context.options,
34
+ functional: false,
35
+ numeric: true,
36
+ },
37
+ },
38
+ modulo: props.modulo,
39
+ type: props.type,
40
+ name: undefined,
41
+ }),
42
+ }),
43
+ StatementFactory.constant({
44
+ name: "query",
45
+ value: HttpQuerifyProgrammer.write({
46
+ context: {
47
+ ...props.context,
48
+ options: {
49
+ ...props.context.options,
50
+ functional: false,
51
+ numeric: false,
52
+ },
53
+ },
54
+ modulo: props.modulo,
55
+ type: props.type,
56
+ }),
57
+ }),
58
+ StatementFactory.constant({
59
+ name: "output",
60
+ value: ts.factory.createCallExpression(
61
+ ts.factory.createIdentifier("query"),
62
+ undefined,
63
+ [ts.factory.createIdentifier("input")],
64
+ ),
65
+ }),
66
+ ts.factory.createReturnStatement(
67
+ ts.factory.createAsExpression(
68
+ ts.factory.createCallExpression(
69
+ ts.factory.createIdentifier("validate"),
70
+ undefined,
71
+ [ts.factory.createIdentifier("output")],
72
+ ),
73
+ ts.factory.createTypeReferenceNode("any"),
74
+ ),
75
+ ),
76
+ ]),
77
+ );
78
+ }
@@ -1,21 +1,21 @@
1
- import { Metadata } from "typia/lib/schemas/metadata/Metadata";
2
-
3
- export namespace CoreMetadataUtil {
4
- export const atomics = (
5
- meta: Metadata,
6
- ): Set<"boolean" | "bigint" | "number" | "string"> =>
7
- new Set([
8
- ...meta.atomics.map((a) => a.type),
9
- ...meta.constants.map((c) => c.type),
10
- ...(meta.templates.length ? (["string"] as const) : []),
11
- ]);
12
-
13
- export const isUnion = (meta: Metadata): boolean =>
14
- atomics(meta).size +
15
- meta.arrays.length +
16
- meta.tuples.length +
17
- meta.natives.length +
18
- meta.maps.length +
19
- meta.objects.length >
20
- 1;
21
- }
1
+ import { MetadataSchema } from "@typia/core";
2
+
3
+ export namespace CoreMetadataUtil {
4
+ export const atomics = (
5
+ meta: MetadataSchema,
6
+ ): Set<"boolean" | "bigint" | "number" | "string"> =>
7
+ new Set([
8
+ ...meta.atomics.map((a) => a.type),
9
+ ...meta.constants.map((c) => c.type),
10
+ ...(meta.templates.length ? (["string"] as const) : []),
11
+ ]);
12
+
13
+ export const isUnion = (meta: MetadataSchema): boolean =>
14
+ atomics(meta).size +
15
+ meta.arrays.length +
16
+ meta.tuples.length +
17
+ meta.natives.length +
18
+ meta.maps.length +
19
+ meta.objects.length >
20
+ 1;
21
+ }
package/src/transform.ts CHANGED
@@ -1,35 +1,35 @@
1
- import ts from "typescript";
2
- import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
3
-
4
- import { INestiaTransformOptions } from "./options/INestiaTransformOptions";
5
- import { FileTransformer } from "./transformers/FileTransformer";
6
-
7
- export const transform = (
8
- program: ts.Program,
9
- options: INestiaTransformOptions | undefined,
10
- extras: ITypiaContext["extras"],
11
- ): ts.TransformerFactory<ts.SourceFile> => {
12
- const compilerOptions: ts.CompilerOptions = program.getCompilerOptions();
13
- const strict: boolean =
14
- compilerOptions.strictNullChecks !== undefined
15
- ? !!compilerOptions.strictNullChecks
16
- : !!compilerOptions.strict;
17
- if (strict === false)
18
- extras.addDiagnostic({
19
- category: ts.DiagnosticCategory.Error,
20
- code: "(@nestia/core)" as any,
21
- file: undefined,
22
- start: undefined,
23
- length: undefined,
24
- messageText: "strict mode is required.",
25
- });
26
- return FileTransformer.transform({
27
- program,
28
- compilerOptions,
29
- checker: program.getTypeChecker(),
30
- printer: ts.createPrinter(),
31
- options: options ?? {},
32
- extras,
33
- });
34
- };
35
- export default transform;
1
+ import { ITypiaContext } from "@typia/core";
2
+ import ts from "typescript";
3
+
4
+ import { INestiaTransformOptions } from "./options/INestiaTransformOptions";
5
+ import { FileTransformer } from "./transformers/FileTransformer";
6
+
7
+ export const transform = (
8
+ program: ts.Program,
9
+ options: INestiaTransformOptions | undefined,
10
+ extras: ITypiaContext["extras"],
11
+ ): ts.TransformerFactory<ts.SourceFile> => {
12
+ const compilerOptions: ts.CompilerOptions = program.getCompilerOptions();
13
+ const strict: boolean =
14
+ compilerOptions.strictNullChecks !== undefined
15
+ ? !!compilerOptions.strictNullChecks
16
+ : !!compilerOptions.strict;
17
+ if (strict === false)
18
+ extras.addDiagnostic({
19
+ category: ts.DiagnosticCategory.Error,
20
+ code: "(@nestia/core)" as any,
21
+ file: undefined,
22
+ start: undefined,
23
+ length: undefined,
24
+ messageText: "strict mode is required.",
25
+ });
26
+ return FileTransformer.transform({
27
+ program,
28
+ compilerOptions,
29
+ checker: program.getTypeChecker(),
30
+ printer: ts.createPrinter(),
31
+ options: options ?? {},
32
+ extras,
33
+ });
34
+ };
35
+ export default transform;