UNPKG

@grnsft/if

Version:

Impact Framework

95 lines 10.3 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateCsv = exports.getManifestData = void 0; const fs = __importStar(require("fs/promises")); const sync_1 = require("csv-stringify/sync"); const utils_1 = require("@grnsft/if-core/utils"); const load_1 = require("../../common/lib/load"); const config_1 = require("../config"); const { FAILURE_MESSAGE_OUTPUTS } = config_1.STRINGS; const { ManifestValidationError } = utils_1.ERRORS; /** * Gets the manifest data if `outputs` is present in it. */ const getManifestData = async (manifest) => { const { rawManifest } = await (0, load_1.load)(manifest); const { children } = rawManifest.tree; if (children?.child?.outputs || children?.['child-0']?.outputs) { return rawManifest; } throw new ManifestValidationError(FAILURE_MESSAGE_OUTPUTS); }; exports.getManifestData = getManifestData; /** * Generates a CSV file based on the provided tree structure, context, output path, and params. */ const generateCsv = async (options) => { const { tree, context, outputPath, params } = options; const columns = ['Path']; const matrix = [columns]; const aggregationIsEnabled = !!context.aggregation; const traverseTree = (node, params, path = 'tree') => { if (node.aggregated) { if (path === 'tree') { columns.push('Aggregated'); } matrix.push([`${path}.${params}`, node.aggregated[params]]); } if (node.outputs) { node.outputs.forEach((output) => { const { timestamp } = output; if (!columns.includes(timestamp)) { columns.push(timestamp); } const lastRow = matrix[matrix.length - 1]; if (aggregationIsEnabled) { lastRow.push(output[params]); } else { if (matrix.length === 1 || lastRow.length === columns.length) { matrix.push([`${path}.${params}`, output[params]]); } else { lastRow.push(output[params]); } } }); } if (node.children) { Object.keys(node.children).forEach(childKey => { traverseTree(node.children[childKey], params, `${path}.children.${childKey}`); }); } }; traverseTree(tree, params); const csvString = (0, sync_1.stringify)(matrix, { columns }); if (!outputPath) { return csvString; } return await fs.writeFile(`${outputPath}.csv`, csvString); }; exports.generateCsv = generateCsv; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pZi1jc3YvdXRpbC9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWtDO0FBQ2xDLDZDQUE2QztBQUU3QyxpREFBNkM7QUFFN0MsZ0RBQTJDO0FBRzNDLHNDQUFrQztBQUVsQyxNQUFNLEVBQUMsdUJBQXVCLEVBQUMsR0FBRyxnQkFBTyxDQUFDO0FBQzFDLE1BQU0sRUFBQyx1QkFBdUIsRUFBQyxHQUFHLGNBQU0sQ0FBQztBQUV6Qzs7R0FFRztBQUNJLE1BQU0sZUFBZSxHQUFHLEtBQUssRUFBRSxRQUFnQixFQUFFLEVBQUU7SUFDeEQsTUFBTSxFQUFDLFdBQVcsRUFBQyxHQUFHLE1BQU0sSUFBQSxXQUFJLEVBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsTUFBTSxFQUFDLFFBQVEsRUFBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFFcEMsSUFBSSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUU7UUFDOUQsT0FBTyxXQUFXLENBQUM7S0FDcEI7SUFFRCxNQUFNLElBQUksdUJBQXVCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUM7QUFUVyxRQUFBLGVBQWUsbUJBUzFCO0FBRUY7O0dBRUc7QUFDSSxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsT0FBbUIsRUFBRSxFQUFFO0lBQ3ZELE1BQU0sRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUMsR0FBRyxPQUFPLENBQUM7SUFDcEQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFFbkQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFTLEVBQUUsTUFBYyxFQUFFLElBQUksR0FBRyxNQUFNLEVBQUUsRUFBRTtRQUNoRSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO2dCQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdEO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBb0IsRUFBRSxFQUFFO2dCQUM1QyxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUUzQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDekI7Z0JBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBRTFDLElBQUksb0JBQW9CLEVBQUU7b0JBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNO29CQUNMLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxFQUFFO3dCQUM1RCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDcEQ7eUJBQU07d0JBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztxQkFDOUI7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDNUMsWUFBWSxDQUNWLElBQUksQ0FBQyxRQUFTLENBQUMsUUFBUSxDQUFDLEVBQ3hCLE1BQU0sRUFDTixHQUFHLElBQUksYUFBYSxRQUFRLEVBQUUsQ0FDL0IsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDLENBQUM7SUFFRixZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTNCLE1BQU0sU0FBUyxHQUFHLElBQUEsZ0JBQVMsRUFBQyxNQUFNLEVBQUUsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDO0lBRS9DLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDZixPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUVELE9BQU8sTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDO0FBeERXLFFBQUEsV0FBVyxlQXdEdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQge3N0cmluZ2lmeX0gZnJvbSAnY3N2LXN0cmluZ2lmeS9zeW5jJztcbmltcG9ydCB7UGx1Z2luUGFyYW1zfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdHlwZXMnO1xuaW1wb3J0IHtFUlJPUlN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS91dGlscyc7XG5cbmltcG9ydCB7bG9hZH0gZnJvbSAnLi4vLi4vY29tbW9uL2xpYi9sb2FkJztcblxuaW1wb3J0IHtDc3ZPcHRpb25zfSBmcm9tICcuLi90eXBlcy9jc3YnO1xuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi9jb25maWcnO1xuXG5jb25zdCB7RkFJTFVSRV9NRVNTQUdFX09VVFBVVFN9ID0gU1RSSU5HUztcbmNvbnN0IHtNYW5pZmVzdFZhbGlkYXRpb25FcnJvcn0gPSBFUlJPUlM7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFuaWZlc3QgZGF0YSBpZiBgb3V0cHV0c2AgaXMgcHJlc2VudCBpbiBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1hbmlmZXN0RGF0YSA9IGFzeW5jIChtYW5pZmVzdDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHtyYXdNYW5pZmVzdH0gPSBhd2FpdCBsb2FkKG1hbmlmZXN0KTtcbiAgY29uc3Qge2NoaWxkcmVufSA9IHJhd01hbmlmZXN0LnRyZWU7XG5cbiAgaWYgKGNoaWxkcmVuPy5jaGlsZD8ub3V0cHV0cyB8fCBjaGlsZHJlbj8uWydjaGlsZC0wJ10/Lm91dHB1dHMpIHtcbiAgICByZXR1cm4gcmF3TWFuaWZlc3Q7XG4gIH1cblxuICB0aHJvdyBuZXcgTWFuaWZlc3RWYWxpZGF0aW9uRXJyb3IoRkFJTFVSRV9NRVNTQUdFX09VVFBVVFMpO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBDU1YgZmlsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdHJlZSBzdHJ1Y3R1cmUsIGNvbnRleHQsIG91dHB1dCBwYXRoLCBhbmQgcGFyYW1zLlxuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVDc3YgPSBhc3luYyAob3B0aW9uczogQ3N2T3B0aW9ucykgPT4ge1xuICBjb25zdCB7dHJlZSwgY29udGV4dCwgb3V0cHV0UGF0aCwgcGFyYW1zfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGNvbHVtbnMgPSBbJ1BhdGgnXTtcbiAgY29uc3QgbWF0cml4ID0gW2NvbHVtbnNdO1xuICBjb25zdCBhZ2dyZWdhdGlvbklzRW5hYmxlZCA9ICEhY29udGV4dC5hZ2dyZWdhdGlvbjtcblxuICBjb25zdCB0cmF2ZXJzZVRyZWUgPSAobm9kZTogYW55LCBwYXJhbXM6IHN0cmluZywgcGF0aCA9ICd0cmVlJykgPT4ge1xuICAgIGlmIChub2RlLmFnZ3JlZ2F0ZWQpIHtcbiAgICAgIGlmIChwYXRoID09PSAndHJlZScpIHtcbiAgICAgICAgY29sdW1ucy5wdXNoKCdBZ2dyZWdhdGVkJyk7XG4gICAgICB9XG4gICAgICBtYXRyaXgucHVzaChbYCR7cGF0aH0uJHtwYXJhbXN9YCwgbm9kZS5hZ2dyZWdhdGVkW3BhcmFtc11dKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5vdXRwdXRzKSB7XG4gICAgICBub2RlLm91dHB1dHMuZm9yRWFjaCgob3V0cHV0OiBQbHVnaW5QYXJhbXMpID0+IHtcbiAgICAgICAgY29uc3Qge3RpbWVzdGFtcH0gPSBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKCFjb2x1bW5zLmluY2x1ZGVzKHRpbWVzdGFtcCkpIHtcbiAgICAgICAgICBjb2x1bW5zLnB1c2godGltZXN0YW1wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhc3RSb3cgPSBtYXRyaXhbbWF0cml4Lmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmIChhZ2dyZWdhdGlvbklzRW5hYmxlZCkge1xuICAgICAgICAgIGxhc3RSb3cucHVzaChvdXRwdXRbcGFyYW1zXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG1hdHJpeC5sZW5ndGggPT09IDEgfHwgbGFzdFJvdy5sZW5ndGggPT09IGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBtYXRyaXgucHVzaChbYCR7cGF0aH0uJHtwYXJhbXN9YCwgb3V0cHV0W3BhcmFtc11dKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGFzdFJvdy5wdXNoKG91dHB1dFtwYXJhbXNdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBPYmplY3Qua2V5cyhub2RlLmNoaWxkcmVuKS5mb3JFYWNoKGNoaWxkS2V5ID0+IHtcbiAgICAgICAgdHJhdmVyc2VUcmVlKFxuICAgICAgICAgIG5vZGUuY2hpbGRyZW4hW2NoaWxkS2V5XSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgYCR7cGF0aH0uY2hpbGRyZW4uJHtjaGlsZEtleX1gXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgdHJhdmVyc2VUcmVlKHRyZWUsIHBhcmFtcyk7XG5cbiAgY29uc3QgY3N2U3RyaW5nID0gc3RyaW5naWZ5KG1hdHJpeCwge2NvbHVtbnN9KTtcblxuICBpZiAoIW91dHB1dFBhdGgpIHtcbiAgICByZXR1cm4gY3N2U3RyaW5nO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGZzLndyaXRlRmlsZShgJHtvdXRwdXRQYXRofS5jc3ZgLCBjc3ZTdHJpbmcpO1xufTtcbiJdfQ==