bankcode-bic
Version:
Convert bank codes from IBAN to BICs, Name of bank. Currently supports only some selected EU countries.
135 lines (133 loc) • 3.53 kB
JavaScript
import { DownloadCommand } from "./commands/download.js";
import { GenerateCommand } from "./commands/generate.js";
import { showHelp } from "./commands/help.js";
import { LookupCommand } from "./commands/lookup.js";
import { splitCommaSeparatedValues } from "./libs/utils.js";
import process from "node:process";
import { parseArgs } from "node:util";
//#region src/cli.ts
async function main(options = {
cmds: {
download: DownloadCommand,
generate: GenerateCommand,
help: showHelp,
lookup: LookupCommand,
exitApp: process.exit
},
cmdlineArgs: void 0
}) {
const { cmds, cmdlineArgs } = options;
let positionals = [];
let flags;
try {
const { positionals: pos, values } = parseArgs({
args: cmdlineArgs,
options: {
"cache-ttl": { type: "string" },
"no-cache": { type: "boolean" },
"clear-cache": { type: "boolean" },
countries: {
type: "string",
multiple: true
},
"key-names": {
type: "string",
multiple: true
},
"field-names": {
type: "string",
multiple: true
},
quiet: { type: "boolean" },
format: {
type: "string",
choices: [
"json",
"js",
"ts"
]
},
debug: { type: "boolean" },
help: {
type: "boolean",
short: "h"
}
},
allowPositionals: true
});
positionals = pos ?? [];
flags = values;
} catch (error) {
if (typeof error === "object" && error !== null && "code" in error && error.code === "ERR_PARSE_ARGS_UNKNOWN_OPTION") {
console.error("Error parsing command line arguments:", error.message);
cmds.help();
} else console.error("Unexpected error:", error);
cmds.exitApp(1);
}
const command = positionals[0];
switch (command) {
case "download":
if (positionals.length < 2) {
console.error("Please provide a file path for the downloaded data.");
cmds.help();
cmds.exitApp(1);
}
await cmds.download(positionals[1], {
filterCountries: splitCommaSeparatedValues(flags?.countries),
clearCache: flags?.["clear-cache"],
noCache: flags?.["no-cache"],
ttlMs: flags?.["cache-ttl"] ? Number.parseInt(flags["cache-ttl"], 10) : void 0
});
break;
case "generate":
if (positionals.length < 2) {
console.error("Please provide a file path for the generated data.");
cmds.help();
cmds.exitApp(1);
}
if (flags?.format !== void 0 && ![
"json",
"js",
"ts"
].includes(flags.format)) {
console.error(`Invalid format: ${flags.format}. Valid formats are: json, js, ts.`);
cmds.exitApp(1);
}
await cmds.generate(positionals[1], {
filterCountries: splitCommaSeparatedValues(flags?.countries),
fieldNames: splitCommaSeparatedValues(flags?.["field-names"]),
keyNames: splitCommaSeparatedValues(flags?.["key-names"]),
format: flags?.format,
clearCache: flags?.["clear-cache"],
noCache: flags?.["no-cache"],
ttlMs: flags?.["cache-ttl"] ? Number.parseInt(flags["cache-ttl"], 10) : void 0,
debug: flags?.debug
});
break;
case "lookup":
try {
positionals.shift();
await cmds.lookup(positionals, {
quiet: flags?.quiet,
debug: flags?.debug
});
} catch (error) {
console.info("");
console.error(error);
console.info("");
cmds.help(command);
cmds.exitApp(1);
}
break;
case "help":
cmds.help();
break;
default:
console.error(`Unknown command: ${command}`);
cmds.help();
cmds.exitApp(1);
}
}
if (process.env.VITEST !== "true") await main();
//#endregion
export { main };