goscript 0.0.83 → 0.1.0

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 (197) hide show
  1. package/README.md +13 -1
  2. package/cmd/goscript/cmd_compile.go +70 -69
  3. package/cmd/goscript/cmd_compile_test.go +79 -0
  4. package/cmd/goscript/main.go +10 -5
  5. package/compiler/compile-request.go +218 -0
  6. package/compiler/compiler.go +16 -1336
  7. package/compiler/compliance_test.go +196 -0
  8. package/compiler/config.go +6 -13
  9. package/compiler/diagnostic.go +70 -0
  10. package/compiler/index.test.ts +28 -28
  11. package/compiler/index.ts +40 -72
  12. package/compiler/lowered-program.go +132 -0
  13. package/compiler/lowering.go +3576 -0
  14. package/compiler/override-registry.go +422 -0
  15. package/compiler/override-registry_test.go +207 -0
  16. package/compiler/package-graph.go +231 -0
  17. package/compiler/package-graph_test.go +281 -0
  18. package/compiler/result.go +13 -0
  19. package/compiler/runtime-contract.go +279 -0
  20. package/compiler/runtime-contract_test.go +90 -0
  21. package/compiler/semantic-model-types.go +110 -0
  22. package/compiler/semantic-model.go +922 -0
  23. package/compiler/semantic-model_test.go +416 -0
  24. package/compiler/service.go +133 -0
  25. package/compiler/skeleton_test.go +1145 -0
  26. package/compiler/typescript-emitter.go +663 -0
  27. package/compiler/wasm/compile.go +2 -3
  28. package/compiler/wasm/compile_test.go +29 -0
  29. package/compiler/wasm_api.go +10 -159
  30. package/dist/compiler/index.d.ts +1 -3
  31. package/dist/compiler/index.js +31 -55
  32. package/dist/compiler/index.js.map +1 -1
  33. package/dist/gs/builtin/builtin.d.ts +13 -0
  34. package/dist/gs/builtin/builtin.js +27 -7
  35. package/dist/gs/builtin/builtin.js.map +1 -1
  36. package/dist/gs/builtin/channel.d.ts +3 -3
  37. package/dist/gs/builtin/channel.js.map +1 -1
  38. package/dist/gs/builtin/hostio.d.ts +86 -0
  39. package/dist/gs/builtin/hostio.js +266 -0
  40. package/dist/gs/builtin/hostio.js.map +1 -0
  41. package/dist/gs/builtin/index.d.ts +1 -0
  42. package/dist/gs/builtin/index.js +1 -0
  43. package/dist/gs/builtin/index.js.map +1 -1
  44. package/dist/gs/builtin/print.d.ts +8 -0
  45. package/dist/gs/builtin/print.js +111 -0
  46. package/dist/gs/builtin/print.js.map +1 -0
  47. package/dist/gs/builtin/slice.d.ts +1 -1
  48. package/dist/gs/builtin/slice.js.map +1 -1
  49. package/dist/gs/builtin/type.d.ts +11 -0
  50. package/dist/gs/builtin/type.js +55 -1
  51. package/dist/gs/builtin/type.js.map +1 -1
  52. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  53. package/dist/gs/bytes/bytes.gs.js.map +1 -1
  54. package/dist/gs/bytes/reader.gs.js.map +1 -1
  55. package/dist/gs/context/context.js.map +1 -1
  56. package/dist/gs/crypto/rand/index.d.ts +5 -0
  57. package/dist/gs/crypto/rand/index.js +77 -0
  58. package/dist/gs/crypto/rand/index.js.map +1 -0
  59. package/dist/gs/encoding/json/index.d.ts +3 -0
  60. package/dist/gs/encoding/json/index.js +160 -0
  61. package/dist/gs/encoding/json/index.js.map +1 -0
  62. package/dist/gs/fmt/fmt.js +2 -22
  63. package/dist/gs/fmt/fmt.js.map +1 -1
  64. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +1 -1
  65. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +1 -1
  66. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  67. package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
  68. package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
  69. package/dist/gs/github.com/pkg/errors/stack.js.map +1 -1
  70. package/dist/gs/go/scanner/index.d.ts +29 -0
  71. package/dist/gs/go/scanner/index.js +120 -0
  72. package/dist/gs/go/scanner/index.js.map +1 -0
  73. package/dist/gs/go/token/index.d.ts +31 -0
  74. package/dist/gs/go/token/index.js +82 -0
  75. package/dist/gs/go/token/index.js.map +1 -0
  76. package/dist/gs/internal/abi/index.js.map +1 -1
  77. package/dist/gs/io/fs/fs.js.map +1 -1
  78. package/dist/gs/io/fs/readdir.js.map +1 -1
  79. package/dist/gs/io/fs/readfile.js.map +1 -1
  80. package/dist/gs/io/fs/stat.js.map +1 -1
  81. package/dist/gs/io/fs/sub.js.map +1 -1
  82. package/dist/gs/io/io.js.map +1 -1
  83. package/dist/gs/os/dir_unix.gs.js.map +1 -1
  84. package/dist/gs/os/error.gs.js +2 -4
  85. package/dist/gs/os/error.gs.js.map +1 -1
  86. package/dist/gs/os/exec.gs.js.map +1 -1
  87. package/dist/gs/os/exec_posix.gs.js.map +1 -1
  88. package/dist/gs/os/rawconn_js.gs.js.map +1 -1
  89. package/dist/gs/os/root_js.gs.js.map +1 -1
  90. package/dist/gs/os/tempfile.gs.js +66 -9
  91. package/dist/gs/os/tempfile.gs.js.map +1 -1
  92. package/dist/gs/os/types.gs.js.map +1 -1
  93. package/dist/gs/os/types_js.gs.d.ts +2 -51
  94. package/dist/gs/os/types_js.gs.js +67 -105
  95. package/dist/gs/os/types_js.gs.js.map +1 -1
  96. package/dist/gs/os/types_unix.gs.js.map +1 -1
  97. package/dist/gs/path/filepath/match.js.map +1 -1
  98. package/dist/gs/path/match.js.map +1 -1
  99. package/dist/gs/path/path.js.map +1 -1
  100. package/dist/gs/reflect/index.d.ts +2 -2
  101. package/dist/gs/reflect/index.js +1 -1
  102. package/dist/gs/reflect/index.js.map +1 -1
  103. package/dist/gs/reflect/map.js.map +1 -1
  104. package/dist/gs/reflect/type.d.ts +2 -1
  105. package/dist/gs/reflect/type.js +85 -14
  106. package/dist/gs/reflect/type.js.map +1 -1
  107. package/dist/gs/reflect/types.js.map +1 -1
  108. package/dist/gs/reflect/visiblefields.js.map +1 -1
  109. package/dist/gs/runtime/runtime.js.map +1 -1
  110. package/dist/gs/sort/sort.gs.js.map +1 -1
  111. package/dist/gs/strconv/atoi.gs.js.map +1 -1
  112. package/dist/gs/strconv/quote.gs.js.map +1 -1
  113. package/dist/gs/strings/builder.js.map +1 -1
  114. package/dist/gs/strings/reader.js.map +1 -1
  115. package/dist/gs/strings/replace.js.map +1 -1
  116. package/dist/gs/sync/atomic/type.gs.js.map +1 -1
  117. package/dist/gs/sync/atomic/value.gs.js.map +1 -1
  118. package/dist/gs/sync/sync.d.ts +1 -0
  119. package/dist/gs/sync/sync.js +12 -0
  120. package/dist/gs/sync/sync.js.map +1 -1
  121. package/dist/gs/time/time.js.map +1 -1
  122. package/dist/gs/unicode/unicode.js.map +1 -1
  123. package/go.mod +2 -2
  124. package/gs/builtin/builtin.ts +31 -6
  125. package/gs/builtin/hostio.test.ts +246 -0
  126. package/gs/builtin/hostio.ts +413 -0
  127. package/gs/builtin/index.ts +1 -0
  128. package/gs/builtin/print.test.ts +48 -0
  129. package/gs/builtin/print.ts +154 -0
  130. package/gs/builtin/runtime-contract.test.ts +230 -0
  131. package/gs/builtin/type.ts +84 -1
  132. package/gs/crypto/rand/index.test.ts +32 -0
  133. package/gs/crypto/rand/index.ts +90 -0
  134. package/gs/crypto/rand/meta.json +5 -0
  135. package/gs/encoding/json/index.test.ts +65 -0
  136. package/gs/encoding/json/index.ts +186 -0
  137. package/gs/fmt/fmt.test.ts +41 -30
  138. package/gs/fmt/fmt.ts +2 -22
  139. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +23 -0
  140. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +3 -1
  141. package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/meta.json +3 -1
  142. package/gs/go/scanner/index.test.ts +50 -0
  143. package/gs/go/scanner/index.ts +157 -0
  144. package/gs/go/token/index.test.ts +21 -0
  145. package/gs/go/token/index.ts +120 -0
  146. package/gs/os/file_unix_js.test.ts +103 -0
  147. package/gs/os/meta.json +1 -2
  148. package/gs/os/tempfile.gs.test.ts +85 -0
  149. package/gs/os/tempfile.gs.ts +71 -11
  150. package/gs/os/types_js.gs.ts +74 -153
  151. package/gs/reflect/index.ts +1 -1
  152. package/gs/reflect/type.ts +106 -17
  153. package/gs/reflect/typefor.test.ts +75 -0
  154. package/gs/sync/sync.test.ts +24 -0
  155. package/gs/sync/sync.ts +12 -0
  156. package/package.json +13 -13
  157. package/compiler/analysis.go +0 -3475
  158. package/compiler/analysis_test.go +0 -338
  159. package/compiler/assignment.go +0 -580
  160. package/compiler/builtin_test.go +0 -92
  161. package/compiler/code-writer.go +0 -115
  162. package/compiler/compiler_test.go +0 -149
  163. package/compiler/composite-lit.go +0 -779
  164. package/compiler/config_test.go +0 -62
  165. package/compiler/constraint.go +0 -86
  166. package/compiler/decl.go +0 -801
  167. package/compiler/expr-call-async.go +0 -188
  168. package/compiler/expr-call-builtins.go +0 -208
  169. package/compiler/expr-call-helpers.go +0 -382
  170. package/compiler/expr-call-make.go +0 -318
  171. package/compiler/expr-call-type-conversion.go +0 -520
  172. package/compiler/expr-call.go +0 -413
  173. package/compiler/expr-selector.go +0 -343
  174. package/compiler/expr-star.go +0 -82
  175. package/compiler/expr-type.go +0 -442
  176. package/compiler/expr-value.go +0 -89
  177. package/compiler/expr.go +0 -773
  178. package/compiler/field.go +0 -183
  179. package/compiler/gs_dependencies_test.go +0 -298
  180. package/compiler/lit.go +0 -322
  181. package/compiler/output.go +0 -72
  182. package/compiler/primitive.go +0 -149
  183. package/compiler/protobuf.go +0 -697
  184. package/compiler/sanitize.go +0 -100
  185. package/compiler/spec-struct.go +0 -995
  186. package/compiler/spec-value.go +0 -540
  187. package/compiler/spec.go +0 -725
  188. package/compiler/stmt-assign.go +0 -664
  189. package/compiler/stmt-for.go +0 -266
  190. package/compiler/stmt-range.go +0 -475
  191. package/compiler/stmt-select.go +0 -262
  192. package/compiler/stmt-type-switch.go +0 -147
  193. package/compiler/stmt.go +0 -1308
  194. package/compiler/type-assert.go +0 -386
  195. package/compiler/type-info.go +0 -156
  196. package/compiler/type-utils.go +0 -207
  197. package/compiler/type.go +0 -892
