@nestia/core 11.2.1 → 12.0.0-dev.20260521.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 (178) 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 +10 -5
  46. package/lib/transform.js +64 -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/main.go +11 -0
  54. package/native/go.mod +32 -0
  55. package/native/go.sum +54 -0
  56. package/native/plugin/plan.go +102 -0
  57. package/native/transform/ast.go +32 -0
  58. package/native/transform/build.go +413 -0
  59. package/native/transform/cleanup.go +408 -0
  60. package/native/transform/cleanup_test.go +76 -0
  61. package/native/transform/commonjs_import_alias_test.go +49 -0
  62. package/native/transform/core_dispatch_test.go +127 -0
  63. package/native/transform/core_querify.go +227 -0
  64. package/native/transform/core_transform.go +1713 -0
  65. package/native/transform/core_websocket.go +115 -0
  66. package/native/transform/exports.go +13 -0
  67. package/native/transform/path_rewrite.go +285 -0
  68. package/native/transform/path_rewrite_test.go +243 -0
  69. package/native/transform/printer.go +244 -0
  70. package/native/transform/rewrite.go +662 -0
  71. package/native/transform/rewrite_test.go +118 -0
  72. package/native/transform/rewrite_unique_base_test.go +48 -0
  73. package/native/transform/run.go +72 -0
  74. package/native/transform/transform.go +376 -0
  75. package/native/transform/typia_fast.go +326 -0
  76. package/native/transform/typia_replacement.go +24 -0
  77. package/native/transform.cjs +43 -0
  78. package/package.json +28 -22
  79. package/src/decorators/NoTransformConfigurationError.ts +5 -2
  80. package/src/decorators/internal/load_controller.ts +50 -19
  81. package/src/decorators/internal/validate_request_query.ts +21 -2
  82. package/src/transform.ts +101 -35
  83. package/lib/decorators/internal/NoTransformConfigureError.d.ts +0 -1
  84. package/lib/decorators/internal/NoTransformConfigureError.js +0 -7
  85. package/lib/decorators/internal/NoTransformConfigureError.js.map +0 -1
  86. package/lib/options/INestiaTransformOptions.d.ts +0 -13
  87. package/lib/options/INestiaTransformOptions.js +0 -3
  88. package/lib/options/INestiaTransformOptions.js.map +0 -1
  89. package/lib/options/INestiaTransformProject.d.ts +0 -5
  90. package/lib/options/INestiaTransformProject.js +0 -3
  91. package/lib/options/INestiaTransformProject.js.map +0 -1
  92. package/lib/programmers/PlainBodyProgrammer.d.ts +0 -9
  93. package/lib/programmers/PlainBodyProgrammer.js +0 -58
  94. package/lib/programmers/PlainBodyProgrammer.js.map +0 -1
  95. package/lib/programmers/TypedBodyProgrammer.d.ts +0 -9
  96. package/lib/programmers/TypedBodyProgrammer.js +0 -94
  97. package/lib/programmers/TypedBodyProgrammer.js.map +0 -1
  98. package/lib/programmers/TypedFormDataBodyProgrammer.d.ts +0 -9
  99. package/lib/programmers/TypedFormDataBodyProgrammer.js +0 -65
  100. package/lib/programmers/TypedFormDataBodyProgrammer.js.map +0 -1
  101. package/lib/programmers/TypedHeadersProgrammer.d.ts +0 -9
  102. package/lib/programmers/TypedHeadersProgrammer.js +0 -38
  103. package/lib/programmers/TypedHeadersProgrammer.js.map +0 -1
  104. package/lib/programmers/TypedParamProgrammer.d.ts +0 -10
  105. package/lib/programmers/TypedParamProgrammer.js +0 -32
  106. package/lib/programmers/TypedParamProgrammer.js.map +0 -1
  107. package/lib/programmers/TypedQueryBodyProgrammer.d.ts +0 -9
  108. package/lib/programmers/TypedQueryBodyProgrammer.js +0 -74
  109. package/lib/programmers/TypedQueryBodyProgrammer.js.map +0 -1
  110. package/lib/programmers/TypedQueryProgrammer.d.ts +0 -9
  111. package/lib/programmers/TypedQueryProgrammer.js +0 -75
  112. package/lib/programmers/TypedQueryProgrammer.js.map +0 -1
  113. package/lib/programmers/TypedQueryRouteProgrammer.d.ts +0 -9
  114. package/lib/programmers/TypedQueryRouteProgrammer.js +0 -75
  115. package/lib/programmers/TypedQueryRouteProgrammer.js.map +0 -1
  116. package/lib/programmers/TypedRouteProgrammer.d.ts +0 -9
  117. package/lib/programmers/TypedRouteProgrammer.js +0 -79
  118. package/lib/programmers/TypedRouteProgrammer.js.map +0 -1
  119. package/lib/programmers/http/HttpAssertQuerifyProgrammer.d.ts +0 -9
  120. package/lib/programmers/http/HttpAssertQuerifyProgrammer.js +0 -39
  121. package/lib/programmers/http/HttpAssertQuerifyProgrammer.js.map +0 -1
  122. package/lib/programmers/http/HttpIsQuerifyProgrammer.d.ts +0 -9
  123. package/lib/programmers/http/HttpIsQuerifyProgrammer.js +0 -36
  124. package/lib/programmers/http/HttpIsQuerifyProgrammer.js.map +0 -1
  125. package/lib/programmers/http/HttpQuerifyProgrammer.d.ts +0 -9
  126. package/lib/programmers/http/HttpQuerifyProgrammer.js +0 -50
  127. package/lib/programmers/http/HttpQuerifyProgrammer.js.map +0 -1
  128. package/lib/programmers/http/HttpValidateQuerifyProgrammer.d.ts +0 -9
  129. package/lib/programmers/http/HttpValidateQuerifyProgrammer.js +0 -40
  130. package/lib/programmers/http/HttpValidateQuerifyProgrammer.js.map +0 -1
  131. package/lib/programmers/internal/CoreMetadataUtil.d.ts +0 -5
  132. package/lib/programmers/internal/CoreMetadataUtil.js +0 -19
  133. package/lib/programmers/internal/CoreMetadataUtil.js.map +0 -1
  134. package/lib/transformers/FileTransformer.d.ts +0 -5
  135. package/lib/transformers/FileTransformer.js +0 -80
  136. package/lib/transformers/FileTransformer.js.map +0 -1
  137. package/lib/transformers/MethodTransformer.d.ts +0 -8
  138. package/lib/transformers/MethodTransformer.js +0 -58
  139. package/lib/transformers/MethodTransformer.js.map +0 -1
  140. package/lib/transformers/NodeTransformer.d.ts +0 -8
  141. package/lib/transformers/NodeTransformer.js +0 -24
  142. package/lib/transformers/NodeTransformer.js.map +0 -1
  143. package/lib/transformers/ParameterDecoratorTransformer.d.ts +0 -9
  144. package/lib/transformers/ParameterDecoratorTransformer.js +0 -104
  145. package/lib/transformers/ParameterDecoratorTransformer.js.map +0 -1
  146. package/lib/transformers/ParameterTransformer.d.ts +0 -8
  147. package/lib/transformers/ParameterTransformer.js +0 -37
  148. package/lib/transformers/ParameterTransformer.js.map +0 -1
  149. package/lib/transformers/TypedRouteTransformer.d.ts +0 -9
  150. package/lib/transformers/TypedRouteTransformer.js +0 -68
  151. package/lib/transformers/TypedRouteTransformer.js.map +0 -1
  152. package/lib/transformers/WebSocketRouteTransformer.d.ts +0 -9
  153. package/lib/transformers/WebSocketRouteTransformer.js +0 -72
  154. package/lib/transformers/WebSocketRouteTransformer.js.map +0 -1
  155. package/src/decorators/internal/NoTransformConfigureError.ts +0 -2
  156. package/src/options/INestiaTransformOptions.ts +0 -34
  157. package/src/options/INestiaTransformProject.ts +0 -10
  158. package/src/programmers/PlainBodyProgrammer.ts +0 -72
  159. package/src/programmers/TypedBodyProgrammer.ts +0 -148
  160. package/src/programmers/TypedFormDataBodyProgrammer.ts +0 -118
  161. package/src/programmers/TypedHeadersProgrammer.ts +0 -65
  162. package/src/programmers/TypedParamProgrammer.ts +0 -33
  163. package/src/programmers/TypedQueryBodyProgrammer.ts +0 -113
  164. package/src/programmers/TypedQueryProgrammer.ts +0 -115
  165. package/src/programmers/TypedQueryRouteProgrammer.ts +0 -107
  166. package/src/programmers/TypedRouteProgrammer.ts +0 -103
  167. package/src/programmers/http/HttpAssertQuerifyProgrammer.ts +0 -74
  168. package/src/programmers/http/HttpIsQuerifyProgrammer.ts +0 -77
  169. package/src/programmers/http/HttpQuerifyProgrammer.ts +0 -110
  170. package/src/programmers/http/HttpValidateQuerifyProgrammer.ts +0 -78
  171. package/src/programmers/internal/CoreMetadataUtil.ts +0 -21
  172. package/src/transformers/FileTransformer.ts +0 -109
  173. package/src/transformers/MethodTransformer.ts +0 -103
  174. package/src/transformers/NodeTransformer.ts +0 -23
  175. package/src/transformers/ParameterDecoratorTransformer.ts +0 -143
  176. package/src/transformers/ParameterTransformer.ts +0 -57
  177. package/src/transformers/TypedRouteTransformer.ts +0 -85
  178. package/src/transformers/WebSocketRouteTransformer.ts +0 -120
