goscript 0.0.38 → 0.0.40

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 (180) hide show
  1. package/compiler/analysis.go +15 -6
  2. package/compiler/compiler.go +184 -34
  3. package/compiler/expr-call.go +19 -9
  4. package/compiler/field.go +17 -3
  5. package/compiler/gs_dependencies_test.go +80 -0
  6. package/compiler/lit.go +12 -6
  7. package/compiler/output.go +10 -4
  8. package/compiler/spec.go +15 -2
  9. package/compiler/type-assert.go +111 -21
  10. package/compiler/type.go +37 -8
  11. package/dist/gs/builtin/builtin.d.ts +55 -0
  12. package/dist/gs/builtin/builtin.js +213 -0
  13. package/dist/gs/builtin/builtin.js.map +1 -1
  14. package/dist/gs/builtin/slice.js +13 -0
  15. package/dist/gs/builtin/slice.js.map +1 -1
  16. package/dist/gs/bytes/buffer.gs.d.ts +56 -0
  17. package/dist/gs/bytes/buffer.gs.js +611 -0
  18. package/dist/gs/bytes/buffer.gs.js.map +1 -0
  19. package/dist/gs/bytes/bytes.gs.d.ts +78 -0
  20. package/dist/gs/bytes/bytes.gs.js +1107 -0
  21. package/dist/gs/bytes/bytes.gs.js.map +1 -0
  22. package/dist/gs/bytes/index.d.ts +4 -0
  23. package/dist/gs/bytes/index.js +5 -0
  24. package/dist/gs/bytes/index.js.map +1 -0
  25. package/dist/gs/bytes/iter.gs.d.ts +9 -0
  26. package/dist/gs/bytes/iter.gs.js +143 -0
  27. package/dist/gs/bytes/iter.gs.js.map +1 -0
  28. package/dist/gs/bytes/reader.gs.d.ts +34 -0
  29. package/dist/gs/bytes/reader.gs.js +198 -0
  30. package/dist/gs/bytes/reader.gs.js.map +1 -0
  31. package/dist/gs/fmt/fmt.d.ts +49 -0
  32. package/dist/gs/fmt/fmt.js +322 -0
  33. package/dist/gs/fmt/fmt.js.map +1 -0
  34. package/dist/gs/fmt/index.d.ts +1 -0
  35. package/dist/gs/fmt/index.js +2 -0
  36. package/dist/gs/fmt/index.js.map +1 -0
  37. package/dist/gs/internal/bytealg/index.d.ts +14 -2
  38. package/dist/gs/internal/bytealg/index.js +114 -8
  39. package/dist/gs/internal/bytealg/index.js.map +1 -1
  40. package/dist/gs/path/filepath/index.d.ts +3 -0
  41. package/dist/gs/path/filepath/index.js +3 -0
  42. package/dist/gs/path/filepath/index.js.map +1 -0
  43. package/dist/gs/path/filepath/match.d.ts +3 -0
  44. package/dist/gs/path/filepath/match.js +212 -0
  45. package/dist/gs/path/filepath/match.js.map +1 -0
  46. package/dist/gs/path/filepath/path.d.ts +25 -0
  47. package/dist/gs/path/filepath/path.js +265 -0
  48. package/dist/gs/path/filepath/path.js.map +1 -0
  49. package/dist/gs/reflect/deepequal.d.ts +2 -1
  50. package/dist/gs/reflect/deepequal.js +5 -53
  51. package/dist/gs/reflect/deepequal.js.map +1 -1
  52. package/dist/gs/reflect/map.d.ts +14 -8
  53. package/dist/gs/reflect/map.js +15 -11
  54. package/dist/gs/reflect/map.js.map +1 -1
  55. package/dist/gs/reflect/type.d.ts +17 -9
  56. package/dist/gs/reflect/type.js +1 -1
  57. package/dist/gs/reflect/type.js.map +1 -1
  58. package/dist/gs/reflect/value.js +15 -6
  59. package/dist/gs/reflect/value.js.map +1 -1
  60. package/dist/gs/reflect/visiblefields.js +18 -12
  61. package/dist/gs/reflect/visiblefields.js.map +1 -1
  62. package/dist/gs/sort/index.d.ts +4 -0
  63. package/dist/gs/sort/index.js +4 -0
  64. package/dist/gs/sort/index.js.map +1 -0
  65. package/dist/gs/sort/search.gs.d.ts +6 -0
  66. package/dist/gs/sort/search.gs.js +125 -0
  67. package/dist/gs/sort/search.gs.js.map +1 -0
  68. package/dist/gs/sort/slice.gs.d.ts +4 -0
  69. package/dist/gs/sort/slice.gs.js +49 -0
  70. package/dist/gs/sort/slice.gs.js.map +1 -0
  71. package/dist/gs/sort/sort.gs.d.ts +37 -0
  72. package/dist/gs/sort/sort.gs.js +203 -0
  73. package/dist/gs/sort/sort.gs.js.map +1 -0
  74. package/dist/gs/unicode/utf8/utf8.d.ts +1 -1
  75. package/dist/gs/unicode/utf8/utf8.js +4 -2
  76. package/dist/gs/unicode/utf8/utf8.js.map +1 -1
  77. package/gs/builtin/builtin.ts +236 -0
  78. package/gs/builtin/slice.ts +17 -1
  79. package/gs/bytes/buffer.gs.ts +614 -0
  80. package/gs/bytes/bytes.gs.ts +1288 -0
  81. package/gs/bytes/godoc.txt +69 -0
  82. package/gs/bytes/index.ts +69 -0
  83. package/gs/bytes/iter.gs.ts +149 -0
  84. package/gs/bytes/metadata.go +12 -0
  85. package/gs/bytes/reader.gs.ts +230 -0
  86. package/gs/fmt/fmt.ts +407 -0
  87. package/gs/fmt/godoc.txt +382 -0
  88. package/gs/fmt/index.ts +31 -0
  89. package/gs/fmt/metadata.go +7 -0
  90. package/gs/internal/bytealg/index.ts +125 -10
  91. package/gs/internal/metadata.go +7 -0
  92. package/gs/io/metadata.go +11 -0
  93. package/gs/maps/metadata.go +8 -0
  94. package/gs/math/metadata.go +7 -0
  95. package/gs/os/metadata.go +17 -0
  96. package/gs/path/filepath/godoc.txt +35 -0
  97. package/gs/path/filepath/index.ts +27 -0
  98. package/gs/path/filepath/match.test.ts +274 -0
  99. package/gs/path/filepath/match.ts +249 -0
  100. package/gs/path/filepath/path.test.ts +246 -0
  101. package/gs/path/filepath/path.ts +328 -0
  102. package/gs/path/metadata.go +8 -0
  103. package/gs/reflect/deepequal.test.ts +41 -0
  104. package/gs/reflect/deepequal.ts +19 -4
  105. package/gs/reflect/map.test.ts +30 -0
  106. package/gs/reflect/map.ts +22 -18
  107. package/gs/reflect/metadata.go +7 -0
  108. package/gs/reflect/type.ts +19 -15
  109. package/gs/reflect/value.ts +21 -7
  110. package/gs/reflect/visiblefields.ts +17 -13
  111. package/gs/sort/godoc.txt +27 -0
  112. package/gs/sort/index.ts +24 -0
  113. package/gs/sort/search.gs.ts +128 -0
  114. package/gs/sort/slice.gs.ts +59 -0
  115. package/gs/sort/sort.gs.ts +227 -0
  116. package/gs/strconv/metadata.go +7 -0
  117. package/gs/strings/metadata.go +11 -0
  118. package/gs/sync/metadata.go +7 -0
  119. package/gs/unicode/utf8/utf8.ts +8 -5
  120. package/package.json +1 -1
  121. package/dist/gs/internal/testlog/index.d.ts +0 -1
  122. package/dist/gs/internal/testlog/index.js +0 -5
  123. package/dist/gs/internal/testlog/index.js.map +0 -1
  124. package/dist/gs/maps/iter.gs.d.ts +0 -7
  125. package/dist/gs/maps/iter.gs.js +0 -65
  126. package/dist/gs/maps/iter.gs.js.map +0 -1
  127. package/dist/gs/maps/maps.gs.d.ts +0 -7
  128. package/dist/gs/maps/maps.gs.js +0 -79
  129. package/dist/gs/maps/maps.gs.js.map +0 -1
  130. package/dist/gs/reflect/abi.d.ts +0 -59
  131. package/dist/gs/reflect/abi.gs.d.ts +0 -59
  132. package/dist/gs/reflect/abi.gs.js +0 -79
  133. package/dist/gs/reflect/abi.gs.js.map +0 -1
  134. package/dist/gs/reflect/abi.js +0 -79
  135. package/dist/gs/reflect/abi.js.map +0 -1
  136. package/dist/gs/reflect/badlinkname.d.ts +0 -52
  137. package/dist/gs/reflect/badlinkname.gs.d.ts +0 -52
  138. package/dist/gs/reflect/badlinkname.gs.js +0 -72
  139. package/dist/gs/reflect/badlinkname.gs.js.map +0 -1
  140. package/dist/gs/reflect/badlinkname.js +0 -72
  141. package/dist/gs/reflect/badlinkname.js.map +0 -1
  142. package/dist/gs/reflect/deepequal.gs.d.ts +0 -25
  143. package/dist/gs/reflect/deepequal.gs.js +0 -308
  144. package/dist/gs/reflect/deepequal.gs.js.map +0 -1
  145. package/dist/gs/reflect/float32reg_generic.gs.d.ts +0 -2
  146. package/dist/gs/reflect/float32reg_generic.gs.js +0 -10
  147. package/dist/gs/reflect/float32reg_generic.gs.js.map +0 -1
  148. package/dist/gs/reflect/index.gs.d.ts +0 -1
  149. package/dist/gs/reflect/index.gs.js +0 -3
  150. package/dist/gs/reflect/index.gs.js.map +0 -1
  151. package/dist/gs/reflect/iter.gs.d.ts +0 -3
  152. package/dist/gs/reflect/iter.gs.js +0 -24
  153. package/dist/gs/reflect/iter.gs.js.map +0 -1
  154. package/dist/gs/reflect/makefunc.gs.d.ts +0 -34
  155. package/dist/gs/reflect/makefunc.gs.js +0 -288
  156. package/dist/gs/reflect/makefunc.gs.js.map +0 -1
  157. package/dist/gs/reflect/map_swiss.gs.d.ts +0 -14
  158. package/dist/gs/reflect/map_swiss.gs.js +0 -70
  159. package/dist/gs/reflect/map_swiss.gs.js.map +0 -1
  160. package/dist/gs/reflect/reflect.gs.d.ts +0 -132
  161. package/dist/gs/reflect/reflect.gs.js +0 -437
  162. package/dist/gs/reflect/reflect.gs.js.map +0 -1
  163. package/dist/gs/reflect/swapper.gs.d.ts +0 -1
  164. package/dist/gs/reflect/swapper.gs.js +0 -32
  165. package/dist/gs/reflect/swapper.gs.js.map +0 -1
  166. package/dist/gs/reflect/type.gs.d.ts +0 -4
  167. package/dist/gs/reflect/type.gs.js +0 -21
  168. package/dist/gs/reflect/type.gs.js.map +0 -1
  169. package/dist/gs/reflect/value.gs.d.ts +0 -4
  170. package/dist/gs/reflect/value.gs.js +0 -12
  171. package/dist/gs/reflect/value.gs.js.map +0 -1
  172. package/dist/gs/reflect/visiblefields.gs.d.ts +0 -3
  173. package/dist/gs/reflect/visiblefields.gs.js +0 -123
  174. package/dist/gs/reflect/visiblefields.gs.js.map +0 -1
  175. package/dist/gs/stringslite/index.d.ts +0 -1
  176. package/dist/gs/stringslite/index.js +0 -2
  177. package/dist/gs/stringslite/index.js.map +0 -1
  178. package/dist/gs/stringslite/strings.d.ts +0 -11
  179. package/dist/gs/stringslite/strings.js +0 -67
  180. package/dist/gs/stringslite/strings.js.map +0 -1