@@ -1,207 +0,0 @@
1
- package compiler
2
-
3
- import (
4
- "go/ast"
5
- "go/types"
6
- )
7
-
8
- // isByteSliceType checks if a type is []byte (slice of uint8)
9
- func (c *GoToTSCompiler) isByteSliceType(t types.Type) bool {
10
- if sliceType, isSlice := t.Underlying().(*types.Slice); isSlice {
11
- if basicElem, isBasic := sliceType.Elem().(*types.Basic); isBasic && basicElem.Kind() == types.Uint8 {
12
- return true
13
- }
14
- }
15
- return false
16
- }
17
-
18
- // isRuneSliceType checks if a type is []rune (slice of int32)
19
- func (c *GoToTSCompiler) isRuneSliceType(t types.Type) bool {
20
- if sliceType, isSlice := t.Underlying().(*types.Slice); isSlice {
21
- if basicElem, isBasic := sliceType.Elem().(*types.Basic); isBasic && basicElem.Kind() == types.Int32 {
22
- return true
23
- }
24
- }
25
- return false
26
- }
27
-
28
- // isStringType checks if a type is string or could be string (e.g., type parameter)
29
- func (c *GoToTSCompiler) isStringType(t types.Type) bool {
30
- if basic, isBasic := t.Underlying().(*types.Basic); isBasic {
31
- return basic.Kind() == types.String || basic.Kind() == types.UntypedString
32
- }
33
- // Handle type parameters (e.g., Bytes ~[]byte | ~string)
34
- if typeParam, isTypeParam := t.(*types.TypeParam); isTypeParam {
35
- constraint := typeParam.Constraint()
36
- if constraintIface, ok := constraint.(*types.Interface); ok {
37
- return c.constraintIncludesString(constraintIface)
38
- }
39
- }
40
- return false
41
- }
42
-
43
- // constraintIncludesString checks if a type constraint includes string
44
- func (c *GoToTSCompiler) constraintIncludesString(constraint *types.Interface) bool {
45
- // Check if the constraint has type terms that include string
46
- if constraint.IsMethodSet() {
47
- return false // Pure method interface, no type terms
48
- }
49
- // For union constraints like []byte | string, check each term
50
- for embedded := range constraint.EmbeddedTypes() {
51
- // Check if embedded is a union
52
- if union, isUnion := embedded.(*types.Union); isUnion {
53
- for term := range union.Terms() {
54
- termType := term.Type()
55
- // Check if term is string or ~string
56
- if basic, isBasic := termType.Underlying().(*types.Basic); isBasic {
57
- if basic.Kind() == types.String {
58
- return true
59
- }
60
- }
61
- }
62
- }
63
- // Check direct embedded type
64
- if basic, isBasic := embedded.Underlying().(*types.Basic); isBasic {
65
- if basic.Kind() == types.String {
66
- return true
67
- }
68
- }
69
- }
70
- return false
71
- }
72
-
73
- // isPointerType checks if a type expression represents a pointer type
74
- func (c *GoToTSCompiler) isPointerType(expr ast.Expr) bool {
75
- _, isPointer := expr.(*ast.StarExpr)
76
- return isPointer
77
- }
78
-
79
- // isProtobufType checks if a given type is a protobuf type by examining its methods
80
- // and, when available, by verifying it implements the protobuf-go-lite Message interface.
81
- func (c *GoToTSCompiler) isProtobufType(typ types.Type) bool {
82
- // Normalize to a named type if possible
83
- var named *types.Named
84
- switch t := typ.(type) {
85
- case *types.Named:
86
- named = t
87
- case *types.Pointer:
88
- if n, ok := t.Elem().(*types.Named); ok {
89
- named = n
90
- }
91
- }
92
- if named == nil {
93
- return false
94
- }
95
-
96
- // Prefer interface-based detection when the protobuf-go-lite package is loaded
97
- if iface := c.getProtobufMessageInterface(); iface != nil {
98
- if types.Implements(named, iface) || types.Implements(types.NewPointer(named), iface) {
99
- return true
100
- }
101
- }
102
-
103
- // Fallback: method-set detection for common protobuf-go-lite methods
104
- // Check both value and pointer method sets
105
- if c.typeHasMethods(named, "MarshalVT", "UnmarshalVT") || c.typeHasMethods(types.NewPointer(named), "MarshalVT", "UnmarshalVT") {
106
- return true
107
- }
108
-
109
- return false
110
- }
111
-
112
- // isWrapperType checks if a type should be treated as a wrapper type (type alias with basic underlying type).
113
- // Wrapper types are rendered as TypeScript type aliases rather than classes with constructors.
114
- // Examples: os.FileMode (uint32), MyString (string), etc.
115
- func (c *GoToTSCompiler) isWrapperType(t types.Type) bool {
116
- // Check analysis cache first (for types with methods in analyzed packages)
117
- if c.analysis.IsNamedBasicType(t) {
118
- return true
119
- }
120
-
121
- // For external package types, check if it's a named type with a basic underlying type
122
- if namedType, ok := t.(*types.Named); ok {
123
- if _, ok := namedType.Underlying().(*types.Basic); ok {
124
- return true
125
- }
126
- }
127
-
128
- // Also check for type aliases with basic underlying types
129
- if aliasType, ok := t.(*types.Alias); ok {
130
- if _, ok := aliasType.Underlying().(*types.Basic); ok {
131
- return true
132
- }
133
- }
134
-
135
- return false
136
- }
137
-
138
- // isStructValueType checks if a type is a named struct type
139
- func (c *GoToTSCompiler) isStructValueType(fieldType types.Type) bool {
140
- if named, ok := fieldType.(*types.Named); ok {
141
- if _, isStruct := named.Underlying().(*types.Struct); isStruct {
142
- return true
143
- }
144
- }
145
- return false
146
- }
147
-
148
- // isImportedBasicType checks if a type is an imported named type with a basic underlying type
149
- func (c *GoToTSCompiler) isImportedBasicType(fieldType types.Type) bool {
150
- // Handle named types
151
- if named, isNamed := fieldType.(*types.Named); isNamed {
152
- obj := named.Obj()
153
- if obj == nil || obj.Pkg() == nil || obj.Pkg() == c.pkg.Types {
154
- return false // Not imported or is local
155
- }
156
-
157
- underlying := named.Underlying()
158
- if underlying == nil {
159
- return false
160
- }
161
-
162
- _, isBasic := underlying.(*types.Basic)
163
- return isBasic
164
- }
165
-
166
- // Handle type aliases (like os.FileMode = fs.FileMode)
167
- if alias, isAlias := fieldType.(*types.Alias); isAlias {
168
- obj := alias.Obj()
169
- if obj == nil || obj.Pkg() == nil || obj.Pkg() == c.pkg.Types {
170
- return false // Not imported or is local
171
- }
172
-
173
- underlying := alias.Underlying()
174
- if underlying == nil {
175
- return false
176
- }
177
-
178
- _, isBasic := underlying.(*types.Basic)
179
- return isBasic
180
- }
181
-
182
- return false
183
- }
184
-
185
- // isMapType checks if a type is a map type (including type parameters constrained to maps)
186
- func (c *GoToTSCompiler) isMapType(iterType, underlying types.Type) bool {
187
- if _, ok := underlying.(*types.Map); ok {
188
- return true
189
- }
190
- if typeParam, isTypeParam := iterType.(*types.TypeParam); isTypeParam {
191
- constraint := typeParam.Constraint()
192
- if constraint != nil {
193
- constraintUnderlying := constraint.Underlying()
194
- if iface, isInterface := constraintUnderlying.(*types.Interface); isInterface {
195
- return hasMapConstraint(iface)
196
- }
197
- }
198
- }
199
- return false
200
- }
201
-
202
- // isArrayOrSlice checks if a type is an array or slice type
203
- func (c *GoToTSCompiler) isArrayOrSlice(underlying types.Type) bool {
204
- _, isSlice := underlying.(*types.Slice)
205
- _, isArray := underlying.(*types.Array)
206
- return isArray || isSlice
207
- }