copy-concurrently
Copy files, directories and symlinks
Copies files, directories and symlinks. Ownership is maintained when running as root, permissions are always maintained. On Windows, if symlinks are unavailable then junctions will be used.
PUBLIC INTERFACE
copy(from, to, [options]) → Promise
Recursively copies from
to to
and resolves its promise when finished. If to
already exists then the promise will be rejected with an EEXIST
error.
Options are:
maxConcurrency – (Default:
1
) The maximum number of concurrent copies to do at once.recurseWith - (Default:
copy.item
) The function to call on each file after recursing into a directory.isWindows - (Default:
process.platform === 'win32'
) If true enables Windows symlink semantics. This requires an extrastat
to determine if the destination of a symlink is a file or directory. If symlinking a directory fails then we'll try making a junction instead.
Options can also include dependency injection:
Promise - (Default:
global.Promise
) The promise implementation to use, defaults to Node's.fs - (Default:
require('fs')
) The filesystem module to use. Can be used to usegraceful-fs
or to inject a mock.writeStreamAtomic - (Default:
require('fs-write-stream-atomic')
) The implementation ofwriteStreamAtomic
to use. Used to inject a mock.getuid - (Default:
process.getuid
) A function that returns the current UID. Used to inject a mock.
EXTENSION INTERFACE
Ordinarily you'd only call copy
above. But it's possible to use it's component functions directly. This is useful if, say, you're writing move-concurently.
copy.file(from, to, options) → Promise
Copies a ordinary file from
to destination to
. Uses fs-write-stream-atomic
to ensure that the file is entirely copied or not at all.
Options are:
uid, gid - (Optional) If
getuid()
is0
then this and gid will be used to set the user and group ofto
. If uid is present then gid must be too.mode - (Optional) If set then
to
will have its perms set tomode
.fs - (Default:
require('fs')
) The filesystem module to use. Can be used to usegraceful-fs
or to inject a mock.Promise - (Default:
global.Promise
) The promise implementation to use, defaults to Node's.writeStreamAtomic - (Default
require('fs-write-stream-atomic')
) The implementation ofwriteStreamAtomic
to use. Used to inject a mock.
copy.symlink(from, to, options) → Promise
Copies a symlink from
to destination to
. If on Windows then if symlinking fails, a junction will be used instead.
Options are:
top - The top level the copy is being run from. This is used to determine if the symlink destination is within the set of files we're copying or outside it.
fs - (Default:
require('fs')
) The filesystem module to use. Can be used to usegraceful-fs
or to inject a mock.Promise - (Default:
global.Promise
) The promise implementation to use, defaults to Node's.isWindows - (Default:
process.platform === 'win32'
) If true enables Windows symlink semantics. This requires an extrastat
to determine if the destination of a symlink is a file or directory. If symlinking a directory fails then we'll try making a junction instead.
copy.recurse(from, to, options) → Promise
Reads all of the files in directory from
and adds them to the queue
using recurseWith
(by default copy.item
).
Options are:
queue - A
run-queue
object to add files found insidefrom
to.recurseWith - (Default:
copy.item
) The function to call on each file after recursing into a directory.uid, gid - (Optional) If
getuid()
is0
then this and gid will be used to set the user and group ofto
. If uid is present then gid must be too.mode - (Optional) If set then
to
will have its perms set tomode
.fs - (Default:
require('fs')
) The filesystem module to use. Can be used to usegraceful-fs
or to inject a mock.getuid - (Default:
process.getuid
) A function that returns the current UID. Used to inject a mock.
copy.item(from, to, options) → Promise
Copies some kind of from
to destination to
. This looks at the filetype and calls copy.file
, copy.symlink
or copy.recurse
as appropriate.
Symlink copies are queued with a priority such that they happen after all file and directory copies as you can't create a junction on windows to a file that doesn't exist yet.
Options are:
top - The top level the copy is being run from. This is used to determine if the symlink destination is within the set of files we're copying or outside it.
queue - The
run-queue
object to pass tocopy.recurse
iffrom
is a directory.recurseWith - (Default:
copy.item
) The function to call on each file after recursing into a directory.uid, gid - (Optional) If
getuid()
is0
then this and gid will be used to set the user and group ofto
. If uid is present then gid must be too.mode - (Optional) If set then
to
will have its perms set tomode
.fs - (Default:
require('fs')
) The filesystem module to use. Can be used to usegraceful-fs
or to inject a mock.getuid - (Default:
process.getuid
) A function that returns the current UID. Used to inject a mock.isWindows - (Default:
process.platform === 'win32'
) If true enables Windows symlink semantics. This requires an extrastat
to determine if the destination of a symlink is a file or directory. If symlinking a directory fails then we'll try making a junction instead.Promise - (Default:
global.Promise
) The promise implementation to use, defaults to Node's.writeStreamAtomic - (Default
require('fs-write-stream-atomic')
) The implementation ofwriteStreamAtomic
to use. Used to inject a mock.
Last updated