113 lines
7.6 KiB
JavaScript
113 lines
7.6 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.async = exports.sync = exports.validateInput = void 0;
|
|
const pathUtil = require("path");
|
|
const fs_1 = require("fs");
|
|
const exists_1 = require("./exists");
|
|
const validate_1 = require("./utils/validate");
|
|
const errors_1 = require("./errors");
|
|
const interfaces_1 = require("./interfaces");
|
|
const copy_1 = require("./copy");
|
|
const remove_1 = require("./remove");
|
|
const util_1 = require("util");
|
|
const dir_1 = require("./dir");
|
|
const validateInput = (methodName, from, to) => {
|
|
const methodSignature = methodName + '(from, to)';
|
|
(0, validate_1.validateArgument)(methodSignature, 'from', from, ['string']);
|
|
(0, validate_1.validateArgument)(methodSignature, 'to', to, ['string']);
|
|
};
|
|
exports.validateInput = validateInput;
|
|
// ---------------------------------------------------------
|
|
// Sync
|
|
// ---------------------------------------------------------
|
|
const sync = (from, to) => {
|
|
try {
|
|
(0, fs_1.renameSync)(from, to);
|
|
}
|
|
catch (err) {
|
|
// not the same device, rename doesnt work here
|
|
if (err.code === interfaces_1.EError.CROSS_DEVICE) {
|
|
try {
|
|
(0, copy_1.sync)(from, to);
|
|
}
|
|
catch (e) {
|
|
throw e;
|
|
}
|
|
try {
|
|
(0, remove_1.sync)(from);
|
|
}
|
|
catch (e) {
|
|
throw e;
|
|
}
|
|
return;
|
|
}
|
|
if (err.code !== interfaces_1.EError.NOEXISTS) {
|
|
// We can't make sense of this error. Rethrow it.
|
|
throw err;
|
|
}
|
|
else {
|
|
// Ok, source or destination path doesn't exist.
|
|
// Must do more investigation.
|
|
if (!(0, exists_1.sync)(from)) {
|
|
throw (0, errors_1.ErrDoesntExists)(from);
|
|
}
|
|
if (!(0, exists_1.sync)(to)) {
|
|
// Some parent directory doesn't exist. Create it.
|
|
(0, dir_1.sync)(pathUtil.dirname(to));
|
|
// Retry the attempt
|
|
(0, fs_1.renameSync)(from, to);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
exports.sync = sync;
|
|
// ---------------------------------------------------------
|
|
// Async
|
|
// ---------------------------------------------------------
|
|
const ensureDestinationPathExistsAsync = (to) => {
|
|
return new Promise((resolve, reject) => {
|
|
const destDir = pathUtil.dirname(to);
|
|
(0, exists_1.async)(destDir)
|
|
.then(dstExists => {
|
|
if (!dstExists) {
|
|
(0, dir_1.async)(destDir).then(resolve, reject);
|
|
}
|
|
else {
|
|
// Hah, no idea.
|
|
reject();
|
|
}
|
|
})
|
|
.catch(reject);
|
|
});
|
|
};
|
|
const async = (from, to) => {
|
|
return new Promise((resolve, reject) => {
|
|
(0, util_1.promisify)(fs_1.rename)(from, to)
|
|
.then(resolve)
|
|
.catch(err => {
|
|
if (err.code !== interfaces_1.EError.NOEXISTS) {
|
|
// Something unknown. Rethrow original error.
|
|
reject(err);
|
|
}
|
|
else {
|
|
// Ok, source or destination path doesn't exist.
|
|
// Must do more investigation.
|
|
(0, exists_1.async)(from)
|
|
.then(srcExists => {
|
|
if (!srcExists) {
|
|
reject((0, errors_1.ErrDoesntExists)(from));
|
|
}
|
|
else {
|
|
ensureDestinationPathExistsAsync(to)
|
|
// Retry the attempt
|
|
.then(() => (0, util_1.promisify)(fs_1.rename)(from, to))
|
|
.then(resolve, reject);
|
|
}
|
|
})
|
|
.catch(reject);
|
|
}
|
|
});
|
|
});
|
|
};
|
|
exports.async = async;
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy9tb3ZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFrQztBQUNsQywyQkFBd0M7QUFDeEMscUNBQW9FO0FBQ3BFLCtDQUFvRDtBQUNwRCxxQ0FBMkM7QUFDM0MsNkNBQXNDO0FBQ3RDLGlDQUEwQztBQUMxQyxxQ0FBOEM7QUFDOUMsK0JBQWlDO0FBQ2pDLCtCQUE2RDtBQUV0RCxNQUFNLGFBQWEsR0FBRyxDQUFDLFVBQWtCLEVBQUUsSUFBWSxFQUFFLEVBQVUsRUFBRSxFQUFFO0lBQzdFLE1BQU0sZUFBZSxHQUFXLFVBQVUsR0FBRyxZQUFZLENBQUM7SUFDMUQsSUFBQSwyQkFBZ0IsRUFBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsSUFBQSwyQkFBZ0IsRUFBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDekQsQ0FBQyxDQUFDO0FBSlcsUUFBQSxhQUFhLGlCQUl4QjtBQUNGLDREQUE0RDtBQUM1RCxPQUFPO0FBQ1AsNERBQTREO0FBRXJELE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQVUsRUFBUSxFQUFFO0lBQ3RELElBQUksQ0FBQztRQUNKLElBQUEsZUFBVSxFQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNkLCtDQUErQztRQUMvQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssbUJBQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUM7Z0JBQ0osSUFBQSxXQUFRLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNaLE1BQU0sQ0FBQyxDQUFDO1lBQ1Qs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
|