UNPKG

@grnsft/if

Version:

Impact Framework

92 lines 9.23 kB
"use strict"; 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=