summaryrefslogtreecommitdiff
path: root/std/fs/copy.ts
diff options
context:
space:
mode:
Diffstat (limited to 'std/fs/copy.ts')
-rw-r--r--std/fs/copy.ts39
1 files changed, 27 insertions, 12 deletions
diff --git a/std/fs/copy.ts b/std/fs/copy.ts
index ed4493da0..10bf89186 100644
--- a/std/fs/copy.ts
+++ b/std/fs/copy.ts
@@ -20,11 +20,17 @@ export interface CopyOptions {
preserveTimestamps?: boolean;
}
+interface InternalCopyOptions extends CopyOptions {
+ /**
+ * default is `false`
+ */
+ isFolder?: boolean;
+}
+
async function ensureValidCopy(
src: string,
dest: string,
- options: CopyOptions,
- isCopyFolder = false,
+ options: InternalCopyOptions,
): Promise<Deno.FileInfo | undefined> {
let destStat: Deno.FileInfo;
@@ -37,7 +43,7 @@ async function ensureValidCopy(
throw err;
}
- if (isCopyFolder && !destStat.isDirectory) {
+ if (options.isFolder && !destStat.isDirectory) {
throw new Error(
`Cannot overwrite non-directory '${dest}' with directory '${src}'.`,
);
@@ -52,8 +58,7 @@ async function ensureValidCopy(
function ensureValidCopySync(
src: string,
dest: string,
- options: CopyOptions,
- isCopyFolder = false,
+ options: InternalCopyOptions,
): Deno.FileInfo | undefined {
let destStat: Deno.FileInfo;
try {
@@ -65,7 +70,7 @@ function ensureValidCopySync(
throw err;
}
- if (isCopyFolder && !destStat.isDirectory) {
+ if (options.isFolder && !destStat.isDirectory) {
throw new Error(
`Cannot overwrite non-directory '${dest}' with directory '${src}'.`,
);
@@ -81,7 +86,7 @@ function ensureValidCopySync(
async function copyFile(
src: string,
dest: string,
- options: CopyOptions,
+ options: InternalCopyOptions,
): Promise<void> {
await ensureValidCopy(src, dest, options);
await Deno.copyFile(src, dest);
@@ -93,7 +98,11 @@ async function copyFile(
}
}
/* copy file to dest synchronously */
-function copyFileSync(src: string, dest: string, options: CopyOptions): void {
+function copyFileSync(
+ src: string,
+ dest: string,
+ options: InternalCopyOptions,
+): void {
ensureValidCopySync(src, dest, options);
Deno.copyFileSync(src, dest);
if (options.preserveTimestamps) {
@@ -108,7 +117,7 @@ function copyFileSync(src: string, dest: string, options: CopyOptions): void {
async function copySymLink(
src: string,
dest: string,
- options: CopyOptions,
+ options: InternalCopyOptions,
): Promise<void> {
await ensureValidCopy(src, dest, options);
const originSrcFilePath = await Deno.readLink(src);
@@ -132,7 +141,7 @@ async function copySymLink(
function copySymlinkSync(
src: string,
dest: string,
- options: CopyOptions,
+ options: InternalCopyOptions,
): void {
ensureValidCopySync(src, dest, options);
const originSrcFilePath = Deno.readLinkSync(src);
@@ -159,7 +168,10 @@ async function copyDir(
dest: string,
options: CopyOptions,
): Promise<void> {
- const destStat = await ensureValidCopy(src, dest, options, true);
+ const destStat = await ensureValidCopy(src, dest, {
+ ...options,
+ isFolder: true,
+ });
if (!destStat) {
await ensureDir(dest);
@@ -187,7 +199,10 @@ async function copyDir(
/* copy folder from src to dest synchronously */
function copyDirSync(src: string, dest: string, options: CopyOptions): void {
- const destStat = ensureValidCopySync(src, dest, options, true);
+ const destStat = ensureValidCopySync(src, dest, {
+ ...options,
+ isFolder: true,
+ });
if (!destStat) {
ensureDirSync(dest);