Skip to content

Commit 603740b

Browse files
mprevellucidd
authored andcommitted
Add source map support
1 parent bf1034c commit 603740b

File tree

3 files changed

+64
-15
lines changed

3 files changed

+64
-15
lines changed

examples/build.sbt

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,28 @@ lazy val exampleApp = project.in(file("app"))
2626
scalaJSUseMainModuleInitializer in Test := false,
2727
relativeSourceMaps := true,
2828
skip in packageJSDependencies := false,
29+
30+
// you can customize and have a static output name for lib and dependencies
31+
// instead of having the default files names like app-fastopt.js, ...
32+
artifactPath in (Compile, fastOptJS) := {
33+
(crossTarget in fastOptJS).value / "main.js"
34+
},
35+
artifactPath in (Compile, fullOptJS) := {
36+
(crossTarget in fullOptJS).value / "main.js"
37+
},
38+
artifactPath in (Compile, packageJSDependencies) := {
39+
(crossTarget in packageJSDependencies).value / "dependencies.js"
40+
},
41+
artifactPath in (Compile, packageMinifiedJSDependencies) := {
42+
(crossTarget in packageMinifiedJSDependencies).value / "dependencies.js"
43+
},
44+
2945
chromeManifest := new AppManifest {
3046
val name = Keys.name.value
3147
val version = Keys.version.value
3248
val app = App(
3349
background = Background(
34-
scripts = Chrome.defaultScripts
50+
scripts = List("main.js", "dependencies.js")
3551
)
3652
)
3753
override val defaultLocale = Some("en")
@@ -71,9 +87,25 @@ lazy val extension = project.in(file("extension"))
7187
scalaJSUseMainModuleInitializer in Test := false,
7288
relativeSourceMaps := true,
7389
skip in packageJSDependencies := false,
90+
91+
// you can customize and have a static output name for lib and dependencies
92+
// instead of having the default files names like extension-fastopt.js, ...
93+
artifactPath in (Compile, fastOptJS) := {
94+
(crossTarget in fastOptJS).value / "main.js"
95+
},
96+
artifactPath in (Compile, fullOptJS) := {
97+
(crossTarget in fullOptJS).value / "main.js"
98+
},
99+
artifactPath in (Compile, packageJSDependencies) := {
100+
(crossTarget in packageJSDependencies).value / "dependencies.js"
101+
},
102+
artifactPath in (Compile, packageMinifiedJSDependencies) := {
103+
(crossTarget in packageMinifiedJSDependencies).value / "dependencies.js"
104+
},
105+
74106
chromeManifest := new ExtensionManifest {
75107
val background = Background(
76-
scripts = Chrome.defaultScripts
108+
scripts = List("main.js", "dependencies.js")
77109
)
78110
val name = Keys.name.value
79111
val version = Keys.version.value

sbt-plugin/src/main/scala/net/lullabyte/Chrome.scala

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ import sbt._
77

88
object Chrome {
99

10-
val mainFileName = "main.js"
11-
val dependenciesFileName = "dependencies.js"
12-
val defaultScripts = List(dependenciesFileName, mainFileName)
10+
val manifestFileName = "manifest.json"
1311

1412
def i18n(msg: String): String = s"__MSG_${msg}__"
1513

@@ -20,16 +18,34 @@ object Chrome {
2018
}
2119

2220
def buildUnpackedDirectory(unpacked: File)(manifest: File, jsLib: File,
23-
jsDeps: File, resources: Seq[File]): File = {
21+
jsDeps: File, resources: Seq[File]): File = {
22+
23+
val libsAndDependencies = List(
24+
jsLib -> unpacked / jsLib.getName,
25+
jsDeps -> unpacked / jsDeps.getName
26+
)
27+
28+
val sourceMaps = List(jsLib, jsDeps) map { sourceFile =>
29+
val fileName = sourceFile.getName + ".map"
30+
val originalSourceMap = sourceFile.getParentFile / fileName
31+
originalSourceMap -> unpacked / fileName
32+
} filter (_._1.exists())
33+
34+
val chromeSpecific = List(
35+
manifest -> unpacked / manifestFileName
36+
)
37+
2438
IO.createDirectory(unpacked)
39+
2540
resources.foreach { resource =>
2641
IO.copyDirectory(resource, unpacked, overwrite = true, preserveLastModified = true)
2742
}
28-
IO.copy(List(
29-
(jsLib, unpacked / mainFileName),
30-
(jsDeps, unpacked / dependenciesFileName),
31-
(manifest, unpacked / "manifest.json")
32-
), overwrite = true, preserveLastModified = true, preserveExecutable = true)
43+
44+
IO.copy(
45+
libsAndDependencies ::: sourceMaps ::: chromeSpecific,
46+
overwrite = true, preserveLastModified = true, preserveExecutable = true
47+
)
48+
3349
unpacked
3450
}
3551

sbt-plugin/src/main/scala/net/lullabyte/ChromeSbtPlugin.scala

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ object ChromeSbtPlugin extends AutoPlugin {
2020
val fullOptJsLib = TaskKey[Attributed[File]]("fullOptJsLib")
2121
val fastOptJsLib = TaskKey[Attributed[File]]("fastOptJsLib")
2222

23+
private val chromeDir = "chrome"
2324

2425
lazy val baseSettings: Seq[Def.Setting[_]] = Seq(
2526
fastOptJsLib := (fastOptJS in Compile).value,
2627
chromeUnpackedFast := {
27-
Chrome.buildUnpackedDirectory(target.value / "chrome" / "unpacked-fast")(
28+
Chrome.buildUnpackedDirectory(target.value / chromeDir / "unpacked-fast")(
2829
(chromeGenerateManifest in Compile).value,
2930
fastOptJsLib.value.data,
3031
(packageJSDependencies in Compile).value,
@@ -33,15 +34,15 @@ object ChromeSbtPlugin extends AutoPlugin {
3334
},
3435
fullOptJsLib := (fullOptJS in Compile).value,
3536
chromeUnpackedOpt := {
36-
Chrome.buildUnpackedDirectory(target.value / "chrome" / "unpacked-opt")(
37+
Chrome.buildUnpackedDirectory(target.value / chromeDir / "unpacked-opt")(
3738
(chromeGenerateManifest in Compile).value,
3839
fullOptJsLib.value.data,
3940
(packageMinifiedJSDependencies in Compile).value,
4041
(resourceDirectories in Compile).value
4142
)
4243
},
4344
chromePackage := {
44-
val out = target.value / "chrome"
45+
val out = target.value / chromeDir
4546
val chromeAppDir = chromeUnpackedOpt.value
4647
val zipFile = new File(out, s"${name.value}.zip")
4748
val excludeFileNames = Set(
@@ -52,7 +53,7 @@ object ChromeSbtPlugin extends AutoPlugin {
5253
zipFile
5354
},
5455
chromeGenerateManifest := {
55-
Chrome.generateManifest(target.value / "chrome" / "generated_manifest.json")(
56+
Chrome.generateManifest(target.value / chromeDir / "generated_manifest.json")(
5657
(chromeManifest in Compile).value
5758
)
5859
}

0 commit comments

Comments
 (0)