bankcode-bic
Version:
Convert bank codes from IBAN to BICs, Name of bank. Currently supports only some selected EU countries.
61 lines (59 loc) • 1.48 kB
JavaScript
import { getField } from "../download/download.js";
//#region src/libs/pack-data.ts
function packData(data, keyNames, fieldNames) {
const dataFormat = [
"flat",
"keyed",
"serialized"
][Math.min(keyNames.length, 2)];
let outputObject;
switch (dataFormat) {
case "keyed": {
const onlyOneField = fieldNames.length === 1;
outputObject = {
type: "keyed",
key: keyNames[0],
fields: fieldNames,
banks: data.reduce((acc, row) => {
const key = getField(keyNames[0], row);
acc[key] = onlyOneField ? getField(fieldNames[0], row) : getFields(fieldNames, row);
return acc;
}, {})
};
break;
}
case "serialized": {
const keysData = keyNames.reduce((acc, key) => {
acc[key] = {};
return acc;
}, {});
const banks = Array.from({ length: data.length });
let index = 0;
for (const row of data) {
for (const keyName of keyNames) {
if (!keysData[keyName]) keysData[keyName] = {};
keysData[keyName][getField(keyName, row)] = index;
}
banks[index++] = getFields(fieldNames, row);
}
outputObject = {
type: "serialized",
keys: keysData,
fields: fieldNames,
banks
};
break;
}
default: outputObject = {
type: "flat",
fields: fieldNames,
banks: data.map((row) => getFields(fieldNames, row))
};
}
return outputObject;
}
function getFields(fieldNames, row) {
return fieldNames.map((field) => getField(field, row));
}
//#endregion
export { packData };