155 lines
11 KiB
JavaScript
155 lines
11 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.validateInput = validateInput;
|
|
exports.defaults = defaults;
|
|
exports.sync = sync;
|
|
exports.async = async;
|
|
const fs = require("fs");
|
|
const Q = require('q');
|
|
const mode_1 = require("./utils/mode");
|
|
const validate_1 = require("./utils/validate");
|
|
const write_1 = require("./write");
|
|
const errors_1 = require("./errors");
|
|
const interfaces_1 = require("./interfaces");
|
|
const promisedStat = Q.denodeify(fs.stat);
|
|
const promisedChmod = Q.denodeify(fs.chmod);
|
|
function validateInput(methodName, path, options) {
|
|
const methodSignature = methodName + '(path, [criteria])';
|
|
(0, validate_1.validateArgument)(methodSignature, 'path', path, ['string']);
|
|
(0, validate_1.validateOptions)(methodSignature, 'criteria', options, {
|
|
content: ['string', 'buffer', 'object', 'array'],
|
|
jsonIndent: ['number'],
|
|
mode: ['string', 'number']
|
|
});
|
|
}
|
|
function defaults(passedCriteria) {
|
|
const criteria = passedCriteria || {};
|
|
if (criteria.mode !== undefined) {
|
|
criteria.mode = (0, mode_1.normalizeFileMode)(criteria.mode);
|
|
}
|
|
return criteria;
|
|
}
|
|
// ---------------------------------------------------------
|
|
// Sync
|
|
// ---------------------------------------------------------
|
|
const isFile = (path) => {
|
|
let stat;
|
|
try {
|
|
stat = fs.statSync(path);
|
|
}
|
|
catch (err) {
|
|
// Detection if path exists
|
|
if (err.code !== interfaces_1.EError.NOEXISTS) {
|
|
throw err;
|
|
}
|
|
}
|
|
if (stat && !stat.isFile()) {
|
|
throw (0, errors_1.ErrNotFile)(path);
|
|
}
|
|
return stat;
|
|
};
|
|
const checkContent = function (path, mode, options) {
|
|
if (options.content !== undefined) {
|
|
(0, write_1.sync)(path, options.content, {
|
|
mode: mode,
|
|
jsonIndent: options.jsonIndent
|
|
});
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
const checkMode = function (path, mode, options) {
|
|
if (options.mode !== undefined && options.mode !== mode) {
|
|
fs.chmodSync(path, options.mode);
|
|
}
|
|
};
|
|
const accept = (path, stat, options) => {
|
|
const mode = (0, mode_1.normalizeFileMode)(stat.mode);
|
|
if (!checkContent(path, mode, options)) {
|
|
checkMode(path, mode, options);
|
|
}
|
|
};
|
|
const touch = (path, options) => {
|
|
const content = options.content !== undefined ? options.content : '';
|
|
(0, write_1.sync)(path, content, {
|
|
mode: options.mode,
|
|
jsonIndent: options.jsonIndent
|
|
});
|
|
};
|
|
function sync(path, options) {
|
|
options = defaults(options);
|
|
const stat = isFile(path);
|
|
if (stat !== undefined) {
|
|
accept(path, stat, options);
|
|
}
|
|
else {
|
|
touch(path, options);
|
|
}
|
|
}
|
|
// ---------------------------------------------------------
|
|
// Async
|
|
// ---------------------------------------------------------
|
|
function isFileAsync(path) {
|
|
return new Promise((resolve, reject) => {
|
|
promisedStat(path)
|
|
.then((stat) => {
|
|
if ((stat).isFile()) {
|
|
resolve(stat);
|
|
}
|
|
else {
|
|
reject((0, errors_1.ErrNotFile)(path));
|
|
}
|
|
})
|
|
.catch((err) => (err.code === interfaces_1.EError.NOEXISTS ? resolve(undefined) : reject(err)));
|
|
});
|
|
}
|
|
const checkModeAsync = (path, mode, options) => {
|
|
if (options.mode !== undefined && options.mode !== mode) {
|
|
return promisedChmod(path, options.mode);
|
|
}
|
|
return undefined;
|
|
};
|
|
const checkContentAsync = (path, mode, options) => {
|
|
return new Promise((resolve, reject) => {
|
|
if (options.content !== undefined) {
|
|
(0, write_1.async)(path, options.content, {
|
|
mode: mode,
|
|
jsonIndent: options.jsonIndent
|
|
}).then(() => resolve(true))
|
|
.catch(reject);
|
|
}
|
|
else {
|
|
resolve(false);
|
|
}
|
|
});
|
|
};
|
|
async function writeAsync(path, stat, options) {
|
|
const mode = (0, mode_1.normalizeFileMode)(stat.mode);
|
|
return checkContentAsync(path, mode, options)
|
|
.then(contentReplaced => {
|
|
if (!contentReplaced) {
|
|
return checkModeAsync(path, mode, options);
|
|
}
|
|
return undefined;
|
|
});
|
|
}
|
|
const touchAsync = (path, options) => {
|
|
return (0, write_1.async)(path, options.content !== undefined ? options.content : '', {
|
|
mode: options.mode,
|
|
jsonIndent: options.jsonIndent
|
|
});
|
|
};
|
|
async function async(path, options) {
|
|
return new Promise((resolve, reject) => {
|
|
options = defaults(options);
|
|
isFileAsync(path)
|
|
.then((stat) => {
|
|
if (stat !== undefined) {
|
|
return writeAsync(path, stat, options);
|
|
}
|
|
return touchAsync(path, options);
|
|
})
|
|
.then(resolve, reject);
|
|
});
|
|
}
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLHNDQVFDO0FBRUQsNEJBTUM7QUF3REQsb0JBUUM7QUF3REQsc0JBWUM7QUF0S0QseUJBQXlCO0FBRXpCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2Qix1Q0FBaUQ7QUFDakQsK0NBQXFFO0FBQ3JFLG1DQUFpRTtBQUNqRSxxQ0FBc0M7QUFDdEMsNkNBQXNDO0FBRXRDLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFDLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBUTVDLFNBQWdCLGFBQWEsQ0FBQyxVQUFrQixFQUFFLElBQVksRUFBRSxPQUFrQjtJQUNqRixNQUFNLGVBQWUsR0FBRyxVQUFVLEdBQUcsb0JBQW9CLENBQUM7SUFDMUQsSUFBQSwyQkFBZ0IsRUFBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsSUFBQSwwQkFBZSxFQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFO1FBQ3JELE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQztRQUNoRCxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDdEIsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQztLQUMxQixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsUUFBUSxDQUFDLGNBQStCO0lBQ3ZELE1BQU0sUUFBUSxHQUFRLGNBQWMsSUFBSSxFQUFFLENBQUM7SUFDM0MsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2pD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
|