osr-mono/packages/fs/file.js
2025-01-29 17:40:56 +01:00

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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