goscript 0.0.44 → 0.0.47

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 (49) hide show
  1. package/README.md +198 -504
  2. package/compiler/analysis.go +98 -0
  3. package/compiler/compiler.go +20 -70
  4. package/compiler/decl.go +63 -40
  5. package/compiler/expr-call-async.go +101 -0
  6. package/compiler/expr-call-builtins.go +133 -0
  7. package/compiler/expr-call-helpers.go +138 -0
  8. package/compiler/expr-call-make.go +568 -0
  9. package/compiler/expr-call-type-conversion.go +424 -0
  10. package/compiler/expr-call.go +59 -1305
  11. package/compiler/expr.go +126 -4
  12. package/compiler/spec-struct.go +50 -30
  13. package/compiler/spec.go +69 -112
  14. package/compiler/type.go +51 -0
  15. package/dist/gs/builtin/builtin.d.ts +3 -1
  16. package/dist/gs/builtin/builtin.js +6 -0
  17. package/dist/gs/builtin/builtin.js.map +1 -1
  18. package/dist/gs/builtin/errors.js +1 -1
  19. package/dist/gs/builtin/slice.js +2 -1
  20. package/dist/gs/builtin/slice.js.map +1 -1
  21. package/dist/gs/fmt/fmt.js.map +1 -1
  22. package/dist/gs/io/fs/fs.d.ts +12 -1
  23. package/dist/gs/io/fs/fs.js +106 -30
  24. package/dist/gs/io/fs/fs.js.map +1 -1
  25. package/dist/gs/os/types_js.gs.d.ts +1 -3
  26. package/dist/gs/os/types_js.gs.js +2 -1
  27. package/dist/gs/os/types_js.gs.js.map +1 -1
  28. package/dist/gs/os/types_unix.gs.js +2 -2
  29. package/dist/gs/os/types_unix.gs.js.map +1 -1
  30. package/dist/gs/path/filepath/path.d.ts +1 -1
  31. package/dist/gs/path/filepath/path.js +1 -1
  32. package/dist/gs/path/filepath/path.js.map +1 -1
  33. package/dist/gs/reflect/value.js.map +1 -1
  34. package/dist/gs/time/time.js +11 -3
  35. package/dist/gs/time/time.js.map +1 -1
  36. package/gs/builtin/builtin.ts +8 -3
  37. package/gs/builtin/errors.ts +2 -2
  38. package/gs/builtin/slice.ts +24 -8
  39. package/gs/fmt/fmt.ts +12 -3
  40. package/gs/fmt/index.ts +1 -1
  41. package/gs/io/fs/fs.ts +100 -31
  42. package/gs/io/fs/godoc.txt +370 -17
  43. package/gs/os/types_js.gs.ts +2 -2
  44. package/gs/os/types_unix.gs.ts +2 -2
  45. package/gs/path/filepath/path.test.ts +2 -2
  46. package/gs/path/filepath/path.ts +3 -10
  47. package/gs/reflect/value.ts +10 -2
  48. package/gs/time/time.ts +52 -17
  49. package/package.json +1 -1
package/compiler/expr.go CHANGED
@@ -251,6 +251,113 @@ func (c *GoToTSCompiler) getTypeNameString(typeExpr ast.Expr) string {
251
251
  return "unknown"
252
252
  }
253
253
 
