@grnsft/if
Version:
Impact Framework
92 lines • 9.23 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseCSVFile = exports.fieldAccessor = exports.nanifyEmptyValues = exports.setNanValue = exports.retrieveFile = exports.isURL = void 0;
const promises_1 = require("fs/promises");
const axios_1 = __importDefault(require("axios"));
const sync_1 = require("csv-parse/sync");
const utils_1 = require("@grnsft/if-core/utils");
const config_1 = require("../../config");
const { FILE_FETCH_FAILED, FILE_READ_FAILED, MISSING_CSV_COLUMN } = config_1.STRINGS;
const { FetchingFileError, ReadFileError, MissingCSVColumnError, CSVParseError } = utils_1.ERRORS;
/**
* Checks if given string is URL.
*/
const isURL = (filepath) => {
try {
new URL(filepath);
return true;
}
catch (error) {
return false;
}
};
exports.isURL = isURL;
/**
* Checks if given `filepath` is url, then tries to fetch it.
* Otherwise tries to read file.
*/
const retrieveFile = async (filepath) => {
if ((0, exports.isURL)(filepath)) {
const { data } = await axios_1.default.get(filepath).catch(error => {
throw new FetchingFileError(FILE_FETCH_FAILED(filepath, error.response.message));
});
return data;
}
return (0, promises_1.readFile)(filepath).catch(error => {
throw new ReadFileError(FILE_READ_FAILED(filepath, error));
});
};
exports.retrieveFile = retrieveFile;
/**
* Checks if value is invalid: `undefined`, `null` or an empty string, then sets `nan` instead.
*/
const setNanValue = (value) => value === null || value === '' ? 'nan' : value;
exports.setNanValue = setNanValue;
/**
* Converts empty values to `nan`.
*/
const nanifyEmptyValues = (object) => {
if (typeof object === 'object') {
const keys = Object.keys(object);
keys.forEach(key => {
const value = object[key];
object[key] = (0, exports.setNanValue)(value);
});
return object;
}
return (0, exports.setNanValue)(object);
};
exports.nanifyEmptyValues = nanifyEmptyValues;
/**
* If `field` is missing from `object`, then reject with error.
* Otherwise nanify empty values and return data.
*/
const fieldAccessor = (field, object) => {
if (!(`${field}` in object)) {
throw new MissingCSVColumnError(MISSING_CSV_COLUMN(field));
}
return (0, exports.nanifyEmptyValues)(object[field]);
};
exports.fieldAccessor = fieldAccessor;
/**
* Parses CSV file.
*/
const parseCSVFile = (file) => {
try {
const parsedCSV = (0, sync_1.parse)(file, {
columns: true,
skip_empty_lines: true,
cast: true,
});
return parsedCSV;
}
catch (error) {
console.error(error);
throw new CSVParseError(error);
}
};
exports.parseCSVFile = parseCSVFile;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL3V0aWwvY3N2LWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMENBQXFDO0FBQ3JDLGtEQUEwQjtBQUMxQix5Q0FBcUM7QUFDckMsaURBQTZDO0FBRTdDLHlDQUFxQztBQUVyQyxNQUFNLEVBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUMsR0FBRyxnQkFBTyxDQUFDO0FBRTFFLE1BQU0sRUFBQyxpQkFBaUIsRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFDLEdBQzVFLGNBQU0sQ0FBQztBQUVUOztHQUVHO0FBQ0ksTUFBTSxLQUFLLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEVBQUU7SUFDeEMsSUFBSTtRQUNGLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDSCxDQUFDLENBQUM7QUFQVyxRQUFBLEtBQUssU0FPaEI7QUFFRjs7O0dBR0c7QUFDSSxNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO0lBQ3JELElBQUksSUFBQSxhQUFLLEVBQUMsUUFBUSxDQUFDLEVBQUU7UUFDbkIsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLE1BQU0sZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckQsTUFBTSxJQUFJLGlCQUFpQixDQUN6QixpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FDcEQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELE9BQU8sSUFBQSxtQkFBUSxFQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN0QyxNQUFNLElBQUksYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBZFcsUUFBQSxZQUFZLGdCQWN2QjtBQUVGOztHQUVHO0FBQ0ksTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUN4QyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBRHBDLFFBQUEsV0FBVyxlQUN5QjtBQUVqRDs7R0FFRztBQUNJLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFXLEVBQUUsRUFBRTtJQUMvQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtRQUM5QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFBLG1CQUFXLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztLQUNmO0lBRUQsT0FBTyxJQUFBLG1CQUFXLEVBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBYlcsUUFBQSxpQkFBaUIscUJBYTVCO0FBRUY7OztHQUdHO0FBQ0ksTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFhLEVBQUUsTUFBVyxFQUFFLEVBQUU7SUFDMUQsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxNQUFNLENBQUMsRUFBRTtRQUMzQixNQUFNLElBQUkscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUM1RDtJQUVELE9BQU8sSUFBQSx5QkFBaUIsRUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUM7QUFOVyxRQUFBLGFBQWEsaUJBTXhCO0FBRUY7O0dBRUc7QUFDSSxNQUFNLFlBQVksR0FBRyxDQUFDLElBQXFCLEVBQUUsRUFBRTtJQUNwRCxJQUFJO1FBQ0YsTUFBTSxTQUFTLEdBQVUsSUFBQSxZQUFLLEVBQUMsSUFBSSxFQUFFO1lBQ25DLE9BQU8sRUFBRSxJQUFJO1lBQ2IsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUMsQ0FBQztRQUVILE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBQUMsT0FBTyxLQUFVLEVBQUU7UUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixNQUFNLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2hDO0FBQ0gsQ0FBQyxDQUFDO0FBYlcsUUFBQSxZQUFZLGdCQWF2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cmVhZEZpbGV9IGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQge3BhcnNlfSBmcm9tICdjc3YtcGFyc2Uvc3luYyc7XG5pbXBvcnQge0VSUk9SU30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3V0aWxzJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi8uLi9jb25maWcnO1xuXG5jb25zdCB7RklMRV9GRVRDSF9GQUlMRUQsIEZJTEVfUkVBRF9GQUlMRUQsIE1JU1NJTkdfQ1NWX0NPTFVNTn0gPSBTVFJJTkdTO1xuXG5jb25zdCB7RmV0Y2hpbmdGaWxlRXJyb3IsIFJlYWRGaWxlRXJyb3IsIE1pc3NpbmdDU1ZDb2x1bW5FcnJvciwgQ1NWUGFyc2VFcnJvcn0gPVxuICBFUlJPUlM7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGdpdmVuIHN0cmluZyBpcyBVUkwuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1VSTCA9IChmaWxlcGF0aDogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgbmV3IFVSTChmaWxlcGF0aCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBnaXZlbiBgZmlsZXBhdGhgIGlzIHVybCwgdGhlbiB0cmllcyB0byBmZXRjaCBpdC5cbiAqIE90aGVyd2lzZSB0cmllcyB0byByZWFkIGZpbGUuXG4gKi9cbmV4cG9ydCBjb25zdCByZXRyaWV2ZUZpbGUgPSBhc3luYyAoZmlsZXBhdGg6IHN0cmluZykgPT4ge1xuICBpZiAoaXNVUkwoZmlsZXBhdGgpKSB7XG4gICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXhpb3MuZ2V0KGZpbGVwYXRoKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICB0aHJvdyBuZXcgRmV0Y2hpbmdGaWxlRXJyb3IoXG4gICAgICAgIEZJTEVfRkVUQ0hfRkFJTEVEKGZpbGVwYXRoLCBlcnJvci5yZXNwb25zZS5tZXNzYWdlKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcmV0dXJuIHJlYWRGaWxlKGZpbGVwYXRoKS5jYXRjaChlcnJvciA9PiB7XG4gICAgdGhyb3cgbmV3IFJlYWRGaWxlRXJyb3IoRklMRV9SRUFEX0ZBSUxFRChmaWxlcGF0aCwgZXJyb3IpKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiB2YWx1ZSBpcyBpbnZhbGlkOiBgdW5kZWZpbmVkYCwgYG51bGxgIG9yIGFuIGVtcHR5IHN0cmluZywgdGhlbiBzZXRzIGBuYW5gIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXROYW5WYWx1ZSA9ICh2YWx1ZTogYW55KSA9PlxuICB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycgPyAnbmFuJyA6IHZhbHVlO1xuXG4vKipcbiAqIENvbnZlcnRzIGVtcHR5IHZhbHVlcyB0byBgbmFuYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG5hbmlmeUVtcHR5VmFsdWVzID0gKG9iamVjdDogYW55KSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9iamVjdFtrZXldO1xuICAgICAgb2JqZWN0W2tleV0gPSBzZXROYW5WYWx1ZSh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgcmV0dXJuIHNldE5hblZhbHVlKG9iamVjdCk7XG59O1xuXG4vKipcbiAqIElmIGBmaWVsZGAgaXMgbWlzc2luZyBmcm9tIGBvYmplY3RgLCB0aGVuIHJlamVjdCB3aXRoIGVycm9yLlxuICogT3RoZXJ3aXNlIG5hbmlmeSBlbXB0eSB2YWx1ZXMgYW5kIHJldHVybiBkYXRhLlxuICovXG5leHBvcnQgY29uc3QgZmllbGRBY2Nlc3NvciA9IChmaWVsZDogc3RyaW5nLCBvYmplY3Q6IGFueSkgPT4ge1xuICBpZiAoIShgJHtmaWVsZH1gIGluIG9iamVjdCkpIHtcbiAgICB0aHJvdyBuZXcgTWlzc2luZ0NTVkNvbHVtbkVycm9yKE1JU1NJTkdfQ1NWX0NPTFVNTihmaWVsZCkpO1xuICB9XG5cbiAgcmV0dXJuIG5hbmlmeUVtcHR5VmFsdWVzKG9iamVjdFtmaWVsZF0pO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgQ1NWIGZpbGUuXG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZUNTVkZpbGUgPSAoZmlsZTogc3RyaW5nIHwgQnVmZmVyKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkQ1NWOiBhbnlbXSA9IHBhcnNlKGZpbGUsIHtcbiAgICAgIGNvbHVtbnM6IHRydWUsXG4gICAgICBza2lwX2VtcHR5X2xpbmVzOiB0cnVlLFxuICAgICAgY2FzdDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBwYXJzZWRDU1Y7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB0aHJvdyBuZXcgQ1NWUGFyc2VFcnJvcihlcnJvcik7XG4gIH1cbn07XG4iXX0=