summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2024-03-09 09:07:29 +0530
committerGitHub <noreply@github.com>2024-03-09 09:07:29 +0530
commit0bed4d3e5153aaf2e06fb6579ac6f24acf63567f (patch)
treed64bdb9ba3b4b0b1b16a5ab6ff5bad23b55dd76d /ext
parent26cee4eb0d041786f1d70cb2d9f3a6b6d82bd93d (diff)
fix(ext/node): support junction symlinks on Windows (#22762)
Fixes https://github.com/denoland/deno/issues/20609 Vitepress support! `vitepress dev` and `vitepress build` via BYONM
Diffstat (limited to 'ext')
-rw-r--r--ext/fs/Cargo.toml1
-rw-r--r--ext/fs/interface.rs2
-rw-r--r--ext/fs/std_fs.rs3
-rw-r--r--ext/node/polyfills/_fs/_fs_symlink.ts2
4 files changed, 7 insertions, 1 deletions
diff --git a/ext/fs/Cargo.toml b/ext/fs/Cargo.toml
index f6f64010e..b8cccde28 100644
--- a/ext/fs/Cargo.toml
+++ b/ext/fs/Cargo.toml
@@ -35,3 +35,4 @@ nix.workspace = true
[target.'cfg(windows)'.dependencies]
winapi = { workspace = true, features = ["winbase"] }
+junction.workspace = true
diff --git a/ext/fs/interface.rs b/ext/fs/interface.rs
index 8ffa61481..c5a348eb1 100644
--- a/ext/fs/interface.rs
+++ b/ext/fs/interface.rs
@@ -64,6 +64,8 @@ pub enum FsFileType {
File,
#[serde(rename = "dir")]
Directory,
+ #[serde(rename = "junction")]
+ Junction,
}
#[derive(Serialize)]
diff --git a/ext/fs/std_fs.rs b/ext/fs/std_fs.rs
index c1c9200cb..332866e45 100644
--- a/ext/fs/std_fs.rs
+++ b/ext/fs/std_fs.rs
@@ -810,6 +810,9 @@ fn symlink(
FsFileType::Directory => {
std::os::windows::fs::symlink_dir(oldpath, newpath)?;
}
+ FsFileType::Junction => {
+ junction::create(oldpath, newpath)?;
+ }
};
Ok(())
diff --git a/ext/node/polyfills/_fs/_fs_symlink.ts b/ext/node/polyfills/_fs/_fs_symlink.ts
index 5cb121755..350263423 100644
--- a/ext/node/polyfills/_fs/_fs_symlink.ts
+++ b/ext/node/polyfills/_fs/_fs_symlink.ts
@@ -7,7 +7,7 @@ import { CallbackWithError } from "ext:deno_node/_fs/_fs_common.ts";
import { pathFromURL } from "ext:deno_web/00_infra.js";
import { promisify } from "ext:deno_node/internal/util.mjs";
-type SymlinkType = "file" | "dir";
+type SymlinkType = "file" | "dir" | "junction";
export function symlink(
target: string | URL,