summaryrefslogtreecommitdiff
path: root/ext/node/polyfills
diff options
context:
space:
mode:
Diffstat (limited to 'ext/node/polyfills')
-rw-r--r--ext/node/polyfills/_fs/_fs_cp.js41
-rw-r--r--ext/node/polyfills/fs.ts6
2 files changed, 47 insertions, 0 deletions
diff --git a/ext/node/polyfills/_fs/_fs_cp.js b/ext/node/polyfills/_fs/_fs_cp.js
new file mode 100644
index 000000000..dbe327974
--- /dev/null
+++ b/ext/node/polyfills/_fs/_fs_cp.js
@@ -0,0 +1,41 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+
+// deno-lint-ignore-file prefer-primordials
+
+import {
+ getValidatedPath,
+ validateCpOptions,
+} from "ext:deno_node/internal/fs/utils.mjs";
+import { promisify } from "ext:deno_node/internal/util.mjs";
+
+const core = globalThis.__bootstrap.core;
+const ops = core.ops;
+const { op_node_cp } = core.ensureFastOps();
+
+export function cpSync(src, dest, options) {
+ validateCpOptions(options);
+ const srcPath = getValidatedPath(src, "src");
+ const destPath = getValidatedPath(dest, "dest");
+
+ ops.op_node_cp_sync(srcPath, destPath);
+}
+
+export function cp(src, dest, options, callback) {
+ if (typeof options === "function") {
+ callback = options;
+ options = {};
+ }
+ validateCpOptions(options);
+ const srcPath = getValidatedPath(src, "src");
+ const destPath = getValidatedPath(dest, "dest");
+
+ op_node_cp(
+ srcPath,
+ destPath,
+ ).then(
+ (res) => callback(null, res),
+ (err) => callback(err, null),
+ );
+}
+
+export const cpPromise = promisify(cp);
diff --git a/ext/node/polyfills/fs.ts b/ext/node/polyfills/fs.ts
index 881f0c139..01ac9912e 100644
--- a/ext/node/polyfills/fs.ts
+++ b/ext/node/polyfills/fs.ts
@@ -18,6 +18,7 @@ import {
copyFilePromise,
copyFileSync,
} from "ext:deno_node/_fs/_fs_copy.ts";
+import { cp, cpPromise, cpSync } from "ext:deno_node/_fs/_fs_cp.js";
import Dir from "ext:deno_node/_fs/_fs_dir.ts";
import Dirent from "ext:deno_node/_fs/_fs_dirent.ts";
import { exists, existsSync } from "ext:deno_node/_fs/_fs_exists.ts";
@@ -137,6 +138,7 @@ const {
const promises = {
access: accessPromise,
copyFile: copyFilePromise,
+ cp: cpPromise,
open: openPromise,
opendir: opendirPromise,
rename: renamePromise,
@@ -179,6 +181,8 @@ export default {
constants,
copyFile,
copyFileSync,
+ cp,
+ cpSync,
createReadStream,
createWriteStream,
Dir,
@@ -280,6 +284,8 @@ export {
constants,
copyFile,
copyFileSync,
+ cp,
+ cpSync,
createReadStream,
createWriteStream,
Dir,