@@ -0,0 +1,244 @@
1
+ package transform
2
+
3
+ import (
4
+ shimast "github.com/microsoft/typescript-go/shim/ast"
5
+ shimprinter "github.com/microsoft/typescript-go/shim/printer"
6
+ )
7
+
8
+ const nestiaKindColonToken = shimast.KindQuestionToken + 1
9
+
10
+ func emitNestiaWithIdentifierSubstitutions(
11
+ node *shimast.Node,
12
+ sourceFile *shimast.SourceFile,
13
+ substitutions map[string]string,
14
+ ) string {
15
+ node = stripNestiaTypeSyntax(node)
16
+ node = rewriteNestiaIdentifiers(node, substitutions)
17
+ normalizeNestiaSyntheticTokens(node)
18
+ return emitNestiaNode(node, sourceFile)
19
+ }
20
+
21
+ func emitNestiaPreservingTypesWithIdentifierSubstitutions(
22
+ node *shimast.Node,
23
+ sourceFile *shimast.SourceFile,
24
+ substitutions map[string]string,
25
+ ) string {
26
+ node = rewriteNestiaIdentifiers(node, substitutions)
27
+ normalizeNestiaSyntheticTokens(node)
28
+ return emitNestiaNode(node, sourceFile)
29
+ }
30
+
31
+ func emitNestiaNode(node *shimast.Node, sourceFile *shimast.SourceFile) string {
32
+ return shimprinter.NewPrinter(shimprinter.PrinterOptions{
33
+ RemoveComments: true,
34
+ NewLine: 2,
35
+ }, shimprinter.PrintHandlers{}, nil).Emit(node, sourceFile)
36
+ }
37
+
38
+ func stripNestiaTypeSyntax(node *shimast.Node) *shimast.Node {
39
+ if node == nil {
40
+ return nil
41
+ }
42
+ factory := shimast.NewNodeFactory(shimast.NodeFactoryHooks{})
43
+ var visitor *shimast.NodeVisitor
44
+ visitor = shimast.NewNodeVisitor(func(current *shimast.Node) *shimast.Node {
45
+ if current == nil {
46
+ return nil
47
+ }
48
+ switch current.Kind {
49
+ case shimast.KindAsExpression, shimast.KindSatisfiesExpression, shimast.KindTypeAssertionExpression, shimast.KindNonNullExpression:
50
+ return visitor.VisitNode(current.Expression())
51
+ case shimast.KindVariableDeclaration:
52
+ decl := current.AsVariableDeclaration()
53
+ return factory.UpdateVariableDeclaration(
54
+ decl,
55
+ visitor.VisitNode(decl.Name()),
56
+ nil,
57
+ nil,
58
+ visitor.VisitNode(decl.Initializer),
59
+ )
60
+ case shimast.KindParameter:
61
+ parameter := current.AsParameterDeclaration()
62
+ return factory.UpdateParameterDeclaration(
63
+ parameter,
64
+ visitor.VisitModifiers(parameter.Modifiers()),
65
+ visitor.VisitNode(parameter.DotDotDotToken),
66
+ visitor.VisitNode(parameter.Name()),
67
+ nil,
68
+ nil,
69
+ visitor.VisitNode(parameter.Initializer),
70
+ )
71
+ case shimast.KindArrowFunction:
72
+ arrow := current.AsArrowFunction()
73
+ return factory.UpdateArrowFunction(
74
+ arrow,
75
+ visitor.VisitModifiers(arrow.Modifiers()),
76
+ nil,
77
+ visitor.VisitNodes(arrow.Parameters),
78
+ nil,
79
+ nil,
80
+ visitor.VisitNode(arrow.EqualsGreaterThanToken),
81
+ visitor.VisitNode(arrow.Body),
82
+ )
83
+ case shimast.KindCallExpression:
84
+ call := current.AsCallExpression()
85
+ return factory.UpdateCallExpression(
86
+ call,
87
+ visitor.VisitNode(call.Expression),
88
+ visitor.VisitNode(call.QuestionDotToken),
89
+ nil,
90
+ visitor.VisitNodes(call.Arguments),
91
+ call.Flags,
92
+ )
93
+ case shimast.KindNewExpression:
94
+ expr := current.AsNewExpression()
95
+ return factory.UpdateNewExpression(
96
+ expr,
97
+ visitor.VisitNode(expr.Expression),
98
+ nil,
99
+ visitor.VisitNodes(expr.Arguments),
100
+ )
101
+ default:
102
+ return visitor.VisitEachChild(current)
103
+ }
104
+ }, factory, shimast.NodeVisitorHooks{})
105
+ return visitor.VisitNode(node)
106
+ }
107
+
108
+ func rewriteNestiaIdentifiers(
109
+ node *shimast.Node,
110
+ substitutions map[string]string,
111
+ ) *shimast.Node {
112
+ if node == nil || len(substitutions) == 0 {
113
+ return node
114
+ }
115
+ factory := shimast.NewNodeFactory(shimast.NodeFactoryHooks{})
116
+ var visitor *shimast.NodeVisitor
117
+ visitor = shimast.NewNodeVisitor(func(current *shimast.Node) *shimast.Node {
118
+ if current == nil {
119
+ return nil
120
+ }
121
+ switch current.Kind {
122
+ case shimast.KindIdentifier:
123
+ if replacement, ok := substitutions[current.Text()]; ok {
124
+ return rewriteNestiaIdentifierExpression(factory, replacement)
125
+ }
126
+ return current
127
+ case shimast.KindVariableDeclaration:
128
+ decl := current.AsVariableDeclaration()
129
+ return factory.UpdateVariableDeclaration(
130
+ decl,
131
+ decl.Name(),
132
+ nil,
133
+ nil,
134
+ visitor.VisitNode(decl.Initializer),
135
+ )
136
+ case shimast.KindParameter:
137
+ parameter := current.AsParameterDeclaration()
138
+ return factory.UpdateParameterDeclaration(
139
+ parameter,
140
+ parameter.Modifiers(),
141
+ parameter.DotDotDotToken,
142
+ parameter.Name(),
143
+ nil,
144
+ nil,
145
+ visitor.VisitNode(parameter.Initializer),
146
+ )
147
+ case shimast.KindPropertyAssignment:
148
+ assignment := current.AsPropertyAssignment()
149
+ return factory.UpdatePropertyAssignment(
150
+ assignment,
151
+ assignment.Modifiers(),
152
+ assignment.Name(),
153
+ assignment.PostfixToken,
154
+ nil,
155
+ visitor.VisitNode(assignment.Initializer),
156
+ )
157
+ case shimast.KindShorthandPropertyAssignment:
158
+ assignment := current.AsShorthandPropertyAssignment()
159
+ name := assignment.Name()
160
+ if name != nil && name.Kind == shimast.KindIdentifier {
161
+ if replacement, ok := substitutions[name.Text()]; ok &&
162
+ assignment.ObjectAssignmentInitializer == nil {
163
+ return factory.NewPropertyAssignment(
164
+ assignment.Modifiers(),
165
+ name,
166
+ assignment.PostfixToken,
167
+ nil,
168
+ rewriteNestiaIdentifierExpression(factory, replacement),
169
+ )
170
+ }
171
+ }
172
+ return factory.UpdateShorthandPropertyAssignment(
173
+ assignment,
174
+ assignment.Modifiers(),
175
+ name,
176
+ assignment.PostfixToken,
177
+ nil,
178
+ nil,
179
+ visitor.VisitNode(assignment.ObjectAssignmentInitializer),
180
+ )
181
+ case shimast.KindPropertyAccessExpression:
182
+ access := current.AsPropertyAccessExpression()
183
+ return factory.UpdatePropertyAccessExpression(
184
+ access,
185
+ visitor.VisitNode(access.Expression),
186
+ access.QuestionDotToken,
187
+ access.Name(),
188
+ access.Flags,
189
+ )
190
+ default:
191
+ return visitor.VisitEachChild(current)
192
+ }
193
+ }, factory, shimast.NodeVisitorHooks{})
194
+ return visitor.VisitNode(node)
195
+ }
196
+
197
+ func rewriteNestiaIdentifierExpression(
198
+ factory *shimast.NodeFactory,
199
+ replacement string,
200
+ ) *shimast.Node {
201
+ parts := []string{}
202
+ start := 0
203
+ for i := 0; i <= len(replacement); i++ {
204
+ if i == len(replacement) || replacement[i] == '.' {
205
+ if start < i {
206
+ parts = append(parts, replacement[start:i])
207
+ }
208
+ start = i + 1
209
+ }
210
+ }
211
+ if len(parts) == 0 {
212
+ return factory.NewIdentifier(replacement)
213
+ }
214
+ output := factory.NewIdentifier(parts[0])
215
+ for _, part := range parts[1:] {
216
+ output = factory.NewPropertyAccessExpression(
217
+ output,
218
+ nil,
219
+ factory.NewIdentifier(part),
220
+ shimast.NodeFlagsNone,
221
+ )
222
+ }
223
+ return output
224
+ }
225
+
226
+ func normalizeNestiaSyntheticTokens(node *shimast.Node) {
227
+ if node == nil {
228
+ return
229
+ }
230
+ if node.Kind == shimast.KindConditionalExpression {
231
+ conditional := node.AsConditionalExpression()
232
+ factory := shimast.NewNodeFactory(shimast.NodeFactoryHooks{})
233
+ if conditional.QuestionToken == nil {
234
+ conditional.QuestionToken = factory.NewToken(shimast.KindQuestionToken)
235
+ }
236
+ if conditional.ColonToken == nil {
237
+ conditional.ColonToken = factory.NewToken(nestiaKindColonToken)
238
+ }
239
+ }
240
+ node.ForEachChild(func(child *shimast.Node) bool {
241
+ normalizeNestiaSyntheticTokens(child)
242
+ return false
243
+ })
244
+ }