typia 13.0.0-dev.20260509 → 13.0.0-dev.20260510

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 (53) hide show
  1. package/native/adapter/adapter.go +3 -3
  2. package/native/go.mod +0 -4
  3. package/native/internal/printer/printer.go +229 -0
  4. package/package.json +6 -6
  5. package/native/go.work +0 -20
  6. package/native/go.work.sum +0 -11
  7. package/native/shim/printer/go.mod +0 -5
  8. package/native/shim/printer/shim.go +0 -249
  9. package/native/third_party/ttsc/driver/host.go +0 -31
  10. package/native/third_party/ttsc/driver/program.go +0 -466
  11. package/native/third_party/ttsc/driver/rewrite.go +0 -341
  12. package/native/third_party/ttsc/go.mod +0 -48
  13. package/native/third_party/ttsc/go.sum +0 -22
  14. package/native/third_party/ttsc/shim/ast/extra-shim.json +0 -4
  15. package/native/third_party/ttsc/shim/ast/go.mod +0 -5
  16. package/native/third_party/ttsc/shim/ast/lint.go +0 -331
  17. package/native/third_party/ttsc/shim/ast/shim.go +0 -210
  18. package/native/third_party/ttsc/shim/bundled/extra-shim.json +0 -1
  19. package/native/third_party/ttsc/shim/bundled/go.mod +0 -5
  20. package/native/third_party/ttsc/shim/bundled/shim.go +0 -23
  21. package/native/third_party/ttsc/shim/checker/extra-shim.json +0 -31
  22. package/native/third_party/ttsc/shim/checker/go.mod +0 -5
  23. package/native/third_party/ttsc/shim/checker/shim.go +0 -166
  24. package/native/third_party/ttsc/shim/compiler/extra-shim.json +0 -4
  25. package/native/third_party/ttsc/shim/compiler/go.mod +0 -5
  26. package/native/third_party/ttsc/shim/compiler/shim.go +0 -65
  27. package/native/third_party/ttsc/shim/core/extra-shim.json +0 -4
  28. package/native/third_party/ttsc/shim/core/go.mod +0 -5
  29. package/native/third_party/ttsc/shim/core/shim.go +0 -29
  30. package/native/third_party/ttsc/shim/diagnosticwriter/go.mod +0 -5
  31. package/native/third_party/ttsc/shim/diagnosticwriter/lint.go +0 -137
  32. package/native/third_party/ttsc/shim/diagnosticwriter/shim.go +0 -29
  33. package/native/third_party/ttsc/shim/parser/extra-shim.json +0 -4
  34. package/native/third_party/ttsc/shim/parser/go.mod +0 -5
  35. package/native/third_party/ttsc/shim/parser/shim.go +0 -61
  36. package/native/third_party/ttsc/shim/scanner/extra-shim.json +0 -4
  37. package/native/third_party/ttsc/shim/scanner/go.mod +0 -5
  38. package/native/third_party/ttsc/shim/scanner/shim.go +0 -134
  39. package/native/third_party/ttsc/shim/tsoptions/extra-shim.json +0 -4
  40. package/native/third_party/ttsc/shim/tsoptions/go.mod +0 -5
  41. package/native/third_party/ttsc/shim/tsoptions/shim.go +0 -173
  42. package/native/third_party/ttsc/shim/tspath/extra-shim.json +0 -4
  43. package/native/third_party/ttsc/shim/tspath/go.mod +0 -5
  44. package/native/third_party/ttsc/shim/tspath/shim.go +0 -236
  45. package/native/third_party/ttsc/shim/vfs/cachedvfs/extra-shim.json +0 -4
  46. package/native/third_party/ttsc/shim/vfs/cachedvfs/go.mod +0 -5
  47. package/native/third_party/ttsc/shim/vfs/cachedvfs/shim.go +0 -12
  48. package/native/third_party/ttsc/shim/vfs/extra-shim.json +0 -4
  49. package/native/third_party/ttsc/shim/vfs/go.mod +0 -5
  50. package/native/third_party/ttsc/shim/vfs/osvfs/extra-shim.json +0 -4
  51. package/native/third_party/ttsc/shim/vfs/osvfs/go.mod +0 -5
  52. package/native/third_party/ttsc/shim/vfs/osvfs/shim.go +0 -13
  53. package/native/third_party/ttsc/shim/vfs/shim.go +0 -22
