somali-names
Version:
Random Somali first names (male/female) with optional meanings. Library + CLI.
69 lines (61 loc) • 1.93 kB
JavaScript
const { randomName, randomMany, findByPrefix } = require("./index");
const args = process.argv.slice(2);
function help() {
console.log(`
somaname - Somali name generator
Usage:
somaname one [--male|--female|--any] [--meaning] [--seed <n>]
somaname many <count> [--male|--female|--any] [--unique] [--meaning] [--seed <n>]
somaname find <prefix> [--male|--female|--any]
somaname help
Examples:
somaname one --female
somaname many 10 --any --unique
somaname one --male --meaning
somaname find ha --female
`.trim());
}
function parseFlags(a) {
const out = { gender: "any", withMeaning: false, unique: false, seed: undefined };
for (let i = 0; i < a.length; i++) {
const x = a[i];
if (x === "--male") out.gender = "male";
else if (x === "--female") out.gender = "female";
else if (x === "--any") out.gender = "any";
else if (x === "--meaning") out.withMeaning = true;
else if (x === "--unique") out.unique = true;
else if (x === "--seed") { out.seed = Number(a[++i]); }
}
return out;
}
const cmd = args[0];
switch (cmd) {
case "one": {
const flags = parseFlags(args.slice(1));
const val = randomName(flags);
console.log(typeof val === "string" ? val : `${val.name} — ${val.meaning || ""}`);
break;
}
case "many": {
const count = Number(args[1] || "5");
const flags = parseFlags(args.slice(2));
const list = randomMany({ ...flags, count });
for (const n of list) {
console.log(typeof n === "string" ? n : `${n.name} — ${n.meaning || ""}`);
}
break;
}
case "find": {
const prefix = args[1] || "";
const flags = parseFlags(args.slice(2));
const list = findByPrefix(prefix, { gender: flags.gender });
console.log(list.join("\n"));
break;
}
case "help":
case undefined:
help(); break;
default:
console.error("Unknown command.\n"); help(); process.exit(1);
}