254
+ // getFinalUnderlyingType traverses the chain of named types to find the ultimate underlying type.
255
+ // This handles cases like: type A B; type B C; type C string.
256
+ // Returns the final underlying type and whether the original type was a named type.
257
+ func (c *GoToTSCompiler) getFinalUnderlyingType(t types.Type) (types.Type, bool) {
258
+ if t == nil {
259
+ return nil, false
260
+ }
261
+
262
+ // Check if this is a named type
263
+ namedType, isNamed := t.(*types.Named)
264
+ if !isNamed {
265
+ return t, false
266
+ }
267
+
268
+ // Follow the chain of named types to find the ultimate underlying type
269
+ ultimate := namedType
270
+ for {
271
+ underlying := ultimate.Underlying()
272
+ if underlyingNamed, isNamedUnderlying := underlying.(*types.Named); isNamedUnderlying {
273
+ // Continue following the chain
274
+ ultimate = underlyingNamed
275
+ } else {
276
+ // We've reached the final underlying type
277
+ return underlying, true
278
+ }
279
+ }
280
+ }
281
+
282
+ // isNamedNumericType checks if a given type is a named type with an underlying numeric type.
283
+ func (c *GoToTSCompiler) isNamedNumericType(t types.Type) bool {
284
+ finalType, wasNamed := c.getFinalUnderlyingType(t)
285
+ if !wasNamed {
286
+ return false
287
+ }
288
+
289
+ if basicType, isBasic := finalType.(*types.Basic); isBasic {
290
+ info := basicType.Info()
291
+ return (info&types.IsInteger) != 0 || (info&types.IsFloat) != 0
292
+ }
293
+
294
+ return false
295
+ }
296
+
297
+ // isWrapperType checks if a type is implemented as a wrapper class with valueOf() method
298
+ // This is true for named types that have methods defined on them
299
+ func (c *GoToTSCompiler) isWrapperType(t types.Type) bool {
300
+ if t == nil {
301
+ return false
302
+ }
303
+
304
+ // Follow any type aliases to get to the actual named type
305
+ namedType, ok := t.(*types.Named)
306
+ if !ok {
307
+ return false
308
+ }
309
+
310
+ // If the named type has methods, it's implemented as a class with valueOf()
311
+ numMethods := namedType.NumMethods()
312
+ return numMethods > 0
313
+ }
314
+
315
+ // needsValueOfForBitwiseOp checks if an operand in a bitwise operation needs .valueOf() to be called
316
+ // This is needed for custom types (like FileMode) that have a valueOf() method and need to be treated as numbers
317
+ func (c *GoToTSCompiler) needsValueOfForBitwiseOp(expr ast.Expr) bool {
318
+ if c.pkg == nil || c.pkg.TypesInfo == nil {
319
+ return false
320
+ }
321
+
322
+ exprType := c.pkg.TypesInfo.TypeOf(expr)
323
+ if exprType == nil {
324
+ return false
325
+ }
326
+
327
+ // Don't add valueOf() for basic literals (numeric, string, bool literals)
328
+ switch expr.(type) {
329
+ case *ast.BasicLit:
330
+ return false
331
+ }
332
+
333
+ // Check if this is a compile-time constant of a primitive type
334
+ if tv, ok := c.pkg.TypesInfo.Types[expr]; ok {
335
+ if tv.Value != nil {
336
+ // This is a constant expression - but only skip valueOf() if it's truly a primitive type
337
+ // (not a named type with methods that happens to be constant)
338
+ if _, isBasic := exprType.(*types.Basic); isBasic {
339
+ // Primitive constant, don't add valueOf()
340
+ return false
341
+ }
342
+ }
343
+ }
344
+
345
+ // Check if this type is implemented as a wrapper class with valueOf()
346
+ return c.isWrapperType(exprType)
347
+ }
348
+
349
+ // writeBitwiseOperand writes an operand for a bitwise operation, adding .valueOf() if needed
350
+ func (c *GoToTSCompiler) writeBitwiseOperand(expr ast.Expr) error {
351
+ if c.needsValueOfForBitwiseOp(expr) {
352
+ if err := c.WriteValueExpr(expr); err != nil {
353
+ return err
354
+ }
355
+ c.tsw.WriteLiterally(".valueOf()")
356
+ return nil
357
+ }
358
+ return c.WriteValueExpr(expr)
359
+ }
360
+
254
361
  // WriteBinaryExpr translates a Go binary expression (`ast.BinaryExpr`) into its
255
362
  // TypeScript equivalent.
256
363
  // It handles several cases:
@@ -435,8 +542,15 @@ func (c *GoToTSCompiler) WriteBinaryExpr(exp *ast.BinaryExpr) error {
435
542
  c.tsw.WriteLiterally("(") // Add opening parenthesis for bitwise operations
436
543
  }
437
544
 