@@ -8,10 +8,10 @@ import (
8
8
  "strings"
9
9
 
10
10
  shimast "github.com/microsoft/typescript-go/shim/ast"
11
- shimprinter "github.com/microsoft/typescript-go/shim/printer"
12
11
  "github.com/samchon/ttsc/packages/ttsc/driver"
13
12
  nativecontext "github.com/samchon/typia/packages/typia/native/core/context"
14
13
  nativeprogrammers "github.com/samchon/typia/packages/typia/native/core/programmers"
14
+ nativeprinter "github.com/samchon/typia/packages/typia/native/internal/printer"
15
15
  nativetransform "github.com/samchon/typia/packages/typia/native/transform"
16
16
  )
17
17
 
@@ -87,13 +87,13 @@ func emitCallWithOptions(program *driver.Program, site CallSite, plugin PluginOp
87
87
  return "", false, nil
88
88
  }
89
89
  if preserveTypes {
90
- return cleanupPrintedExpression(shimprinter.EmitPreservingTypesWithIdentifierSubstitutions(
90
+ return cleanupPrintedExpression(nativeprinter.EmitPreservingTypesWithIdentifierSubstitutions(
91
91
  node,
92
92
  site.File,
93
93
  nil,
94
94
  )), true, nil
95
95
  }
96
- return cleanupPrintedExpression(shimprinter.EmitWithIdentifierSubstitutions(
96
+ return cleanupPrintedExpression(nativeprinter.EmitWithIdentifierSubstitutions(
97
97
  node,
98
98
  site.File,
99
99
  identifierSubstitutionsForEmit(program, site.File),
package/native/go.mod CHANGED
@@ -2,10 +2,6 @@ module github.com/samchon/typia/packages/typia/native
2
2
 
3
3
  go 1.26
4
4
 
5
- replace github.com/microsoft/typescript-go/shim/printer => ./shim/printer
6
-
7
- replace github.com/samchon/ttsc/packages/ttsc => ./third_party/ttsc
8
-
9
5
  require (
10
6
  github.com/microsoft/typescript-go/shim/ast v0.0.0
11
7
  github.com/microsoft/typescript-go/shim/checker v0.0.0
@@ -0,0 +1,229 @@
1
+ package printer
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 kindColonToken = shimast.KindQuestionToken + 1
9
+
10
+ func EmitWithIdentifierSubstitutions(node *shimast.Node, sourceFile *shimast.SourceFile, substitutions map[string]string) string {
11
+ node = stripTypeSyntax(node)
12
+ node = rewriteIdentifiers(node, substitutions)
13
+ normalizeSyntheticTokens(node)
14
+ return emit(node, sourceFile)
15
+ }
16
+
17
+ func EmitPreservingTypesWithIdentifierSubstitutions(node *shimast.Node, sourceFile *shimast.SourceFile, substitutions map[string]string) string {
18
+ node = rewriteIdentifiers(node, substitutions)
19
+ normalizeSyntheticTokens(node)
20
+ return emit(node, sourceFile)
21
+ }
22
+
23
+ func emit(node *shimast.Node, sourceFile *shimast.SourceFile) string {
24
+ return shimprinter.NewPrinter(shimprinter.PrinterOptions{
25
+ RemoveComments: true,
26
+ NewLine: 2,
27
+ }, shimprinter.PrintHandlers{}, nil).Emit(node, sourceFile)
28
+ }
29
+
30
+ func stripTypeSyntax(node *shimast.Node) *shimast.Node {
31
+ if node == nil {
32
+ return nil
33
+ }
34
+ factory := shimast.NewNodeFactory(shimast.NodeFactoryHooks{})
35
+ var visitor *shimast.NodeVisitor
36
+ visitor = shimast.NewNodeVisitor(func(current *shimast.Node) *shimast.Node {
37
+ if current == nil {
38
+ return nil
39
+ }
40
+ switch current.Kind {
41
+ case shimast.KindAsExpression, shimast.KindSatisfiesExpression, shimast.KindTypeAssertionExpression, shimast.KindNonNullExpression:
42
+ return visitor.VisitNode(current.Expression())
43
+ case shimast.KindVariableDeclaration:
44
+ decl := current.AsVariableDeclaration()
45
+ return factory.UpdateVariableDeclaration(
46
+ decl,
47
+ visitor.VisitNode(decl.Name()),
48
+ nil,
49
+ nil,
50
+ visitor.VisitNode(decl.Initializer),
51
+ )
52
+ case shimast.KindParameter:
53
+ parameter := current.AsParameterDeclaration()
54
+ return factory.UpdateParameterDeclaration(
55
+ parameter,
56
+ visitor.VisitModifiers(parameter.Modifiers()),
57
+ visitor.VisitNode(parameter.DotDotDotToken),
58
+ visitor.VisitNode(parameter.Name()),
59
+ nil,
60
+ nil,
61
+ visitor.VisitNode(parameter.Initializer),
62
+ )
63
+ case shimast.KindArrowFunction:
64
+ arrow := current.AsArrowFunction()
65
+ return factory.UpdateArrowFunction(
66
+ arrow,
67
+ visitor.VisitModifiers(arrow.Modifiers()),
68
+ nil,
69
+ visitor.VisitNodes(arrow.Parameters),
70
+ nil,
71
+ nil,
72
+ visitor.VisitNode(arrow.EqualsGreaterThanToken),
73
+ visitor.VisitNode(arrow.Body),
74
+ )
75
+ case shimast.KindCallExpression:
76
+ call := current.AsCallExpression()
77
+ return factory.UpdateCallExpression(
78
+ call,
79
+ visitor.VisitNode(call.Expression),
80
+ visitor.VisitNode(call.QuestionDotToken),
81
+ nil,
82
+ visitor.VisitNodes(call.Arguments),
83
+ call.Flags,
84
+ )
85
+ case shimast.KindNewExpression:
86
+ expr := current.AsNewExpression()
87
+ return factory.UpdateNewExpression(
88
+ expr,
89
+ visitor.VisitNode(expr.Expression),
90
+ nil,
91
+ visitor.VisitNodes(expr.Arguments),
92
+ )
93
+ default:
94
+ return visitor.VisitEachChild(current)
95
+ }
96
+ }, factory, shimast.NodeVisitorHooks{})
97
+ return visitor.VisitNode(node)
98
+ }
99
+
100
+ func rewriteIdentifiers(node *shimast.Node, substitutions map[string]string) *shimast.Node {
101
+ if node == nil || len(substitutions) == 0 {
102
+ return node
103
+ }
104
+ factory := shimast.NewNodeFactory(shimast.NodeFactoryHooks{})
105
+ var visitor *shimast.NodeVisitor
106
+ visitor = shimast.NewNodeVisitor(func(current *shimast.Node) *shimast.Node {
107
+ if current == nil {
108
+ return nil
109
+ }
110
+ switch current.Kind {
111
+ case shimast.KindIdentifier:
112
+ if replacement, ok := substitutions[current.Text()]; ok {
113
+ return rewriteIdentifierExpression(factory, replacement)
114
+ }
115
+ return current
116
+ case shimast.KindVariableDeclaration:
117
+ decl := current.AsVariableDeclaration()
118
+ return factory.UpdateVariableDeclaration(
119
+ decl,
120
+ decl.Name(),
121
+ nil,
122
+ nil,
123
+ visitor.VisitNode(decl.Initializer),
124
+ )
125
+ case shimast.KindParameter:
126
+ parameter := current.AsParameterDeclaration()
127
+ return factory.UpdateParameterDeclaration(
128
+ parameter,
129
+ parameter.Modifiers(),
130
+ parameter.DotDotDotToken,
131
+ parameter.Name(),
132
+ nil,
133
+ nil,
134
+ visitor.VisitNode(parameter.Initializer),
135
+ )
136
+ case shimast.KindPropertyAssignment:
137
+ assignment := current.AsPropertyAssignment()
138
+ return factory.UpdatePropertyAssignment(
139
+ assignment,
140
+ assignment.Modifiers(),
141
+ assignment.Name(),
142
+ assignment.PostfixToken,
143
+ nil,
144
+ visitor.VisitNode(assignment.Initializer),
145
+ )
146
+ case shimast.KindShorthandPropertyAssignment:
147
+ assignment := current.AsShorthandPropertyAssignment()
148
+ name := assignment.Name()
149
+ if name != nil && name.Kind == shimast.KindIdentifier {
150
+ if replacement, ok := substitutions[name.Text()]; ok && assignment.ObjectAssignmentInitializer == nil {
151
+ return factory.NewPropertyAssignment(
152
+ assignment.Modifiers(),
153
+ name,
154
+ assignment.PostfixToken,
155
+ nil,
156
+ rewriteIdentifierExpression(factory, replacement),
157
+ )
158
+ }
159
+ }
160
+ return factory.UpdateShorthandPropertyAssignment(
161
+ assignment,
162
+ assignment.Modifiers(),
163
+ name,
164
+ assignment.PostfixToken,
165
+ nil,
166
+ nil,
167
+ visitor.VisitNode(assignment.ObjectAssignmentInitializer),
168
+ )
169
+ case shimast.KindPropertyAccessExpression:
170
+ access := current.AsPropertyAccessExpression()
171
+ return factory.UpdatePropertyAccessExpression(
172
+ access,
173
+ visitor.VisitNode(access.Expression),
174
+ access.QuestionDotToken,
175
+ access.Name(),
176
+ access.Flags,
177
+ )
178
+ default:
179
+ return visitor.VisitEachChild(current)
180
+ }
181
+ }, factory, shimast.NodeVisitorHooks{})
182
+ return visitor.VisitNode(node)
183
+ }
184
+
185
+ func rewriteIdentifierExpression(factory *shimast.NodeFactory, replacement string) *shimast.Node {
186
+ parts := []string{}
187
+ start := 0
188
+ for i := 0; i <= len(replacement); i++ {
189
+ if i == len(replacement) || replacement[i] == '.' {
190
+ if start < i {
191
+ parts = append(parts, replacement[start:i])
192
+ }
193
+ start = i + 1
194
+ }
195
+ }
196
+ if len(parts) == 0 {
197
+ return factory.NewIdentifier(replacement)
198
+ }
199
+ output := factory.NewIdentifier(parts[0])
200
+ for _, part := range parts[1:] {
201
+ output = factory.NewPropertyAccessExpression(
202
+ output,
203
+ nil,
204
+ factory.NewIdentifier(part),
205
+ shimast.NodeFlagsNone,
206
+ )
207
+ }
208
+ return output
209
+ }
210
+
211
+ func normalizeSyntheticTokens(node *shimast.Node) {
212
+ if node == nil {
213
+ return
214
+ }
215
+ if node.Kind == shimast.KindConditionalExpression {
216
+ conditional := node.AsConditionalExpression()
217
+ factory := shimast.NewNodeFactory(shimast.NodeFactoryHooks{})
218
+ if conditional.QuestionToken == nil {
219
+ conditional.QuestionToken = factory.NewToken(shimast.KindQuestionToken)
220
+ }
221
+ if conditional.ColonToken == nil {
222
+ conditional.ColonToken = factory.NewToken(kindColonToken)
223
+ }
224
+ }
225
+ node.ForEachChild(func(child *shimast.Node) bool {
226
+ normalizeSyntheticTokens(child)
227
+ return false
228
+ })
229
+ }
package/package.json CHANGED
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "name": "typia",
3
- "version": "13.0.0-dev.20260509",
3
+ "version": "13.0.0-dev.20260510",
4
4
  "description": "Superfast runtime validators with only one line",
5
5
  "main": "lib/index.js",
6
- "types": "lib/index.d.ts",
7
6
  "exports": {
8
7
  ".": {
9
8
  "types": "./lib/index.d.ts",
@@ -45,8 +44,8 @@
45
44
  "commander": "^10.0.0",
46
45
  "inquirer": "^8.2.5",
47
46
  "randexp": "^0.5.3",
48
- "@typia/interface": "^13.0.0-dev.20260509",
49
- "@typia/utils": "^13.0.0-dev.20260509"
47
+ "@typia/interface": "^13.0.0-dev.20260510",
48
+ "@typia/utils": "^13.0.0-dev.20260510"
50
49
  },
51
50
  "devDependencies": {
52
51
  "@rollup/plugin-commonjs": "^29.0.0",
@@ -55,7 +54,7 @@
55
54
  "@types/node": "^25.3.0",
56
55
  "@typescript-eslint/eslint-plugin": "^8.1.0",
57
56
  "@typescript-eslint/parser": "^8.1.0",
58
- "@typescript/native-preview": "7.0.0-dev.20260505.1",
57
+ "@typescript/native-preview": "7.0.0-dev.20260510.1",
59
58
  "chalk": "^4.0.0",
60
59
  "eslint-plugin-deprecation": "^3.0.0",
61
60
  "rimraf": "^6.1.2",
@@ -64,7 +63,7 @@
64
63
  "rollup-plugin-node-externals": "^8.1.2",
65
64
  "suppress-warnings": "^1.0.2",
66
65
  "tinyglobby": "^0.2.12",
67
- "ttsc": "^0.9.0"
66
+ "ttsc": "^0.10.0"
68
67
  },
69
68
  "sideEffects": [
70
69
  "./lib/_virtual/*.mjs",
@@ -119,5 +118,6 @@
119
118
  "build": "rimraf lib && ttsc && rollup -c && cp ../../README.md README.md",
120
119
  "dev": "ttsc --watch"
121
120
  },
121
+ "types": "lib/index.d.ts",
122
122
  "module": "lib/index.mjs"
123
123
  }
package/native/go.work DELETED
@@ -1,20 +0,0 @@
1
- go 1.26
2
-
3
- use (
4
- .
5
- ./shim/printer
6
- ./third_party/ttsc
7
- ./third_party/ttsc/shim/ast
8
- ./third_party/ttsc/shim/bundled
9
- ./third_party/ttsc/shim/checker
10
- ./third_party/ttsc/shim/compiler
11
- ./third_party/ttsc/shim/core
12
- ./third_party/ttsc/shim/diagnosticwriter
13
- ./third_party/ttsc/shim/parser
14
- ./third_party/ttsc/shim/scanner
15
- ./third_party/ttsc/shim/tsoptions
16
- ./third_party/ttsc/shim/tspath
17
- ./third_party/ttsc/shim/vfs
18
- ./third_party/ttsc/shim/vfs/cachedvfs
19
- ./third_party/ttsc/shim/vfs/osvfs
20
- )
@@ -1,11 +0,0 @@
1
- github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
2
- github.com/mackerelio/go-osstat v0.2.7/go.mod h1:dwpYh5pIPmvk+IEwBKNIWRFMB92mrC08CmXOhDC7nQk=
3
- github.com/matryer/moq v0.7.1/go.mod h1:IabIiFkaKCyHxej25INgFR+fnOxSZFMv2LYrU+ioyDs=
4
- github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
5
- github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
6
- github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
7
- golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU=
8
- golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
9
- golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa/go.mod h1:kHjTxDEnAu6/Nl9lDkzjWpR+bmKfxeiRuSDlsMb70gE=
10
- golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY=
11
- golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
@@ -1,5 +0,0 @@
1
- module github.com/microsoft/typescript-go/shim/printer
2
-
3
- go 1.26
4
-
5
- require github.com/microsoft/typescript-go v0.0.0-20260429010842-56ab4af42157
@@ -1,249 +0,0 @@
1
- package printer
2
-
3
- import (
4
- innerast "github.com/microsoft/typescript-go/internal/ast"
5
- innercore "github.com/microsoft/typescript-go/internal/core"
6
- innerprinter "github.com/microsoft/typescript-go/internal/printer"
7
- )
8
-
9
- type Printer = innerprinter.Printer
10
- type PrinterOptions = innerprinter.PrinterOptions
11
- type PrintHandlers = innerprinter.PrintHandlers
12
- type EmitContext = innerprinter.EmitContext
13
-
14
- func NewPrinter(options PrinterOptions, handlers PrintHandlers, emitContext *EmitContext) *Printer {
15
- return innerprinter.NewPrinter(options, handlers, emitContext)
16
- }
17
-
18
- func NewEmitContext() *EmitContext {
19
- return innerprinter.NewEmitContext()
20
- }
21
-
22
- func Emit(node *innerast.Node, sourceFile *innerast.SourceFile) string {
23
- node = stripTypeSyntax(node)
24
- normalizeSyntheticTokens(node)
25
- return NewPrinter(PrinterOptions{
26
- RemoveComments: true,
27
- NewLine: innercore.NewLineKindLF,
28
- }, PrintHandlers{}, nil).Emit(node, sourceFile)
29
- }
30
-
31
- func EmitWithIdentifierSubstitutions(node *innerast.Node, sourceFile *innerast.SourceFile, substitutions map[string]string) string {
32
- node = stripTypeSyntax(node)
33
- node = rewriteIdentifiers(node, substitutions)
34
- normalizeSyntheticTokens(node)
35
- return NewPrinter(PrinterOptions{
36
- RemoveComments: true,
37
- NewLine: innercore.NewLineKindLF,
38
- }, PrintHandlers{}, nil).Emit(node, sourceFile)
39
- }
40
-
41
- func EmitPreservingTypesWithIdentifierSubstitutions(node *innerast.Node, sourceFile *innerast.SourceFile, substitutions map[string]string) string {
42
- node = rewriteIdentifiers(node, substitutions)
43
- normalizeSyntheticTokens(node)
44
- return NewPrinter(PrinterOptions{
45
- RemoveComments: true,
46
- NewLine: innercore.NewLineKindLF,
47
- }, PrintHandlers{}, nil).Emit(node, sourceFile)
48
- }
49
-
50
- func stripTypeSyntax(node *innerast.Node) *innerast.Node {
51
- if node == nil {
52
- return nil
53
- }
54
- factory := innerast.NewNodeFactory(innerast.NodeFactoryHooks{})
55
- var visitor *innerast.NodeVisitor
56
- visitor = innerast.NewNodeVisitor(func(current *innerast.Node) *innerast.Node {
57
- if current == nil {
58
- return nil
59
- }
60
- switch current.Kind {
61
- case innerast.KindAsExpression, innerast.KindSatisfiesExpression, innerast.KindTypeAssertionExpression, innerast.KindNonNullExpression:
62
- return visitor.VisitNode(current.Expression())
63
- case innerast.KindVariableDeclaration:
64
- decl := current.AsVariableDeclaration()
65
- return factory.UpdateVariableDeclaration(
66
- decl,
67
- visitor.VisitNode(decl.Name()),
68
- nil,
69
- nil,
70
- visitor.VisitNode(decl.Initializer),
71
- )
72
- case innerast.KindParameter:
73
- parameter := current.AsParameterDeclaration()
74
- return factory.UpdateParameterDeclaration(
75
- parameter,
76
- visitor.VisitModifiers(parameter.Modifiers()),
77
- visitor.VisitNode(parameter.DotDotDotToken),
78
- visitor.VisitNode(parameter.Name()),
79
- nil,
80
- nil,
81
- visitor.VisitNode(parameter.Initializer),
82
- )
83
- case innerast.KindArrowFunction:
84
- arrow := current.AsArrowFunction()
85
- return factory.UpdateArrowFunction(
86
- arrow,
87
- visitor.VisitModifiers(arrow.Modifiers()),
88
- nil,
89
- visitor.VisitNodes(arrow.Parameters),
90
- nil,
91
- nil,
92
- visitor.VisitNode(arrow.EqualsGreaterThanToken),
93
- visitor.VisitNode(arrow.Body),
94
- )
95
- case innerast.KindCallExpression:
96
- call := current.AsCallExpression()
97
- return factory.UpdateCallExpression(
98
- call,
99
- visitor.VisitNode(call.Expression),
100
- visitor.VisitNode(call.QuestionDotToken),
101
- nil,
102
- visitor.VisitNodes(call.Arguments),
103
- call.Flags,
104
- )
105
- case innerast.KindNewExpression:
106
- expr := current.AsNewExpression()
107
- return factory.UpdateNewExpression(
108
- expr,
109
- visitor.VisitNode(expr.Expression),
110
- nil,
111
- visitor.VisitNodes(expr.Arguments),
112
- )
113
- default:
114
- return visitor.VisitEachChild(current)
115
- }
116
- }, factory, innerast.NodeVisitorHooks{})
117
- return visitor.VisitNode(node)
118
- }
119
-
120
- func rewriteIdentifiers(node *innerast.Node, substitutions map[string]string) *innerast.Node {
121
- if node == nil || len(substitutions) == 0 {
122
- return node
123
- }
124
- factory := innerast.NewNodeFactory(innerast.NodeFactoryHooks{})
125
- var visitor *innerast.NodeVisitor
126
- visitor = innerast.NewNodeVisitor(func(current *innerast.Node) *innerast.Node {
127
- if current == nil {
128
- return nil
129
- }
130
- switch current.Kind {
131
- case innerast.KindIdentifier:
132
- if replacement, ok := substitutions[current.Text()]; ok {
133
- return rewriteIdentifierExpression(factory, replacement)
134
- }
135
- return current
136
- case innerast.KindVariableDeclaration:
137
- decl := current.AsVariableDeclaration()
138
- return factory.UpdateVariableDeclaration(
139
- decl,
140
- decl.Name(),
141
- nil,
142
- nil,
143
- visitor.VisitNode(decl.Initializer),
144
- )
145
- case innerast.KindParameter:
146
- parameter := current.AsParameterDeclaration()
147
- return factory.UpdateParameterDeclaration(
148
- parameter,
149
- parameter.Modifiers(),
150
- parameter.DotDotDotToken,
151
- parameter.Name(),
152
- nil,
153
- nil,
154
- visitor.VisitNode(parameter.Initializer),
155
- )
156
- case innerast.KindPropertyAssignment:
157
- assignment := current.AsPropertyAssignment()
158
- return factory.UpdatePropertyAssignment(
159
- assignment,
160
- assignment.Modifiers(),
161
- assignment.Name(),
162
- assignment.PostfixToken,
163
- nil,
164
- visitor.VisitNode(assignment.Initializer),
165
- )
166
- case innerast.KindShorthandPropertyAssignment:
167
- assignment := current.AsShorthandPropertyAssignment()
168
- name := assignment.Name()
169
- if name != nil && name.Kind == innerast.KindIdentifier {
170
- if replacement, ok := substitutions[name.Text()]; ok && assignment.ObjectAssignmentInitializer == nil {
171
- return factory.NewPropertyAssignment(
172
- assignment.Modifiers(),
173
- name,
174
- assignment.PostfixToken,
175
- nil,
176
- rewriteIdentifierExpression(factory, replacement),
177
- )
178
- }
179
- }
180
- return factory.UpdateShorthandPropertyAssignment(
181
- assignment,
182
- assignment.Modifiers(),
183
- name,
184
- assignment.PostfixToken,
185
- nil,
186
- nil,
187
- visitor.VisitNode(assignment.ObjectAssignmentInitializer),
188
- )
189
- case innerast.KindPropertyAccessExpression:
190
- access := current.AsPropertyAccessExpression()
191
- return factory.UpdatePropertyAccessExpression(
192
- access,
193
- visitor.VisitNode(access.Expression),
194
- access.QuestionDotToken,
195
- access.Name(),
196
- access.Flags,
197
- )
198
- default:
199
- return visitor.VisitEachChild(current)
200
- }
201
- }, factory, innerast.NodeVisitorHooks{})
202
- return visitor.VisitNode(node)
203
- }
204
-
205
- func rewriteIdentifierExpression(factory *innerast.NodeFactory, replacement string) *innerast.Node {
206
- parts := []string{}
207
- start := 0
208
- for i := 0; i <= len(replacement); i++ {
209
- if i == len(replacement) || replacement[i] == '.' {
210
- if start < i {
211
- parts = append(parts, replacement[start:i])
212
- }
213
- start = i + 1
214
- }
215
- }
216
- if len(parts) == 0 {
217
- return factory.NewIdentifier(replacement)
218
- }
219
- output := factory.NewIdentifier(parts[0])
220
- for _, part := range parts[1:] {
221
- output = factory.NewPropertyAccessExpression(
222
- output,
223
- nil,
224
- factory.NewIdentifier(part),
225
- innerast.NodeFlagsNone,
226
- )
227
- }
228
- return output
229
- }
230
-
231
- func normalizeSyntheticTokens(node *innerast.Node) {
232
- if node == nil {
233
- return
234
- }
235
- if node.Kind == innerast.KindConditionalExpression {
236
- conditional := node.AsConditionalExpression()
237
- factory := innerast.NewNodeFactory(innerast.NodeFactoryHooks{})
238
- if conditional.QuestionToken == nil {
239
- conditional.QuestionToken = factory.NewToken(innerast.KindQuestionToken)
240
- }
241
- if conditional.ColonToken == nil {
242
- conditional.ColonToken = factory.NewToken(innerast.KindColonToken)
243
- }
244
- }
245
- node.ForEachChild(func(child *innerast.Node) bool {
246
- normalizeSyntheticTokens(child)
247
- return false
248
- })
249
- }
@@ -1,31 +0,0 @@
1
- // Package driver wraps the typescript-go compiler so the rest of ttsc doesn't
2
- // need to know about shim packages directly. It is the only part of the engine
3
- // that imports `shim/*` by design — everything downstream consumes a small,
4
- // shim-agnostic interface (`*Program`).
5
- //
6
- // Structural note: this file is deliberately adapted from tsgonest's
7
- // `internal/compiler/host.go` (MIT, github.com/tsgonest/tsgonest).
8
- // The helper surface is the same because both hosts need the same bundled-lib
9
- // filesystem and CompilerHost construction.
10
- package driver
11
-
12
- import (
13
- "github.com/microsoft/typescript-go/shim/bundled"
14
- shimcompiler "github.com/microsoft/typescript-go/shim/compiler"
15
- "github.com/microsoft/typescript-go/shim/vfs"
16
- "github.com/microsoft/typescript-go/shim/vfs/cachedvfs"
17
- "github.com/microsoft/typescript-go/shim/vfs/osvfs"
18
- )
19
-
20
- // DefaultFS returns an OS-backed filesystem wrapped with tsgo's bundled libs so
21
- // built-in definitions (lib.es*.d.ts, dom, etc.) resolve without a network
22
- // fetch. Mirrors tsgonest/tsgolint behavior.
23
- func DefaultFS() vfs.FS {
24
- return bundled.WrapFS(cachedvfs.From(osvfs.FS()))
25
- }
26
-
27
- // DefaultHost returns a CompilerHost anchored at cwd that can find tsgo's
28
- // bundled library files via `bundled.LibPath()`.
29
- func DefaultHost(cwd string, fs vfs.FS) shimcompiler.CompilerHost {
30
- return shimcompiler.NewCompilerHost(cwd, fs, bundled.LibPath(), nil, nil)
31
- }