summaryrefslogtreecommitdiff
path: root/ext/node/polyfills/_fs/_fs_symlink.ts
diff options
context:
space:
mode:
Diffstat (limited to 'ext/node/polyfills/_fs/_fs_symlink.ts')
-rw-r--r--ext/node/polyfills/_fs/_fs_symlink.ts46
1 files changed, 46 insertions, 0 deletions
diff --git a/ext/node/polyfills/_fs/_fs_symlink.ts b/ext/node/polyfills/_fs/_fs_symlink.ts
new file mode 100644
index 000000000..c8652885f
--- /dev/null
+++ b/ext/node/polyfills/_fs/_fs_symlink.ts
@@ -0,0 +1,46 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+import { CallbackWithError } from "internal:deno_node/polyfills/_fs/_fs_common.ts";
+import { fromFileUrl } from "internal:deno_node/polyfills/path.ts";
+import { promisify } from "internal:deno_node/polyfills/internal/util.mjs";
+
+type SymlinkType = "file" | "dir";
+
+export function symlink(
+ target: string | URL,
+ path: string | URL,
+ typeOrCallback: SymlinkType | CallbackWithError,
+ maybeCallback?: CallbackWithError,
+) {
+ target = target instanceof URL ? fromFileUrl(target) : target;
+ path = path instanceof URL ? fromFileUrl(path) : path;
+
+ const type: SymlinkType = typeof typeOrCallback === "string"
+ ? typeOrCallback
+ : "file";
+
+ const callback: CallbackWithError = typeof typeOrCallback === "function"
+ ? typeOrCallback
+ : (maybeCallback as CallbackWithError);
+
+ if (!callback) throw new Error("No callback function supplied");
+
+ Deno.symlink(target, path, { type }).then(() => callback(null), callback);
+}
+
+export const symlinkPromise = promisify(symlink) as (
+ target: string | URL,
+ path: string | URL,
+ type?: SymlinkType,
+) => Promise<void>;
+
+export function symlinkSync(
+ target: string | URL,
+ path: string | URL,
+ type?: SymlinkType,
+) {
+ target = target instanceof URL ? fromFileUrl(target) : target;
+ path = path instanceof URL ? fromFileUrl(path) : path;
+ type = type || "file";
+
+ Deno.symlinkSync(target, path, { type });
+}