@grnsft/if
Version:
Impact Framework
95 lines • 10.3 kB
JavaScript
;
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==