1994 lines
58 KiB
JavaScript
1994 lines
58 KiB
JavaScript
module.exports = (function() {
|
|
var __MODS__ = {};
|
|
var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; };
|
|
var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; };
|
|
var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } };
|
|
var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; };
|
|
__DEFINE__(1721263118827, function(require, module, exports) {
|
|
|
|
|
|
module.exports = Object.assign(
|
|
{},
|
|
// Export promiseified graceful-fs:
|
|
require('./fs'),
|
|
// Export extra methods:
|
|
require('./copy-sync'),
|
|
require('./copy'),
|
|
require('./empty'),
|
|
require('./ensure'),
|
|
require('./json'),
|
|
require('./mkdirs'),
|
|
require('./move-sync'),
|
|
require('./move'),
|
|
require('./output'),
|
|
require('./path-exists'),
|
|
require('./remove')
|
|
)
|
|
|
|
// Export fs.promises as a getter property so that we don't trigger
|
|
// ExperimentalWarning before fs.promises is actually accessed.
|
|
const fs = require('fs')
|
|
if (Object.getOwnPropertyDescriptor(fs, 'promises')) {
|
|
Object.defineProperty(module.exports, 'promises', {
|
|
get () { return fs.promises }
|
|
})
|
|
}
|
|
|
|
}, function(modId) {var map = {"./fs":1721263118828,"./copy-sync":1721263118829,"./copy":1721263118838,"./empty":1721263118841,"./ensure":1721263118844,"./json":1721263118850,"./mkdirs":1721263118831,"./move-sync":1721263118854,"./move":1721263118856,"./output":1721263118858,"./path-exists":1721263118840,"./remove":1721263118842,"fs":1721263118828}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118828, function(require, module, exports) {
|
|
|
|
// This is adapted from https://github.com/normalize/mz
|
|
// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors
|
|
const u = require('universalify').fromCallback
|
|
const fs = require('graceful-fs')
|
|
|
|
const api = [
|
|
'access',
|
|
'appendFile',
|
|
'chmod',
|
|
'chown',
|
|
'close',
|
|
'copyFile',
|
|
'fchmod',
|
|
'fchown',
|
|
'fdatasync',
|
|
'fstat',
|
|
'fsync',
|
|
'ftruncate',
|
|
'futimes',
|
|
'lchown',
|
|
'lchmod',
|
|
'link',
|
|
'lstat',
|
|
'mkdir',
|
|
'mkdtemp',
|
|
'open',
|
|
'readFile',
|
|
'readdir',
|
|
'readlink',
|
|
'realpath',
|
|
'rename',
|
|
'rmdir',
|
|
'stat',
|
|
'symlink',
|
|
'truncate',
|
|
'unlink',
|
|
'utimes',
|
|
'writeFile'
|
|
].filter(key => {
|
|
// Some commands are not available on some systems. Ex:
|
|
// fs.copyFile was added in Node.js v8.5.0
|
|
// fs.mkdtemp was added in Node.js v5.10.0
|
|
// fs.lchown is not available on at least some Linux
|
|
return typeof fs[key] === 'function'
|
|
})
|
|
|
|
// Export all keys:
|
|
Object.keys(fs).forEach(key => {
|
|
if (key === 'promises') {
|
|
// fs.promises is a getter property that triggers ExperimentalWarning
|
|
// Don't re-export it here, the getter is defined in "lib/index.js"
|
|
return
|
|
}
|
|
exports[key] = fs[key]
|
|
})
|
|
|
|
// Universalify async methods:
|
|
api.forEach(method => {
|
|
exports[method] = u(fs[method])
|
|
})
|
|
|
|
// We differ from mz/fs in that we still ship the old, broken, fs.exists()
|
|
// since we are a drop-in replacement for the native module
|
|
exports.exists = function (filename, callback) {
|
|
if (typeof callback === 'function') {
|
|
return fs.exists(filename, callback)
|
|
}
|
|
return new Promise(resolve => {
|
|
return fs.exists(filename, resolve)
|
|
})
|
|
}
|
|
|
|
// fs.read() & fs.write need special treatment due to multiple callback args
|
|
|
|
exports.read = function (fd, buffer, offset, length, position, callback) {
|
|
if (typeof callback === 'function') {
|
|
return fs.read(fd, buffer, offset, length, position, callback)
|
|
}
|
|
return new Promise((resolve, reject) => {
|
|
fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {
|
|
if (err) return reject(err)
|
|
resolve({ bytesRead, buffer })
|
|
})
|
|
})
|
|
}
|
|
|
|
// Function signature can be
|
|
// fs.write(fd, buffer[, offset[, length[, position]]], callback)
|
|
// OR
|
|
// fs.write(fd, string[, position[, encoding]], callback)
|
|
// We need to handle both cases, so we use ...args
|
|
exports.write = function (fd, buffer, ...args) {
|
|
if (typeof args[args.length - 1] === 'function') {
|
|
return fs.write(fd, buffer, ...args)
|
|
}
|
|
|
|
return new Promise((resolve, reject) => {
|
|
fs.write(fd, buffer, ...args, (err, bytesWritten, buffer) => {
|
|
if (err) return reject(err)
|
|
resolve({ bytesWritten, buffer })
|
|
})
|
|
})
|
|
}
|
|
|
|
// fs.realpath.native only available in Node v9.2+
|
|
if (typeof fs.realpath.native === 'function') {
|
|
exports.realpath.native = u(fs.realpath.native)
|
|
}
|
|
|
|
}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118829, function(require, module, exports) {
|
|
|
|
|
|
module.exports = {
|
|
copySync: require('./copy-sync')
|
|
}
|
|
|
|
}, function(modId) { var map = {"./copy-sync":1721263118830}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118830, function(require, module, exports) {
|
|
|
|
|
|
const fs = require('graceful-fs')
|
|
const path = require('path')
|
|
const mkdirpSync = require('../mkdirs').mkdirsSync
|
|
const utimesSync = require('../util/utimes.js').utimesMillisSync
|
|
const stat = require('../util/stat')
|
|
|
|
function copySync (src, dest, opts) {
|
|
if (typeof opts === 'function') {
|
|
opts = { filter: opts }
|
|
}
|
|
|
|
opts = opts || {}
|
|
opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
|
|
opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber
|
|
|
|
// Warn about using preserveTimestamps on 32-bit node
|
|
if (opts.preserveTimestamps && process.arch === 'ia32') {
|
|
console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
|
|
see https://github.com/jprichardson/node-fs-extra/issues/269`)
|
|
}
|
|
|
|
const { srcStat, destStat } = stat.checkPathsSync(src, dest, 'copy')
|
|
stat.checkParentPathsSync(src, srcStat, dest, 'copy')
|
|
return handleFilterAndCopy(destStat, src, dest, opts)
|
|
}
|
|
|
|
function handleFilterAndCopy (destStat, src, dest, opts) {
|
|
if (opts.filter && !opts.filter(src, dest)) return
|
|
const destParent = path.dirname(dest)
|
|
if (!fs.existsSync(destParent)) mkdirpSync(destParent)
|
|
return startCopy(destStat, src, dest, opts)
|
|
}
|
|
|
|
function startCopy (destStat, src, dest, opts) {
|
|
if (opts.filter && !opts.filter(src, dest)) return
|
|
return getStats(destStat, src, dest, opts)
|
|
}
|
|
|
|
function getStats (destStat, src, dest, opts) {
|
|
const statSync = opts.dereference ? fs.statSync : fs.lstatSync
|
|
const srcStat = statSync(src)
|
|
|
|
if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)
|
|
else if (srcStat.isFile() ||
|
|
srcStat.isCharacterDevice() ||
|
|
srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts)
|
|
else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)
|
|
}
|
|
|
|
function onFile (srcStat, destStat, src, dest, opts) {
|
|
if (!destStat) return copyFile(srcStat, src, dest, opts)
|
|
return mayCopyFile(srcStat, src, dest, opts)
|
|
}
|
|
|
|
function mayCopyFile (srcStat, src, dest, opts) {
|
|
if (opts.overwrite) {
|
|
fs.unlinkSync(dest)
|
|
return copyFile(srcStat, src, dest, opts)
|
|
} else if (opts.errorOnExist) {
|
|
throw new Error(`'${dest}' already exists`)
|
|
}
|
|
}
|
|
|
|
function copyFile (srcStat, src, dest, opts) {
|
|
if (typeof fs.copyFileSync === 'function') {
|
|
fs.copyFileSync(src, dest)
|
|
fs.chmodSync(dest, srcStat.mode)
|
|
if (opts.preserveTimestamps) {
|
|
return utimesSync(dest, srcStat.atime, srcStat.mtime)
|
|
}
|
|
return
|
|
}
|
|
return copyFileFallback(srcStat, src, dest, opts)
|
|
}
|
|
|
|
function copyFileFallback (srcStat, src, dest, opts) {
|
|
const BUF_LENGTH = 64 * 1024
|
|
const _buff = require('../util/buffer')(BUF_LENGTH)
|
|
|
|
const fdr = fs.openSync(src, 'r')
|
|
const fdw = fs.openSync(dest, 'w', srcStat.mode)
|
|
let pos = 0
|
|
|
|
while (pos < srcStat.size) {
|
|
const bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos)
|
|
fs.writeSync(fdw, _buff, 0, bytesRead)
|
|
pos += bytesRead
|
|
}
|
|
|
|
if (opts.preserveTimestamps) fs.futimesSync(fdw, srcStat.atime, srcStat.mtime)
|
|
|
|
fs.closeSync(fdr)
|
|
fs.closeSync(fdw)
|
|
}
|
|
|
|
function onDir (srcStat, destStat, src, dest, opts) {
|
|
if (!destStat) return mkDirAndCopy(srcStat, src, dest, opts)
|
|
if (destStat && !destStat.isDirectory()) {
|
|
throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)
|
|
}
|
|
return copyDir(src, dest, opts)
|
|
}
|
|
|
|
function mkDirAndCopy (srcStat, src, dest, opts) {
|
|
fs.mkdirSync(dest)
|
|
copyDir(src, dest, opts)
|
|
return fs.chmodSync(dest, srcStat.mode)
|
|
}
|
|
|
|
function copyDir (src, dest, opts) {
|
|
fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))
|
|
}
|
|
|
|
function copyDirItem (item, src, dest, opts) {
|
|
const srcItem = path.join(src, item)
|
|
const destItem = path.join(dest, item)
|
|
const { destStat } = stat.checkPathsSync(srcItem, destItem, 'copy')
|
|
return startCopy(destStat, srcItem, destItem, opts)
|
|
}
|
|
|
|
function onLink (destStat, src, dest, opts) {
|
|
let resolvedSrc = fs.readlinkSync(src)
|
|
if (opts.dereference) {
|
|
resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
|
|
}
|
|
|
|
if (!destStat) {
|
|
return fs.symlinkSync(resolvedSrc, dest)
|
|
} else {
|
|
let resolvedDest
|
|
try {
|
|
resolvedDest = fs.readlinkSync(dest)
|
|
} catch (err) {
|
|
// dest exists and is a regular file or directory,
|
|
// Windows may throw UNKNOWN error. If dest already exists,
|
|
// fs throws error anyway, so no need to guard against it here.
|
|
if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlinkSync(resolvedSrc, dest)
|
|
throw err
|
|
}
|
|
if (opts.dereference) {
|
|
resolvedDest = path.resolve(process.cwd(), resolvedDest)
|
|
}
|
|
if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
|
|
throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)
|
|
}
|
|
|
|
// prevent copy if src is a subdir of dest since unlinking
|
|
// dest in this case would result in removing src contents
|
|
// and therefore a broken symlink would be created.
|
|
if (fs.statSync(dest).isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
|
|
throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)
|
|
}
|
|
return copyLink(resolvedSrc, dest)
|
|
}
|
|
}
|
|
|
|
function copyLink (resolvedSrc, dest) {
|
|
fs.unlinkSync(dest)
|
|
return fs.symlinkSync(resolvedSrc, dest)
|
|
}
|
|
|
|
module.exports = copySync
|
|
|
|
}, function(modId) { var map = {"../mkdirs":1721263118831,"../util/utimes.js":1721263118835,"../util/stat":1721263118836,"../util/buffer":1721263118837}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118831, function(require, module, exports) {
|
|
|
|
const u = require('universalify').fromCallback
|
|
const mkdirs = u(require('./mkdirs'))
|
|
const mkdirsSync = require('./mkdirs-sync')
|
|
|
|
module.exports = {
|
|
mkdirs,
|
|
mkdirsSync,
|
|
// alias
|
|
mkdirp: mkdirs,
|
|
mkdirpSync: mkdirsSync,
|
|
ensureDir: mkdirs,
|
|
ensureDirSync: mkdirsSync
|
|
}
|
|
|
|
}, function(modId) { var map = {"./mkdirs":1721263118832,"./mkdirs-sync":1721263118834}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118832, function(require, module, exports) {
|
|
|
|
|
|
const fs = require('graceful-fs')
|
|
const path = require('path')
|
|
const invalidWin32Path = require('./win32').invalidWin32Path
|
|
|
|
const o777 = parseInt('0777', 8)
|
|
|
|
function mkdirs (p, opts, callback, made) {
|
|
if (typeof opts === 'function') {
|
|
callback = opts
|
|
opts = {}
|
|
} else if (!opts || typeof opts !== 'object') {
|
|
opts = { mode: opts }
|
|
}
|
|
|
|
if (process.platform === 'win32' && invalidWin32Path(p)) {
|
|
const errInval = new Error(p + ' contains invalid WIN32 path characters.')
|
|
errInval.code = 'EINVAL'
|
|
return callback(errInval)
|
|
}
|
|
|
|
let mode = opts.mode
|
|
const xfs = opts.fs || fs
|
|
|
|
if (mode === undefined) {
|
|
mode = o777 & (~process.umask())
|
|
}
|
|
if (!made) made = null
|
|
|
|
callback = callback || function () {}
|
|
p = path.resolve(p)
|
|
|
|
xfs.mkdir(p, mode, er => {
|
|
if (!er) {
|
|
made = made || p
|
|
return callback(null, made)
|
|
}
|
|
switch (er.code) {
|
|
case 'ENOENT':
|
|
if (path.dirname(p) === p) return callback(er)
|
|
mkdirs(path.dirname(p), opts, (er, made) => {
|
|
if (er) callback(er, made)
|
|
else mkdirs(p, opts, callback, made)
|
|
})
|
|
break
|
|
|
|
// In the case of any other error, just see if there's a dir
|
|
// there already. If so, then hooray! If not, then something
|
|
// is borked.
|
|
default:
|
|
xfs.stat(p, (er2, stat) => {
|
|
// if the stat fails, then that's super weird.
|
|
// let the original error be the failure reason.
|
|
if (er2 || !stat.isDirectory()) callback(er, made)
|
|
else callback(null, made)
|
|
})
|
|
break
|
|
}
|
|
})
|
|
}
|
|
|
|
module.exports = mkdirs
|
|
|
|
}, function(modId) { var map = {"./win32":1721263118833}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118833, function(require, module, exports) {
|
|
|
|
|
|
const path = require('path')
|
|
|
|
// get drive on windows
|
|
function getRootPath (p) {
|
|
p = path.normalize(path.resolve(p)).split(path.sep)
|
|
if (p.length > 0) return p[0]
|
|
return null
|
|
}
|
|
|
|
// http://stackoverflow.com/a/62888/10333 contains more accurate
|
|
// TODO: expand to include the rest
|
|
const INVALID_PATH_CHARS = /[<>:"|?*]/
|
|
|
|
function invalidWin32Path (p) {
|
|
const rp = getRootPath(p)
|
|
p = p.replace(rp, '')
|
|
return INVALID_PATH_CHARS.test(p)
|
|
}
|
|
|
|
module.exports = {
|
|
getRootPath,
|
|
invalidWin32Path
|
|
}
|
|
|
|
}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118834, function(require, module, exports) {
|
|
|
|
|
|
const fs = require('graceful-fs')
|
|
const path = require('path')
|
|
const invalidWin32Path = require('./win32').invalidWin32Path
|
|
|
|
const o777 = parseInt('0777', 8)
|
|
|
|
function mkdirsSync (p, opts, made) {
|
|
if (!opts || typeof opts !== 'object') {
|
|
opts = { mode: opts }
|
|
}
|
|
|
|
let mode = opts.mode
|
|
const xfs = opts.fs || fs
|
|
|
|
if (process.platform === 'win32' && invalidWin32Path(p)) {
|
|
const errInval = new Error(p + ' contains invalid WIN32 path characters.')
|
|
errInval.code = 'EINVAL'
|
|
throw errInval
|
|
}
|
|
|
|
if (mode === undefined) {
|
|
mode = o777 & (~process.umask())
|
|
}
|
|
if (!made) made = null
|
|
|
|
p = path.resolve(p)
|
|
|
|
try {
|
|
xfs.mkdirSync(p, mode)
|
|
made = made || p
|
|
} catch (err0) {
|
|
if (err0.code === 'ENOENT') {
|
|
if (path.dirname(p) === p) throw err0
|
|
made = mkdirsSync(path.dirname(p), opts, made)
|
|
mkdirsSync(p, opts, made)
|
|
} else {
|
|
// In the case of any other error, just see if there's a dir there
|
|
// already. If so, then hooray! If not, then something is borked.
|
|
let stat
|
|
try {
|
|
stat = xfs.statSync(p)
|
|
} catch (err1) {
|
|
throw err0
|
|
}
|
|
if (!stat.isDirectory()) throw err0
|
|
}
|
|
}
|
|
|
|
return made
|
|
}
|
|
|
|
module.exports = mkdirsSync
|
|
|
|
}, function(modId) { var map = {"./win32":1721263118833}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118835, function(require, module, exports) {
|
|
|
|
|
|
const fs = require('graceful-fs')
|
|
const os = require('os')
|
|
const path = require('path')
|
|
|
|
// HFS, ext{2,3}, FAT do not, Node.js v0.10 does not
|
|
function hasMillisResSync () {
|
|
let tmpfile = path.join('millis-test-sync' + Date.now().toString() + Math.random().toString().slice(2))
|
|
tmpfile = path.join(os.tmpdir(), tmpfile)
|
|
|
|
// 550 millis past UNIX epoch
|
|
const d = new Date(1435410243862)
|
|
fs.writeFileSync(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141')
|
|
const fd = fs.openSync(tmpfile, 'r+')
|
|
fs.futimesSync(fd, d, d)
|
|
fs.closeSync(fd)
|
|
return fs.statSync(tmpfile).mtime > 1435410243000
|
|
}
|
|
|
|
function hasMillisRes (callback) {
|
|
let tmpfile = path.join('millis-test' + Date.now().toString() + Math.random().toString().slice(2))
|
|
tmpfile = path.join(os.tmpdir(), tmpfile)
|
|
|
|
// 550 millis past UNIX epoch
|
|
const d = new Date(1435410243862)
|
|
fs.writeFile(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141', err => {
|
|
if (err) return callback(err)
|
|
fs.open(tmpfile, 'r+', (err, fd) => {
|
|
if (err) return callback(err)
|
|
fs.futimes(fd, d, d, err => {
|
|
if (err) return callback(err)
|
|
fs.close(fd, err => {
|
|
if (err) return callback(err)
|
|
fs.stat(tmpfile, (err, stats) => {
|
|
if (err) return callback(err)
|
|
callback(null, stats.mtime > 1435410243000)
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
function timeRemoveMillis (timestamp) {
|
|
if (typeof timestamp === 'number') {
|
|
return Math.floor(timestamp / 1000) * 1000
|
|
} else if (timestamp instanceof Date) {
|
|
return new Date(Math.floor(timestamp.getTime() / 1000) * 1000)
|
|
} else {
|
|
throw new Error('fs-extra: timeRemoveMillis() unknown parameter type')
|
|
}
|
|
}
|
|
|
|
function utimesMillis (path, atime, mtime, callback) {
|
|
// if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)
|
|
fs.open(path, 'r+', (err, fd) => {
|
|
if (err) return callback(err)
|
|
fs.futimes(fd, atime, mtime, futimesErr => {
|
|
fs.close(fd, closeErr => {
|
|
if (callback) callback(futimesErr || closeErr)
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
function utimesMillisSync (path, atime, mtime) {
|
|
const fd = fs.openSync(path, 'r+')
|
|
fs.futimesSync(fd, atime, mtime)
|
|
return fs.closeSync(fd)
|
|
}
|
|
|
|
module.exports = {
|
|
hasMillisRes,
|
|
hasMillisResSync,
|
|
timeRemoveMillis,
|
|
utimesMillis,
|
|
utimesMillisSync
|
|
}
|
|
|
|
}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118836, function(require, module, exports) {
|
|
|
|
|
|
const fs = require('graceful-fs')
|
|
const path = require('path')
|
|
|
|
const NODE_VERSION_MAJOR_WITH_BIGINT = 10
|
|
const NODE_VERSION_MINOR_WITH_BIGINT = 5
|
|
const NODE_VERSION_PATCH_WITH_BIGINT = 0
|
|
const nodeVersion = process.versions.node.split('.')
|
|
const nodeVersionMajor = Number.parseInt(nodeVersion[0], 10)
|
|
const nodeVersionMinor = Number.parseInt(nodeVersion[1], 10)
|
|
const nodeVersionPatch = Number.parseInt(nodeVersion[2], 10)
|
|
|
|
function nodeSupportsBigInt () {
|
|
if (nodeVersionMajor > NODE_VERSION_MAJOR_WITH_BIGINT) {
|
|
return true
|
|
} else if (nodeVersionMajor === NODE_VERSION_MAJOR_WITH_BIGINT) {
|
|
if (nodeVersionMinor > NODE_VERSION_MINOR_WITH_BIGINT) {
|
|
return true
|
|
} else if (nodeVersionMinor === NODE_VERSION_MINOR_WITH_BIGINT) {
|
|
if (nodeVersionPatch >= NODE_VERSION_PATCH_WITH_BIGINT) {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
function getStats (src, dest, cb) {
|
|
if (nodeSupportsBigInt()) {
|
|
fs.stat(src, { bigint: true }, (err, srcStat) => {
|
|
if (err) return cb(err)
|
|
fs.stat(dest, { bigint: true }, (err, destStat) => {
|
|
if (err) {
|
|
if (err.code === 'ENOENT') return cb(null, { srcStat, destStat: null })
|
|
return cb(err)
|
|
}
|
|
return cb(null, { srcStat, destStat })
|
|
})
|
|
})
|
|
} else {
|
|
fs.stat(src, (err, srcStat) => {
|
|
if (err) return cb(err)
|
|
fs.stat(dest, (err, destStat) => {
|
|
if (err) {
|
|
if (err.code === 'ENOENT') return cb(null, { srcStat, destStat: null })
|
|
return cb(err)
|
|
}
|
|
return cb(null, { srcStat, destStat })
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
function getStatsSync (src, dest) {
|
|
let srcStat, destStat
|
|
if (nodeSupportsBigInt()) {
|
|
srcStat = fs.statSync(src, { bigint: true })
|
|
} else {
|
|
srcStat = fs.statSync(src)
|
|
}
|
|
try {
|
|
if (nodeSupportsBigInt()) {
|
|
destStat = fs.statSync(dest, { bigint: true })
|
|
} else {
|
|
destStat = fs.statSync(dest)
|
|
}
|
|
} catch (err) {
|
|
if (err.code === 'ENOENT') return { srcStat, destStat: null }
|
|
throw err
|
|
}
|
|
return { srcStat, destStat }
|
|
}
|
|
|
|
function checkPaths (src, dest, funcName, cb) {
|
|
getStats(src, dest, (err, stats) => {
|
|
if (err) return cb(err)
|
|
const { srcStat, destStat } = stats
|
|
if (destStat && destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev) {
|
|
return cb(new Error('Source and destination must not be the same.'))
|
|
}
|
|
if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
|
|
return cb(new Error(errMsg(src, dest, funcName)))
|
|
}
|
|
return cb(null, { srcStat, destStat })
|
|
})
|
|
}
|
|
|
|
function checkPathsSync (src, dest, funcName) {
|
|
const { srcStat, destStat } = getStatsSync(src, dest)
|
|
if (destStat && destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev) {
|
|
throw new Error('Source and destination must not be the same.')
|
|
}
|
|
if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
|
|
throw new Error(errMsg(src, dest, funcName))
|
|
}
|
|
return { srcStat, destStat }
|
|
}
|
|
|
|
// recursively check if dest parent is a subdirectory of src.
|
|
// It works for all file types including symlinks since it
|
|
// checks the src and dest inodes. It starts from the deepest
|
|
// parent and stops once it reaches the src parent or the root path.
|
|
function checkParentPaths (src, srcStat, dest, funcName, cb) {
|
|
const srcParent = path.resolve(path.dirname(src))
|
|
const destParent = path.resolve(path.dirname(dest))
|
|
if (destParent === srcParent || destParent === path.parse(destParent).root) return cb()
|
|
if (nodeSupportsBigInt()) {
|
|
fs.stat(destParent, { bigint: true }, (err, destStat) => {
|
|
if (err) {
|
|
if (err.code === 'ENOENT') return cb()
|
|
return cb(err)
|
|
}
|
|
if (destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev) {
|
|
return cb(new Error(errMsg(src, dest, funcName)))
|
|
}
|
|
return checkParentPaths(src, srcStat, destParent, funcName, cb)
|
|
})
|
|
} else {
|
|
fs.stat(destParent, (err, destStat) => {
|
|
if (err) {
|
|
if (err.code === 'ENOENT') return cb()
|
|
return cb(err)
|
|
}
|
|
if (destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev) {
|
|
return cb(new Error(errMsg(src, dest, funcName)))
|
|
}
|
|
return checkParentPaths(src, srcStat, destParent, funcName, cb)
|
|
})
|
|
}
|
|
}
|
|
|
|
function checkParentPathsSync (src, srcStat, dest, funcName) {
|
|
const srcParent = path.resolve(path.dirname(src))
|
|
const destParent = path.resolve(path.dirname(dest))
|
|
if (destParent === srcParent || destParent === path.parse(destParent).root) return
|
|
let destStat
|
|
try {
|
|
if (nodeSupportsBigInt()) {
|
|
destStat = fs.statSync(destParent, { bigint: true })
|
|
} else {
|
|
destStat = fs.statSync(destParent)
|
|
}
|
|
} catch (err) {
|
|
if (err.code === 'ENOENT') return
|
|
throw err
|
|
}
|
|
if (destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev) {
|
|
throw new Error(errMsg(src, dest, funcName))
|
|
}
|
|
return checkParentPathsSync(src, srcStat, destParent, funcName)
|
|
}
|
|
|
|
// return true if dest is a subdir of src, otherwise false.
|
|
// It only checks the path strings.
|
|
function isSrcSubdir (src, dest) {
|
|
const srcArr = path.resolve(src).split(path.sep).filter(i => i)
|
|
const destArr = path.resolve(dest).split(path.sep).filter(i => i)
|
|
return srcArr.reduce((acc, cur, i) => acc && destArr[i] === cur, true)
|
|
}
|
|
|
|
function errMsg (src, dest, funcName) {
|
|
return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`
|
|
}
|
|
|
|
module.exports = {
|
|
checkPaths,
|
|
checkPathsSync,
|
|
checkParentPaths,
|
|
checkParentPathsSync,
|
|
isSrcSubdir
|
|
}
|
|
|
|
}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118837, function(require, module, exports) {
|
|
|
|
/* eslint-disable node/no-deprecated-api */
|
|
module.exports = function (size) {
|
|
if (typeof Buffer.allocUnsafe === 'function') {
|
|
try {
|
|
return Buffer.allocUnsafe(size)
|
|
} catch (e) {
|
|
return new Buffer(size)
|
|
}
|
|
}
|
|
return new Buffer(size)
|
|
}
|
|
|
|
}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118838, function(require, module, exports) {
|
|
|
|
|
|
const u = require('universalify').fromCallback
|
|
module.exports = {
|
|
copy: u(require('./copy'))
|
|
}
|
|
|
|
}, function(modId) { var map = {"./copy":1721263118839}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118839, function(require, module, exports) {
|
|
|
|
|
|
const fs = require('graceful-fs')
|
|
const path = require('path')
|
|
const mkdirp = require('../mkdirs').mkdirs
|
|
const pathExists = require('../path-exists').pathExists
|
|
const utimes = require('../util/utimes').utimesMillis
|
|
const stat = require('../util/stat')
|
|
|
|
function copy (src, dest, opts, cb) {
|
|
if (typeof opts === 'function' && !cb) {
|
|
cb = opts
|
|
opts = {}
|
|
} else if (typeof opts === 'function') {
|
|
opts = { filter: opts }
|
|
}
|
|
|
|
cb = cb || function () {}
|
|
opts = opts || {}
|
|
|
|
opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
|
|
opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber
|
|
|
|
// Warn about using preserveTimestamps on 32-bit node
|
|
if (opts.preserveTimestamps && process.arch === 'ia32') {
|
|
console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
|
|
see https://github.com/jprichardson/node-fs-extra/issues/269`)
|
|
}
|
|
|
|
stat.checkPaths(src, dest, 'copy', (err, stats) => {
|
|
if (err) return cb(err)
|
|
const { srcStat, destStat } = stats
|
|
stat.checkParentPaths(src, srcStat, dest, 'copy', err => {
|
|
if (err) return cb(err)
|
|
if (opts.filter) return handleFilter(checkParentDir, destStat, src, dest, opts, cb)
|
|
return checkParentDir(destStat, src, dest, opts, cb)
|
|
})
|
|
})
|
|
}
|
|
|
|
function checkParentDir (destStat, src, dest, opts, cb) {
|
|
const destParent = path.dirname(dest)
|
|
pathExists(destParent, (err, dirExists) => {
|
|
if (err) return cb(err)
|
|
if (dirExists) return startCopy(destStat, src, dest, opts, cb)
|
|
mkdirp(destParent, err => {
|
|
if (err) return cb(err)
|
|
return startCopy(destStat, src, dest, opts, cb)
|
|
})
|
|
})
|
|
}
|
|
|
|
function handleFilter (onInclude, destStat, src, dest, opts, cb) {
|
|
Promise.resolve(opts.filter(src, dest)).then(include => {
|
|
if (include) return onInclude(destStat, src, dest, opts, cb)
|
|
return cb()
|
|
}, error => cb(error))
|
|
}
|
|
|
|
function startCopy (destStat, src, dest, opts, cb) {
|
|
if (opts.filter) return handleFilter(getStats, destStat, src, dest, opts, cb)
|
|
return getStats(destStat, src, dest, opts, cb)
|
|
}
|
|
|
|
function getStats (destStat, src, dest, opts, cb) {
|
|
const stat = opts.dereference ? fs.stat : fs.lstat
|
|
stat(src, (err, srcStat) => {
|
|
if (err) return cb(err)
|
|
|
|
if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts, cb)
|
|
else if (srcStat.isFile() ||
|
|
srcStat.isCharacterDevice() ||
|
|
srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts, cb)
|
|
else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts, cb)
|
|
})
|
|
}
|
|
|
|
function onFile (srcStat, destStat, src, dest, opts, cb) {
|
|
if (!destStat) return copyFile(srcStat, src, dest, opts, cb)
|
|
return mayCopyFile(srcStat, src, dest, opts, cb)
|
|
}
|
|
|
|
function mayCopyFile (srcStat, src, dest, opts, cb) {
|
|
if (opts.overwrite) {
|
|
fs.unlink(dest, err => {
|
|
if (err) return cb(err)
|
|
return copyFile(srcStat, src, dest, opts, cb)
|
|
})
|
|
} else if (opts.errorOnExist) {
|
|
return cb(new Error(`'${dest}' already exists`))
|
|
} else return cb()
|
|
}
|
|
|
|
function copyFile (srcStat, src, dest, opts, cb) {
|
|
if (typeof fs.copyFile === 'function') {
|
|
return fs.copyFile(src, dest, err => {
|
|
if (err) return cb(err)
|
|
return setDestModeAndTimestamps(srcStat, dest, opts, cb)
|
|
})
|
|
}
|
|
return copyFileFallback(srcStat, src, dest, opts, cb)
|
|
}
|
|
|
|
function copyFileFallback (srcStat, src, dest, opts, cb) {
|
|
const rs = fs.createReadStream(src)
|
|
rs.on('error', err => cb(err)).once('open', () => {
|
|
const ws = fs.createWriteStream(dest, { mode: srcStat.mode })
|
|
ws.on('error', err => cb(err))
|
|
.on('open', () => rs.pipe(ws))
|
|
.once('close', () => setDestModeAndTimestamps(srcStat, dest, opts, cb))
|
|
})
|
|
}
|
|
|
|
function setDestModeAndTimestamps (srcStat, dest, opts, cb) {
|
|
fs.chmod(dest, srcStat.mode, err => {
|
|
if (err) return cb(err)
|
|
if (opts.preserveTimestamps) {
|
|
return utimes(dest, srcStat.atime, srcStat.mtime, cb)
|
|
}
|
|
return cb()
|
|
})
|
|
}
|
|
|
|
function onDir (srcStat, destStat, src, dest, opts, cb) {
|
|
if (!destStat) return mkDirAndCopy(srcStat, src, dest, opts, cb)
|
|
if (destStat && !destStat.isDirectory()) {
|
|
return cb(new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`))
|
|
}
|
|
return copyDir(src, dest, opts, cb)
|
|
}
|
|
|
|
function mkDirAndCopy (srcStat, src, dest, opts, cb) {
|
|
fs.mkdir(dest, err => {
|
|
if (err) return cb(err)
|
|
copyDir(src, dest, opts, err => {
|
|
if (err) return cb(err)
|
|
return fs.chmod(dest, srcStat.mode, cb)
|
|
})
|
|
})
|
|
}
|
|
|
|
function copyDir (src, dest, opts, cb) {
|
|
fs.readdir(src, (err, items) => {
|
|
if (err) return cb(err)
|
|
return copyDirItems(items, src, dest, opts, cb)
|
|
})
|
|
}
|
|
|
|
function copyDirItems (items, src, dest, opts, cb) {
|
|
const item = items.pop()
|
|
if (!item) return cb()
|
|
return copyDirItem(items, item, src, dest, opts, cb)
|
|
}
|
|
|
|
function copyDirItem (items, item, src, dest, opts, cb) {
|
|
const srcItem = path.join(src, item)
|
|
const destItem = path.join(dest, item)
|
|
stat.checkPaths(srcItem, destItem, 'copy', (err, stats) => {
|
|
if (err) return cb(err)
|
|
const { destStat } = stats
|
|
startCopy(destStat, srcItem, destItem, opts, err => {
|
|
if (err) return cb(err)
|
|
return copyDirItems(items, src, dest, opts, cb)
|
|
})
|
|
})
|
|
}
|
|
|
|
function onLink (destStat, src, dest, opts, cb) {
|
|
fs.readlink(src, (err, resolvedSrc) => {
|
|
if (err) return cb(err)
|
|
if (opts.dereference) {
|
|
resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
|
|
}
|
|
|
|
if (!destStat) {
|
|
return fs.symlink(resolvedSrc, dest, cb)
|
|
} else {
|
|
fs.readlink(dest, (err, resolvedDest) => {
|
|
if (err) {
|
|
// dest exists and is a regular file or directory,
|
|
// Windows may throw UNKNOWN error. If dest already exists,
|
|
// fs throws error anyway, so no need to guard against it here.
|
|
if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlink(resolvedSrc, dest, cb)
|
|
return cb(err)
|
|
}
|
|
if (opts.dereference) {
|
|
resolvedDest = path.resolve(process.cwd(), resolvedDest)
|
|
}
|
|
if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
|
|
return cb(new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`))
|
|
}
|
|
|
|
// do not copy if src is a subdir of dest since unlinking
|
|
// dest in this case would result in removing src contents
|
|
// and therefore a broken symlink would be created.
|
|
if (destStat.isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
|
|
return cb(new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`))
|
|
}
|
|
return copyLink(resolvedSrc, dest, cb)
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
function copyLink (resolvedSrc, dest, cb) {
|
|
fs.unlink(dest, err => {
|
|
if (err) return cb(err)
|
|
return fs.symlink(resolvedSrc, dest, cb)
|
|
})
|
|
}
|
|
|
|
module.exports = copy
|
|
|
|
}, function(modId) { var map = {"../mkdirs":1721263118831,"../path-exists":1721263118840,"../util/utimes":1721263118835,"../util/stat":1721263118836}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118840, function(require, module, exports) {
|
|
|
|
const u = require('universalify').fromPromise
|
|
const fs = require('../fs')
|
|
|
|
function pathExists (path) {
|
|
return fs.access(path).then(() => true).catch(() => false)
|
|
}
|
|
|
|
module.exports = {
|
|
pathExists: u(pathExists),
|
|
pathExistsSync: fs.existsSync
|
|
}
|
|
|
|
}, function(modId) { var map = {"../fs":1721263118828}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118841, function(require, module, exports) {
|
|
|
|
|
|
const u = require('universalify').fromCallback
|
|
const fs = require('graceful-fs')
|
|
const path = require('path')
|
|
const mkdir = require('../mkdirs')
|
|
const remove = require('../remove')
|
|
|
|
const emptyDir = u(function emptyDir (dir, callback) {
|
|
callback = callback || function () {}
|
|
fs.readdir(dir, (err, items) => {
|
|
if (err) return mkdir.mkdirs(dir, callback)
|
|
|
|
items = items.map(item => path.join(dir, item))
|
|
|
|
deleteItem()
|
|
|
|
function deleteItem () {
|
|
const item = items.pop()
|
|
if (!item) return callback()
|
|
remove.remove(item, err => {
|
|
if (err) return callback(err)
|
|
deleteItem()
|
|
})
|
|
}
|
|
})
|
|
})
|
|
|
|
function emptyDirSync (dir) {
|
|
let items
|
|
try {
|
|
items = fs.readdirSync(dir)
|
|
} catch (err) {
|
|
return mkdir.mkdirsSync(dir)
|
|
}
|
|
|
|
items.forEach(item => {
|
|
item = path.join(dir, item)
|
|
remove.removeSync(item)
|
|
})
|
|
}
|
|
|
|
module.exports = {
|
|
emptyDirSync,
|
|
emptydirSync: emptyDirSync,
|
|
emptyDir,
|
|
emptydir: emptyDir
|
|
}
|
|
|
|
}, function(modId) { var map = {"../mkdirs":1721263118831,"../remove":1721263118842}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118842, function(require, module, exports) {
|
|
|
|
|
|
const u = require('universalify').fromCallback
|
|
const rimraf = require('./rimraf')
|
|
|
|
module.exports = {
|
|
remove: u(rimraf),
|
|
removeSync: rimraf.sync
|
|
}
|
|
|
|
}, function(modId) { var map = {"./rimraf":1721263118843}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118843, function(require, module, exports) {
|
|
|
|
|
|
const fs = require('graceful-fs')
|
|
const path = require('path')
|
|
const assert = require('assert')
|
|
|
|
const isWindows = (process.platform === 'win32')
|
|
|
|
function defaults (options) {
|
|
const methods = [
|
|
'unlink',
|
|
'chmod',
|
|
'stat',
|
|
'lstat',
|
|
'rmdir',
|
|
'readdir'
|
|
]
|
|
methods.forEach(m => {
|
|
options[m] = options[m] || fs[m]
|
|
m = m + 'Sync'
|
|
options[m] = options[m] || fs[m]
|
|
})
|
|
|
|
options.maxBusyTries = options.maxBusyTries || 3
|
|
}
|
|
|
|
function rimraf (p, options, cb) {
|
|
let busyTries = 0
|
|
|
|
if (typeof options === 'function') {
|
|
cb = options
|
|
options = {}
|
|
}
|
|
|
|
assert(p, 'rimraf: missing path')
|
|
assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
|
|
assert.strictEqual(typeof cb, 'function', 'rimraf: callback function required')
|
|
assert(options, 'rimraf: invalid options argument provided')
|
|
assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')
|
|
|
|
defaults(options)
|
|
|
|
rimraf_(p, options, function CB (er) {
|
|
if (er) {
|
|
if ((er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') &&
|
|
busyTries < options.maxBusyTries) {
|
|
busyTries++
|
|
const time = busyTries * 100
|
|
// try again, with the same exact callback as this one.
|
|
return setTimeout(() => rimraf_(p, options, CB), time)
|
|
}
|
|
|
|
// already gone
|
|
if (er.code === 'ENOENT') er = null
|
|
}
|
|
|
|
cb(er)
|
|
})
|
|
}
|
|
|
|
// Two possible strategies.
|
|
// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR
|
|
// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR
|
|
//
|
|
// Both result in an extra syscall when you guess wrong. However, there
|
|
// are likely far more normal files in the world than directories. This
|
|
// is based on the assumption that a the average number of files per
|
|
// directory is >= 1.
|
|
//
|
|
// If anyone ever complains about this, then I guess the strategy could
|
|
// be made configurable somehow. But until then, YAGNI.
|
|
function rimraf_ (p, options, cb) {
|
|
assert(p)
|
|
assert(options)
|
|
assert(typeof cb === 'function')
|
|
|
|
// sunos lets the root user unlink directories, which is... weird.
|
|
// so we have to lstat here and make sure it's not a dir.
|
|
options.lstat(p, (er, st) => {
|
|
if (er && er.code === 'ENOENT') {
|
|
return cb(null)
|
|
}
|
|
|
|
// Windows can EPERM on stat. Life is suffering.
|
|
if (er && er.code === 'EPERM' && isWindows) {
|
|
return fixWinEPERM(p, options, er, cb)
|
|
}
|
|
|
|
if (st && st.isDirectory()) {
|
|
return rmdir(p, options, er, cb)
|
|
}
|
|
|
|
options.unlink(p, er => {
|
|
if (er) {
|
|
if (er.code === 'ENOENT') {
|
|
return cb(null)
|
|
}
|
|
if (er.code === 'EPERM') {
|
|
return (isWindows)
|
|
? fixWinEPERM(p, options, er, cb)
|
|
: rmdir(p, options, er, cb)
|
|
}
|
|
if (er.code === 'EISDIR') {
|
|
return rmdir(p, options, er, cb)
|
|
}
|
|
}
|
|
return cb(er)
|
|
})
|
|
})
|
|
}
|
|
|
|
function fixWinEPERM (p, options, er, cb) {
|
|
assert(p)
|
|
assert(options)
|
|
assert(typeof cb === 'function')
|
|
if (er) {
|
|
assert(er instanceof Error)
|
|
}
|
|
|
|
options.chmod(p, 0o666, er2 => {
|
|
if (er2) {
|
|
cb(er2.code === 'ENOENT' ? null : er)
|
|
} else {
|
|
options.stat(p, (er3, stats) => {
|
|
if (er3) {
|
|
cb(er3.code === 'ENOENT' ? null : er)
|
|
} else if (stats.isDirectory()) {
|
|
rmdir(p, options, er, cb)
|
|
} else {
|
|
options.unlink(p, cb)
|
|
}
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
function fixWinEPERMSync (p, options, er) {
|
|
let stats
|
|
|
|
assert(p)
|
|
assert(options)
|
|
if (er) {
|
|
assert(er instanceof Error)
|
|
}
|
|
|
|
try {
|
|
options.chmodSync(p, 0o666)
|
|
} catch (er2) {
|
|
if (er2.code === 'ENOENT') {
|
|
return
|
|
} else {
|
|
throw er
|
|
}
|
|
}
|
|
|
|
try {
|
|
stats = options.statSync(p)
|
|
} catch (er3) {
|
|
if (er3.code === 'ENOENT') {
|
|
return
|
|
} else {
|
|
throw er
|
|
}
|
|
}
|
|
|
|
if (stats.isDirectory()) {
|
|
rmdirSync(p, options, er)
|
|
} else {
|
|
options.unlinkSync(p)
|
|
}
|
|
}
|
|
|
|
function rmdir (p, options, originalEr, cb) {
|
|
assert(p)
|
|
assert(options)
|
|
if (originalEr) {
|
|
assert(originalEr instanceof Error)
|
|
}
|
|
assert(typeof cb === 'function')
|
|
|
|
// try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
|
|
// if we guessed wrong, and it's not a directory, then
|
|
// raise the original error.
|
|
options.rmdir(p, er => {
|
|
if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) {
|
|
rmkids(p, options, cb)
|
|
} else if (er && er.code === 'ENOTDIR') {
|
|
cb(originalEr)
|
|
} else {
|
|
cb(er)
|
|
}
|
|
})
|
|
}
|
|
|
|
function rmkids (p, options, cb) {
|
|
assert(p)
|
|
assert(options)
|
|
assert(typeof cb === 'function')
|
|
|
|
options.readdir(p, (er, files) => {
|
|
if (er) return cb(er)
|
|
|
|
let n = files.length
|
|
let errState
|
|
|
|
if (n === 0) return options.rmdir(p, cb)
|
|
|
|
files.forEach(f => {
|
|
rimraf(path.join(p, f), options, er => {
|
|
if (errState) {
|
|
return
|
|
}
|
|
if (er) return cb(errState = er)
|
|
if (--n === 0) {
|
|
options.rmdir(p, cb)
|
|
}
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
// this looks simpler, and is strictly *faster*, but will
|
|
// tie up the JavaScript thread and fail on excessively
|
|
// deep directory trees.
|
|
function rimrafSync (p, options) {
|
|
let st
|
|
|
|
options = options || {}
|
|
defaults(options)
|
|
|
|
assert(p, 'rimraf: missing path')
|
|
assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
|
|
assert(options, 'rimraf: missing options')
|
|
assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')
|
|
|
|
try {
|
|
st = options.lstatSync(p)
|
|
} catch (er) {
|
|
if (er.code === 'ENOENT') {
|
|
return
|
|
}
|
|
|
|
// Windows can EPERM on stat. Life is suffering.
|
|
if (er.code === 'EPERM' && isWindows) {
|
|
fixWinEPERMSync(p, options, er)
|
|
}
|
|
}
|
|
|
|
try {
|
|
// sunos lets the root user unlink directories, which is... weird.
|
|
if (st && st.isDirectory()) {
|
|
rmdirSync(p, options, null)
|
|
} else {
|
|
options.unlinkSync(p)
|
|
}
|
|
} catch (er) {
|
|
if (er.code === 'ENOENT') {
|
|
return
|
|
} else if (er.code === 'EPERM') {
|
|
return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
|
|
} else if (er.code !== 'EISDIR') {
|
|
throw er
|
|
}
|
|
rmdirSync(p, options, er)
|
|
}
|
|
}
|
|
|
|
function rmdirSync (p, options, originalEr) {
|
|
assert(p)
|
|
assert(options)
|
|
if (originalEr) {
|
|
assert(originalEr instanceof Error)
|
|
}
|
|
|
|
try {
|
|
options.rmdirSync(p)
|
|
} catch (er) {
|
|
if (er.code === 'ENOTDIR') {
|
|
throw originalEr
|
|
} else if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') {
|
|
rmkidsSync(p, options)
|
|
} else if (er.code !== 'ENOENT') {
|
|
throw er
|
|
}
|
|
}
|
|
}
|
|
|
|
function rmkidsSync (p, options) {
|
|
assert(p)
|
|
assert(options)
|
|
options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))
|
|
|
|
if (isWindows) {
|
|
// We only end up here once we got ENOTEMPTY at least once, and
|
|
// at this point, we are guaranteed to have removed all the kids.
|
|
// So, we know that it won't be ENOENT or ENOTDIR or anything else.
|
|
// try really hard to delete stuff on windows, because it has a
|
|
// PROFOUNDLY annoying habit of not closing handles promptly when
|
|
// files are deleted, resulting in spurious ENOTEMPTY errors.
|
|
const startTime = Date.now()
|
|
do {
|
|
try {
|
|
const ret = options.rmdirSync(p, options)
|
|
return ret
|
|
} catch (er) { }
|
|
} while (Date.now() - startTime < 500) // give up after 500ms
|
|
} else {
|
|
const ret = options.rmdirSync(p, options)
|
|
return ret
|
|
}
|
|
}
|
|
|
|
module.exports = rimraf
|
|
rimraf.sync = rimrafSync
|
|
|
|
}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118844, function(require, module, exports) {
|
|
|
|
|
|
const file = require('./file')
|
|
const link = require('./link')
|
|
const symlink = require('./symlink')
|
|
|
|
module.exports = {
|
|
// file
|
|
createFile: file.createFile,
|
|
createFileSync: file.createFileSync,
|
|
ensureFile: file.createFile,
|
|
ensureFileSync: file.createFileSync,
|
|
// link
|
|
createLink: link.createLink,
|
|
createLinkSync: link.createLinkSync,
|
|
ensureLink: link.createLink,
|
|
ensureLinkSync: link.createLinkSync,
|
|
// symlink
|
|
createSymlink: symlink.createSymlink,
|
|
createSymlinkSync: symlink.createSymlinkSync,
|
|
ensureSymlink: symlink.createSymlink,
|
|
ensureSymlinkSync: symlink.createSymlinkSync
|
|
}
|
|
|
|
}, function(modId) { var map = {"./file":1721263118845,"./link":1721263118846,"./symlink":1721263118847}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118845, function(require, module, exports) {
|
|
|
|
|
|
const u = require('universalify').fromCallback
|
|
const path = require('path')
|
|
const fs = require('graceful-fs')
|
|
const mkdir = require('../mkdirs')
|
|
const pathExists = require('../path-exists').pathExists
|
|
|
|
function createFile (file, callback) {
|
|
function makeFile () {
|
|
fs.writeFile(file, '', err => {
|
|
if (err) return callback(err)
|
|
callback()
|
|
})
|
|
}
|
|
|
|
fs.stat(file, (err, stats) => { // eslint-disable-line handle-callback-err
|
|
if (!err && stats.isFile()) return callback()
|
|
const dir = path.dirname(file)
|
|
pathExists(dir, (err, dirExists) => {
|
|
if (err) return callback(err)
|
|
if (dirExists) return makeFile()
|
|
mkdir.mkdirs(dir, err => {
|
|
if (err) return callback(err)
|
|
makeFile()
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
function createFileSync (file) {
|
|
let stats
|
|
try {
|
|
stats = fs.statSync(file)
|
|
} catch (e) {}
|
|
if (stats && stats.isFile()) return
|
|
|
|
const dir = path.dirname(file)
|
|
if (!fs.existsSync(dir)) {
|
|
mkdir.mkdirsSync(dir)
|
|
}
|
|
|
|
fs.writeFileSync(file, '')
|
|
}
|
|
|
|
module.exports = {
|
|
createFile: u(createFile),
|
|
createFileSync
|
|
}
|
|
|
|
}, function(modId) { var map = {"../mkdirs":1721263118831,"../path-exists":1721263118840}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118846, function(require, module, exports) {
|
|
|
|
|
|
const u = require('universalify').fromCallback
|
|
const path = require('path')
|
|
const fs = require('graceful-fs')
|
|
const mkdir = require('../mkdirs')
|
|
const pathExists = require('../path-exists').pathExists
|
|
|
|
function createLink (srcpath, dstpath, callback) {
|
|
function makeLink (srcpath, dstpath) {
|
|
fs.link(srcpath, dstpath, err => {
|
|
if (err) return callback(err)
|
|
callback(null)
|
|
})
|
|
}
|
|
|
|
pathExists(dstpath, (err, destinationExists) => {
|
|
if (err) return callback(err)
|
|
if (destinationExists) return callback(null)
|
|
fs.lstat(srcpath, (err) => {
|
|
if (err) {
|
|
err.message = err.message.replace('lstat', 'ensureLink')
|
|
return callback(err)
|
|
}
|
|
|
|
const dir = path.dirname(dstpath)
|
|
pathExists(dir, (err, dirExists) => {
|
|
if (err) return callback(err)
|
|
if (dirExists) return makeLink(srcpath, dstpath)
|
|
mkdir.mkdirs(dir, err => {
|
|
if (err) return callback(err)
|
|
makeLink(srcpath, dstpath)
|
|
})
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
function createLinkSync (srcpath, dstpath) {
|
|
const destinationExists = fs.existsSync(dstpath)
|
|
if (destinationExists) return undefined
|
|
|
|
try {
|
|
fs.lstatSync(srcpath)
|
|
} catch (err) {
|
|
err.message = err.message.replace('lstat', 'ensureLink')
|
|
throw err
|
|
}
|
|
|
|
const dir = path.dirname(dstpath)
|
|
const dirExists = fs.existsSync(dir)
|
|
if (dirExists) return fs.linkSync(srcpath, dstpath)
|
|
mkdir.mkdirsSync(dir)
|
|
|
|
return fs.linkSync(srcpath, dstpath)
|
|
}
|
|
|
|
module.exports = {
|
|
createLink: u(createLink),
|
|
createLinkSync
|
|
}
|
|
|
|
}, function(modId) { var map = {"../mkdirs":1721263118831,"../path-exists":1721263118840}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118847, function(require, module, exports) {
|
|
|
|
|
|
const u = require('universalify').fromCallback
|
|
const path = require('path')
|
|
const fs = require('graceful-fs')
|
|
const _mkdirs = require('../mkdirs')
|
|
const mkdirs = _mkdirs.mkdirs
|
|
const mkdirsSync = _mkdirs.mkdirsSync
|
|
|
|
const _symlinkPaths = require('./symlink-paths')
|
|
const symlinkPaths = _symlinkPaths.symlinkPaths
|
|
const symlinkPathsSync = _symlinkPaths.symlinkPathsSync
|
|
|
|
const _symlinkType = require('./symlink-type')
|
|
const symlinkType = _symlinkType.symlinkType
|
|
const symlinkTypeSync = _symlinkType.symlinkTypeSync
|
|
|
|
const pathExists = require('../path-exists').pathExists
|
|
|
|
function createSymlink (srcpath, dstpath, type, callback) {
|
|
callback = (typeof type === 'function') ? type : callback
|
|
type = (typeof type === 'function') ? false : type
|
|
|
|
pathExists(dstpath, (err, destinationExists) => {
|
|
if (err) return callback(err)
|
|
if (destinationExists) return callback(null)
|
|
symlinkPaths(srcpath, dstpath, (err, relative) => {
|
|
if (err) return callback(err)
|
|
srcpath = relative.toDst
|
|
symlinkType(relative.toCwd, type, (err, type) => {
|
|
if (err) return callback(err)
|
|
const dir = path.dirname(dstpath)
|
|
pathExists(dir, (err, dirExists) => {
|
|
if (err) return callback(err)
|
|
if (dirExists) return fs.symlink(srcpath, dstpath, type, callback)
|
|
mkdirs(dir, err => {
|
|
if (err) return callback(err)
|
|
fs.symlink(srcpath, dstpath, type, callback)
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
function createSymlinkSync (srcpath, dstpath, type) {
|
|
const destinationExists = fs.existsSync(dstpath)
|
|
if (destinationExists) return undefined
|
|
|
|
const relative = symlinkPathsSync(srcpath, dstpath)
|
|
srcpath = relative.toDst
|
|
type = symlinkTypeSync(relative.toCwd, type)
|
|
const dir = path.dirname(dstpath)
|
|
const exists = fs.existsSync(dir)
|
|
if (exists) return fs.symlinkSync(srcpath, dstpath, type)
|
|
mkdirsSync(dir)
|
|
return fs.symlinkSync(srcpath, dstpath, type)
|
|
}
|
|
|
|
module.exports = {
|
|
createSymlink: u(createSymlink),
|
|
createSymlinkSync
|
|
}
|
|
|
|
}, function(modId) { var map = {"../mkdirs":1721263118831,"./symlink-paths":1721263118848,"./symlink-type":1721263118849,"../path-exists":1721263118840}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118848, function(require, module, exports) {
|
|
|
|
|
|
const path = require('path')
|
|
const fs = require('graceful-fs')
|
|
const pathExists = require('../path-exists').pathExists
|
|
|
|
/**
|
|
* Function that returns two types of paths, one relative to symlink, and one
|
|
* relative to the current working directory. Checks if path is absolute or
|
|
* relative. If the path is relative, this function checks if the path is
|
|
* relative to symlink or relative to current working directory. This is an
|
|
* initiative to find a smarter `srcpath` to supply when building symlinks.
|
|
* This allows you to determine which path to use out of one of three possible
|
|
* types of source paths. The first is an absolute path. This is detected by
|
|
* `path.isAbsolute()`. When an absolute path is provided, it is checked to
|
|
* see if it exists. If it does it's used, if not an error is returned
|
|
* (callback)/ thrown (sync). The other two options for `srcpath` are a
|
|
* relative url. By default Node's `fs.symlink` works by creating a symlink
|
|
* using `dstpath` and expects the `srcpath` to be relative to the newly
|
|
* created symlink. If you provide a `srcpath` that does not exist on the file
|
|
* system it results in a broken symlink. To minimize this, the function
|
|
* checks to see if the 'relative to symlink' source file exists, and if it
|
|
* does it will use it. If it does not, it checks if there's a file that
|
|
* exists that is relative to the current working directory, if does its used.
|
|
* This preserves the expectations of the original fs.symlink spec and adds
|
|
* the ability to pass in `relative to current working direcotry` paths.
|
|
*/
|
|
|
|
function symlinkPaths (srcpath, dstpath, callback) {
|
|
if (path.isAbsolute(srcpath)) {
|
|
return fs.lstat(srcpath, (err) => {
|
|
if (err) {
|
|
err.message = err.message.replace('lstat', 'ensureSymlink')
|
|
return callback(err)
|
|
}
|
|
return callback(null, {
|
|
'toCwd': srcpath,
|
|
'toDst': srcpath
|
|
})
|
|
})
|
|
} else {
|
|
const dstdir = path.dirname(dstpath)
|
|
const relativeToDst = path.join(dstdir, srcpath)
|
|
return pathExists(relativeToDst, (err, exists) => {
|
|
if (err) return callback(err)
|
|
if (exists) {
|
|
return callback(null, {
|
|
'toCwd': relativeToDst,
|
|
'toDst': srcpath
|
|
})
|
|
} else {
|
|
return fs.lstat(srcpath, (err) => {
|
|
if (err) {
|
|
err.message = err.message.replace('lstat', 'ensureSymlink')
|
|
return callback(err)
|
|
}
|
|
return callback(null, {
|
|
'toCwd': srcpath,
|
|
'toDst': path.relative(dstdir, srcpath)
|
|
})
|
|
})
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
function symlinkPathsSync (srcpath, dstpath) {
|
|
let exists
|
|
if (path.isAbsolute(srcpath)) {
|
|
exists = fs.existsSync(srcpath)
|
|
if (!exists) throw new Error('absolute srcpath does not exist')
|
|
return {
|
|
'toCwd': srcpath,
|
|
'toDst': srcpath
|
|
}
|
|
} else {
|
|
const dstdir = path.dirname(dstpath)
|
|
const relativeToDst = path.join(dstdir, srcpath)
|
|
exists = fs.existsSync(relativeToDst)
|
|
if (exists) {
|
|
return {
|
|
'toCwd': relativeToDst,
|
|
'toDst': srcpath
|
|
}
|
|
} else {
|
|
exists = fs.existsSync(srcpath)
|
|
if (!exists) throw new Error('relative srcpath does not exist')
|
|
return {
|
|
'toCwd': srcpath,
|
|
'toDst': path.relative(dstdir, srcpath)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
symlinkPaths,
|
|
symlinkPathsSync
|
|
}
|
|
|
|
}, function(modId) { var map = {"../path-exists":1721263118840}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118849, function(require, module, exports) {
|
|
|
|
|
|
const fs = require('graceful-fs')
|
|
|
|
function symlinkType (srcpath, type, callback) {
|
|
callback = (typeof type === 'function') ? type : callback
|
|
type = (typeof type === 'function') ? false : type
|
|
if (type) return callback(null, type)
|
|
fs.lstat(srcpath, (err, stats) => {
|
|
if (err) return callback(null, 'file')
|
|
type = (stats && stats.isDirectory()) ? 'dir' : 'file'
|
|
callback(null, type)
|
|
})
|
|
}
|
|
|
|
function symlinkTypeSync (srcpath, type) {
|
|
let stats
|
|
|
|
if (type) return type
|
|
try {
|
|
stats = fs.lstatSync(srcpath)
|
|
} catch (e) {
|
|
return 'file'
|
|
}
|
|
return (stats && stats.isDirectory()) ? 'dir' : 'file'
|
|
}
|
|
|
|
module.exports = {
|
|
symlinkType,
|
|
symlinkTypeSync
|
|
}
|
|
|
|
}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118850, function(require, module, exports) {
|
|
|
|
|
|
const u = require('universalify').fromCallback
|
|
const jsonFile = require('./jsonfile')
|
|
|
|
jsonFile.outputJson = u(require('./output-json'))
|
|
jsonFile.outputJsonSync = require('./output-json-sync')
|
|
// aliases
|
|
jsonFile.outputJSON = jsonFile.outputJson
|
|
jsonFile.outputJSONSync = jsonFile.outputJsonSync
|
|
jsonFile.writeJSON = jsonFile.writeJson
|
|
jsonFile.writeJSONSync = jsonFile.writeJsonSync
|
|
jsonFile.readJSON = jsonFile.readJson
|
|
jsonFile.readJSONSync = jsonFile.readJsonSync
|
|
|
|
module.exports = jsonFile
|
|
|
|
}, function(modId) { var map = {"./jsonfile":1721263118851,"./output-json":1721263118852,"./output-json-sync":1721263118853}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118851, function(require, module, exports) {
|
|
|
|
|
|
const u = require('universalify').fromCallback
|
|
const jsonFile = require('jsonfile')
|
|
|
|
module.exports = {
|
|
// jsonfile exports
|
|
readJson: u(jsonFile.readFile),
|
|
readJsonSync: jsonFile.readFileSync,
|
|
writeJson: u(jsonFile.writeFile),
|
|
writeJsonSync: jsonFile.writeFileSync
|
|
}
|
|
|
|
}, function(modId) { var map = {"jsonfile":1721263118851}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118852, function(require, module, exports) {
|
|
|
|
|
|
const path = require('path')
|
|
const mkdir = require('../mkdirs')
|
|
const pathExists = require('../path-exists').pathExists
|
|
const jsonFile = require('./jsonfile')
|
|
|
|
function outputJson (file, data, options, callback) {
|
|
if (typeof options === 'function') {
|
|
callback = options
|
|
options = {}
|
|
}
|
|
|
|
const dir = path.dirname(file)
|
|
|
|
pathExists(dir, (err, itDoes) => {
|
|
if (err) return callback(err)
|
|
if (itDoes) return jsonFile.writeJson(file, data, options, callback)
|
|
|
|
mkdir.mkdirs(dir, err => {
|
|
if (err) return callback(err)
|
|
jsonFile.writeJson(file, data, options, callback)
|
|
})
|
|
})
|
|
}
|
|
|
|
module.exports = outputJson
|
|
|
|
}, function(modId) { var map = {"../mkdirs":1721263118831,"../path-exists":1721263118840,"./jsonfile":1721263118851}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118853, function(require, module, exports) {
|
|
|
|
|
|
const fs = require('graceful-fs')
|
|
const path = require('path')
|
|
const mkdir = require('../mkdirs')
|
|
const jsonFile = require('./jsonfile')
|
|
|
|
function outputJsonSync (file, data, options) {
|
|
const dir = path.dirname(file)
|
|
|
|
if (!fs.existsSync(dir)) {
|
|
mkdir.mkdirsSync(dir)
|
|
}
|
|
|
|
jsonFile.writeJsonSync(file, data, options)
|
|
}
|
|
|
|
module.exports = outputJsonSync
|
|
|
|
}, function(modId) { var map = {"../mkdirs":1721263118831,"./jsonfile":1721263118851}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118854, function(require, module, exports) {
|
|
|
|
|
|
module.exports = {
|
|
moveSync: require('./move-sync')
|
|
}
|
|
|
|
}, function(modId) { var map = {"./move-sync":1721263118855}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118855, function(require, module, exports) {
|
|
|
|
|
|
const fs = require('graceful-fs')
|
|
const path = require('path')
|
|
const copySync = require('../copy-sync').copySync
|
|
const removeSync = require('../remove').removeSync
|
|
const mkdirpSync = require('../mkdirs').mkdirpSync
|
|
const stat = require('../util/stat')
|
|
|
|
function moveSync (src, dest, opts) {
|
|
opts = opts || {}
|
|
const overwrite = opts.overwrite || opts.clobber || false
|
|
|
|
const { srcStat } = stat.checkPathsSync(src, dest, 'move')
|
|
stat.checkParentPathsSync(src, srcStat, dest, 'move')
|
|
mkdirpSync(path.dirname(dest))
|
|
return doRename(src, dest, overwrite)
|
|
}
|
|
|
|
function doRename (src, dest, overwrite) {
|
|
if (overwrite) {
|
|
removeSync(dest)
|
|
return rename(src, dest, overwrite)
|
|
}
|
|
if (fs.existsSync(dest)) throw new Error('dest already exists.')
|
|
return rename(src, dest, overwrite)
|
|
}
|
|
|
|
function rename (src, dest, overwrite) {
|
|
try {
|
|
fs.renameSync(src, dest)
|
|
} catch (err) {
|
|
if (err.code !== 'EXDEV') throw err
|
|
return moveAcrossDevice(src, dest, overwrite)
|
|
}
|
|
}
|
|
|
|
function moveAcrossDevice (src, dest, overwrite) {
|
|
const opts = {
|
|
overwrite,
|
|
errorOnExist: true
|
|
}
|
|
copySync(src, dest, opts)
|
|
return removeSync(src)
|
|
}
|
|
|
|
module.exports = moveSync
|
|
|
|
}, function(modId) { var map = {"../copy-sync":1721263118829,"../remove":1721263118842,"../mkdirs":1721263118831,"../util/stat":1721263118836}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118856, function(require, module, exports) {
|
|
|
|
|
|
const u = require('universalify').fromCallback
|
|
module.exports = {
|
|
move: u(require('./move'))
|
|
}
|
|
|
|
}, function(modId) { var map = {"./move":1721263118857}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118857, function(require, module, exports) {
|
|
|
|
|
|
const fs = require('graceful-fs')
|
|
const path = require('path')
|
|
const copy = require('../copy').copy
|
|
const remove = require('../remove').remove
|
|
const mkdirp = require('../mkdirs').mkdirp
|
|
const pathExists = require('../path-exists').pathExists
|
|
const stat = require('../util/stat')
|
|
|
|
function move (src, dest, opts, cb) {
|
|
if (typeof opts === 'function') {
|
|
cb = opts
|
|
opts = {}
|
|
}
|
|
|
|
const overwrite = opts.overwrite || opts.clobber || false
|
|
|
|
stat.checkPaths(src, dest, 'move', (err, stats) => {
|
|
if (err) return cb(err)
|
|
const { srcStat } = stats
|
|
stat.checkParentPaths(src, srcStat, dest, 'move', err => {
|
|
if (err) return cb(err)
|
|
mkdirp(path.dirname(dest), err => {
|
|
if (err) return cb(err)
|
|
return doRename(src, dest, overwrite, cb)
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
function doRename (src, dest, overwrite, cb) {
|
|
if (overwrite) {
|
|
return remove(dest, err => {
|
|
if (err) return cb(err)
|
|
return rename(src, dest, overwrite, cb)
|
|
})
|
|
}
|
|
pathExists(dest, (err, destExists) => {
|
|
if (err) return cb(err)
|
|
if (destExists) return cb(new Error('dest already exists.'))
|
|
return rename(src, dest, overwrite, cb)
|
|
})
|
|
}
|
|
|
|
function rename (src, dest, overwrite, cb) {
|
|
fs.rename(src, dest, err => {
|
|
if (!err) return cb()
|
|
if (err.code !== 'EXDEV') return cb(err)
|
|
return moveAcrossDevice(src, dest, overwrite, cb)
|
|
})
|
|
}
|
|
|
|
function moveAcrossDevice (src, dest, overwrite, cb) {
|
|
const opts = {
|
|
overwrite,
|
|
errorOnExist: true
|
|
}
|
|
copy(src, dest, opts, err => {
|
|
if (err) return cb(err)
|
|
return remove(src, cb)
|
|
})
|
|
}
|
|
|
|
module.exports = move
|
|
|
|
}, function(modId) { var map = {"../copy":1721263118838,"../remove":1721263118842,"../mkdirs":1721263118831,"../path-exists":1721263118840,"../util/stat":1721263118836}; return __REQUIRE__(map[modId], modId); })
|
|
__DEFINE__(1721263118858, function(require, module, exports) {
|
|
|
|
|
|
const u = require('universalify').fromCallback
|
|
const fs = require('graceful-fs')
|
|
const path = require('path')
|
|
const mkdir = require('../mkdirs')
|
|
const pathExists = require('../path-exists').pathExists
|
|
|
|
function outputFile (file, data, encoding, callback) {
|
|
if (typeof encoding === 'function') {
|
|
callback = encoding
|
|
encoding = 'utf8'
|
|
}
|
|
|
|
const dir = path.dirname(file)
|
|
pathExists(dir, (err, itDoes) => {
|
|
if (err) return callback(err)
|
|
if (itDoes) return fs.writeFile(file, data, encoding, callback)
|
|
|
|
mkdir.mkdirs(dir, err => {
|
|
if (err) return callback(err)
|
|
|
|
fs.writeFile(file, data, encoding, callback)
|
|
})
|
|
})
|
|
}
|
|
|
|
function outputFileSync (file, ...args) {
|
|
const dir = path.dirname(file)
|
|
if (fs.existsSync(dir)) {
|
|
return fs.writeFileSync(file, ...args)
|
|
}
|
|
mkdir.mkdirsSync(dir)
|
|
fs.writeFileSync(file, ...args)
|
|
}
|
|
|
|
module.exports = {
|
|
outputFile: u(outputFile),
|
|
outputFileSync
|
|
}
|
|
|
|
}, function(modId) { var map = {"../mkdirs":1721263118831,"../path-exists":1721263118840}; return __REQUIRE__(map[modId], modId); })
|
|
return __REQUIRE__(1721263118827);
|
|
})()
|
|
//miniprogram-npm-outsideDeps=["universalify","graceful-fs","path","os","assert"]
|
|
//# sourceMappingURL=index.js.map
|