@@ -12,24 +12,26 @@ struct BridgeJSLink {
1212 var exportedSkeletons : [ ExportedSkeleton ] = [ ]
1313 var importedSkeletons : [ ImportedModuleSkeleton ] = [ ]
1414 let sharedMemory : Bool
15- let exposeToGlobal : Bool
15+ var exposeToGlobal : Bool
1616 private let namespaceBuilder = NamespaceBuilder ( )
1717
1818 init (
1919 exportedSkeletons : [ ExportedSkeleton ] = [ ] ,
2020 importedSkeletons : [ ImportedModuleSkeleton ] = [ ] ,
21- sharedMemory : Bool ,
22- exposeToGlobal : Bool = true
21+ sharedMemory : Bool
2322 ) {
2423 self . exportedSkeletons = exportedSkeletons
2524 self . importedSkeletons = importedSkeletons
2625 self . sharedMemory = sharedMemory
27- self . exposeToGlobal = exposeToGlobal
26+ self . exposeToGlobal = exportedSkeletons . contains { $0 . exposeToGlobal }
2827 }
2928
3029 mutating func addExportedSkeletonFile ( data : Data ) throws {
3130 let skeleton = try JSONDecoder ( ) . decode ( ExportedSkeleton . self , from : data )
3231 exportedSkeletons . append ( skeleton )
32+ if skeleton . exposeToGlobal {
33+ exposeToGlobal = true
34+ }
3335 }
3436
3537 mutating func addImportedSkeletonFile ( data : Data ) throws {
@@ -80,7 +82,7 @@ struct BridgeJSLink {
8082 var enumStaticAssignments : [ String ] = [ ]
8183 }
8284
83- private func collectLinkData ( exposeToGlobal : Bool ) throws -> LinkData {
85+ private func collectLinkData ( ) throws -> LinkData {
8486 var data = LinkData ( )
8587
8688 // Swift heap object class definitions
@@ -1079,11 +1081,11 @@ struct BridgeJSLink {
10791081 )
10801082 printer . write ( lines : namespaceInitCode )
10811083
1082- let propertyAssignments = try generateNamespacePropertyAssignments (
1083- data : data ,
1084- exportedSkeletons : exportedSkeletons ,
1085- namespaceBuilder : namespaceBuilder ,
1086- exposeToGlobal : exposeToGlobal
1084+ let propertyAssignments = try generateNamespacePropertyAssignments (
1085+ data : data ,
1086+ exportedSkeletons : exportedSkeletons ,
1087+ namespaceBuilder : namespaceBuilder ,
1088+ exposeToGlobal : exposeToGlobal
10871089 )
10881090 printer . write ( lines : propertyAssignments )
10891091 }
@@ -1097,7 +1099,7 @@ struct BridgeJSLink {
10971099 }
10981100
10991101 func link ( ) throws -> ( outputJs : String , outputDts : String ) {
1100- let data = try collectLinkData ( exposeToGlobal : exposeToGlobal )
1102+ let data = try collectLinkData ( )
11011103 let outputJs = try generateJavaScript ( data : data )
11021104 let outputDts = generateTypeScript ( data : data )
11031105 return ( outputJs , outputDts )
@@ -1160,7 +1162,6 @@ struct BridgeJSLink {
11601162 ) throws -> [ String ] {
11611163 let printer = CodeFragmentPrinter ( )
11621164
1163- // Only write globalThis property assignments when exposeToGlobal is true
11641165 if exposeToGlobal {
11651166 printer . write ( lines : data . enumStaticAssignments )
11661167 }
@@ -1171,7 +1172,6 @@ struct BridgeJSLink {
11711172
11721173 let hierarchicalLines = try namespaceBuilder . buildHierarchicalExportsObject (
11731174 exportedSkeletons : exportedSkeletons ,
1174- exposeToGlobal : exposeToGlobal ,
11751175 renderFunctionImpl : { function in
11761176 let ( js , _) = try self . renderExportedFunction ( function : function )
11771177 return js
@@ -2478,7 +2478,6 @@ extension BridgeJSLink {
24782478
24792479 fileprivate func buildHierarchicalExportsObject (
24802480 exportedSkeletons : [ ExportedSkeleton ] ,
2481- exposeToGlobal : Bool ,
24822481 renderFunctionImpl : ( ExportedFunction ) throws -> [ String ]
24832482 ) throws -> [ String ] {
24842483 let printer = CodeFragmentPrinter ( )
@@ -2698,7 +2697,7 @@ extension BridgeJSLink {
26982697 guard hasContent ( node : childNode ) else {
26992698 continue
27002699 }
2701-
2700+
27022701 let exportKeyword = exposeToGlobal ? " " : " export "
27032702 printer . write ( " \( exportKeyword ) namespace \( childName ) { " )
27042703 printer . indent ( )
0 commit comments