@grnsft/if
Version:
Impact Framework
69 lines • 9.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CSVImport = void 0;
/* eslint-disable eqeqeq */
const zod_1 = require("zod");
const interfaces_1 = require("@grnsft/if-core/interfaces");
const utils_1 = require("@grnsft/if-core/utils");
const config_1 = require("../../config");
const csv_helpers_1 = require("../util/csv-helpers");
const { MISSING_CONFIG } = config_1.STRINGS;
const { ConfigError } = utils_1.ERRORS;
exports.CSVImport = (0, interfaces_1.PluginFactory)({
configValidation: (config) => {
if (!config || !Object.keys(config)?.length) {
throw new ConfigError(MISSING_CONFIG);
}
const configSchema = zod_1.z.object({
filepath: zod_1.z.string(),
output: zod_1.z
.string()
.or(zod_1.z.array(zod_1.z.string()))
.or(zod_1.z.array(zod_1.z.array(zod_1.z.string()))),
});
return (0, utils_1.validate)(configSchema, config);
},
implementation: async (inputs, config) => {
/**
* 1. Tries to retrieve given file (with url or local path).
* 2. Parses given CSV.
* 3. Filters requested information from CSV.
*/
const { filepath, output } = config;
const file = await (0, csv_helpers_1.retrieveFile)(filepath);
const parsedCSV = (0, csv_helpers_1.parseCSVFile)(file);
const result = parsedCSV?.map((input) => filterOutput(input, output));
return [...inputs, ...result];
},
});
/**
* 1. If output is anything, then removes query data from csv record to escape duplicates.
* 2. Otherwise checks if it's a miltidimensional array, then grabs multiple fields ().
* 3. If not, then returns single field.
* 4. In case if it's string, then
*/
const filterOutput = (dataFromCSV, output) => {
if (output === '*') {
return (0, csv_helpers_1.nanifyEmptyValues)(dataFromCSV);
}
if (Array.isArray(output)) {
/** Check if it's a multidimensional array. */
if (Array.isArray(output[0])) {
const result = {};
output.forEach(outputField => {
/** Check if there is no renaming request, then export as is */
const outputTitle = outputField[1] || outputField[0];
result[outputTitle] = (0, csv_helpers_1.fieldAccessor)(outputField[0], dataFromCSV);
});
return result;
}
const outputTitle = output[1] || output[0];
return {
[outputTitle]: (0, csv_helpers_1.fieldAccessor)(output[0], dataFromCSV),
};
}
return {
[output]: (0, csv_helpers_1.fieldAccessor)(output, dataFromCSV),
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL2Nzdi1pbXBvcnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkJBQTJCO0FBQzNCLDZCQUFzQjtBQUd0QiwyREFBeUQ7QUFDekQsaURBQXVEO0FBRXZELHlDQUFxQztBQUVyQyxxREFLNkI7QUFFN0IsTUFBTSxFQUFDLGNBQWMsRUFBQyxHQUFHLGdCQUFPLENBQUM7QUFFakMsTUFBTSxFQUFDLFdBQVcsRUFBQyxHQUFHLGNBQU0sQ0FBQztBQUVoQixRQUFBLFNBQVMsR0FBRyxJQUFBLDBCQUFhLEVBQUM7SUFDckMsZ0JBQWdCLEVBQUUsQ0FBQyxNQUFvQixFQUFFLEVBQUU7UUFDekMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFO1lBQzNDLE1BQU0sSUFBSSxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDdkM7UUFFRCxNQUFNLFlBQVksR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO1lBQzVCLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1lBQ3BCLE1BQU0sRUFBRSxPQUFDO2lCQUNOLE1BQU0sRUFBRTtpQkFDUixFQUFFLENBQUMsT0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztpQkFDdkIsRUFBRSxDQUFDLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBQSxnQkFBUSxFQUErQixZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBc0IsRUFBRSxNQUFvQixFQUFFLEVBQUU7UUFDckU7Ozs7V0FJRztRQUNILE1BQU0sRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSwwQkFBWSxFQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUFHLElBQUEsMEJBQVksRUFBQyxJQUFJLENBQUMsQ0FBQztRQUVyQyxNQUFNLE1BQU0sR0FBRyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBbUIsRUFBRSxFQUFFLENBQ3BELFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQzVCLENBQUM7UUFFRixPQUFPLENBQUMsR0FBRyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0YsQ0FBQyxDQUFDO0FBRUg7Ozs7O0dBS0c7QUFDSCxNQUFNLFlBQVksR0FBRyxDQUNuQixXQUFnQixFQUNoQixNQUFzQyxFQUN0QyxFQUFFO0lBQ0YsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFO1FBQ2xCLE9BQU8sSUFBQSwrQkFBaUIsRUFBQyxXQUFXLENBQUMsQ0FBQztLQUN2QztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN6Qiw4Q0FBOEM7UUFDOUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzVCLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztZQUV2QixNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUMzQiwrREFBK0Q7Z0JBQy9ELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFBLDJCQUFhLEVBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ25FLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUVELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0MsT0FBTztZQUNMLENBQUMsV0FBcUIsQ0FBQyxFQUFFLElBQUEsMkJBQWEsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDO1NBQy9ELENBQUM7S0FDSDtJQUVELE9BQU87UUFDTCxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUEsMkJBQWEsRUFBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO0tBQzdDLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBlcWVxZXEgKi9cbmltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtDb25maWdQYXJhbXMsIFBsdWdpblBhcmFtc30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3R5cGVzJztcbmltcG9ydCB7UGx1Z2luRmFjdG9yeX0gZnJvbSAnQGdybnNmdC9pZi1jb3JlL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtFUlJPUlMsIHZhbGlkYXRlfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdXRpbHMnO1xuXG5pbXBvcnQge1NUUklOR1N9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5cbmltcG9ydCB7XG4gIGZpZWxkQWNjZXNzb3IsXG4gIG5hbmlmeUVtcHR5VmFsdWVzLFxuICBwYXJzZUNTVkZpbGUsXG4gIHJldHJpZXZlRmlsZSxcbn0gZnJvbSAnLi4vdXRpbC9jc3YtaGVscGVycyc7XG5cbmNvbnN0IHtNSVNTSU5HX0NPTkZJR30gPSBTVFJJTkdTO1xuXG5jb25zdCB7Q29uZmlnRXJyb3J9ID0gRVJST1JTO1xuXG5leHBvcnQgY29uc3QgQ1NWSW1wb3J0ID0gUGx1Z2luRmFjdG9yeSh7XG4gIGNvbmZpZ1ZhbGlkYXRpb246IChjb25maWc6IENvbmZpZ1BhcmFtcykgPT4ge1xuICAgIGlmICghY29uZmlnIHx8ICFPYmplY3Qua2V5cyhjb25maWcpPy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBDb25maWdFcnJvcihNSVNTSU5HX0NPTkZJRyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICAgICAgZmlsZXBhdGg6IHouc3RyaW5nKCksXG4gICAgICBvdXRwdXQ6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5vcih6LmFycmF5KHouc3RyaW5nKCkpKVxuICAgICAgICAub3Ioei5hcnJheSh6LmFycmF5KHouc3RyaW5nKCkpKSksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGU8ei5pbmZlcjx0eXBlb2YgY29uZmlnU2NoZW1hPj4oY29uZmlnU2NoZW1hLCBjb25maWcpO1xuICB9LFxuICBpbXBsZW1lbnRhdGlvbjogYXN5bmMgKGlucHV0czogUGx1Z2luUGFyYW1zW10sIGNvbmZpZzogQ29uZmlnUGFyYW1zKSA9PiB7XG4gICAgLyoqXG4gICAgICogMS4gVHJpZXMgdG8gcmV0cmlldmUgZ2l2ZW4gZmlsZSAod2l0aCB1cmwgb3IgbG9jYWwgcGF0aCkuXG4gICAgICogMi4gUGFyc2VzIGdpdmVuIENTVi5cbiAgICAgKiAzLiBGaWx0ZXJzIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBmcm9tIENTVi5cbiAgICAgKi9cbiAgICBjb25zdCB7ZmlsZXBhdGgsIG91dHB1dH0gPSBjb25maWc7XG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IHJldHJpZXZlRmlsZShmaWxlcGF0aCk7XG4gICAgY29uc3QgcGFyc2VkQ1NWID0gcGFyc2VDU1ZGaWxlKGZpbGUpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gcGFyc2VkQ1NWPy5tYXAoKGlucHV0OiBQbHVnaW5QYXJhbXMpID0+XG4gICAgICBmaWx0ZXJPdXRwdXQoaW5wdXQsIG91dHB1dClcbiAgICApO1xuXG4gICAgcmV0dXJuIFsuLi5pbnB1dHMsIC4uLnJlc3VsdF07XG4gIH0sXG59KTtcblxuLyoqXG4gKiAxLiBJZiBvdXRwdXQgaXMgYW55dGhpbmcsIHRoZW4gcmVtb3ZlcyBxdWVyeSBkYXRhIGZyb20gY3N2IHJlY29yZCB0byBlc2NhcGUgZHVwbGljYXRlcy5cbiAqIDIuIE90aGVyd2lzZSBjaGVja3MgaWYgaXQncyBhIG1pbHRpZGltZW5zaW9uYWwgYXJyYXksIHRoZW4gZ3JhYnMgbXVsdGlwbGUgZmllbGRzICgpLlxuICogMy4gSWYgbm90LCB0aGVuIHJldHVybnMgc2luZ2xlIGZpZWxkLlxuICogNC4gSW4gY2FzZSBpZiBpdCdzIHN0cmluZywgdGhlblxuICovXG5jb25zdCBmaWx0ZXJPdXRwdXQgPSAoXG4gIGRhdGFGcm9tQ1NWOiBhbnksXG4gIG91dHB1dDogc3RyaW5nIHwgc3RyaW5nW10gfCBzdHJpbmdbXVtdXG4pID0+IHtcbiAgaWYgKG91dHB1dCA9PT0gJyonKSB7XG4gICAgcmV0dXJuIG5hbmlmeUVtcHR5VmFsdWVzKGRhdGFGcm9tQ1NWKTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG91dHB1dCkpIHtcbiAgICAvKiogQ2hlY2sgaWYgaXQncyBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkuICovXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3V0cHV0WzBdKSkge1xuICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblxuICAgICAgb3V0cHV0LmZvckVhY2gob3V0cHV0RmllbGQgPT4ge1xuICAgICAgICAvKiogQ2hlY2sgaWYgdGhlcmUgaXMgbm8gcmVuYW1pbmcgcmVxdWVzdCwgdGhlbiBleHBvcnQgYXMgaXMgKi9cbiAgICAgICAgY29uc3Qgb3V0cHV0VGl0bGUgPSBvdXRwdXRGaWVsZFsxXSB8fCBvdXRwdXRGaWVsZFswXTtcbiAgICAgICAgcmVzdWx0W291dHB1dFRpdGxlXSA9IGZpZWxkQWNjZXNzb3Iob3V0cHV0RmllbGRbMF0sIGRhdGFGcm9tQ1NWKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dFRpdGxlID0gb3V0cHV0WzFdIHx8IG91dHB1dFswXTtcblxuICAgIHJldHVybiB7XG4gICAgICBbb3V0cHV0VGl0bGUgYXMgc3RyaW5nXTogZmllbGRBY2Nlc3NvcihvdXRwdXRbMF0sIGRhdGFGcm9tQ1NWKSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBbb3V0cHV0XTogZmllbGRBY2Nlc3NvcihvdXRwdXQsIGRhdGFGcm9tQ1NWKSxcbiAgfTtcbn07XG4iXX0=