438
- if err := c.WriteValueExpr(exp.X); err != nil {
439
- return fmt.Errorf("failed to write binary expression left operand: %w", err)
545
+ // For bitwise operations, use special operand writing that adds .valueOf() when needed
546
+ if isBitwise {
547
+ if err := c.writeBitwiseOperand(exp.X); err != nil {
548
+ return fmt.Errorf("failed to write binary expression left operand: %w", err)
549
+ }
550
+ } else {
551
+ if err := c.WriteValueExpr(exp.X); err != nil {
552
+ return fmt.Errorf("failed to write binary expression left operand: %w", err)
553
+ }
440
554
  }
441
555
  c.tsw.WriteLiterally(" ")
442
556
  tokStr, ok := TokenToTs(exp.Op)
@@ -446,8 +560,16 @@ func (c *GoToTSCompiler) WriteBinaryExpr(exp *ast.BinaryExpr) error {
446
560
 
447
561
  c.tsw.WriteLiterally(tokStr)
448
562
  c.tsw.WriteLiterally(" ")
449
- if err := c.WriteValueExpr(exp.Y); err != nil {
450
- return fmt.Errorf("failed to write binary expression right operand: %w", err)
563
+
564
+ // For bitwise operations, use special operand writing that adds .valueOf() when needed
565
+ if isBitwise {
566
+ if err := c.writeBitwiseOperand(exp.Y); err != nil {
567
+ return fmt.Errorf("failed to write binary expression right operand: %w", err)
568
+ }
569
+ } else {
570
+ if err := c.WriteValueExpr(exp.Y); err != nil {
571
+ return fmt.Errorf("failed to write binary expression right operand: %w", err)
572
+ }
451
573
  }
452
574
 
453
575
  if isBitwise {
@@ -63,7 +63,7 @@ func (c *GoToTSCompiler) WriteStructTypeSpec(a *ast.TypeSpec, t *ast.StructType)
63
63
  if fieldType == nil {
64
64
  fieldType = types.Typ[types.Invalid]
65
65
  }
66
- c.writeGetterSetter(fieldName, fieldType, field.Doc, field.Comment)
66
+ c.writeGetterSetter(fieldName, fieldType, field.Doc, field.Comment, field.Type)
67
67
  }
68
68
  }
69
69
 
@@ -72,7 +72,17 @@ func (c *GoToTSCompiler) WriteStructTypeSpec(a *ast.TypeSpec, t *ast.StructType)
72
72
  field := underlyingStruct.Field(i)
73
73
  if field.Anonymous() {
74
74
  fieldKeyName := c.getEmbeddedFieldKeyName(field.Type())
75
- c.writeGetterSetter(fieldKeyName, field.Type(), nil, nil)
75
+ c.writeGetterSetter(fieldKeyName, field.Type(), nil, nil, nil)
76
+ }
77
+ }
78
+
79
+ // Create a mapping from field names to AST types for preserving qualified names
80
+ fieldASTTypes := make(map[string]ast.Expr)
81
+ for _, field := range t.Fields.List {
82
+ if len(field.Names) > 0 {
83
+ for _, name := range field.Names {
84
+ fieldASTTypes[name.Name] = field.Type
85
+ }
76
86
  }
77
87
  }
78
88
 
@@ -93,14 +103,17 @@ func (c *GoToTSCompiler) WriteStructTypeSpec(a *ast.TypeSpec, t *ast.StructType)
93
103
  if fieldKeyName == "_" {
94
104
  continue
95
105
  }
96
- fieldTsType := c.getTypeString(field.Type())
106
+
107
+ // Use AST-based type string when available, fall back to types-based
108
+ astType := fieldASTTypes[fieldKeyName]
109
+ fieldTsType := c.getASTTypeString(astType, field.Type())
97
110
  c.tsw.WriteLinef("%s: $.VarRef<%s>;", fieldKeyName, fieldTsType)
98
111
  }
99
112
  c.tsw.Indent(-1)
100
113
  c.tsw.WriteLine("}")
101
114
 
102
115
  // Generate the flattened type string for the constructor init parameter
103
- flattenedInitType := c.generateFlattenedInitTypeString(goStructType)
116
+ flattenedInitType := c.generateFlattenedInitTypeString(goStructType, fieldASTTypes)
104
117
 
105
118
  c.tsw.WriteLine("")
106
119
  c.tsw.WriteLinef("constructor(init?: Partial<%s>) {", flattenedInitType)
@@ -132,7 +145,7 @@ func (c *GoToTSCompiler) WriteStructTypeSpec(a *ast.TypeSpec, t *ast.StructType)
132
145
  c.tsw.WriteLine(",")
133
146
  }
134
147
 
135
- c.writeVarRefedFieldInitializer(fieldKeyName, fieldType, field.Anonymous())
148
+ c.writeVarRefedFieldInitializer(fieldKeyName, fieldType, field.Anonymous(), fieldASTTypes[fieldKeyName])
136
149
  firstFieldWritten = true
137
150
  }
