Skip to content

Commit 3c01b86

Browse files
committed
feat: selective exports from index.ts
Signed-off-by: Christian Stewart <[email protected]>
1 parent 7c16d9a commit 3c01b86

File tree

123 files changed

+256
-125
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

123 files changed

+256
-125
lines changed

compiler/compiler.go

Lines changed: 114 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -338,8 +338,9 @@ func (c *PackageCompiler) Compile(ctx context.Context) error {
338338
}
339339

340340
// generateIndexFile creates an index.ts file in the package output directory
341-
// that re-exports all symbols from the compiled TypeScript files.
342-
// This ensures the package can be imported correctly by TypeScript modules.
341+
// that re-exports only Go-exported symbols from the compiled TypeScript files.
342+
// This ensures the package can be imported correctly by TypeScript modules
343+
// while maintaining proper Go package boundaries.
343344
func (c *PackageCompiler) generateIndexFile(compiledFiles []string) error {
344345
indexFilePath := filepath.Join(c.outputPath, "index.ts")
345346

@@ -350,12 +351,118 @@ func (c *PackageCompiler) generateIndexFile(compiledFiles []string) error {
350351
}
351352
defer indexFile.Close() //nolint:errcheck
352353

353-
// Write the re-export statements for each compiled file
354+
// Collect exported symbols from all files in the package
355+
var exportedSymbols []string
356+
357+
// Iterate through all syntax files to find exported symbols
358+
for i, syntax := range c.pkg.Syntax {
359+
fileName := c.pkg.CompiledGoFiles[i]
360+
baseFileName := filepath.Base(fileName)
361+
gsFileName := strings.TrimSuffix(baseFileName, ".go") + ".gs"
362+
363+
// Only include this file if it was compiled (in our compiledFiles list)
364+
fileWasCompiled := false
365+
for _, compiledFile := range compiledFiles {
366+
if compiledFile == gsFileName {
367+
fileWasCompiled = true
368+
break
369+
}
370+
}
371+
if !fileWasCompiled {
372+
continue
373+
}
374+
375+
// Analyze declarations in this file to find exported symbols
376+
for _, decl := range syntax.Decls {
377+
switch d := decl.(type) {
378+
case *ast.FuncDecl:
379+
// Only include top-level functions (not methods)
380+
if d.Recv == nil && d.Name.IsExported() {
381+
exportedSymbols = append(exportedSymbols, d.Name.Name)
382+
}
383+
case *ast.GenDecl:
384+
for _, spec := range d.Specs {
385+
switch s := spec.(type) {
386+
case *ast.TypeSpec:
387+
if s.Name.IsExported() {
388+
exportedSymbols = append(exportedSymbols, s.Name.Name)
389+
}
390+
case *ast.ValueSpec:
391+
for _, name := range s.Names {
392+
if name.IsExported() {
393+
exportedSymbols = append(exportedSymbols, name.Name)
394+
}
395+
}
396+
}
397+
}
398+
}
399+
}
400+
}
401+
402+
// Remove duplicates and sort
403+
symbolMap := make(map[string]bool)
404+
for _, symbol := range exportedSymbols {
405+
symbolMap[symbol] = true
406+
}
407+
408+
var uniqueSymbols []string
409+
for symbol := range symbolMap {
410+
uniqueSymbols = append(uniqueSymbols, symbol)
411+
}
412+
413+
// Sort for consistent output
414+
sort.Strings(uniqueSymbols)
415+
416+
// Write selective re-exports for each compiled file
354417
for _, fileName := range compiledFiles {
355-
// Create the re-export line: export * from "./file.gs.js"
356-
exportLine := fmt.Sprintf("export * from \"./%s.js\"\n", fileName)
357-
if _, err := indexFile.WriteString(exportLine); err != nil {
358-
return err
418+
// Find which symbols this file exports
419+
var fileSymbols []string
420+
421+
// Find the corresponding syntax file
422+
for i, syntax := range c.pkg.Syntax {
423+
syntaxFileName := c.pkg.CompiledGoFiles[i]
424+
syntaxBaseFileName := filepath.Base(syntaxFileName)
425+
syntaxGsFileName := strings.TrimSuffix(syntaxBaseFileName, ".go") + ".gs"
426+
427+
if syntaxGsFileName != fileName {
428+
continue
429+
}
430+
431+
// Collect exported symbols from this specific file
432+
for _, decl := range syntax.Decls {
433+
switch d := decl.(type) {
434+
case *ast.FuncDecl:
435+
if d.Recv == nil && d.Name.IsExported() {
436+
fileSymbols = append(fileSymbols, d.Name.Name)
437+
}
438+
case *ast.GenDecl:
439+
for _, spec := range d.Specs {
440+
switch s := spec.(type) {
441+
case *ast.TypeSpec:
442+
if s.Name.IsExported() {
443+
fileSymbols = append(fileSymbols, s.Name.Name)
444+
}
445+
case *ast.ValueSpec:
446+
for _, name := range s.Names {
447+
if name.IsExported() {
448+
fileSymbols = append(fileSymbols, name.Name)
449+
}
450+
}
451+
}
452+
}
453+
}
454+
}
455+
break
456+
}
457+
458+
// Write selective export if this file has exported symbols
459+
if len(fileSymbols) > 0 {
460+
sort.Strings(fileSymbols)
461+
exportLine := fmt.Sprintf("export { %s } from \"./%s.js\"\n",
462+
strings.Join(fileSymbols, ", "), fileName)
463+
if _, err := indexFile.WriteString(exportLine); err != nil {
464+
return err
465+
}
359466
}
360467
}
361468

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./array_literal.gs.js"

compliance/tests/assign_op/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./assign_op.gs.js"

compliance/tests/async_basic/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./async_basic.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./async_defer_statement.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./basic_arithmetic.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./boolean_logic.gs.js"

compliance/tests/build_tags/index.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +0,0 @@
1-
export * from "./build_tags.gs.js"
2-
export * from "./build_tags_generic.gs.js"
3-
export * from "./build_tags_js.gs.js"

compliance/tests/bytes/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./bytes.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./chan_type_assertion.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./channel_basic.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./comments_struct.gs.js"
1+
export { TestStruct } from "./comments_struct.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./composite_literal_assignment.gs.js"
1+
export { MyStruct } from "./composite_literal_assignment.gs.js"

compliance/tests/constants/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./constants.gs.js"
1+
export { Greeting, Nothing, Pi, Truth } from "./constants.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./constants_iota.gs.js"
1+
export { A, B, Blue, ByteSize, C, Direction, East, First, Friday, GB, Green, KB, MB, Monday, North, Red, Saturday, Second, South, Sunday, TB, Third, Thursday, Tuesday, Wednesday, West } from "./constants_iota.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./copy_independence.gs.js"
1+
export { MyStruct } from "./copy_independence.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./defer_statement.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./discarded_channel_receive.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./embedded_interface_assertion.gs.js"
1+
export { Closer, MyStruct, ReadCloser, Reader } from "./embedded_interface_assertion.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./flag_bitwise_op.gs.js"

compliance/tests/float64/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./float64.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./for_init_exprstmt.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./for_init_multi_assign.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./for_loop_basic.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./for_loop_condition_only.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./for_loop_infinite.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./for_post_assign_stmt.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./for_post_exprstmt.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./for_post_incdec.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./for_post_multi_assign.gs.js"

compliance/tests/for_range/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./for_range.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./for_range_index_use.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./for_range_key_only.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./for_range_no_vars.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./for_range_value_only.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./func_literal.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./function_call_result_assignment.gs.js"
1+
export { MyStruct, NewMyStruct } from "./function_call_result_assignment.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./function_signature_type.gs.js"
1+
export { Func1, Func2, Func3, Func4, MyError, NewMyError } from "./function_signature_type.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./function_type_assertion.gs.js"
1+
export { Adder, FuncContainer, Greeter } from "./function_type_assertion.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./generic_index_assignment.gs.js"

compliance/tests/generics/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./generics.gs.js"
1+
export { Pair } from "./generics.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./generics_basic.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./generics_interface.gs.js"
1+
export { Comparable, Container, StringValueContainer, ValueContainer } from "./generics_interface.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./generics_leading_int.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./go_type_assertion.gs.js"

compliance/tests/goroutines/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./goroutines.gs.js"
1+
export { Message } from "./goroutines.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./goroutines_anonymous.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./goroutines_selector.gs.js"
1+
export { Foo, NewFoo } from "./goroutines_selector.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./if_statement.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./inline_function_type_cast.gs.js"
1+
export { Greeter } from "./inline_function_type_cast.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./inline_interface_type_assertion.gs.js"
1+
export { Greeter, MyStringer, Stringer } from "./inline_interface_type_assertion.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./interface_method_comments.gs.js"
1+
export { MyInterface } from "./interface_method_comments.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./interface_multi_param_return.gs.js"
1+
export { MultiParamReturner, MyProcessor } from "./interface_multi_param_return.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./interface_to_interface_type_assertion.gs.js"
1+
export { MyInterface, MyOtherInterface, MyStruct } from "./interface_to_interface_type_assertion.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./interface_type_assertion.gs.js"
1+
export { MyInterface, MyStruct } from "./interface_type_assertion.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./iterator_simple.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./map_assign_blank_both.gs.js"

compliance/tests/map_support/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./map_support.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./map_type_assertion.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./method_call_on_pointer_receiver.gs.js"
1+
export { MyStruct } from "./method_call_on_pointer_receiver.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./method_call_on_pointer_via_value.gs.js"
1+
export { MyStruct } from "./method_call_on_pointer_via_value.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./method_call_on_value_receiver.gs.js"
1+
export { MyStruct } from "./method_call_on_value_receiver.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./method_call_on_value_via_pointer.gs.js"
1+
export { MyStruct } from "./method_call_on_value_via_pointer.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./multiple_return_values.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./named_return_multiple.gs.js"

compliance/tests/nil_channel/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./nil_channel.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./package_import.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./subpkg.gs.js"
1+
export { Greet } from "./subpkg.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./package_import_context.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./package_import_errors.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./package_import_runtime.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./package_import_slices.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./package_import_time.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./pointer_assignment_no_copy.gs.js"
1+
export { MyStruct } from "./pointer_assignment_no_copy.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./pointer_composite_literal_assignment.gs.js"
1+
export { MyStruct } from "./pointer_composite_literal_assignment.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./pointer_composite_literal_untyped.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./pointer_deref_multiassign.gs.js"
1+
export { MyStruct } from "./pointer_deref_multiassign.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./pointer_initialization.gs.js"
1+
export { MyStruct } from "./pointer_initialization.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./pointer_range_loop.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./pointer_struct_assign_clone.gs.js"
1+
export { MyStruct } from "./pointer_struct_assign_clone.gs.js"

compliance/tests/pointers/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./pointers.gs.js"
1+
export { MyStruct } from "./pointers.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./private_field_access.gs.js"
1+
export { MyStruct, NewMyStruct } from "./private_field_access.gs.js"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./recursive_type_definition.gs.js"
1+
export { A, B, C, D } from "./recursive_type_definition.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./redeclaration_assign.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./select_receive_on_closed_channel_no_default.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./select_send_on_full_buffered_channel_with_default.gs.js"
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
export * from "./select_statement.gs.js"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
=== Selective Exports Test ===
2+
ExportedFunc called
3+
unexportedFunc called
4+
ExportedFromUtils called
5+
unexportedFromUtils called
6+
=== End Selective Exports Test ===
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export { ExportedFunc } from "./selective_exports.gs.js"
2+
export { ExportedFromUtils } from "./utils.gs.js"
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package main
2+
3+
func main() {
4+
println("=== Selective Exports Test ===")
5+
6+
// Call exported function
7+
ExportedFunc()
8+
9+
// Call unexported function from same file
10+
unexportedFunc()
11+
12+
// Call exported function from another file
13+
ExportedFromUtils()
14+
15+
// Call unexported function from another file (should work due to auto-imports)
16+
unexportedFromUtils()
17+
18+
println("=== End Selective Exports Test ===")
19+
}
20+
21+
// ExportedFunc is exported (uppercase) - should appear in index.ts
22+
func ExportedFunc() {
23+
println("ExportedFunc called")
24+
}
25+
26+
// unexportedFunc is not exported (lowercase) - should NOT appear in index.ts
27+
func unexportedFunc() {
28+
println("unexportedFunc called")
29+
}

0 commit comments

Comments
 (0)