@@ -94,6 +94,10 @@ object BloopKeys {
9494 settingKey[Option [String ]](" Scala.js-independent definition of `scalaJSStage`" )
9595 val bloopScalaJSModuleKind : SettingKey [Option [String ]] =
9696 settingKey[Option [String ]](" Scala.js-independent definition of `scalaJSModuleKind`" )
97+ val bloopScalaJSSourceMap : SettingKey [Option [Boolean ]] =
98+ settingKey(" Proxy for Scala.js definition of `scalajsLinkerConfig#sourceMap`" )
99+ val bloopScalaJSUseWebAssembly : SettingKey [Option [Boolean ]] =
100+ settingKey(" Proxy for Scala.js definition of `scalajsLinkerConfig#experimentalUseWebAssembly`" )
97101 val bloopMainClass : SettingKey [Option [String ]] =
98102 settingKey[Option [String ]](" The main class to run a bloop target" )
99103 val bloopSupportedConfigurations : SettingKey [Seq [Configuration ]] =
@@ -137,6 +141,8 @@ object BloopDefaults {
137141 import Compat ._
138142 import sbt .{Task , Defaults , State }
139143
144+ private final val StandardConfigClassName = " org.scalajs.linker.interface.StandardConfig"
145+
140146 val productDirectoriesUndeprecatedKey : TaskKey [Seq [File ]] =
141147 sbt.TaskKey [Seq [File ]](" productDirectories" , rank = KeyRanks .CTask )
142148
@@ -237,6 +243,8 @@ object BloopDefaults {
237243 List (
238244 BloopKeys .bloopScalaJSStage := findOutScalaJsStage.value,
239245 BloopKeys .bloopScalaJSModuleKind := findOutScalaJsModuleKind.value,
246+ BloopKeys .bloopScalaJSSourceMap := findOutScalaJsSourceMap.value,
247+ BloopKeys .bloopScalaJSUseWebAssembly := findOutScalaJsUseWebAssembly.value,
240248 // Override checksums so that `updates` don't check md5 for all jars
241249 Keys .update / Keys .checksums := Vector (" sha1" ),
242250 Keys .updateClassifiers / Keys .checksums := Vector (" sha1" ),
@@ -312,23 +320,64 @@ object BloopDefaults {
312320 }
313321 } catch {
314322 case _ : ClassNotFoundException => Def .setting(None )
323+ case _ : NoSuchMethodException => Def .setting(None )
315324 }
316325 }
317326
318327 def findOutScalaJsModuleKind : Def .Initialize [Option [String ]] = Def .settingDyn {
319328 try {
320- val stageClass = Class .forName(" core.tools.linker.backend.ModuleKind" )
321- val stageSetting = proxyForSetting(" scalaJSModuleKind" , stageClass)
329+ val NoModuleClazz = Class .forName(" org.scalajs.linker.interface.ModuleKind$NoModule$" )
330+ val CommonJSModuleClazz =
331+ Class .forName(" org.scalajs.linker.interface.ModuleKind$CommonJSModule$" )
332+ val ESModuleClazz = Class .forName(" org.scalajs.linker.interface.ModuleKind$ESModule$" )
333+ val StandardConfigClazz = Class .forName(StandardConfigClassName )
334+ val method = StandardConfigClazz .getDeclaredMethod(" moduleKind" )
335+
322336 Def .setting {
323- stageSetting.value.toString match {
324- case " Some(NoModule)" => Some (NoJSModule )
325- case " Some(CommonJSModule)" => Some (CommonJSModule )
326- case " Some(ESModule)" => Some (ESModule )
327- case _ => None
337+ proxyForSetting(" scalaJSLinkerConfig" , StandardConfigClazz ).value.flatMap { config =>
338+ val moduleKind = method.invoke(config)
339+ if (NoModuleClazz .isInstance(moduleKind)) Some (NoJSModule )
340+ else if (ESModuleClazz .isInstance(moduleKind)) Some (ESModule )
341+ else if (CommonJSModuleClazz .isInstance(moduleKind)) Some (CommonJSModule )
342+ else None
328343 }
329344 }
330345 } catch {
331346 case _ : ClassNotFoundException => Def .setting(None )
347+ case _ : NoSuchMethodException => Def .setting(None )
348+ }
349+ }
350+
351+ def findOutScalaJsSourceMap : Def .Initialize [Option [Boolean ]] = Def .settingDyn {
352+ try {
353+ val StandardConfigClazz = Class .forName(StandardConfigClassName )
354+ val method = StandardConfigClazz .getDeclaredMethod(" sourceMap" )
355+ Def .setting {
356+ proxyForSetting(" scalaJSLinkerConfig" , StandardConfigClazz ).value.flatMap { config =>
357+ val sourceMap = method.invoke(config)
358+ Some (sourceMap.asInstanceOf [Boolean ])
359+ }
360+ }
361+ } catch {
362+ case _ : ClassNotFoundException => Def .setting(None )
363+ case _ : NoSuchMethodException => Def .setting(None )
364+ }
365+ }
366+
367+ def findOutScalaJsUseWebAssembly : Def .Initialize [Option [Boolean ]] = Def .settingDyn {
368+ try {
369+ val StandardConfigClazz = Class .forName(StandardConfigClassName )
370+ val method = StandardConfigClazz .getDeclaredMethod(" experimentalUseWebAssembly" )
371+ Def .setting {
372+ proxyForSetting(" scalaJSLinkerConfig" , StandardConfigClazz ).value.flatMap { config =>
373+ // https://github.com/scala-js/scala-js/blob/6a145af4dc575340a40b80459d1bf15184c3a2da/linker-interface/shared/src/main/scala/org/scalajs/linker/interface/StandardConfig.scala#L88-L89
374+ val sourceMap = method.invoke(config)
375+ Some (sourceMap.asInstanceOf [Boolean ])
376+ }
377+ }
378+ } catch {
379+ case _ : ClassNotFoundException => Def .setting(None )
380+ case _ : NoSuchMethodException => Def .setting(None )
332381 }
333382 }
334383
@@ -762,7 +811,7 @@ object BloopDefaults {
762811 .find(module => module.organization == " org.scala-js" && module.name.startsWith(" scalajs-library_" ))
763812 .map(_.revision)
764813 .getOrElse(BuildInfo .latestScalaJsVersion)
765-
814+
766815 val scalaJsStage = BloopKeys .bloopScalaJSStage.value match {
767816 case Some (ScalaJsFastOpt ) => Config .LinkerMode .Debug
768817 case Some (ScalaJsFullOpt ) => Config .LinkerMode .Release
@@ -776,10 +825,11 @@ object BloopDefaults {
776825 case _ => Config .ModuleKindJS .NoModule
777826 }
778827
779- val scalaJsEmitSourceMaps =
780- ScalaJsKeys .scalaJSEmitSourceMaps. ? .value.getOrElse(false )
828+ val scalaJsEmitSourceMaps = BloopKeys .bloopScalaJSSourceMap.value.getOrElse( false )
829+ val scalaJsUseWebAssembly = BloopKeys .bloopScalaJSUseWebAssembly .value.getOrElse(false )
781830 val jsdom = Some (false )
782- val jsConfig = Config .JsConfig (scalaJsVersion, scalaJsStage, scalaJsModule, scalaJsEmitSourceMaps, jsdom, None , None , Nil )
831+ val jsConfig = Config .JsConfig (scalaJsVersion, scalaJsStage, scalaJsModule, scalaJsEmitSourceMaps, jsdom, None , None , Nil ,
832+ /* moduleSplitStyle*/ None , scalaJsUseWebAssembly)
783833 Config .Platform .Js (jsConfig, mainClass)
784834 }
785835 } else {
0 commit comments