138
151
  if firstFieldWritten {
@@ -300,12 +313,28 @@ func (c *GoToTSCompiler) WriteStructTypeSpec(a *ast.TypeSpec, t *ast.StructType)
300
313
  c.tsw.WriteLine("")
301
314
  c.tsw.WriteLinef("public get %s(): %s {", promotedFieldName, tsPromotedFieldType)
302
315
  c.tsw.Indent(1)
303
- c.tsw.WriteLinef("return this.%s.%s", embeddedFieldKeyName, promotedFieldName)
316
+ // Check if the embedded type is an interface and add null assertion
317
+ embeddedFieldTypeUnderlying := embeddedFieldType
318
+ if ptr, isPtr := embeddedFieldTypeUnderlying.(*types.Pointer); isPtr {
319
+ embeddedFieldTypeUnderlying = ptr.Elem()
320
+ }
321
+ if named, isNamed := embeddedFieldTypeUnderlying.(*types.Named); isNamed {
322
+ embeddedFieldTypeUnderlying = named.Underlying()
323
+ }
324
+ if _, isInterface := embeddedFieldTypeUnderlying.(*types.Interface); isInterface {
325
+ c.tsw.WriteLinef("return this.%s!.%s", embeddedFieldKeyName, promotedFieldName)
326
+ } else {
327
+ c.tsw.WriteLinef("return this.%s.%s", embeddedFieldKeyName, promotedFieldName)
328
+ }
304
329
  c.tsw.Indent(-1)
305
330
  c.tsw.WriteLine("}")
306
331
  c.tsw.WriteLinef("public set %s(value: %s) {", promotedFieldName, tsPromotedFieldType)
307
332
  c.tsw.Indent(1)
308
- c.tsw.WriteLinef("this.%s.%s = value", embeddedFieldKeyName, promotedFieldName)
333
+ if _, isInterface := embeddedFieldTypeUnderlying.(*types.Interface); isInterface {
334
+ c.tsw.WriteLinef("this.%s!.%s = value", embeddedFieldKeyName, promotedFieldName)
335
+ } else {
336
+ c.tsw.WriteLinef("this.%s.%s = value", embeddedFieldKeyName, promotedFieldName)
337
+ }
309
338
  c.tsw.Indent(-1)
310
339
  c.tsw.WriteLine("}")
311
340
  }
@@ -379,7 +408,13 @@ func (c *GoToTSCompiler) WriteStructTypeSpec(a *ast.TypeSpec, t *ast.StructType)
379
408
  if results.Len() > 0 {
380
409
  c.tsw.WriteLiterally("return ")
381
410
  }
382
- c.tsw.WriteLiterallyf("this.%s.%s(%s)", embeddedFieldKeyName, methodName, strings.Join(paramNames, ", "))
411
+
412
+ assertionPrefix := "this.%s"
413
+ if _, isInterface := embeddedFieldType.Underlying().(*types.Interface); isInterface {
414
+ assertionPrefix = "this.%s!"
415
+ }
416
+ c.tsw.WriteLiterallyf(assertionPrefix+".%s(%s)", embeddedFieldKeyName, methodName, strings.Join(paramNames, ", "))
417
+
383
418
  c.tsw.WriteLine("")
384
419
  c.tsw.Indent(-1)
385
420
  c.tsw.WriteLine("}")
@@ -459,7 +494,7 @@ func (c *GoToTSCompiler) WriteStructTypeSpec(a *ast.TypeSpec, t *ast.StructType)
459
494
  //
460
495
  // The resulting string is sorted by field name for deterministic output and represents
461
496
  // the shape of the object expected by the struct's TypeScript constructor.