@@ -47,22 +47,32 @@ func (c *GoToTSCompiler) writeTypeAssert(lhs []ast.Expr, typeAssertExpr *ast.Typ
47
47
  }
48
48
 
49
49
  var okIsBlank bool
50
- var okName string
50
+ var okIsSelectorExpr bool
51
+ var okIdent *ast.Ident
52
+ var okSelectorExpr *ast.SelectorExpr
51
53
 
52
54
  okExpr := lhs[1]
53
- okIdent, ok := okExpr.(*ast.Ident)
54
- if !ok {
55
- return fmt.Errorf("ok expression is not an identifier: %T", okExpr)
55
+
56
+ // Handle different types of ok expressions
57
+ switch okE := okExpr.(type) {
58
+ case *ast.Ident:
59
+ okIdent = okE
60
+ okIsBlank = okIdent.Name == "_"
61
+ case *ast.SelectorExpr:
62
+ okSelectorExpr = okE
63
+ okIsSelectorExpr = true
64
+ okIsBlank = false // Selector expressions can't be blank
65
+ default:
66
+ return fmt.Errorf("ok expression must be an identifier or selector expression, got: %T", okExpr)
56
67
  }
57
- okIsBlank = okIdent.Name == "_"
58
- okName = okIdent.Name
59
68
 
60
69
  valueExpr := lhs[0]
61
70
 
62
71
  // Determine if 'ok' variable is new in 'tok == token.DEFINE' context.
63
72
  // This uses types.Info.Defs to see if the identifier is defined by this statement.
64
73
  var okIsNewInDefine bool
65
- if tok == token.DEFINE && !okIsBlank {
74
+ if tok == token.DEFINE && !okIsBlank && !okIsSelectorExpr {
75
+ // Only applies to identifiers, not selector expressions
66
76
  if c.pkg.TypesInfo.Defs[okIdent] != nil {
67
77
  okIsNewInDefine = true
68
78
  }
@@ -83,6 +93,64 @@ func (c *GoToTSCompiler) writeTypeAssert(lhs []ast.Expr, typeAssertExpr *ast.Typ
83
93
  }
84
94
  }
85
95
 
96
+ // For selector expressions as ok, we need to use temporary variables approach
97
+ if okIsSelectorExpr {
98
+ // Use temporary variables approach similar to SelectorExpr case
99
+ tempValName := "_gs_ta_val_" // Fixed name for temporary value
100
+ tempOkName := "_gs_ta_ok_" // Fixed name for temporary ok status
101
+
102
+ // Declare temporary variables:
103
+ // let _gs_ta_val_: AssertedTypeTS;
104
+ c.tsw.WriteLiterally("let ")
105
+ c.tsw.WriteLiterally(tempValName)
106
+ c.tsw.WriteLiterally(": ")
107
+ c.WriteTypeExpr(assertedType) // TypeScript type for assertedType
108
+ c.tsw.WriteLine("")
109
+
110
+ // let _gs_ta_ok_: boolean;
111
+ c.tsw.WriteLiterally("let ")
112
+ c.tsw.WriteLiterally(tempOkName)
113
+ c.tsw.WriteLiterally(": boolean")
114
+ c.tsw.WriteLine("")
115
+
116
+ // Perform type assertion into temporary variables:
117
+ // ({ value: _gs_ta_val_, ok: _gs_ta_ok_ } = $.typeAssert<AssertedTypeTS>(expr, "GoTypeStr"));
118
+ c.tsw.WriteLiterally("({ value: ")
119
+ c.tsw.WriteLiterally(tempValName)
120
+ c.tsw.WriteLiterally(", ok: ")
121
+ c.tsw.WriteLiterally(tempOkName)
122
+ c.tsw.WriteLiterally(" } = $.typeAssert<")
123
+ c.WriteTypeExpr(assertedType) // Generic: <AssertedTypeTS>
124
+ c.tsw.WriteLiterally(">(")
125
+ if err := c.WriteValueExpr(interfaceExpr); err != nil { // Arg1: interfaceExpr
126
+ return fmt.Errorf("failed to write interface expression in type assertion call: %w", err)
127
+ }
128
+ c.tsw.WriteLiterally(", ")
129
+ c.writeTypeDescription(assertedType) // Arg2: type info for runtime
130
+ c.tsw.WriteLine("))")
131
+
132
+ // Assign temporary value to the value variable:
133
+ if !valueIsBlank {
134
+ if valueIsNewInDefine {
135
+ c.tsw.WriteLiterally("let ")
136
+ }
137
+ c.tsw.WriteLiterally(valueName)
138
+ c.tsw.WriteLiterally(" = ")
139
+ c.tsw.WriteLiterally(tempValName)
140
+ c.tsw.WriteLine("")
141
+ }
142
+
143
+ // Assign temporary ok to the selector expression:
144
+ if err := c.WriteValueExpr(okSelectorExpr); err != nil {
145
+ return fmt.Errorf("failed to write ok selector expression in type assertion: %w", err)
146
+ }
147
+ c.tsw.WriteLiterally(" = ")
148
+ c.tsw.WriteLiterally(tempOkName)
149
+ c.tsw.WriteLine("")
150
+
151
+ return nil
152
+ }
153
+
86
154
  writeEndParen := false // For wrapping assignment in parens to make it an expression
87
155
  letDestructure := false // True if 'let { value: v, ok: o } = ...' is appropriate
88
156
 
@@ -103,7 +171,7 @@ func (c *GoToTSCompiler) writeTypeAssert(lhs []ast.Expr, typeAssertExpr *ast.Typ
103
171
  }
104
172
  if !okIsBlank && okIsNewInDefine {
105
173
  c.tsw.WriteLiterally("let ")
106
- c.tsw.WriteLiterally(okName)
174
+ c.tsw.WriteLiterally(okIdent.Name)
107
175
  c.tsw.WriteLiterally(": boolean")
108
176
  c.tsw.WriteLine("")
109
177
  }
@@ -129,7 +197,7 @@ func (c *GoToTSCompiler) writeTypeAssert(lhs []ast.Expr, typeAssertExpr *ast.Typ
129
197
  parts = append(parts, fmt.Sprintf("value: %s", valueName))
130
198
  }
131
199
  if !okIsBlank {
132
- parts = append(parts, fmt.Sprintf("ok: %s", okName))
200
+ parts = append(parts, fmt.Sprintf("ok: %s", okIdent.Name))
133
201
  }
134
202
  c.tsw.WriteLiterally(strings.Join(parts, ", "))
135
203
  c.tsw.WriteLiterally(" } = $.typeAssert<")
@@ -193,13 +261,24 @@ func (c *GoToTSCompiler) writeTypeAssert(lhs []ast.Expr, typeAssertExpr *ast.Typ
193
261
 
194
262
  // Assign temporary ok to the ok variable (e.g., okName = _gs_ta_ok_; or let okName = ...)
195
263
  if !okIsBlank {
196
- if okIsNewInDefine { // okIsNewInDefine was determined earlier based on tok == token.DEFINE and Defs check
197
- c.tsw.WriteLiterally("let ")
264
+ if okIsSelectorExpr {
265
+ // Assign to selector expression
266
+ if err := c.WriteValueExpr(okSelectorExpr); err != nil {
267
+ return fmt.Errorf("failed to write ok selector expression in type assertion: %w", err)
268
+ }
269
+ c.tsw.WriteLiterally(" = ")
270
+ c.tsw.WriteLiterally(tempOkName)
271
+ c.tsw.WriteLine("")
272
+ } else {
273
+ // Assign to identifier
274
+ if okIsNewInDefine { // okIsNewInDefine was determined earlier based on tok == token.DEFINE and Defs check
275
+ c.tsw.WriteLiterally("let ")
276
+ }
277
+ c.tsw.WriteLiterally(okIdent.Name)
278
+ c.tsw.WriteLiterally(" = ")
279
+ c.tsw.WriteLiterally(tempOkName)
280
+ c.tsw.WriteLine("")
198
281
  }
199
- c.tsw.WriteLiterally(okName)
200
- c.tsw.WriteLiterally(" = ")
201
- c.tsw.WriteLiterally(tempOkName)
202
- c.tsw.WriteLine("")
203
282
  }
204
283
 
205
284
  case *ast.IndexExpr:
@@ -279,13 +358,24 @@ func (c *GoToTSCompiler) writeTypeAssert(lhs []ast.Expr, typeAssertExpr *ast.Typ
279
358
 
280
359
  // Assign temporary ok to the ok variable (e.g., okName = _gs_ta_ok_N_; or let okName = ...)
281
360
  if !okIsBlank {
282
- if okIsNewInDefine { // okIsNewInDefine was determined earlier based on tok == token.DEFINE and Defs check
283
- c.tsw.WriteLiterally("let ")
361
+ if okIsSelectorExpr {
362
+ // Assign to selector expression
363
+ if err := c.WriteValueExpr(okSelectorExpr); err != nil {
364
+ return fmt.Errorf("failed to write ok selector expression in type assertion: %w", err)
365
+ }
366
+ c.tsw.WriteLiterally(" = ")
367
+ c.tsw.WriteLiterally(tempOkName)
368
+ c.tsw.WriteLine("")
369
+ } else {
370
+ // Assign to identifier
371
+ if okIsNewInDefine { // okIsNewInDefine was determined earlier based on tok == token.DEFINE and Defs check
372
+ c.tsw.WriteLiterally("let ")
373
+ }
374
+ c.tsw.WriteLiterally(okIdent.Name)
375
+ c.tsw.WriteLiterally(" = ")
376
+ c.tsw.WriteLiterally(tempOkName)
377
+ c.tsw.WriteLine("")
284
378
  }
285
- c.tsw.WriteLiterally(okName)
286
- c.tsw.WriteLiterally(" = ")
287
- c.tsw.WriteLiterally(tempOkName)
288
- c.tsw.WriteLine("")
289
379
  }
290
380
 
291
381
  default:
package/compiler/type.go CHANGED
@@ -9,16 +9,18 @@ import (
9
9
  )
10
10
 
11
11
  // GoTypeContext specifies the context in which a Go type is being translated to TypeScript.
12
- // This affects how certain types (especially pointers) are handled.
12
+ // This affects how certain types are handled, particularly interfaces and pointers.
13
13
  type GoTypeContext int
14
14
 
15
15
  const (
16
16
  // GoTypeContextGeneral is used for general type translation
17
17
  GoTypeContextGeneral GoTypeContext = iota
18
18
  // GoTypeContextFunctionReturn is used when translating types for function return values.
19
- // In this context, pointer-to-struct types become `ClassName | null` instead of
20
- // `$.VarRef<ClassName> | null` because function return values cannot be addressed.
19
+ // This affects how pointer types are handled (no VarRef wrapper for structs).
21
20
  GoTypeContextFunctionReturn
21
+ // GoTypeContextVariadicParam is used when translating types for variadic parameter elements.
22
+ // This affects how interface{} types are handled (no null prefix).
23
+ GoTypeContextVariadicParam
22
24
  )
23
25
 
24
26
  // WriteGoType is the main dispatcher for translating Go types to their TypeScript
@@ -29,6 +31,7 @@ const (
29
31
  // - GoTypeContextGeneral: Standard type translation
30
32
  // - GoTypeContextFunctionReturn: Special handling for function return types where
31
33
  // pointer-to-struct types become `ClassName | null` instead of `$.VarRef<ClassName> | null`
34
+ // - GoTypeContextVariadicParam: Special handling for variadic parameter elements
32
35
  //
33
36
  // It handles nil types as 'any' with a comment, and dispatches to appropriate
34
37
  // type-specific writers for all other recognized Go types.
@@ -59,7 +62,11 @@ func (c *GoToTSCompiler) WriteGoType(typ types.Type, context GoTypeContext) {
59
62
  case *types.Chan:
60
63
  c.WriteChannelType(t)
61
64
  case *types.Interface:
62
- c.WriteInterfaceType(t, nil) // No ast.InterfaceType available here
65
+ if context == GoTypeContextVariadicParam {
66
+ c.writeInterfaceStructure(t, nil) // Skip the "null |" prefix for variadic params
67
+ } else {
68
+ c.WriteInterfaceType(t, nil) // No ast.InterfaceType available here
69
+ }
63
70
  case *types.Signature:
64
71
  c.WriteSignatureType(t)
65
72
  case *types.Struct:
@@ -230,12 +237,34 @@ func (c *GoToTSCompiler) WriteNamedType(t *types.Named) {
230
237
  if typePkg != nil && typePkg != c.pkg.Types {
231
238
  // This type is from an imported package, find the import alias
232
239
  typePkgPath := typePkg.Path()
240
+ typePkgName := typePkg.Name() // Get the actual package name
233
241
 
234
- // Try to find the import alias by matching the package path
242
+ // Try to find the import alias by matching the package name or path
235
243
  for importAlias := range c.analysis.Imports {
236
- // The importAlias could be either the explicit alias or the default package name
237
- // If it's the default package name, it should match the last segment of the path
238
- defaultPkgName := packageNameFromGoPath(typePkgPath)
244
+ // First, try to match by the actual package name
245
+ if importAlias == typePkgName {
246
+ // Write the qualified name: importAlias.TypeName
247
+ c.tsw.WriteLiterally(importAlias)
248
+ c.tsw.WriteLiterally(".")
249
+ c.tsw.WriteLiterally(t.Obj().Name())
250
+
251
+ // For generic types, include type arguments
252
+ if t.TypeArgs() != nil && t.TypeArgs().Len() > 0 {
253
+ c.tsw.WriteLiterally("<")
254
+ for i := 0; i < t.TypeArgs().Len(); i++ {
255
+ if i > 0 {
256
+ c.tsw.WriteLiterally(", ")
257
+ }
258
+ c.WriteGoType(t.TypeArgs().At(i), GoTypeContextGeneral)
259
+ }
260
+ c.tsw.WriteLiterally(">")
261
+ }
262
+ return
263
+ }
264
+
265
+ // Fallback: try to match by path-based package name (for backwards compatibility)
266
+ pts := strings.Split(typePkgPath, "/")
267
+ defaultPkgName := pts[len(pts)-1]
239
268
  if importAlias == defaultPkgName || importAlias == typePkgPath {
240
269
  // Write the qualified name: importAlias.TypeName
241
270
  c.tsw.WriteLiterally(importAlias)
@@ -34,3 +34,58 @@ export declare function normalizeBytes(bytes: Uint8Array | number[] | null | und
34
34
  * @param s The slice to sort in place
35
35
  */
36
36
  export declare function sortSlice<T extends string | number>(s: Slice<T>): void;
37
+ /**
38
+ * bytesEqual efficiently compares two byte slices for equality.
39
+ * Optimized for different byte representations.
40
+ */
41
+ export declare function bytesEqual(a: Bytes | null, b: Bytes | null): boolean;
42
+ /**
43
+ * bytesCompare compares two byte slices lexicographically.
44
+ * Returns -1 if a < b, 0 if a == b, +1 if a > b.
45
+ */
46
+ export declare function bytesCompare(a: Bytes | null, b: Bytes | null): number;
47
+ /**
48
+ * bytesToArray converts any Bytes representation to a number array.
49
+ */
50
+ export declare function bytesToArray(bytes: Bytes | null): number[];
51
+ /**
52
+ * bytesToUint8Array converts any Bytes representation to a Uint8Array.
53
+ */
54
+ export declare function bytesToUint8Array(bytes: Bytes | null): Uint8Array;
55
+ /**
56
+ * bytesIndexOf finds the first occurrence of subslice in bytes.
57
+ * Returns -1 if not found.
58
+ */
59
+ export declare function bytesIndexOf(bytes: Bytes | null, subslice: Bytes | null): number;
60
+ /**
61
+ * bytesLastIndexOf finds the last occurrence of subslice in bytes.
62
+ * Returns -1 if not found.
63
+ */
64
+ export declare function bytesLastIndexOf(bytes: Bytes | null, subslice: Bytes | null): number;
65
+ /**
66
+ * bytesIndexByte finds the first occurrence of byte c in bytes.
67
+ * Returns -1 if not found.
68
+ */
69
+ export declare function bytesIndexByte(bytes: Bytes | null, c: number): number;
70
+ /**
71
+ * bytesLastIndexByte finds the last occurrence of byte c in bytes.
72
+ * Returns -1 if not found.
73
+ */
74
+ export declare function bytesLastIndexByte(bytes: Bytes | null, c: number): number;
75
+ /**
76
+ * bytesCount counts non-overlapping instances of sep in bytes.
77
+ */
78
+ export declare function bytesCount(bytes: Bytes | null, sep: Bytes | null): number;
79
+ export declare function min(a: number, b: number): number;
80
+ export declare function max(a: number, b: number): number;
81
+ /**
82
+ * Converts a rune (number) or string to a string.
83
+ * This is used to replace String.fromCharCode() in Go string(rune) conversions.
84
+ * Since sometimes single-char rune literals are compiled to strings, this function
85
+ * needs to handle both numbers (runes) and strings.
86
+ *
87
+ * @param runeOrString A rune (Unicode code point as number) or a string
88
+ * @returns The resulting string
89
+ */
90
+ export declare function runeOrStringToString(runeOrString: number | string): string;
91
+ export declare function recover(): any;
@@ -165,4 +165,217 @@ export function sortSlice(s) {
165
165
  return;
166
166
  }
167
167
  }
168
+ /**
169
+ * bytesEqual efficiently compares two byte slices for equality.
170
+ * Optimized for different byte representations.
171
+ */
172
+ export function bytesEqual(a, b) {
173
+ // Handle null cases
174
+ if (a === null && b === null)
175
+ return true;
176
+ if (a === null || b === null)
177
+ return false;
178
+ // Convert to arrays for comparison
179
+ const aArr = bytesToArray(a);
180
+ const bArr = bytesToArray(b);
181
+ if (aArr.length !== bArr.length)
182
+ return false;
183
+ for (let i = 0; i < aArr.length; i++) {
184
+ if (aArr[i] !== bArr[i])
185
+ return false;
186
+ }
187
+ return true;
188
+ }
189
+ /**
190
+ * bytesCompare compares two byte slices lexicographically.
191
+ * Returns -1 if a < b, 0 if a == b, +1 if a > b.
192
+ */
193
+ export function bytesCompare(a, b) {
194
+ // Handle null cases
195
+ if (a === null && b === null)
196
+ return 0;
197
+ if (a === null)
198
+ return -1;
199
+ if (b === null)
200
+ return 1;
201
+ const aArr = bytesToArray(a);
202
+ const bArr = bytesToArray(b);
203
+ const minLen = Math.min(aArr.length, bArr.length);
204
+ for (let i = 0; i < minLen; i++) {
205
+ if (aArr[i] < bArr[i])
206
+ return -1;
207
+ if (aArr[i] > bArr[i])
208
+ return 1;
209
+ }
210
+ if (aArr.length < bArr.length)
211
+ return -1;
212
+ if (aArr.length > bArr.length)
213
+ return 1;
214
+ return 0;
215
+ }
216
+ /**
217
+ * bytesToArray converts any Bytes representation to a number array.
218
+ */
219
+ export function bytesToArray(bytes) {
220
+ if (bytes === null)
221
+ return [];
222
+ if (bytes instanceof Uint8Array) {
223
+ return Array.from(bytes);
224
+ }
225
+ if (Array.isArray(bytes)) {
226
+ return bytes;
227
+ }
228
+ // Handle SliceProxy
229
+ if (isSliceProxy(bytes)) {
230
+ const proxy = bytes;
231
+ const meta = proxy.__meta__;
232
+ return meta.backing.slice(meta.offset, meta.offset + meta.length);
233
+ }
234
+ throw new Error(`Cannot convert bytes of type ${typeof bytes} to array`);
235
+ }
236
+ /**
237
+ * bytesToUint8Array converts any Bytes representation to a Uint8Array.
238
+ */
239
+ export function bytesToUint8Array(bytes) {
240
+ if (bytes === null)
241
+ return new Uint8Array(0);
242
+ if (bytes instanceof Uint8Array) {
243
+ return bytes;
244
+ }
245
+ return new Uint8Array(bytesToArray(bytes));
246
+ }
247
+ /**
248
+ * bytesIndexOf finds the first occurrence of subslice in bytes.
249
+ * Returns -1 if not found.
250
+ */
251
+ export function bytesIndexOf(bytes, subslice) {
252
+ if (bytes === null || subslice === null)
253
+ return -1;
254
+ const haystack = bytesToArray(bytes);
255
+ const needle = bytesToArray(subslice);
256
+ if (needle.length === 0)
257
+ return 0;
258
+ if (needle.length > haystack.length)
259
+ return -1;
260
+ for (let i = 0; i <= haystack.length - needle.length; i++) {
261
+ let found = true;
262
+ for (let j = 0; j < needle.length; j++) {
263
+ if (haystack[i + j] !== needle[j]) {
264
+ found = false;
265
+ break;
266
+ }
267
+ }
268
+ if (found)
269
+ return i;
270
+ }
271
+ return -1;
272
+ }
273
+ /**
274
+ * bytesLastIndexOf finds the last occurrence of subslice in bytes.
275
+ * Returns -1 if not found.
276
+ */
277
+ export function bytesLastIndexOf(bytes, subslice) {
278
+ if (bytes === null || subslice === null)
279
+ return -1;
280
+ const haystack = bytesToArray(bytes);
281
+ const needle = bytesToArray(subslice);
282
+ if (needle.length === 0)
283
+ return haystack.length;
284
+ if (needle.length > haystack.length)
285
+ return -1;
286
+ for (let i = haystack.length - needle.length; i >= 0; i--) {
287
+ let found = true;
288
+ for (let j = 0; j < needle.length; j++) {
289
+ if (haystack[i + j] !== needle[j]) {
290
+ found = false;
291
+ break;
292
+ }
293
+ }
294
+ if (found)
295
+ return i;
296
+ }
297
+ return -1;
298
+ }
299
+ /**
300
+ * bytesIndexByte finds the first occurrence of byte c in bytes.
301
+ * Returns -1 if not found.
302
+ */
303
+ export function bytesIndexByte(bytes, c) {
304
+ if (bytes === null)
305
+ return -1;
306
+ const arr = bytesToArray(bytes);
307
+ return arr.indexOf(c);
308
+ }
309
+ /**
310
+ * bytesLastIndexByte finds the last occurrence of byte c in bytes.
311
+ * Returns -1 if not found.
312
+ */
313
+ export function bytesLastIndexByte(bytes, c) {
314
+ if (bytes === null)
315
+ return -1;
316
+ const arr = bytesToArray(bytes);
317
+ return arr.lastIndexOf(c);
318
+ }
319
+ /**
320
+ * bytesCount counts non-overlapping instances of sep in bytes.
321
+ */
322
+ export function bytesCount(bytes, sep) {
323
+ if (bytes === null || sep === null)
324
+ return 0;
325
+ const haystack = bytesToArray(bytes);
326
+ const needle = bytesToArray(sep);
327
+ if (needle.length === 0) {
328
+ // Special case: empty separator counts code points + 1
329
+ // For now, just return length + 1 (ASCII assumption)
330
+ return haystack.length + 1;
331
+ }
332
+ let count = 0;
333
+ let pos = 0;
334
+ while (pos <= haystack.length - needle.length) {
335
+ let found = true;
336
+ for (let i = 0; i < needle.length; i++) {
337
+ if (haystack[pos + i] !== needle[i]) {
338
+ found = false;
339
+ break;
340
+ }
341
+ }
342
+ if (found) {
343
+ count++;
344
+ pos += needle.length;
345
+ }
346
+ else {
347
+ pos++;
348
+ }
349
+ }
350
+ return count;
351
+ }
352
+ // Math functions needed by various packages
353
+ export function min(a, b) {
354
+ return Math.min(a, b);
355
+ }
356
+ export function max(a, b) {
357
+ return Math.max(a, b);
358
+ }
359
+ /**
360
+ * Converts a rune (number) or string to a string.
361
+ * This is used to replace String.fromCharCode() in Go string(rune) conversions.
362
+ * Since sometimes single-char rune literals are compiled to strings, this function
363
+ * needs to handle both numbers (runes) and strings.
364
+ *
365
+ * @param runeOrString A rune (Unicode code point as number) or a string
366
+ * @returns The resulting string
367
+ */
368
+ export function runeOrStringToString(runeOrString) {
369
+ if (typeof runeOrString === 'string') {
370
+ return runeOrString;
371
+ }
372
+ // For numbers, use String.fromCharCode to convert the rune to a string
373
+ return String.fromCharCode(runeOrString);
374
+ }
375
+ // Panic recovery function (simplified implementation)
376
+ export function recover() {
377
+ // In a real implementation, this would interact with Go's panic/recover mechanism
378
+ // For now, return null to indicate no panic was recovered
379
+ return null;
380
+ }
168
381
  //# sourceMappingURL=builtin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"builtin.js","sourceRoot":"","sources":["../../../gs/builtin/builtin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builtin.js","sourceRoot":"","sources":["../../../gs/builtin/builtin.ts"],"names":[],"mappings":"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"}
@@ -126,6 +126,10 @@ export const makeSlice = (length, capacity, typeHint) => {
126
126
  }
127
127
  // The rest of backingArr (from length to actualCapacity-1) remains uninitialized (undefined),
128
128
  // representing available capacity.
129
+ // OPTIMIZATION: If length equals capacity, return backing array directly
130
+ if (length === actualCapacity) {
131
+ return backingArr;
132
+ }
129
133
  // The proxyTargetArray serves as the shell for the proxy.
130
134
  // Its elements up to 'length' should reflect the initialized part of the slice.
131
135
  const proxyTargetArray = new Array(length);
@@ -329,6 +333,10 @@ s, low, high, max) => {
329
333
  }
330
334
  const newLength = high - low;
331
335
  const newOffset = oldOffset + low;
336
+ // OPTIMIZATION: If the result would have offset=0 and length=capacity, return backing directly
337
+ if (newOffset === 0 && newLength === newCap) {
338
+ return backing;
339
+ }
332
340
  // Create an array-like target with the correct length
333
341
  const proxyTargetArray = new Array(newLength);
334
342
  // Note: We don't need to initialize the values here since the proxy handler
@@ -355,6 +363,11 @@ export const arrayToSlice = (arr, depth = 1) => {
355
363
  return [];
356
364
  if (arr.length === 0)
357
365
  return arr;
366
+ // OPTIMIZATION: For arrays where offset=0 and length=capacity, return the array directly
367
+ // if we're not doing deep conversion
368
+ if (depth === 1) {
369
+ return arr;
370
+ }
358
371
  const target = {
359
372
  __meta__: {
360
373
  backing: arr,