'use strict';
|
const fs = require('graceful-fs');
|
const makeDir = require('make-dir');
|
const pify = require('pify');
|
const CpFileError = require('./cp-file-error');
|
|
const fsP = pify(fs);
|
|
exports.closeSync = fs.closeSync.bind(fs);
|
exports.createWriteStream = fs.createWriteStream.bind(fs);
|
|
exports.createReadStream = (path, options) => new Promise((resolve, reject) => {
|
const read = fs.createReadStream(path, options);
|
|
read.once('error', error => {
|
reject(new CpFileError(`Cannot read from \`${path}\`: ${error.message}`, error));
|
});
|
|
read.once('readable', () => {
|
resolve(read);
|
});
|
|
read.once('end', () => {
|
resolve(read);
|
});
|
});
|
|
exports.stat = path => fsP.stat(path).catch(error => {
|
throw new CpFileError(`Cannot stat path \`${path}\`: ${error.message}`, error);
|
});
|
|
exports.lstat = path => fsP.lstat(path).catch(error => {
|
throw new CpFileError(`lstat \`${path}\` failed: ${error.message}`, error);
|
});
|
|
exports.utimes = (path, atime, mtime) => fsP.utimes(path, atime, mtime).catch(error => {
|
throw new CpFileError(`utimes \`${path}\` failed: ${error.message}`, error);
|
});
|
|
exports.chmod = (path, mode) => fsP.chmod(path, mode).catch(error => {
|
throw new CpFileError(`chmod \`${path}\` failed: ${error.message}`, error);
|
});
|
|
exports.chown = (path, uid, gid) => fsP.chown(path, uid, gid).catch(error => {
|
throw new CpFileError(`chown \`${path}\` failed: ${error.message}`, error);
|
});
|
|
exports.openSync = (path, flags, mode) => {
|
try {
|
return fs.openSync(path, flags, mode);
|
} catch (error) {
|
if (flags.includes('w')) {
|
throw new CpFileError(`Cannot write to \`${path}\`: ${error.message}`, error);
|
}
|
|
throw new CpFileError(`Cannot open \`${path}\`: ${error.message}`, error);
|
}
|
};
|
|
// eslint-disable-next-line max-params
|
exports.readSync = (fileDescriptor, buffer, offset, length, position, path) => {
|
try {
|
return fs.readSync(fileDescriptor, buffer, offset, length, position);
|
} catch (error) {
|
throw new CpFileError(`Cannot read from \`${path}\`: ${error.message}`, error);
|
}
|
};
|
|
// eslint-disable-next-line max-params
|
exports.writeSync = (fileDescriptor, buffer, offset, length, position, path) => {
|
try {
|
return fs.writeSync(fileDescriptor, buffer, offset, length, position);
|
} catch (error) {
|
throw new CpFileError(`Cannot write to \`${path}\`: ${error.message}`, error);
|
}
|
};
|
|
exports.statSync = path => {
|
try {
|
return fs.statSync(path);
|
} catch (error) {
|
throw new CpFileError(`stat \`${path}\` failed: ${error.message}`, error);
|
}
|
};
|
|
exports.fstatSync = (fileDescriptor, path) => {
|
try {
|
return fs.fstatSync(fileDescriptor);
|
} catch (error) {
|
throw new CpFileError(`fstat \`${path}\` failed: ${error.message}`, error);
|
}
|
};
|
|
exports.futimesSync = (fileDescriptor, atime, mtime, path) => {
|
try {
|
return fs.futimesSync(fileDescriptor, atime, mtime, path);
|
} catch (error) {
|
throw new CpFileError(`futimes \`${path}\` failed: ${error.message}`, error);
|
}
|
};
|
|
exports.utimesSync = (path, atime, mtime) => {
|
try {
|
return fs.utimesSync(path, atime, mtime);
|
} catch (error) {
|
throw new CpFileError(`utimes \`${path}\` failed: ${error.message}`, error);
|
}
|
};
|
|
exports.chmodSync = (path, mode) => {
|
try {
|
return fs.chmodSync(path, mode);
|
} catch (error) {
|
throw new CpFileError(`chmod \`${path}\` failed: ${error.message}`, error);
|
}
|
};
|
|
exports.chownSync = (path, uid, gid) => {
|
try {
|
return fs.chownSync(path, uid, gid);
|
} catch (error) {
|
throw new CpFileError(`chown \`${path}\` failed: ${error.message}`, error);
|
}
|
};
|
|
exports.makeDir = path => makeDir(path, {fs}).catch(error => {
|
throw new CpFileError(`Cannot create directory \`${path}\`: ${error.message}`, error);
|
});
|
|
exports.makeDirSync = path => {
|
try {
|
makeDir.sync(path, {fs});
|
} catch (error) {
|
throw new CpFileError(`Cannot create directory \`${path}\`: ${error.message}`, error);
|
}
|
};
|
|
if (fs.copyFileSync) {
|
exports.copyFileSync = (source, destination, flags) => {
|
try {
|
fs.copyFileSync(source, destination, flags);
|
} catch (error) {
|
throw new CpFileError(`Cannot copy from \`${source}\` to \`${destination}\`: ${error.message}`, error);
|
}
|
};
|
}
|