UNPKG

somali-names

Version:

Random Somali first names (male/female) with optional meanings. Library + CLI.

69 lines (61 loc) 1.93 kB
#!/usr/bin/env node 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); }