summaryrefslogtreecommitdiffstats
path: root/node_modules/@npmcli/move-file/index.js
diff options
context:
space:
mode:
authorGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
committerGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
commite06ec920f7a5d784e674c4c4b4e6d1da3dc7391d (patch)
tree55713f725f77b44ebfec86e4eec3ce33e71458ca /node_modules/@npmcli/move-file/index.js
downloadwebsite_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.gz
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.bz2
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.zip
api, login, auth
Diffstat (limited to 'node_modules/@npmcli/move-file/index.js')
-rw-r--r--node_modules/@npmcli/move-file/index.js93
1 files changed, 93 insertions, 0 deletions
diff --git a/node_modules/@npmcli/move-file/index.js b/node_modules/@npmcli/move-file/index.js
new file mode 100644
index 0000000..d1567d1
--- /dev/null
+++ b/node_modules/@npmcli/move-file/index.js
@@ -0,0 +1,93 @@
+const { dirname } = require('path')
+const { promisify } = require('util')
+const {
+ access: access_,
+ accessSync,
+ copyFile: copyFile_,
+ copyFileSync,
+ unlink: unlink_,
+ unlinkSync,
+ rename: rename_,
+ renameSync,
+} = require('fs')
+
+const access = promisify(access_)
+const copyFile = promisify(copyFile_)
+const unlink = promisify(unlink_)
+const rename = promisify(rename_)
+
+const mkdirp = require('mkdirp')
+
+const pathExists = async path => {
+ try {
+ await access(path)
+ return true
+ } catch (er) {
+ return er.code !== 'ENOENT'
+ }
+}
+
+const pathExistsSync = path => {
+ try {
+ accessSync(path)
+ return true
+ } catch (er) {
+ return er.code !== 'ENOENT'
+ }
+}
+
+module.exports = async (source, destination, options = {}) => {
+ if (!source || !destination) {
+ throw new TypeError('`source` and `destination` file required')
+ }
+
+ options = {
+ overwrite: true,
+ ...options
+ }
+
+ if (!options.overwrite && await pathExists(destination)) {
+ throw new Error(`The destination file exists: ${destination}`)
+ }
+
+ await mkdirp(dirname(destination))
+
+ try {
+ await rename(source, destination)
+ } catch (error) {
+ if (error.code === 'EXDEV') {
+ await copyFile(source, destination)
+ await unlink(source)
+ } else {
+ throw error
+ }
+ }
+}
+
+module.exports.sync = (source, destination, options = {}) => {
+ if (!source || !destination) {
+ throw new TypeError('`source` and `destination` file required')
+ }
+
+ options = {
+ overwrite: true,
+ ...options
+ }
+
+ if (!options.overwrite && pathExistsSync(destination)) {
+ throw new Error(`The destination file exists: ${destination}`)
+ }
+
+ mkdirp.sync(dirname(destination))
+
+ try {
+ renameSync(source, destination)
+ } catch (error) {
+ if (error.code === 'EXDEV') {
+ copyFileSync(source, destination)
+ unlinkSync(source)
+ } else {
+ throw error
+ }
+ }
+}