bankcode-bic
Version:
Convert bank codes from IBAN to BICs, Name of bank. Currently supports only some selected EU countries.
50 lines (48 loc) • 2.62 kB
JavaScript
import { keyedGetObject, serializedGetObject, toObject } from "../libs/query.js";
import process from "node:process";
import { existsSync } from "node:fs";
import { resolve } from "node:path";
//#region src/commands/lookup.ts
async function LookupCommand(values, options) {
const quiet = options?.quiet || false;
const importBankDB = values[0];
if (!existsSync(importBankDB)) throw new Error(`File not found: ${importBankDB}. Create it with the "generate" command.`);
const resolvePath = resolve(importBankDB);
const { bankData } = await import(resolvePath);
if (!bankData) throw new Error(`Failed to import bank data from: ${importBankDB}`);
if (!quiet) console.info(`Using imported bank data from: ${importBankDB}`);
if (options?.debug) console.debug(JSON.stringify(bankData));
const keyName = values[1];
if (!keyName) throw new Error(`Key name is required. Possible key names: ${bankData.type === "keyed" ? bankData.key : (bankData.type === "serialized" ? Object.keys(bankData.keys || {}) : bankData.fields).join(", ")}`);
const keyValue = values[2];
if (!keyValue) throw new Error("Key value is required. Example with \"305156796\": bankcode-bic lookup de.js BankCode 305156796");
if (bankData.type === "keyed" && keyName !== bankData.key) throw new Error(`Key name "${keyName}" does not match the bank data key "${bankData.key}"`);
if (bankData.serialized === "keyed" && !Object.keys(bankData.keys).includes(keyName)) throw new Error(`Key "${keyName}" not found in data keys: ${Object.keys(bankData.keys).join(", ")}`);
if (bankData.serialized === "flat" && !bankData.fields.includes(keyName)) throw new Error(`Key "${keyName}" not found in data keys: ${bankData.fields.join(", ")}`);
switch (bankData.type) {
case "keyed":
if (!quiet) {
console.info(`Data type: keyed, rows: ${Object.keys(bankData.banks).length}`);
console.info(`${bankData.key} === ${keyValue}`);
}
process.stdout.write(`${JSON.stringify(keyedGetObject(keyValue, bankData))}\n`);
break;
case "serialized":
if (!quiet) {
console.info(`Data type: serialized, rows: ${bankData.banks.length}`);
console.info(`${keyName} === ${keyValue}`);
}
process.stdout.write(`${JSON.stringify(serializedGetObject(keyName, keyValue, bankData))}\n`);
break;
case "flat":
default:
if (!quiet) console.info(`Data type: flat, rows: ${bankData.banks.length}`);
for (const row of bankData.banks) {
const rowObj = toObject(row, bankData.fields);
if (rowObj[keyName] !== keyValue) continue;
process.stdout.write(`${JSON.stringify(rowObj)}\n`);
}
}
}
//#endregion
export { LookupCommand };