--- a/src/Pure/System/nodejs.scala Mon Sep 08 21:31:19 2025 +0200
+++ b/src/Pure/System/nodejs.scala Mon Sep 08 22:43:15 2025 +0200
@@ -15,22 +15,24 @@
val default_version = "22.17.0"
def context(
- platform: Isabelle_Platform = Isabelle_Platform.local,
+ platform_context: Isabelle_Platform.Context = Isabelle_Platform.Context(),
version: String = default_version
- ): Context = new Context(platform, version)
+ ): Context = new Context(platform_context, version)
def setup(
base_dir: Path,
- platform: Isabelle_Platform = Isabelle_Platform.local,
+ platform_context: Isabelle_Platform.Context = Isabelle_Platform.Context(),
version: String = default_version,
- packages: List[String] = Nil,
- progress: Progress = new Progress
+ packages: List[String] = Nil
): Directory = {
- context(platform = platform, version = version)
- .setup(base_dir, packages = packages, progress = progress)
+ context(platform_context = platform_context, version = version)
+ .setup(base_dir, packages = packages)
}
- class Context private[Nodejs](val platform: Isabelle_Platform, version: String) {
+ class Context private[Nodejs](val platform_context: Isabelle_Platform.Context, version: String) {
+ def platform: Isabelle_Platform = platform_context.isabelle_platform
+ def progress: Progress = platform_context.progress
+
override def toString: String =
"node-" + version + "-" + platform.ISABELLE_PLATFORM(windows = true, apple = true)
@@ -46,11 +48,7 @@
def download_url: String =
"https://nodejs.org/dist/v" + version + "/" + full_name + "." + download_ext
- def setup(
- base_dir: Path,
- packages: List[String] = Nil,
- progress: Progress = new Progress
- ): Directory = {
+ def setup(base_dir: Path, packages: List[String] = Nil): Directory = {
Isabelle_System.with_tmp_file("node", ext = download_ext) { archive =>
progress.echo("Getting Node.js ...")
Isabelle_System.download_file(download_url, archive)
@@ -59,7 +57,7 @@
Isabelle_System.extract(archive, base_dir)
val node_dir = new Directory(this, base_dir + Path.basic(full_name))
- for (name <- packages) node_dir.install(name, progress = progress)
+ for (name <- packages) node_dir.install(name)
node_dir
}
@@ -69,10 +67,17 @@
class Directory private[Nodejs](val context: Context, val path: Path) {
override def toString: String = path.toString
- def bin: Path = path + Path.basic("bin")
- def path_setup: String = "export PATH=" + File.bash_path(bin) + """:"$PATH""""
+ def platform_context: Isabelle_Platform.Context = context.platform_context
+ def progress: Progress = context.progress
- def install(name: String, progress: Progress = new Progress): Unit = {
+ def bin_dir: Path =
+ if (platform_context.isabelle_platform.is_windows) path
+ else path + Path.basic("bin")
+
+ def path_setup: String =
+ "export PATH=" + Bash.string(platform_context.standard_path(bin_dir)) + """:"$PATH""""
+
+ def install(name: String): Unit = {
progress.echo("Installing " + name + " ...")
Isabelle_System.bash(path_setup + "\nnpm install -g " + Bash.string(name), cwd = path).check
}
--- a/src/Tools/VSCode/src/component_vscode_extension.scala Mon Sep 08 21:31:19 2025 +0200
+++ b/src/Tools/VSCode/src/component_vscode_extension.scala Mon Sep 08 22:43:15 2025 +0200
@@ -198,7 +198,10 @@
val vsix_name =
Isabelle_System.with_tmp_dir("build") { build_dir =>
- val node_dir = Nodejs.setup(build_dir, packages = List("yarn", "vsce"), progress = progress)
+ val node_dir =
+ Nodejs.setup(build_dir,
+ platform_context = Isabelle_Platform.Context(progress = progress),
+ packages = List("yarn", "vsce"))
val manifest_text = File.read(VSCode_Main.extension_dir + VSCode_Main.MANIFEST)
val manifest_entries = split_lines(manifest_text).filter(_.nonEmpty)
--- a/src/Tools/VSCode/src/component_vscodium.scala Mon Sep 08 21:31:19 2025 +0200
+++ b/src/Tools/VSCode/src/component_vscodium.scala Mon Sep 08 22:43:15 2025 +0200
@@ -140,8 +140,10 @@
def progress: Progress = platform_context.progress
def node_setup(base_dir: Path): Nodejs.Directory =
- Nodejs.setup(base_dir, platform = platform, version = node_version,
- packages = List("yarn"), progress = progress)
+ Nodejs.setup(base_dir,
+ platform_context = platform_context,
+ version = node_version,
+ packages = List("yarn"))
def download_ext: String = if (platform.is_linux) "tar.gz" else "zip"
@@ -313,9 +315,13 @@
node_version = node_version,
vscodium_version = vscodium_version)
- Isabelle_System.require_command("git")
- Isabelle_System.require_command("jq")
- Isabelle_System.require_command("rustup")
+ platform_context.mingw.check()
+
+ if (!platform.is_windows) {
+ Isabelle_System.require_command("git")
+ Isabelle_System.require_command("jq")
+ Isabelle_System.require_command("rustup")
+ }
/* component */