91 lines
7.6 KiB
JavaScript
91 lines
7.6 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.validateInput = validateInput;
|
|
exports.sync = sync;
|
|
exports.async = async;
|
|
const pathUtil = require("path");
|
|
const fs = require("fs");
|
|
const fs_1 = require("fs");
|
|
const Q = require('q');
|
|
const mkdirp = require("mkdirp");
|
|
const imports_1 = require("./imports");
|
|
const validate_1 = require("./utils/validate");
|
|
// Temporary file extensions used for atomic file overwriting.
|
|
const newExt = '.__new__';
|
|
function validateInput(methodName, path, data, options) {
|
|
const methodSignature = methodName + '(path, data, [options])';
|
|
(0, validate_1.validateArgument)(methodSignature, 'path', path, ['string']);
|
|
(0, validate_1.validateArgument)(methodSignature, 'data', data, ['string', 'buffer', 'object', 'array']);
|
|
(0, validate_1.validateOptions)(methodSignature, 'options', options, {
|
|
atomic: ['boolean'],
|
|
jsonIndent: ['number'],
|
|
progress: ['function']
|
|
});
|
|
}
|
|
const toJson = (data, jsonIndent) => {
|
|
if (typeof data === 'object'
|
|
&& !Buffer.isBuffer(data)
|
|
&& data !== null) {
|
|
return imports_1.json.serialize(data, null, typeof jsonIndent !== 'number' ? 2 : jsonIndent);
|
|
}
|
|
return data;
|
|
};
|
|
// ---------------------------------------------------------
|
|
// SYNC
|
|
// ---------------------------------------------------------
|
|
const _writeFileSync = (path, data, options) => {
|
|
try {
|
|
(0, fs_1.writeFileSync)(path, data, options);
|
|
}
|
|
catch (err) {
|
|
if (err.code === 'ENOENT') {
|
|
// Means parent directory doesn't exist, so create it and try again.
|
|
mkdirp.sync(pathUtil.dirname(path));
|
|
fs.writeFileSync(path, data, options);
|
|
}
|
|
else {
|
|
throw err;
|
|
}
|
|
}
|
|
};
|
|
const writeAtomicSync = (path, data, options) => {
|
|
return imports_1.file.write_atomic(path + newExt, data, options, function () { });
|
|
};
|
|
function sync(path, data, options) {
|
|
const opts = options || {};
|
|
const processedData = toJson(data, opts.jsonIndent);
|
|
const writeStrategy = opts.atomic ? writeAtomicSync : _writeFileSync;
|
|
writeStrategy(path, processedData, { mode: opts.mode });
|
|
}
|
|
// ---------------------------------------------------------
|
|
// ASYNC
|
|
// ---------------------------------------------------------
|
|
const promisedWriteFile = Q.denodeify(fs.writeFile);
|
|
const promisedMkdirp = Q.denodeify(mkdirp);
|
|
const promisedAtomic = Q.denodeify(writeAtomicSync);
|
|
function writeFileAsync(path, data, options) {
|
|
return new Promise((resolve, reject) => {
|
|
promisedWriteFile(path, data, options)
|
|
.then(resolve)
|
|
.catch((err) => {
|
|
// First attempt to write a file ended with error.
|
|
// Check if this is not due to nonexistent parent directory.
|
|
if (err.code === 'ENOENT') {
|
|
// Parent directory doesn't exist, so create it and try again.
|
|
promisedMkdirp(pathUtil.dirname(path))
|
|
.then(() => promisedWriteFile(path, data, options))
|
|
.then(resolve, reject);
|
|
}
|
|
else {
|
|
// Nope, some other error, throw it.
|
|
reject(err);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
function async(path, data, options) {
|
|
const opts = options || {};
|
|
const processedData = toJson(data, opts.jsonIndent);
|
|
return (opts.atomic ? promisedAtomic : writeFileAsync)(path, processedData, { mode: opts.mode });
|
|
}
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvd3JpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFZQSxzQ0FTQztBQWdDRCxvQkFLQztBQTRCRCxzQkFJQztBQTFGRCxpQ0FBaUM7QUFDakMseUJBQXlCO0FBQ3pCLDJCQUFtQztBQUNuQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsaUNBQWlDO0FBQ2pDLHVDQUF1QztBQUV2QywrQ0FBcUU7QUFFckUsOERBQThEO0FBQzlELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQztBQUUxQixTQUFnQixhQUFhLENBQUMsVUFBa0IsRUFBRSxJQUFZLEVBQUUsSUFBdUIsRUFBRSxPQUFzQjtJQUM5RyxNQUFNLGVBQWUsR0FBRyxVQUFVLEdBQUcseUJBQXlCLENBQUM7SUFDL0QsSUFBQSwyQkFBZ0IsRUFBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsSUFBQSwyQkFBZ0IsRUFBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekYsSUFBQSwwQkFBZSxFQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO1FBQ3BELE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUNuQixVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDdEIsUUFBUSxFQUFFLENBQUMsVUFBVSxDQUFDO0tBQ3RCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQXVCLEVBQUUsVUFBa0IsRUFBVSxFQUFFO0lBQ3RFLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtXQUN4QixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1dBQ3RCLElBQUksS0FB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
|