typia 13.0.0-dev.20260511 → 13.0.0-dev.20260519

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.
package/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  # Typia
2
+
2
3
  ![Typia Logo](https://typia.io/logo.png)
3
4
 
4
5
  [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/samchon/typia/blob/master/LICENSE)
@@ -57,7 +58,30 @@ export function random<T>(g?: Partial<IRandomGenerator>): T;
57
58
  > - JSON serialization is **200x faster** than `class-transformer`
58
59
  > - LLM function calling harness turns **6.75% → 100%** accuracy
59
60
 
61
+ <!--
62
+ ## Setup
63
+
64
+ Install `typia@next` with the [`ttsc`](https://github.com/samchon/ttsc) toolchain.
65
+
66
+ ```bash
67
+ # install
68
+ npm i typia@next
69
+ npm i -D ttsc @typescript/native-preview
70
+
71
+ # build
72
+ npx ttsc
73
+
74
+ # run a script directly
75
+ npx ttsx src/index.ts
76
+ ```
77
+
78
+ You **must** use `ttsc` and `ttsx`. The stock `tsc`, `ts-node`, and `tsx` cannot apply the `typia` transform, so they will not work.
79
+
80
+ For bundler integration (Vite, Next.js, Webpack, Rollup, esbuild, ...), use [`@ttsc/unplugin`](https://github.com/samchon/ttsc/tree/master/packages/unplugin).
81
+ -->
82
+
60
83
  ## Transformation
84
+
61
85
  If you call `typia` function, it would be compiled like below.
62
86
 
63
87
  This is the key concept of `typia`, transforming TypeScript type to a runtime function. The `typia.is<T>()` function is transformed to a dedicated type checker by analyzing the target type `T` in the compilation level.
@@ -80,37 +104,34 @@ export const checkString = (() => {
80
104
  })();
81
105
  ```
82
106
 
83
-
84
-
85
107
  ## Sponsors
86
- Thanks for your support.
87
-
88
- Your donation encourages `typia` development.
89
-
90
- Also, `typia` is re-distributing quarter of donations to [`nonara/ts-patch`](https://github.com/nonara/ts-patch).
91
-
92
- [![Sponsors](https://opencollective.com/typia/badge.svg?avatarHeight=75&width=600)](https://opencollective.com/typia)
93
108
 
109
+ [![Backers](https://opencollective.com/typia/backers.svg?avatarHeight=75&width=600)](https://opencollective.com/typia)
94
110
 
111
+ Thanks for your support.
95
112
 
113
+ Your [donation](https://opencollective.com/typia) encourages `typia` development.
96
114
 
97
115
  ## Playground
98
- You can experience how typia works by [playground website](https://typia.io/playground):
99
-
100
- - 💻 https://typia.io/playground
101
-
102
116
 
117
+ You can experience how typia works by [playground website](https://typia.io/playground):
103
118
 
119
+ - 💻 https://typia.io/playground
104
120
 
105
121
  ## Guide Documents
122
+
106
123
  Check out the document in the [website](https://typia.io/docs/):
107
124
 
108
125
  ### 🏠 Home
126
+
109
127
  - [Introduction](https://typia.io/docs/)
110
128
  - [Setup](https://typia.io/docs/setup/)
129
+ - [Legacy (TypeScript v6)](https://typia.io/docs/setup/legacy)
130
+ - [TSGO (TypeScript v7)](https://typia.io/docs/setup/tsgo)
111
131
  - [Pure TypeScript](https://typia.io/docs/pure/)
112
132
 
113
133
  ### 📖 Features
134
+
114
135
  - Runtime Validators
115
136
  - [`assert()` function](https://typia.io/docs/validators/assert/)
116
137
  - [`is()` function](https://typia.io/docs/validators/is/)
@@ -134,6 +155,7 @@ Check out the document in the [website](https://typia.io/docs/):
134
155
  - [Miscellaneous](https://typia.io/docs/misc/)
135
156
 
136
157
  ### 🔗 Appendix
158
+
137
159
  - [API Documents](https://typia.io/api)
138
160
  - Utilization Cases
139
161
  - [MCP](https://typia.io/docs/utilization/mcp/)
@@ -144,9 +166,6 @@ Check out the document in the [website](https://typia.io/docs/):
144
166
  - [⇲ Benchmark Result](https://github.com/samchon/typia/tree/master/benchmark/results/11th%20Gen%20Intel(R)%20Core(TM)%20i5-1135G7%20%40%202.40GHz)
145
167
  - [⇲ `dev.to` Articles](https://dev.to/samchon/series/22474)
146
168
 
147
-
148
-
149
-
150
169
  ## Inspired By
170
+
151
171
  - [`typescript-is`](https://github.com/woutervh-/typescript-is)
152
- - [`ts-patch`](https://github.com/nonara/ts-patch)
@@ -79,10 +79,20 @@ func emitCallWithOptions(program *driver.Program, site CallSite, plugin PluginOp
79
79
  }
80
80
  }
81
81
  }()
82
- node := nativetransform.CallExpressionTransformer.Transform(nativetransform.CallExpressionTransformer_TransformProps{
83
- Context: context,
84
- Expression: site.Call,
85
- })
82
+ var node *shimast.Node
83
+ if site.Module != "" && site.Method != "" {
84
+ node = nativetransform.CallExpressionTransformer.TransformKnown(nativetransform.CallExpressionTransformer_TransformKnownProps{
85
+ Context: context,
86
+ Expression: site.Call,
87
+ Module: site.Module,
88
+ Method: site.Method,
89
+ })
90
+ } else {
91
+ node = nativetransform.CallExpressionTransformer.Transform(nativetransform.CallExpressionTransformer_TransformProps{
92
+ Context: context,
93
+ Expression: site.Call,
94
+ })
95
+ }
86
96
  if node == nil || node == site.Call.AsNode() {
87
97
  return "", false, nil
88
98
  }
@@ -4,15 +4,25 @@ import (
4
4
  "path/filepath"
5
5
  "strconv"
6
6
  "strings"
7
+ "sync"
7
8
  "unicode"
8
9
 
9
10
  shimast "github.com/microsoft/typescript-go/shim/ast"
10
11
  )
11
12
 
13
+ type commonJSImportIdentifierSubstitutionsCacheEntry struct {
14
+ value map[string]string
15
+ }
16
+
17
+ var commonJSImportIdentifierSubstitutionsCache sync.Map
18
+
12
19
  func commonJSImportIdentifierSubstitutions(file *shimast.SourceFile) map[string]string {
13
20
  if file == nil || file.Statements == nil {
14
21
  return nil
15
22
  }
23
+ if cached, ok := commonJSImportIdentifierSubstitutionsCache.Load(file); ok {
24
+ return cached.(commonJSImportIdentifierSubstitutionsCacheEntry).value
25
+ }
16
26
  output := map[string]string{}
17
27
  counts := map[string]int{}
18
28
  for _, stmt := range file.Statements.Nodes {
@@ -61,8 +71,9 @@ func commonJSImportIdentifierSubstitutions(file *shimast.SourceFile) map[string]
61
71
  }
62
72
  }
63
73
  if len(output) == 0 {
64
- return nil
74
+ output = nil
65
75
  }
76
+ commonJSImportIdentifierSubstitutionsCache.Store(file, commonJSImportIdentifierSubstitutionsCacheEntry{value: output})
66
77
  return output
67
78
  }
68
79
 
@@ -1,3 +1,5 @@
1
+ //go:build !js
2
+
1
3
  package main
2
4
 
3
5
  import (
@@ -0,0 +1,226 @@
1
+ //go:build js && wasm
2
+
3
+ package main
4
+
5
+ import (
6
+ "bytes"
7
+ "fmt"
8
+ "io"
9
+ "os"
10
+ "runtime"
11
+ "syscall/js"
12
+ "time"
13
+ )
14
+
15
+ // Reuse the same package-level identifiers the native CLI declares. Under
16
+ // `js && wasm`, the native `main.go` is excluded, so we re-declare them here.
17
+ var (
18
+ version = "0.1.0-dev"
19
+ commit = "dev"
20
+ date = "unknown"
21
+ )
22
+
23
+ var (
24
+ stdout io.Writer = os.Stdout
25
+ stderr io.Writer = os.Stderr
26
+ )
27
+
28
+ // main keeps the Go runtime alive forever after registering the JS entry
29
+ // points. JS code calls `globalThis.ttscTypia.transform({...})` repeatedly;
30
+ // each call reuses the same Go process (no re-instantiation cost).
31
+ func main() {
32
+ api := map[string]any{
33
+ "transform": js.FuncOf(jsTransform),
34
+ "build": js.FuncOf(jsBuild),
35
+ "version": js.FuncOf(jsVersion),
36
+ }
37
+ js.Global().Set("ttscTypia", js.ValueOf(api))
38
+
39
+ // Signal readiness so the JS host can resolve a "ready" promise.
40
+ if ready := js.Global().Get("ttscTypiaReady"); ready.Type() == js.TypeFunction {
41
+ ready.Invoke()
42
+ }
43
+
44
+ // A perpetual idle goroutine prevents Go's wasm deadlock detector from
45
+ // tripping while syscall.fsCall callbacks are in flight. `select {}` alone
46
+ // is wrongly classified as "all goroutines asleep" the moment the FS path
47
+ // hands the request off to JS.
48
+ go func() {
49
+ for {
50
+ time.Sleep(time.Hour)
51
+ }
52
+ }()
53
+ select {}
54
+ }
55
+
56
+ // jsVersion returns the build metadata for this wasm binary.
57
+ func jsVersion(this js.Value, args []js.Value) any {
58
+ return js.ValueOf(map[string]any{
59
+ "version": version,
60
+ "commit": commit,
61
+ "date": date,
62
+ "go": runtime.Version(),
63
+ "goos": runtime.GOOS,
64
+ "goarch": runtime.GOARCH,
65
+ })
66
+ }
67
+
68
+ // jsTransform runs the project transform pipeline on a single file.
69
+ //
70
+ // JS input shape:
71
+ // {
72
+ // cwd: string, // absolute virtual path
73
+ // tsconfig: string, // absolute path to tsconfig.json
74
+ // file?: string, // absolute path of the .ts file to rewrite. Omit
75
+ // // for project-wide JSON output.
76
+ // output?: "ts"|"js",
77
+ // }
78
+ //
79
+ // JS output: Promise<{ code: number, stdout: string, stderr: string }>.
80
+ //
81
+ // The handler returns a Promise so the JS event loop can drain while Go
82
+ // services its own asynchronous file-system callbacks. Returning a synchronous
83
+ // value would re-enter JS and deadlock on `fs.stat` callbacks.
84
+ //
85
+ // Caller is responsible for populating an in-memory filesystem (via the
86
+ // `globalThis.fs` shim picked up by wasm_exec.js) with every path referenced
87
+ // here before invoking transform.
88
+ func jsTransform(this js.Value, args []js.Value) any {
89
+ if len(args) == 0 || args[0].Type() != js.TypeObject {
90
+ return errorPromise(2, "ttsc-typia: transform requires an options object")
91
+ }
92
+ argv := transformArgs(args[0])
93
+ return makePromise(func() any {
94
+ return runWithCapturedIO(func() int { return runTransform(argv) })
95
+ })
96
+ }
97
+
98
+ // jsBuild runs the project build pipeline. JS input mirrors jsTransform but
99
+ // has no `file`/`output`. Returns a Promise.
100
+ func jsBuild(this js.Value, args []js.Value) any {
101
+ if len(args) == 0 || args[0].Type() != js.TypeObject {
102
+ return errorPromise(2, "ttsc-typia: build requires an options object")
103
+ }
104
+ argv := buildArgs(args[0])
105
+ return makePromise(func() any {
106
+ return runWithCapturedIO(func() int { return runBuild(argv) })
107
+ })
108
+ }
109
+
110
+ // makePromise wraps a Go computation as a JS Promise. The returned object is
111
+ // `new Promise((resolve, reject) => { ... })`. The executor synchronously
112
+ // captures the callbacks; the work itself runs in a goroutine so the JS event
113
+ // loop can drive `fs.stat` and friends to completion before we ask Go to
114
+ // receive the callback.
115
+ func makePromise(work func() any) js.Value {
116
+ var executor js.Func
117
+ executor = js.FuncOf(func(this js.Value, args []js.Value) any {
118
+ resolve := args[0]
119
+ reject := args[1]
120
+ go func() {
121
+ defer func() {
122
+ if r := recover(); r != nil {
123
+ err := js.Global().Get("Error").New(fmt.Sprintf("%v", r))
124
+ reject.Invoke(err)
125
+ }
126
+ executor.Release()
127
+ }()
128
+ resolve.Invoke(work())
129
+ }()
130
+ return nil
131
+ })
132
+ return js.Global().Get("Promise").New(executor)
133
+ }
134
+
135
+ func errorPromise(code int, message string) js.Value {
136
+ return makePromise(func() any { return errorResponse(code, message) })
137
+ }
138
+
139
+ func transformArgs(opts js.Value) []string {
140
+ out := []string{}
141
+ if v := stringProp(opts, "cwd"); v != "" {
142
+ out = append(out, "--cwd="+v)
143
+ }
144
+ if v := stringProp(opts, "tsconfig"); v != "" {
145
+ out = append(out, "--tsconfig="+v)
146
+ } else {
147
+ out = append(out, "--tsconfig=tsconfig.json")
148
+ }
149
+ if v := stringProp(opts, "file"); v != "" {
150
+ out = append(out, "--file="+v)
151
+ }
152
+ if v := stringProp(opts, "output"); v != "" {
153
+ out = append(out, "--output="+v)
154
+ } else {
155
+ out = append(out, "--output=ts")
156
+ }
157
+ return out
158
+ }
159
+
160
+ func buildArgs(opts js.Value) []string {
161
+ out := []string{}
162
+ if v := stringProp(opts, "cwd"); v != "" {
163
+ out = append(out, "--cwd="+v)
164
+ }
165
+ if v := stringProp(opts, "tsconfig"); v != "" {
166
+ out = append(out, "--tsconfig="+v)
167
+ } else {
168
+ out = append(out, "--tsconfig=tsconfig.json")
169
+ }
170
+ if outDir := stringProp(opts, "outDir"); outDir != "" {
171
+ out = append(out, "--outDir="+outDir)
172
+ }
173
+ if boolProp(opts, "emit") {
174
+ out = append(out, "--emit")
175
+ }
176
+ if boolProp(opts, "noEmit") {
177
+ out = append(out, "--noEmit")
178
+ }
179
+ return out
180
+ }
181
+
182
+ func runWithCapturedIO(task func() int) any {
183
+ // Swap the package-level writers so the inner Go functions feel like a
184
+ // normal CLI invocation but their output lands in JS-visible buffers.
185
+ // This is safe under the contract that JS calls are serialized (no
186
+ // concurrent invocations from JS).
187
+ oldOut, oldErr := stdout, stderr
188
+ var outBuf, errBuf bytes.Buffer
189
+ stdout = &outBuf
190
+ stderr = &errBuf
191
+ defer func() {
192
+ stdout = oldOut
193
+ stderr = oldErr
194
+ }()
195
+
196
+ code := task()
197
+ return js.ValueOf(map[string]any{
198
+ "code": code,
199
+ "stdout": outBuf.String(),
200
+ "stderr": errBuf.String(),
201
+ })
202
+ }
203
+
204
+ func errorResponse(code int, message string) any {
205
+ return js.ValueOf(map[string]any{
206
+ "code": code,
207
+ "stdout": "",
208
+ "stderr": fmt.Sprintf("%s\n", message),
209
+ })
210
+ }
211
+
212
+ func stringProp(obj js.Value, key string) string {
213
+ v := obj.Get(key)
214
+ if v.Type() != js.TypeString {
215
+ return ""
216
+ }
217
+ return v.String()
218
+ }
219
+
220
+ func boolProp(obj js.Value, key string) bool {
221
+ v := obj.Get(key)
222
+ if v.Type() != js.TypeBoolean {
223
+ return false
224
+ }
225
+ return v.Bool()
226
+ }
@@ -29,6 +29,24 @@ func init() {
29
29
  Explore: props.Explore,
30
30
  })
31
31
  }
32
+ nativemetadata.MetadataCommentTagAnalyzer = func(props struct {
33
+ Errors *[]nativemetadata.MetadataFactory_IError
34
+ Metadata *schemametadata.MetadataSchema
35
+ Tags []schemametadata.IJsDocTagInfo
36
+ Explore nativemetadata.MetadataFactory_IExplore
37
+ }) {
38
+ MetadataCommentTagFactory.Analyze(struct {
39
+ Errors *[]MetadataFactory_IError
40
+ Metadata *schemametadata.MetadataSchema
41
+ Tags []schemametadata.IJsDocTagInfo
42
+ Explore MetadataFactory_IExplore
43
+ }{
44
+ Errors: props.Errors,
45
+ Metadata: props.Metadata,
46
+ Tags: props.Tags,
47
+ Explore: props.Explore,
48
+ })
49
+ }
32
50
  }
33
51
 
34
52
  type MetadataFactory_Validator = func(props struct {
@@ -54,3 +54,10 @@ var MetadataTypeTagAnalyzer func(props struct {
54
54
  Objects []*schemametadata.MetadataObjectType
55
55
  Explore MetadataFactory_IExplore
56
56
  }) []schemametadata.IMetadataTypeTag
57
+
58
+ var MetadataCommentTagAnalyzer func(props struct {
59
+ Errors *[]MetadataFactory_IError
60
+ Metadata *schemametadata.MetadataSchema
61
+ Tags []schemametadata.IJsDocTagInfo
62
+ Explore MetadataFactory_IExplore
63
+ })
@@ -5,6 +5,7 @@ import (
5
5
 
6
6
  nativeast "github.com/microsoft/typescript-go/shim/ast"
7
7
  nativechecker "github.com/microsoft/typescript-go/shim/checker"
8
+ nativescanner "github.com/microsoft/typescript-go/shim/scanner"
8
9
  schemametadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
9
10
  )
10
11
 
@@ -133,6 +134,12 @@ func metadata_node_js_doc_tags(symbol *nativeast.Symbol) []schemametadata.IJsDoc
133
134
  Text: name,
134
135
  })
135
136
  }
137
+ if text := metadata_js_doc_type_expression_text(tag); text != "" {
138
+ texts = append(texts, schemametadata.IJsDocTagInfo_IText{
139
+ Kind: "text",
140
+ Text: text,
141
+ })
142
+ }
136
143
  if text := metadata_js_doc_comment_text(tag.CommentList()); text != "" {
137
144
  texts = append(texts, schemametadata.IJsDocTagInfo_IText{
138
145
  Kind: "text",
@@ -194,11 +201,39 @@ func metadata_js_doc_parameter_name(tag *nativeast.Node) string {
194
201
  if tag.Kind.String() != "KindJSDocParameterTag" && tag.Kind.String() != "KindJSDocPropertyTag" {
195
202
  return ""
196
203
  }
197
- name := tag.AsJSDocParameterOrPropertyTag().Name()
198
- if name == nil {
204
+ // `name` is a DeclarationName: typically an Identifier, but for nested
205
+ // JSDoc parameter names like `@param obj.field description` the parser
206
+ // produces a QualifiedName, and upstream's (*Node).Text() panics with
207
+ // `Unhandled case in Node.Text: *ast.QualifiedName` if we call .Text()
208
+ // directly. NodeText in the ttsc shim covers QualifiedName and any
209
+ // other DeclarationName Kind that upstream's switch doesn't.
210
+ return nativeast.NodeText(tag.AsJSDocParameterOrPropertyTag().Name())
211
+ }
212
+
213
+ func metadata_js_doc_type_expression_text(tag *nativeast.Node) string {
214
+ if tag == nil {
215
+ return ""
216
+ }
217
+ switch tag.Kind {
218
+ case nativeast.KindJSDocTypeTag,
219
+ nativeast.KindJSDocParameterTag,
220
+ nativeast.KindJSDocPropertyTag,
221
+ nativeast.KindJSDocReturnTag,
222
+ nativeast.KindJSDocTypedefTag,
223
+ nativeast.KindJSDocSatisfiesTag,
224
+ nativeast.KindJSDocThrowsTag:
225
+ default:
226
+ return ""
227
+ }
228
+ expr := tag.TypeExpression()
229
+ if expr == nil {
230
+ return ""
231
+ }
232
+ typ := expr.Type()
233
+ if typ == nil {
199
234
  return ""
200
235
  }
201
- return name.Text()
236
+ return metadata_clean_js_doc_text(nativescanner.GetTextOfNode(typ))
202
237
  }
203
238
 
204
239
  func metadata_js_doc_comment_text(list *nativeast.NodeList) string {
@@ -6,15 +6,29 @@ func Iterate_metadata_comment_tags(props struct {
6
6
  Errors *[]MetadataFactory_IError
7
7
  Object *schemametadata.MetadataObjectType
8
8
  }) {
9
- if props.Object == nil || props.Object.Tagged_ == true {
9
+ if props.Object == nil || props.Object.Tagged_ == true || MetadataCommentTagAnalyzer == nil {
10
10
  return
11
11
  }
12
12
  props.Object.Tagged_ = true
13
13
 
14
14
  for _, property := range props.Object.Properties {
15
- _ = property
16
- // JSDoc extraction through the TypeScript-Go shim is not yet complete.
17
- // The traversal point is kept in the original file location so the
18
- // MetadataCommentTagFactory port can be wired without changing callers.
15
+ if property == nil || property.Value == nil || len(property.JsDocTags) == 0 {
16
+ continue
17
+ }
18
+ MetadataCommentTagAnalyzer(struct {
19
+ Errors *[]MetadataFactory_IError
20
+ Metadata *schemametadata.MetadataSchema
21
+ Tags []schemametadata.IJsDocTagInfo
22
+ Explore MetadataFactory_IExplore
23
+ }{
24
+ Errors: props.Errors,
25
+ Metadata: property.Value,
26
+ Tags: property.JsDocTags,
27
+ Explore: MetadataFactory_IExplore{
28
+ Top: false,
29
+ Object: props.Object,
30
+ Property: property,
31
+ },
32
+ })
19
33
  }
20
34
  }
package/native/go.work ADDED
@@ -0,0 +1,22 @@
1
+ go 1.26
2
+
3
+ use (
4
+ .
5
+ ../../../../ttsc/packages/ttsc
6
+ ../../../../ttsc/packages/ttsc/shim/ast
7
+ ../../../../ttsc/packages/ttsc/shim/bundled
8
+ ../../../../ttsc/packages/ttsc/shim/checker
9
+ ../../../../ttsc/packages/ttsc/shim/compiler
10
+ ../../../../ttsc/packages/ttsc/shim/core
11
+ ../../../../ttsc/packages/ttsc/shim/diagnosticwriter
12
+ ../../../../ttsc/packages/ttsc/shim/parser
13
+ ../../../../ttsc/packages/ttsc/shim/printer
14
+ ../../../../ttsc/packages/ttsc/shim/scanner
15
+ ../../../../ttsc/packages/ttsc/shim/tsoptions
16
+ ../../../../ttsc/packages/ttsc/shim/tspath
17
+ ../../../../ttsc/packages/ttsc/shim/vfs
18
+ ../../../../ttsc/packages/ttsc/shim/vfs/cachedvfs
19
+ ../../../../ttsc/packages/ttsc/shim/vfs/osvfs
20
+ )
21
+
22
+ replace github.com/samchon/ttsc/packages/ttsc v0.0.0 => ../../../../ttsc/packages/ttsc
@@ -29,10 +29,19 @@ type CallExpressionTransformer_TransformProps struct {
29
29
  Expression *shimast.CallExpression
30
30
  }
31
31
 
32
+ type CallExpressionTransformer_TransformKnownProps struct {
33
+ Context nativecontext.ITypiaContext
34
+ Expression *shimast.CallExpression
35
+ Module string
36
+ Method string
37
+ }
38
+
32
39
  type callExpressionTransformerTask func(props ITransformProps) *shimast.Node
33
40
 
34
41
  type callExpressionTransformerFunctor func() callExpressionTransformerTask
35
42
 
43
+ var callExpressionTransformer_functors = callExpressionTransformer_createFunctors()
44
+
36
45
  func (callExpressionTransformerNamespace) Transform(props CallExpressionTransformer_TransformProps) *shimast.Node {
37
46
  if props.Expression == nil {
38
47
  return nil
@@ -59,8 +68,20 @@ func (callExpressionTransformerNamespace) Transform(props CallExpressionTransfor
59
68
  return props.Expression.AsNode()
60
69
  }
61
70
  name := typ.Symbol().Name
71
+ return CallExpressionTransformer.TransformKnown(CallExpressionTransformer_TransformKnownProps{
72
+ Context: props.Context,
73
+ Expression: props.Expression,
74
+ Module: module,
75
+ Method: name,
76
+ })
77
+ }
78
+
79
+ func (callExpressionTransformerNamespace) TransformKnown(props CallExpressionTransformer_TransformKnownProps) *shimast.Node {
80
+ if props.Expression == nil {
81
+ return nil
82
+ }
62
83
  functors := callExpressionTransformer_FUNCTORS()
63
- functor, ok := functors[module][name]
84
+ functor, ok := functors[props.Module][props.Method]
64
85
  if ok == false {
65
86
  return props.Expression.AsNode()
66
87
  }
@@ -101,6 +122,10 @@ func callExpressionTransformer_sourceFile(node *shimast.Node) *shimast.SourceFil
101
122
  }
102
123
 
103
124
  func callExpressionTransformer_FUNCTORS() map[string]map[string]callExpressionTransformerFunctor {
125
+ return callExpressionTransformer_functors
126
+ }
127
+
128
+ func callExpressionTransformer_createFunctors() map[string]map[string]callExpressionTransformerFunctor {
104
129
  return map[string]map[string]callExpressionTransformerFunctor{
105
130
  "module": {
106
131
  "assert": func() callExpressionTransformerTask {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "typia",
3
- "version": "13.0.0-dev.20260511",
3
+ "version": "13.0.0-dev.20260519",
4
4
  "description": "Superfast runtime validators with only one line",
5
5
  "main": "lib/index.js",
6
6
  "exports": {
@@ -44,8 +44,8 @@
44
44
  "commander": "^10.0.0",
45
45
  "inquirer": "^8.2.5",
46
46
  "randexp": "^0.5.3",
47
- "@typia/interface": "^13.0.0-dev.20260511",
48
- "@typia/utils": "^13.0.0-dev.20260511"
47
+ "@typia/interface": "^13.0.0-dev.20260519",
48
+ "@typia/utils": "^13.0.0-dev.20260519"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@rollup/plugin-commonjs": "^29.0.0",
@@ -54,7 +54,7 @@
54
54
  "@types/node": "^25.3.0",
55
55
  "@typescript-eslint/eslint-plugin": "^8.1.0",
56
56
  "@typescript-eslint/parser": "^8.1.0",
57
- "@typescript/native-preview": "7.0.0-dev.20260510.1",
57
+ "@typescript/native-preview": "7.0.0-dev.20260518.1",
58
58
  "chalk": "^4.0.0",
59
59
  "eslint-plugin-deprecation": "^3.0.0",
60
60
  "rimraf": "^6.1.2",
@@ -63,7 +63,7 @@
63
63
  "rollup-plugin-node-externals": "^8.1.2",
64
64
  "suppress-warnings": "^1.0.2",
65
65
  "tinyglobby": "^0.2.12",
66
- "ttsc": "^0.10.0"
66
+ "ttsc": "^0.12.3"
67
67
  },
68
68
  "sideEffects": [
69
69
  "./lib/_virtual/*.mjs",