462
- func (c *GoToTSCompiler) generateFlattenedInitTypeString(structType *types.Named) string {
497
+ func (c *GoToTSCompiler) generateFlattenedInitTypeString(structType *types.Named, fieldASTTypes map[string]ast.Expr) string {
463
498
  if structType == nil {
464
499
  return "{}"
465
500
  }
@@ -489,39 +524,24 @@ func (c *GoToTSCompiler) generateFlattenedInitTypeString(structType *types.Named
489
524
 
490
525
  if field.Anonymous() {
491
526
  fieldType := field.Type()
492
- isPtr := false
493
527
  if ptr, ok := fieldType.(*types.Pointer); ok {
494
528
  fieldType = ptr.Elem()
495
- isPtr = true
496
529
  }
497
530
 
498
531
  if named, ok := fieldType.(*types.Named); ok {
499
532
  embeddedName := named.Obj().Name()
500
- // For embedded structs, the init type should allow providing fields of the embedded struct,
501
- // or the embedded struct itself.
502
- // We generate Partial<EmbeddedStructFields> | EmbeddedStructType
503
- // This is complex. For now, let's use ConstructorParameters as before for simplicity,
504
- // or allow the embedded struct type itself.
505
- // The example `Person?: ConstructorParameters<typeof Person>[0]` is for the fields.
506
- // Let's try to generate a type that allows either the embedded struct instance or its fields.
507
- // This might be: `Partial<FlattenedInitType<EmbeddedName>> | EmbeddedName`
508
- // For now, stick to the simpler `ConstructorParameters<typeof %s>[0]` which implies field-based init.
509
- // Or, more simply, the type of the embedded struct itself if it's a pointer.
510
- if isPtr {
511
- embeddedTypeMap[c.getEmbeddedFieldKeyName(field.Type())] = c.getTypeString(field.Type()) // MyEmbeddedType | null
533
+ // Check if the embedded type is an interface
534
+ if _, isInterface := fieldType.Underlying().(*types.Interface); isInterface {
535
+ // For embedded interfaces, use the full qualified interface type
536
+ embeddedTypeMap[c.getEmbeddedFieldKeyName(field.Type())] = c.getTypeString(field.Type())
512
537
  } else {
513
- // For value-type embedded structs, allow initializing with its fields.
514
- // This requires getting the flattened init type for the embedded struct.
515
- // This could lead to recursion if not handled carefully.
516
- // A simpler approach for now: use the embedded struct's own type.
517
- // embeddedTypeMap[c.getEmbeddedFieldKeyName(field.Type())] = c.getTypeString(field.Type())
518
- // Or, using ConstructorParameters to allow field-based initialization:
538
+ // For embedded structs, use ConstructorParameters for field-based initialization
519
539
  embeddedTypeMap[c.getEmbeddedFieldKeyName(field.Type())] = fmt.Sprintf("Partial<ConstructorParameters<typeof %s>[0]>", embeddedName)
520
540
  }
521
541
  }
522
542
  continue
523
543
  }
524
- fieldMap[fieldName] = c.getTypeString(field.Type())
544
+ fieldMap[fieldName] = c.getASTTypeString(fieldASTTypes[fieldName], field.Type())
525
545
  }
526
546
 
527
547
  // Promoted fields (handled by Go's embedding, init should use direct/embedded names)
package/compiler/spec.go CHANGED
@@ -56,8 +56,14 @@ func (c *GoToTSCompiler) getEmbeddedFieldKeyName(fieldType types.Type) string {
56
56
  }
57
57
  }
58
58
 
59
- func (c *GoToTSCompiler) writeGetterSetter(fieldName string, fieldType types.Type, doc, comment *ast.CommentGroup) {
60
- fieldTypeStr := c.getTypeString(fieldType)
59
+ func (c *GoToTSCompiler) writeGetterSetter(fieldName string, fieldType types.Type, doc, comment *ast.CommentGroup, astType ast.Expr) {
60
+ // Use AST type information if available to preserve qualified names
61
+ var fieldTypeStr string
62
+ if astType != nil {
63
+ fieldTypeStr = c.getASTTypeString(astType, fieldType)
64
+ } else {
65
+ fieldTypeStr = c.getTypeString(fieldType)
66
+ }
61
67
 
62
68
  // Generate getter
63
69
  if doc != nil {
@@ -81,16 +87,29 @@ func (c *GoToTSCompiler) writeGetterSetter(fieldName string, fieldType types.Typ
81
87
  c.tsw.WriteLine("")
82
88
  }
83
89
 
84
- func (c *GoToTSCompiler) writeVarRefedFieldInitializer(fieldName string, fieldType types.Type, isEmbedded bool) {
90
+ func (c *GoToTSCompiler) writeVarRefedFieldInitializer(fieldName string, fieldType types.Type, isEmbedded bool, astType ast.Expr) {
85
91
  c.tsw.WriteLiterally(fieldName)
86
92
  c.tsw.WriteLiterally(": $.varRef(")
87
93
 
88
94
  if isEmbedded {
89
- if _, isPtr := fieldType.(*types.Pointer); isPtr {
95
+ _, isPtr := fieldType.(*types.Pointer)
96
+ _, isInterface := fieldType.Underlying().(*types.Interface)
97
+ if isPtr || isInterface {
90
98
  c.tsw.WriteLiterallyf("init?.%s ?? null", fieldName)
91
99
  } else {
92
- typeForNew := fieldName
93
- c.tsw.WriteLiterallyf("new %s(init?.%s)", typeForNew, fieldName)
100
+ // Check if the embedded type is an interface
101
+ embeddedTypeUnderlying := fieldType
102
+ if named, isNamed := embeddedTypeUnderlying.(*types.Named); isNamed {
103
+ embeddedTypeUnderlying = named.Underlying()
104
+ }
105
+ if _, isInterface := embeddedTypeUnderlying.(*types.Interface); isInterface {
106
+ // For interfaces, use the provided value or null instead of trying to instantiate
107
+ c.tsw.WriteLiterallyf("init?.%s ?? null", fieldName)
108
+ } else {
109
+ // For structs, instantiate with provided fields
110
+ typeForNew := fieldName
111
+ c.tsw.WriteLiterallyf("new %s(init?.%s)", typeForNew, fieldName)
112
+ }
94
113
  }
95
114
  } else {
96
115
  isStructValueType := false
@@ -106,7 +125,47 @@ func (c *GoToTSCompiler) writeVarRefedFieldInitializer(fieldName string, fieldTy
106
125
  c.tsw.WriteLiterallyf("init?.%s?.clone() ?? new %s()", fieldName, structTypeNameForClone)
107
126
  } else {
108
127
  c.tsw.WriteLiterallyf("init?.%s ?? ", fieldName)
109
- c.WriteZeroValueForType(fieldType)
128
+ // Check if this is a named type or type alias and use constructor instead of null
129
+ if named, isNamed := fieldType.(*types.Named); isNamed {
130
+ // This is a named type
131
+ // Check if underlying type is an interface
132
+ if _, isInterface := named.Underlying().(*types.Interface); isInterface {
133
+ // For interfaces, use null as the zero value
134
+ c.tsw.WriteLiterally("null")
135
+ } else if _, isStruct := named.Underlying().(*types.Struct); !isStruct {
136
+ // For non-struct, non-interface named types, use constructor
137
+ c.tsw.WriteLiterally("new ")
138
+ c.WriteNamedType(named)
139
+ c.tsw.WriteLiterally("(")
140
+ c.WriteZeroValueForType(named.Underlying())
141
+ c.tsw.WriteLiterally(")")
142
+ } else {
143
+ c.WriteZeroValueForType(fieldType)
144
+ }
145
+ } else if alias, isAlias := fieldType.(*types.Alias); isAlias {
146
+ // This is a type alias (like os.FileMode)
147
+ // Check if underlying type is an interface
148
+ if _, isInterface := alias.Underlying().(*types.Interface); isInterface {
149
+ // For interface type aliases, use null as the zero value
150
+ c.tsw.WriteLiterally("null")
151
+ } else if _, isStruct := alias.Underlying().(*types.Struct); !isStruct {
152
+ // For non-struct, non-interface type aliases, use constructor
153
+ c.tsw.WriteLiterally("new ")
154
+ // Use AST type information if available to preserve qualified names
155
+ if astType != nil {
156
+ c.WriteTypeExpr(astType)
157
+ } else {
158
+ c.WriteGoType(fieldType, GoTypeContextGeneral)
159
+ }
160
+ c.tsw.WriteLiterally("(")
161
+ c.WriteZeroValueForType(alias.Underlying())
162
+ c.tsw.WriteLiterally(")")
163
+ } else {
164
+ c.WriteZeroValueForType(fieldType)
165
+ }
166
+ } else {
167
+ c.WriteZeroValueForType(fieldType)
168
+ }
110
169
  }
111
170
  }
112
171
 
@@ -281,114 +340,12 @@ func (c *GoToTSCompiler) WriteNamedTypeWithMethods(a *ast.TypeSpec) error {
281
340
 
282
341
  // writeNamedTypeMethod writes a method for a named type, handling receiver binding properly
283
342
  func (c *GoToTSCompiler) writeNamedTypeMethod(decl *ast.FuncDecl) error {
284
- if decl.Doc != nil {
285
- c.WriteDoc(decl.Doc)
286
- }
287
-
288
- // Determine if method is async
289
- var isAsync bool
290
- if obj := c.pkg.TypesInfo.Defs[decl.Name]; obj != nil {
291
- isAsync = c.analysis.IsAsyncFunc(obj)
292
- }
293
-
294
- // Methods are typically public in the TS output
295
- c.tsw.WriteLiterally("public ")
296
-
297
- // Add async modifier if needed
298
- if isAsync {
299
- c.tsw.WriteLiterally("async ")
300
- }
301
-
302
- // Keep original Go casing for method names
303
- if err := c.WriteValueExpr(decl.Name); err != nil { // Method name is a value identifier
343
+ _, err := c.writeMethodSignature(decl)
344
+ if err != nil {
304
345
  return err
305
346
  }
306
347
 
307
- // Write signature (parameters and return type)
308
- funcType := decl.Type
309
- c.tsw.WriteLiterally("(")
310
- if funcType.Params != nil {
311
- c.WriteFieldList(funcType.Params, true) // true = arguments
312
- }
313
- c.tsw.WriteLiterally(")")
314
-
315
- // Handle return type
316
- if funcType.Results != nil && len(funcType.Results.List) > 0 {
317
- c.tsw.WriteLiterally(": ")
318
- if isAsync {
319
- c.tsw.WriteLiterally("Promise<")
320
- }
321
- if len(funcType.Results.List) == 1 {
322
- // Single return value
323
- resultType := funcType.Results.List[0].Type
324
- c.WriteTypeExpr(resultType)
325
- } else {
326
- // Multiple return values -> tuple type
327
- c.tsw.WriteLiterally("[")
328
- for i, field := range funcType.Results.List {
329
- if i > 0 {
330
- c.tsw.WriteLiterally(", ")
331
- }
332
- c.WriteTypeExpr(field.Type)
333
- }
334
- c.tsw.WriteLiterally("]")
335
- }
336
- if isAsync {
337
- c.tsw.WriteLiterally(">")
338
- }
339
- } else {
340
- // No return value -> void
341
- if isAsync {
342
- c.tsw.WriteLiterally(": Promise<void>")
343
- } else {
344
- c.tsw.WriteLiterally(": void")
345
- }
346
- }
347
-
348
- c.tsw.WriteLiterally(" ")
349
-
350
- // For named types with methods, bind receiver name to this._value
351
- if recvField := decl.Recv.List[0]; len(recvField.Names) > 0 {
352
- recvName := recvField.Names[0].Name
353
- if recvName != "_" {
354
- c.tsw.WriteLine("{")
355
- c.tsw.Indent(1)
356
- // Bind the receiver name to this._value for value types
357
- sanitizedRecvName := c.sanitizeIdentifier(recvName)
358
- c.tsw.WriteLinef("const %s = this._value", sanitizedRecvName)
359
-
360
- // Add using statement if needed
361
- if c.analysis.NeedsDefer(decl.Body) {
362
- if c.analysis.IsInAsyncFunction(decl) {
363
- c.tsw.WriteLine("await using __defer = new $.AsyncDisposableStack();")
364
- } else {
365
- c.tsw.WriteLine("using cleanup = new $.DisposableStack();")
366
- }
367
- }
368
-
369
- // Declare named return variables and initialize them to their zero values
370
- if err := c.writeNamedReturnDeclarations(decl.Type.Results); err != nil {
371
- return fmt.Errorf("failed to write named return declarations: %w", err)
372
- }
373
-
374
- // write method body without outer braces
375
- for _, stmt := range decl.Body.List {
376
- if err := c.WriteStmt(stmt); err != nil {
377
- return fmt.Errorf("failed to write statement in function body: %w", err)
378
- }
379
- }
380
- c.tsw.Indent(-1)
381
- c.tsw.WriteLine("}")
382
-
383
- return nil
384
- }
385
- }
386
- // no named receiver, write whole body
387
- if err := c.WriteStmt(decl.Body); err != nil {
388
- return fmt.Errorf("failed to write function body: %w", err)
389
- }
390
-
391
- return nil
348
+ return c.writeMethodBodyWithReceiverBinding(decl, "this._value")
392
349
  }
393
350
 
394
351
  // WriteTypeSpec writes the type specification to the output.
package/compiler/type.go CHANGED
@@ -72,6 +72,38 @@ func (c *GoToTSCompiler) WriteGoType(typ types.Type, context GoTypeContext) {
72
72
  case *types.Struct:
73
73
  c.WriteStructType(t)
74
74
  case *types.Alias:
75
+ // Check if this type alias is from an imported package
76
+ aliasObj := t.Obj()
77
+ if aliasObj != nil && aliasObj.Pkg() != nil && aliasObj.Pkg() != c.pkg.Types {
78
+ // This type alias is from an imported package, find the import alias
79
+ aliasPkg := aliasObj.Pkg()
80
+ aliasPkgPath := aliasPkg.Path()
81
+ aliasPkgName := aliasPkg.Name() // Get the actual package name
82
+
83
+ // Try to find the import alias by matching the package name or path
84
+ for importAlias := range c.analysis.Imports {
85
+ // First, try to match by the actual package name
86
+ if importAlias == aliasPkgName {
87
+ // Write the qualified name: importAlias.TypeName
88
+ c.tsw.WriteLiterally(importAlias)
89
+ c.tsw.WriteLiterally(".")
90
+ c.tsw.WriteLiterally(aliasObj.Name())
91
+ return
92
+ }
93
+
94
+ // Fallback: try to match by path-based package name (for backwards compatibility)
95
+ pts := strings.Split(aliasPkgPath, "/")
96
+ defaultPkgName := pts[len(pts)-1]
97
+ if importAlias == defaultPkgName || importAlias == aliasPkgPath {
98
+ // Write the qualified name: importAlias.TypeName
99
+ c.tsw.WriteLiterally(importAlias)
100
+ c.tsw.WriteLiterally(".")
101
+ c.tsw.WriteLiterally(aliasObj.Name())
102
+ return
103
+ }
104
+ }
105
+ }
106
+ // For local type aliases or unmatched imports, expand to underlying type
75
107
  c.WriteGoType(t.Underlying(), context)
76
108
  case *types.TypeParam:
77
109
  // For type parameters, write the type parameter name (e.g., "T", "K", etc.)
@@ -694,6 +726,25 @@ func (c *GoToTSCompiler) getTypeString(goType types.Type) string {
694
726
  return typeStr.String()
695
727
  }
696
728
 
729
+ // getASTTypeString is a utility function that converts a Go type to its TypeScript
730
+ // type string representation, preferring AST-based type writing when available to
731
+ // preserve qualified names like os.FileMode. Falls back to types.Type-based writing
732
+ // when AST information is not available.
733
+ func (c *GoToTSCompiler) getASTTypeString(astType ast.Expr, goType types.Type) string {
734
+ var typeStr strings.Builder
735
+ writer := NewTSCodeWriter(&typeStr)
736
+ tempCompiler := NewGoToTSCompiler(writer, c.pkg, c.analysis)
737
+
738
+ if astType != nil {
739
+ // Use AST-based type writing to preserve qualified names
740
+ tempCompiler.WriteTypeExpr(astType)
741
+ } else {
742
+ // Fall back to types.Type-based writing
743
+ tempCompiler.WriteGoType(goType, GoTypeContextGeneral)
744
+ }
745
+ return typeStr.String()
746
+ }
747
+
697
748
  // WriteStructType translates a Go struct type definition (`ast.StructType`)
698
749
  // into a TypeScript anonymous object type (e.g., `{ Field1: Type1; Field2: Type2 }`).
699
750
  // If the struct has no fields, it writes `{}`. Otherwise, it delegates to
@@ -10,7 +10,9 @@ export declare function println(...args: any[]): void;
10
10
  */
11
11
  export declare function panic(...args: any[]): void;
12
12
  export type Bytes = Uint8Array | Slice<number>;
13
- export declare function int(value: number): number;
13
+ export declare function int(value: number | {
14
+ valueOf(): number | null;
15
+ }): number;
14
16
  export declare function multiplyDuration(duration: any, multiplier: number): any;
15
17
  /**
16
18
  * Normalizes various byte representations into a `Uint8Array` for protobuf compatibility.
@@ -20,8 +20,14 @@ export function int(value) {
20
20
  // we need to handle the conversion properly. The issue is that JavaScript's number type
21
21
  // can represent values larger than 32-bit signed integers, but when cast in certain contexts
22
22
  // they get interpreted as signed 32-bit integers.
23
+ //
23
24
  // For Go's int type on 64-bit systems, we should preserve the full value
24
25
  // since JavaScript numbers can safely represent integers up to Number.MAX_SAFE_INTEGER
26
+ //
27
+ // For this we use Math.trunc.
28
+ if (typeof value === 'object' && 'valueOf' in value) {
29
+ return Math.trunc(value.valueOf() ?? 0);
30
+ }
25
31
  return Math.trunc(value);
26
32
  }
27
33
  // Duration multiplication helper for time package operations
@@ -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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"}
@@ -7,7 +7,7 @@ export function newError(text) {
7
7
  // toGoError converts a JavaScript Error to a Go error
8
8
  // if the error is already a Go error, it returns it unchanged
9
9
  export function toGoError(err) {
10
- if ("Error" in err) {
10
+ if ('Error' in err) {
11
11
  return err;
12
12
  }
13
13
  return {