summaryrefslogtreecommitdiff
path: root/std/fs/ensure_symlink.ts
diff options
context:
space:
mode:
Diffstat (limited to 'std/fs/ensure_symlink.ts')
m---------std0
-rw-r--r--std/fs/ensure_symlink.ts59
2 files changed, 59 insertions, 0 deletions
diff --git a/std b/std
deleted file mode 160000
-Subproject 43aafbf33285753e7b42230f0eb7969b300f71c
diff --git a/std/fs/ensure_symlink.ts b/std/fs/ensure_symlink.ts
new file mode 100644
index 000000000..9b7cc429c
--- /dev/null
+++ b/std/fs/ensure_symlink.ts
@@ -0,0 +1,59 @@
+// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
+import * as path from "./path/mod.ts";
+import { ensureDir, ensureDirSync } from "./ensure_dir.ts";
+import { exists, existsSync } from "./exists.ts";
+import { getFileInfoType } from "./utils.ts";
+
+/**
+ * Ensures that the link exists.
+ * If the directory structure does not exist, it is created.
+ *
+ * @param src the source file path
+ * @param dest the destination link path
+ */
+export async function ensureSymlink(src: string, dest: string): Promise<void> {
+ const srcStatInfo = await Deno.lstat(src);
+ const srcFilePathType = getFileInfoType(srcStatInfo);
+
+ if (await exists(dest)) {
+ const destStatInfo = await Deno.lstat(dest);
+ const destFilePathType = getFileInfoType(destStatInfo);
+ if (destFilePathType !== "symlink") {
+ throw new Error(
+ `Ensure path exists, expected 'symlink', got '${destFilePathType}'`
+ );
+ }
+ return;
+ }
+
+ await ensureDir(path.dirname(dest));
+
+ await Deno.symlink(src, dest, srcFilePathType);
+}
+
+/**
+ * Ensures that the link exists.
+ * If the directory structure does not exist, it is created.
+ *
+ * @param src the source file path
+ * @param dest the destination link path
+ */
+export function ensureSymlinkSync(src: string, dest: string): void {
+ const srcStatInfo = Deno.lstatSync(src);
+ const srcFilePathType = getFileInfoType(srcStatInfo);
+
+ if (existsSync(dest)) {
+ const destStatInfo = Deno.lstatSync(dest);
+ const destFilePathType = getFileInfoType(destStatInfo);
+ if (destFilePathType !== "symlink") {
+ throw new Error(
+ `Ensure path exists, expected 'symlink', got '${destFilePathType}'`
+ );
+ }
+ return;
+ }
+
+ ensureDirSync(path.dirname(dest));
+
+ Deno.symlinkSync(src, dest, srcFilePathType);
+}