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

95 lines
7.3 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateInput = validateInput;
exports.sync = sync;
exports.async = async;
const fs_1 = require("fs");
const imports_1 = require("./imports");
const validate_1 = require("./utils/validate");
const Q = require('q');
const supportedReturnAs = ['utf8', 'buffer', 'json', 'jsonWithDates'];
const promisedReadFile = Q.denodeify(fs_1.readFile);
function validateInput(methodName, path, returnAs) {
const methodSignature = methodName + '(path, returnAs)';
(0, validate_1.validateArgument)(methodSignature, 'path', path, ['string']);
(0, validate_1.validateArgument)(methodSignature, 'returnAs', returnAs, ['string', 'undefined']);
if (returnAs && supportedReturnAs.indexOf(returnAs) === -1) {
throw new Error('Argument "returnAs" passed to ' + methodSignature
+ ' must have one of values: ' + supportedReturnAs.join(', '));
}
}
// Matches strings generated by Date.toJSON()
// which is called to serialize date to JSON.
const jsonDateParser = (key, value) => {
const reISO = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*))(?:Z|(\+|-)([\d|:]*))?$/;
if (typeof value === 'string') {
if (reISO.exec(value)) {
return new Date(value);
}
}
return value;
};
const ErrJson = (path, err) => {
const nicerError = new Error('JSON parsing failed while reading '
+ path + ' [' + err + ']');
nicerError.originalError = err;
return nicerError;
};
// ---------------------------------------------------------
// SYNC
// ---------------------------------------------------------
function sync(path, returnAs) {
const retAs = returnAs || 'utf8';
let data;
try {
data = (0, fs_1.readFileSync)(path, { encoding: retAs === 'buffer' ? null : 'utf8' });
}
catch (err) {
if (err.code === 'ENOENT') {
// If file doesn't exist return undefined instead of throwing.
return undefined;
}
// Otherwise rethrow the error
throw err;
}
try {
if (retAs === 'json') {
data = imports_1.json.parse(data);
}
else if (retAs === 'jsonWithDates') {
data = imports_1.json.parse(data, jsonDateParser);
}
}
catch (err) {
throw ErrJson(path, err);
}
return data;
}
// ---------------------------------------------------------
// ASYNC
// ---------------------------------------------------------
function async(path, returnAs) {
return new Promise((resolve, reject) => {
const retAs = returnAs || 'utf8';
promisedReadFile(path, { encoding: retAs === 'buffer' ? null : 'utf8' })
.then((data) => {
// Make final parsing of the data before returning.
try {
if (retAs === 'json') {
resolve(imports_1.json.parse(data));
}
else if (retAs === 'jsonWithDates') {
resolve(imports_1.json.parse(data, jsonDateParser));
}
else {
resolve(data);
}
}
catch (err) {
reject(ErrJson(path, err));
}
})
.catch((err) => (err.code === 'ENOENT' ? resolve(undefined) : reject(err)));
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy9yZWFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBU0Esc0NBUUM7QUF3QkQsb0JBeUJDO0FBS0Qsc0JBb0JDO0FBM0ZELDJCQUE0QztBQUU1Qyx1Q0FBaUM7QUFDakMsK0NBQW9EO0FBRXBELE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDdEUsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQVEsQ0FBQyxDQUFDO0FBRS9DLFNBQWdCLGFBQWEsQ0FBQyxVQUFrQixFQUFFLElBQVksRUFBRSxRQUFnQjtJQUMvRSxNQUFNLGVBQWUsR0FBRyxVQUFVLEdBQUcsa0JBQWtCLENBQUM7SUFDeEQsSUFBQSwyQkFBZ0IsRUFBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsSUFBQSwyQkFBZ0IsRUFBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLElBQUksUUFBUSxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLEdBQUcsZUFBZTtjQUMvRCw0QkFBNEIsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0FBQ0YsQ0FBQztBQUVELDZDQUE2QztBQUM3Qyw2Q0FBNkM7QUFDN0MsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBb0IsRUFBUSxFQUFFO0lBQ2xFLE1BQU0sS0FB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