@@ -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