UNPKG

@grnsft/if

Version:

Impact Framework

71 lines 9.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isRegrouped = exports.Regroup = void 0; const zod_1 = require("zod"); const utils_1 = require("@grnsft/if-core/utils"); const validations_1 = require("../../common/util/validations"); const config_1 = require("../config"); const { InvalidGroupingError } = utils_1.ERRORS; const { INVALID_GROUP_KEY, REGROUP_ERROR } = config_1.STRINGS; /** * Creates structure to insert inputs by groups. */ const appendGroup = (value, object, target, groups) => { if (groups.length === 0) { object[target] = object[target] || []; object[target].push(value); return object; } const group = groups.shift(); object.children = object.children || {}; object.children[group] = object.children[group] || {}; return appendGroup(value, object.children[group], target, groups); }; /** * Validates the groups array. */ const validateGroups = (groups) => { const inputData = { regroup: groups }; const validationSchema = zod_1.z.record(zod_1.z.string(), zod_1.z.array(zod_1.z.string(), { message: REGROUP_ERROR }).min(1)); (0, validations_1.validate)(validationSchema, inputData); return groups; }; /** * Looks up a group key value in the input. */ const lookupGroupKey = (input, groupKey) => { if (!input[groupKey]) { throw new InvalidGroupingError(INVALID_GROUP_KEY(groupKey)); } return input[groupKey]; }; /** * Regroups inputs and outputs based on the given group keys. */ const Regroup = (inputs, outputs, groups) => { const validatedGroups = validateGroups(groups); const appendToAccumulator = (items, acc, target) => { for (const item of items) { const groupsWithData = validatedGroups.map(groupKey => lookupGroupKey(item, groupKey)); appendGroup(item, acc, target, groupsWithData); } }; const acc = {}; appendToAccumulator(inputs, acc, 'inputs'); appendToAccumulator(outputs, acc, 'outputs'); return acc.children; }; exports.Regroup = Regroup; /** * Grabs all the values according to grouping criteria, then * checks if regroup values are present in the children list. */ const isRegrouped = (groups, outputStorage, childNames) => { const validatedGroups = validateGroups(groups); const regroupValues = validatedGroups .map(group => [...new Set(outputStorage.map(output => output[group]))]) .flat(); return regroupValues.every(one => [...childNames].includes(one)); }; exports.isRegrouped = isRegrouped; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVncm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pZi1ydW4vbGliL3JlZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXNCO0FBQ3RCLGlEQUE2QztBQUc3QywrREFBdUQ7QUFFdkQsc0NBQWtDO0FBRWxDLE1BQU0sRUFBQyxvQkFBb0IsRUFBQyxHQUFHLGNBQU0sQ0FBQztBQUN0QyxNQUFNLEVBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFDLEdBQUcsZ0JBQU8sQ0FBQztBQUVuRDs7R0FFRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQ2xCLEtBQW1CLEVBQ25CLE1BQVcsRUFDWCxNQUFjLEVBQ2QsTUFBZ0IsRUFDWCxFQUFFO0lBQ1AsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN2QixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDO0tBQ2Y7SUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFHLENBQUM7SUFDOUIsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztJQUN4QyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRXRELE9BQU8sV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNwRSxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBZ0IsRUFBWSxFQUFFO0lBQ3BELE1BQU0sU0FBUyxHQUFHLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBQyxDQUFDO0lBQ3BDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FDL0IsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUNWLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUMsT0FBTyxFQUFFLGFBQWEsRUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNyRCxDQUFDO0lBRUYsSUFBQSxzQkFBUSxFQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXRDLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFtQixFQUFFLFFBQWdCLEVBQVUsRUFBRTtJQUN2RSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3BCLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0tBQzdEO0lBRUQsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSSxNQUFNLE9BQU8sR0FBRyxDQUNyQixNQUFzQixFQUN0QixPQUF1QixFQUN2QixNQUFnQixFQUNYLEVBQUU7SUFDUCxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFL0MsTUFBTSxtQkFBbUIsR0FBRyxDQUMxQixLQUFxQixFQUNyQixHQUFRLEVBQ1IsTUFBYyxFQUNkLEVBQUU7UUFDRixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtZQUN4QixNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQ3BELGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQy9CLENBQUM7WUFDRixXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDLENBQUM7SUFFRixNQUFNLEdBQUcsR0FBRyxFQUFTLENBQUM7SUFDdEIsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRTdDLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUN0QixDQUFDLENBQUM7QUF6QlcsUUFBQSxPQUFPLFdBeUJsQjtBQUVGOzs7R0FHRztBQUNJLE1BQU0sV0FBVyxHQUFHLENBQ3pCLE1BQWdCLEVBQ2hCLGFBQTZCLEVBQzdCLFVBQXVCLEVBQ3ZCLEVBQUU7SUFDRixNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsTUFBTSxhQUFhLEdBQUcsZUFBZTtTQUNsQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RSxJQUFJLEVBQUUsQ0FBQztJQUVWLE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRSxDQUFDLENBQUM7QUFYVyxRQUFBLFdBQVcsZUFXdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQge0VSUk9SU30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3V0aWxzJztcbmltcG9ydCB7UGx1Z2luUGFyYW1zfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdHlwZXMnO1xuXG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbC92YWxpZGF0aW9ucyc7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi4vY29uZmlnJztcblxuY29uc3Qge0ludmFsaWRHcm91cGluZ0Vycm9yfSA9IEVSUk9SUztcbmNvbnN0IHtJTlZBTElEX0dST1VQX0tFWSwgUkVHUk9VUF9FUlJPUn0gPSBTVFJJTkdTO1xuXG4vKipcbiAqIENyZWF0ZXMgc3RydWN0dXJlIHRvIGluc2VydCBpbnB1dHMgYnkgZ3JvdXBzLlxuICovXG5jb25zdCBhcHBlbmRHcm91cCA9IChcbiAgdmFsdWU6IFBsdWdpblBhcmFtcyxcbiAgb2JqZWN0OiBhbnksXG4gIHRhcmdldDogc3RyaW5nLFxuICBncm91cHM6IHN0cmluZ1tdXG4pOiBhbnkgPT4ge1xuICBpZiAoZ3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIG9iamVjdFt0YXJnZXRdID0gb2JqZWN0W3RhcmdldF0gfHwgW107XG4gICAgb2JqZWN0W3RhcmdldF0ucHVzaCh2YWx1ZSk7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIGNvbnN0IGdyb3VwID0gZ3JvdXBzLnNoaWZ0KCkhO1xuICBvYmplY3QuY2hpbGRyZW4gPSBvYmplY3QuY2hpbGRyZW4gfHwge307XG4gIG9iamVjdC5jaGlsZHJlbltncm91cF0gPSBvYmplY3QuY2hpbGRyZW5bZ3JvdXBdIHx8IHt9O1xuXG4gIHJldHVybiBhcHBlbmRHcm91cCh2YWx1ZSwgb2JqZWN0LmNoaWxkcmVuW2dyb3VwXSwgdGFyZ2V0LCBncm91cHMpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGdyb3VwcyBhcnJheS5cbiAqL1xuY29uc3QgdmFsaWRhdGVHcm91cHMgPSAoZ3JvdXBzOiBzdHJpbmdbXSk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgaW5wdXREYXRhID0ge3JlZ3JvdXA6IGdyb3Vwc307XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSB6LnJlY29yZChcbiAgICB6LnN0cmluZygpLFxuICAgIHouYXJyYXkoei5zdHJpbmcoKSwge21lc3NhZ2U6IFJFR1JPVVBfRVJST1J9KS5taW4oMSlcbiAgKTtcblxuICB2YWxpZGF0ZSh2YWxpZGF0aW9uU2NoZW1hLCBpbnB1dERhdGEpO1xuXG4gIHJldHVybiBncm91cHM7XG59O1xuXG4vKipcbiAqIExvb2tzIHVwIGEgZ3JvdXAga2V5IHZhbHVlIGluIHRoZSBpbnB1dC5cbiAqL1xuY29uc3QgbG9va3VwR3JvdXBLZXkgPSAoaW5wdXQ6IFBsdWdpblBhcmFtcywgZ3JvdXBLZXk6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICghaW5wdXRbZ3JvdXBLZXldKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRHcm91cGluZ0Vycm9yKElOVkFMSURfR1JPVVBfS0VZKGdyb3VwS2V5KSk7XG4gIH1cblxuICByZXR1cm4gaW5wdXRbZ3JvdXBLZXldO1xufTtcblxuLyoqXG4gKiBSZWdyb3VwcyBpbnB1dHMgYW5kIG91dHB1dHMgYmFzZWQgb24gdGhlIGdpdmVuIGdyb3VwIGtleXMuXG4gKi9cbmV4cG9ydCBjb25zdCBSZWdyb3VwID0gKFxuICBpbnB1dHM6IFBsdWdpblBhcmFtc1tdLFxuICBvdXRwdXRzOiBQbHVnaW5QYXJhbXNbXSxcbiAgZ3JvdXBzOiBzdHJpbmdbXVxuKTogYW55ID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkR3JvdXBzID0gdmFsaWRhdGVHcm91cHMoZ3JvdXBzKTtcblxuICBjb25zdCBhcHBlbmRUb0FjY3VtdWxhdG9yID0gKFxuICAgIGl0ZW1zOiBQbHVnaW5QYXJhbXNbXSxcbiAgICBhY2M6IGFueSxcbiAgICB0YXJnZXQ6IHN0cmluZ1xuICApID0+IHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGNvbnN0IGdyb3Vwc1dpdGhEYXRhID0gdmFsaWRhdGVkR3JvdXBzLm1hcChncm91cEtleSA9PlxuICAgICAgICBsb29rdXBHcm91cEtleShpdGVtLCBncm91cEtleSlcbiAgICAgICk7XG4gICAgICBhcHBlbmRHcm91cChpdGVtLCBhY2MsIHRhcmdldCwgZ3JvdXBzV2l0aERhdGEpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhY2MgPSB7fSBhcyBhbnk7XG4gIGFwcGVuZFRvQWNjdW11bGF0b3IoaW5wdXRzLCBhY2MsICdpbnB1dHMnKTtcbiAgYXBwZW5kVG9BY2N1bXVsYXRvcihvdXRwdXRzLCBhY2MsICdvdXRwdXRzJyk7XG5cbiAgcmV0dXJuIGFjYy5jaGlsZHJlbjtcbn07XG5cbi8qKlxuICogR3JhYnMgYWxsIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIGdyb3VwaW5nIGNyaXRlcmlhLCB0aGVuXG4gKiAgY2hlY2tzIGlmIHJlZ3JvdXAgdmFsdWVzIGFyZSBwcmVzZW50IGluIHRoZSBjaGlsZHJlbiBsaXN0LlxuICovXG5leHBvcnQgY29uc3QgaXNSZWdyb3VwZWQgPSAoXG4gIGdyb3Vwczogc3RyaW5nW10sXG4gIG91dHB1dFN0b3JhZ2U6IFBsdWdpblBhcmFtc1tdLFxuICBjaGlsZE5hbWVzOiBTZXQ8c3RyaW5nPlxuKSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZEdyb3VwcyA9IHZhbGlkYXRlR3JvdXBzKGdyb3Vwcyk7XG4gIGNvbnN0IHJlZ3JvdXBWYWx1ZXMgPSB2YWxpZGF0ZWRHcm91cHNcbiAgICAubWFwKGdyb3VwID0+IFsuLi5uZXcgU2V0KG91dHB1dFN0b3JhZ2UubWFwKG91dHB1dCA9PiBvdXRwdXRbZ3JvdXBdKSldKVxuICAgIC5mbGF0KCk7XG5cbiAgcmV0dXJuIHJlZ3JvdXBWYWx1ZXMuZXZlcnkob25lID0+IFsuLi5jaGlsZE5hbWVzXS5pbmNsdWRlcyhvbmUpKTtcbn07XG4iXX0=