random-words-commonjs
Version:
Generate one or more common English words
2,085 lines (2,059 loc) • 26.2 kB
JavaScript
import seedrandom from "seedrandom";
// Export the word list as it is often useful
export const wordList = [
"ability",
"able",
"aboard",
"about",
"above",
"accept",
"accident",
"according",
"account",
"accurate",
"acres",
"across",
"act",
"action",
"active",
"activity",
"actual",
"actually",
"add",
"addition",
"additional",
"adjective",
"adult",
"adventure",
"advice",
"affect",
"afraid",
"after",
"afternoon",
"again",
"against",
"age",
"ago",
"agree",
"ahead",
"aid",
"air",
"airplane",
"alike",
"alive",
"all",
"allow",
"almost",
"alone",
"along",
"aloud",
"alphabet",
"already",
"also",
"although",
"am",
"among",
"amount",
"ancient",
"angle",
"angry",
"animal",
"announced",
"another",
"answer",
"ants",
"any",
"anybody",
"anyone",
"anything",
"anyway",
"anywhere",
"apart",
"apartment",
"appearance",
"apple",
"applied",
"appropriate",
"are",
"area",
"arm",
"army",
"around",
"arrange",
"arrangement",
"arrive",
"arrow",
"art",
"article",
"as",
"aside",
"ask",
"asleep",
"at",
"ate",
"atmosphere",
"atom",
"atomic",
"attached",
"attack",
"attempt",
"attention",
"audience",
"author",
"automobile",
"available",
"average",
"avoid",
"aware",
"away",
"baby",
"back",
"bad",
"badly",
"bag",
"balance",
"ball",
"balloon",
"band",
"bank",
"bar",
"bare",
"bark",
"barn",
"base",
"baseball",
"basic",
"basis",
"basket",
"bat",
"battle",
"be",
"bean",
"bear",
"beat",
"beautiful",
"beauty",
"became",
"because",
"become",
"becoming",
"bee",
"been",
"before",
"began",
"beginning",
"begun",
"behavior",
"behind",
"being",
"believed",
"bell",
"belong",
"below",
"belt",
"bend",
"beneath",
"bent",
"beside",
"best",
"bet",
"better",
"between",
"beyond",
"bicycle",
"bigger",
"biggest",
"bill",
"birds",
"birth",
"birthday",
"bit",
"bite",
"black",
"blank",
"blanket",
"blew",
"blind",
"block",
"blood",
"blow",
"blue",
"board",
"boat",
"body",
"bone",
"book",
"border",
"born",
"both",
"bottle",
"bottom",
"bound",
"bow",
"bowl",
"box",
"boy",
"brain",
"branch",
"brass",
"brave",
"bread",
"break",
"breakfast",
"breath",
"breathe",
"breathing",
"breeze",
"brick",
"bridge",
"brief",
"bright",
"bring",
"broad",
"broke",
"broken",
"brother",
"brought",
"brown",
"brush",
"buffalo",
"build",
"building",
"built",
"buried",
"burn",
"burst",
"bus",
"bush",
"business",
"busy",
"but",
"butter",
"buy",
"by",
"cabin",
"cage",
"cake",
"call",
"calm",
"came",
"camera",
"camp",
"can",
"canal",
"cannot",
"cap",
"capital",
"captain",
"captured",
"car",
"carbon",
"card",
"care",
"careful",
"carefully",
"carried",
"carry",
"case",
"cast",
"castle",
"cat",
"catch",
"cattle",
"caught",
"cause",
"cave",
"cell",
"cent",
"center",
"central",
"century",
"certain",
"certainly",
"chain",
"chair",
"chamber",
"chance",
"change",
"changing",
"chapter",
"character",
"characteristic",
"charge",
"chart",
"check",
"cheese",
"chemical",
"chest",
"chicken",
"chief",
"child",
"children",
"choice",
"choose",
"chose",
"chosen",
"church",
"circle",
"circus",
"citizen",
"city",
"class",
"classroom",
"claws",
"clay",
"clean",
"clear",
"clearly",
"climate",
"climb",
"clock",
"close",
"closely",
"closer",
"cloth",
"clothes",
"clothing",
"cloud",
"club",
"coach",
"coal",
"coast",
"coat",
"coffee",
"cold",
"collect",
"college",
"colony",
"color",
"column",
"combination",
"combine",
"come",
"comfortable",
"coming",
"command",
"common",
"community",
"company",
"compare",
"compass",
"complete",
"completely",
"complex",
"composed",
"composition",
"compound",
"concerned",
"condition",
"congress",
"connected",
"consider",
"consist",
"consonant",
"constantly",
"construction",
"contain",
"continent",
"continued",
"contrast",
"control",
"conversation",
"cook",
"cookies",
"cool",
"copper",
"copy",
"corn",
"corner",
"correct",
"correctly",
"cost",
"cotton",
"could",
"count",
"country",
"couple",
"courage",
"course",
"court",
"cover",
"cow",
"cowboy",
"crack",
"cream",
"create",
"creature",
"crew",
"crop",
"cross",
"crowd",
"cry",
"cup",
"curious",
"current",
"curve",
"customs",
"cut",
"cutting",
"daily",
"damage",
"dance",
"danger",
"dangerous",
"dark",
"darkness",
"date",
"daughter",
"dawn",
"day",
"dead",
"deal",
"dear",
"death",
"decide",
"declared",
"deep",
"deeply",
"deer",
"definition",
"degree",
"depend",
"depth",
"describe",
"desert",
"design",
"desk",
"detail",
"determine",
"develop",
"development",
"diagram",
"diameter",
"did",
"die",
"differ",
"difference",
"different",
"difficult",
"difficulty",
"dig",
"dinner",
"direct",
"direction",
"directly",
"dirt",
"dirty",
"disappear",
"discover",
"discovery",
"discuss",
"discussion",
"disease",
"dish",
"distance",
"distant",
"divide",
"division",
"do",
"doctor",
"does",
"dog",
"doing",
"doll",
"dollar",
"done",
"donkey",
"door",
"dot",
"double",
"doubt",
"down",
"dozen",
"draw",
"drawn",
"dream",
"dress",
"drew",
"dried",
"drink",
"drive",
"driven",
"driver",
"driving",
"drop",
"dropped",
"drove",
"dry",
"duck",
"due",
"dug",
"dull",
"during",
"dust",
"duty",
"each",
"eager",
"ear",
"earlier",
"early",
"earn",
"earth",
"easier",
"easily",
"east",
"easy",
"eat",
"eaten",
"edge",
"education",
"effect",
"effort",
"egg",
"eight",
"either",
"electric",
"electricity",
"element",
"elephant",
"eleven",
"else",
"empty",
"end",
"enemy",
"energy",
"engine",
"engineer",
"enjoy",
"enough",
"enter",
"entire",
"entirely",
"environment",
"equal",
"equally",
"equator",
"equipment",
"escape",
"especially",
"essential",
"establish",
"even",
"evening",
"event",
"eventually",
"ever",
"every",
"everybody",
"everyone",
"everything",
"everywhere",
"evidence",
"exact",
"exactly",
"examine",
"example",
"excellent",
"except",
"exchange",
"excited",
"excitement",
"exciting",
"exclaimed",
"exercise",
"exist",
"expect",
"experience",
"experiment",
"explain",
"explanation",
"explore",
"express",
"expression",
"extra",
"eye",
"face",
"facing",
"fact",
"factor",
"factory",
"failed",
"fair",
"fairly",
"fall",
"fallen",
"familiar",
"family",
"famous",
"far",
"farm",
"farmer",
"farther",
"fast",
"fastened",
"faster",
"fat",
"father",
"favorite",
"fear",
"feathers",
"feature",
"fed",
"feed",
"feel",
"feet",
"fell",
"fellow",
"felt",
"fence",
"few",
"fewer",
"field",
"fierce",
"fifteen",
"fifth",
"fifty",
"fight",
"fighting",
"figure",
"fill",
"film",
"final",
"finally",
"find",
"fine",
"finest",
"finger",
"finish",
"fire",
"fireplace",
"firm",
"first",
"fish",
"five",
"fix",
"flag",
"flame",
"flat",
"flew",
"flies",
"flight",
"floating",
"floor",
"flow",
"flower",
"fly",
"fog",
"folks",
"follow",
"food",
"foot",
"football",
"for",
"force",
"foreign",
"forest",
"forget",
"forgot",
"forgotten",
"form",
"former",
"fort",
"forth",
"forty",
"forward",
"fought",
"found",
"four",
"fourth",
"fox",
"frame",
"free",
"freedom",
"frequently",
"fresh",
"friend",
"friendly",
"frighten",
"frog",
"from",
"front",
"frozen",
"fruit",
"fuel",
"full",
"fully",
"fun",
"function",
"funny",
"fur",
"furniture",
"further",
"future",
"gain",
"game",
"garage",
"garden",
"gas",
"gasoline",
"gate",
"gather",
"gave",
"general",
"generally",
"gentle",
"gently",
"get",
"getting",
"giant",
"gift",
"girl",
"give",
"given",
"giving",
"glad",
"glass",
"globe",
"go",
"goes",
"gold",
"golden",
"gone",
"good",
"goose",
"got",
"government",
"grabbed",
"grade",
"gradually",
"grain",
"grandfather",
"grandmother",
"graph",
"grass",
"gravity",
"gray",
"great",
"greater",
"greatest",
"greatly",
"green",
"grew",
"ground",
"group",
"grow",
"grown",
"growth",
"guard",
"guess",
"guide",
"gulf",
"gun",
"habit",
"had",
"hair",
"half",
"halfway",
"hall",
"hand",
"handle",
"handsome",
"hang",
"happen",
"happened",
"happily",
"happy",
"harbor",
"hard",
"harder",
"hardly",
"has",
"hat",
"have",
"having",
"hay",
"he",
"headed",
"heading",
"health",
"heard",
"hearing",
"heart",
"heat",
"heavy",
"height",
"held",
"hello",
"help",
"helpful",
"her",
"herd",
"here",
"herself",
"hidden",
"hide",
"high",
"higher",
"highest",
"highway",
"hill",
"him",
"himself",
"his",
"history",
"hit",
"hold",
"hole",
"hollow",
"home",
"honor",
"hope",
"horn",
"horse",
"hospital",
"hot",
"hour",
"house",
"how",
"however",
"huge",
"human",
"hundred",
"hung",
"hungry",
"hunt",
"hunter",
"hurried",
"hurry",
"hurt",
"husband",
"ice",
"idea",
"identity",
"if",
"ill",
"image",
"imagine",
"immediately",
"importance",
"important",
"impossible",
"improve",
"in",
"inch",
"include",
"including",
"income",
"increase",
"indeed",
"independent",
"indicate",
"individual",
"industrial",
"industry",
"influence",
"information",
"inside",
"instance",
"instant",
"instead",
"instrument",
"interest",
"interior",
"into",
"introduced",
"invented",
"involved",
"iron",
"is",
"island",
"it",
"its",
"itself",
"jack",
"jar",
"jet",
"job",
"join",
"joined",
"journey",
"joy",
"judge",
"jump",
"jungle",
"just",
"keep",
"kept",
"key",
"kids",
"kill",
"kind",
"kitchen",
"knew",
"knife",
"know",
"knowledge",
"known",
"label",
"labor",
"lack",
"lady",
"laid",
"lake",
"lamp",
"land",
"language",
"large",
"larger",
"largest",
"last",
"late",
"later",
"laugh",
"law",
"lay",
"layers",
"lead",
"leader",
"leaf",
"learn",
"least",
"leather",
"leave",
"leaving",
"led",
"left",
"leg",
"length",
"lesson",
"let",
"letter",
"level",
"library",
"lie",
"life",
"lift",
"light",
"like",
"likely",
"limited",
"line",
"lion",
"lips",
"liquid",
"list",
"listen",
"little",
"live",
"living",
"load",
"local",
"locate",
"location",
"log",
"lonely",
"long",
"longer",
"look",
"loose",
"lose",
"loss",
"lost",
"lot",
"loud",
"love",
"lovely",
"low",
"lower",
"luck",
"lucky",
"lunch",
"lungs",
"lying",
"machine",
"machinery",
"mad",
"made",
"magic",
"magnet",
"mail",
"main",
"mainly",
"major",
"make",
"making",
"man",
"managed",
"manner",
"manufacturing",
"many",
"map",
"mark",
"market",
"married",
"mass",
"massage",
"master",
"material",
"mathematics",
"matter",
"may",
"maybe",
"me",
"meal",
"mean",
"means",
"meant",
"measure",
"meat",
"medicine",
"meet",
"melted",
"member",
"memory",
"men",
"mental",
"merely",
"met",
"metal",
"method",
"mice",
"middle",
"might",
"mighty",
"mile",
"military",
"milk",
"mill",
"mind",
"mine",
"minerals",
"minute",
"mirror",
"missing",
"mission",
"mistake",
"mix",
"mixture",
"model",
"modern",
"molecular",
"moment",
"money",
"monkey",
"month",
"mood",
"moon",
"more",
"morning",
"most",
"mostly",
"mother",
"motion",
"motor",
"mountain",
"mouse",
"mouth",
"move",
"movement",
"movie",
"moving",
"mud",
"muscle",
"music",
"musical",
"must",
"my",
"myself",
"mysterious",
"nails",
"name",
"nation",
"national",
"native",
"natural",
"naturally",
"nature",
"near",
"nearby",
"nearer",
"nearest",
"nearly",
"necessary",
"neck",
"needed",
"needle",
"needs",
"negative",
"neighbor",
"neighborhood",
"nervous",
"nest",
"never",
"new",
"news",
"newspaper",
"next",
"nice",
"night",
"nine",
"no",
"nobody",
"nodded",
"noise",
"none",
"noon",
"nor",
"north",
"nose",
"not",
"note",
"noted",
"nothing",
"notice",
"noun",
"now",
"number",
"numeral",
"nuts",
"object",
"observe",
"obtain",
"occasionally",
"occur",
"ocean",
"of",
"off",
"offer",
"office",
"officer",
"official",
"oil",
"old",
"older",
"oldest",
"on",
"once",
"one",
"only",
"onto",
"open",
"operation",
"opinion",
"opportunity",
"opposite",
"or",
"orange",
"orbit",
"order",
"ordinary",
"organization",
"organized",
"origin",
"original",
"other",
"ought",
"our",
"ourselves",
"out",
"outer",
"outline",
"outside",
"over",
"own",
"owner",
"oxygen",
"pack",
"package",
"page",
"paid",
"pain",
"paint",
"pair",
"palace",
"pale",
"pan",
"paper",
"paragraph",
"parallel",
"parent",
"park",
"part",
"particles",
"particular",
"particularly",
"partly",
"parts",
"party",
"pass",
"passage",
"past",
"path",
"pattern",
"pay",
"peace",
"pen",
"pencil",
"people",
"per",
"percent",
"perfect",
"perfectly",
"perhaps",
"period",
"person",
"personal",
"pet",
"phrase",
"physical",
"piano",
"pick",
"picture",
"pictured",
"pie",
"piece",
"pig",
"pile",
"pilot",
"pine",
"pink",
"pipe",
"pitch",
"place",
"plain",
"plan",
"plane",
"planet",
"planned",
"planning",
"plant",
"plastic",
"plate",
"plates",
"play",
"pleasant",
"please",
"pleasure",
"plenty",
"plural",
"plus",
"pocket",
"poem",
"poet",
"poetry",
"point",
"pole",
"police",
"policeman",
"political",
"pond",
"pony",
"pool",
"poor",
"popular",
"population",
"porch",
"port",
"position",
"positive",
"possible",
"possibly",
"post",
"pot",
"potatoes",
"pound",
"pour",
"powder",
"power",
"powerful",
"practical",
"practice",
"prepare",
"present",
"president",
"press",
"pressure",
"pretty",
"prevent",
"previous",
"price",
"pride",
"primitive",
"principal",
"principle",
"printed",
"private",
"prize",
"probably",
"problem",
"process",
"produce",
"product",
"production",
"program",
"progress",
"promised",
"proper",
"properly",
"property",
"protection",
"proud",
"prove",
"provide",
"public",
"pull",
"pupil",
"pure",
"purple",
"purpose",
"push",
"put",
"putting",
"quarter",
"queen",
"question",
"quick",
"quickly",
"quiet",
"quietly",
"quite",
"rabbit",
"race",
"radio",
"railroad",
"rain",
"raise",
"ran",
"ranch",
"range",
"rapidly",
"rate",
"rather",
"raw",
"rays",
"reach",
"read",
"reader",
"ready",
"real",
"realize",
"rear",
"reason",
"recall",
"receive",
"recent",
"recently",
"recognize",
"record",
"red",
"refer",
"refused",
"region",
"regular",
"related",
"relationship",
"religious",
"remain",
"remarkable",
"remember",
"remove",
"repeat",
"replace",
"replied",
"report",
"represent",
"require",
"research",
"respect",
"rest",
"result",
"return",
"review",
"rhyme",
"rhythm",
"rice",
"rich",
"ride",
"riding",
"right",
"ring",
"rise",
"rising",
"river",
"road",
"roar",
"rock",
"rocket",
"rocky",
"rod",
"roll",
"roof",
"room",
"root",
"rope",
"rose",
"rough",
"round",
"route",
"row",
"rubbed",
"rubber",
"rule",
"ruler",
"run",
"running",
"rush",
"sad",
"saddle",
"safe",
"safety",
"said",
"sail",
"sale",
"salmon",
"salt",
"same",
"sand",
"sang",
"sat",
"satellites",
"satisfied",
"save",
"saved",
"saw",
"say",
"scale",
"scared",
"scene",
"school",
"science",
"scientific",
"scientist",
"score",
"screen",
"sea",
"search",
"season",
"seat",
"second",
"secret",
"section",
"see",
"seed",
"seeing",
"seems",
"seen",
"seldom",
"select",
"selection",
"sell",
"send",
"sense",
"sent",
"sentence",
"separate",
"series",
"serious",
"serve",
"service",
"sets",
"setting",
"settle",
"settlers",
"seven",
"several",
"shade",
"shadow",
"shake",
"shaking",
"shall",
"shallow",
"shape",
"share",
"sharp",
"she",
"sheep",
"sheet",
"shelf",
"shells",
"shelter",
"shine",
"shinning",
"ship",
"shirt",
"shoe",
"shoot",
"shop",
"shore",
"short",
"shorter",
"shot",
"should",
"shoulder",
"shout",
"show",
"shown",
"shut",
"sick",
"sides",
"sight",
"sign",
"signal",
"silence",
"silent",
"silk",
"silly",
"silver",
"similar",
"simple",
"simplest",
"simply",
"since",
"sing",
"single",
"sink",
"sister",
"sit",
"sitting",
"situation",
"six",
"size",
"skill",
"skin",
"sky",
"slabs",
"slave",
"sleep",
"slept",
"slide",
"slight",
"slightly",
"slip",
"slipped",
"slope",
"slow",
"slowly",
"small",
"smaller",
"smallest",
"smell",
"smile",
"smoke",
"smooth",
"snake",
"snow",
"so",
"soap",
"social",
"society",
"soft",
"softly",
"soil",
"solar",
"sold",
"soldier",
"solid",
"solution",
"solve",
"some",
"somebody",
"somehow",
"someone",
"something",
"sometime",
"somewhere",
"son",
"song",
"soon",
"sort",
"sound",
"source",
"south",
"southern",
"space",
"speak",
"special",
"species",
"specific",
"speech",
"speed",
"spell",
"spend",
"spent",
"spider",
"spin",
"spirit",
"spite",
"split",
"spoken",
"sport",
"spread",
"spring",
"square",
"stage",
"stairs",
"stand",
"standard",
"star",
"stared",
"start",
"state",
"statement",
"station",
"stay",
"steady",
"steam",
"steel",
"steep",
"stems",
"step",
"stepped",
"stick",
"stiff",
"still",
"stock",
"stomach",
"stone",
"stood",
"stop",
"stopped",
"store",
"storm",
"story",
"stove",
"straight",
"strange",
"stranger",
"straw",
"stream",
"street",
"strength",
"stretch",
"strike",
"string",
"strip",
"strong",
"stronger",
"struck",
"structure",
"struggle",
"stuck",
"student",
"studied",
"studying",
"subject",
"substance",
"success",
"successful",
"such",
"sudden",
"suddenly",
"sugar",
"suggest",
"suit",
"sum",
"summer",
"sun",
"sunlight",
"supper",
"supply",
"support",
"suppose",
"sure",
"surface",
"surprise",
"surrounded",
"swam",
"sweet",
"swept",
"swim",
"swimming",
"swing",
"swung",
"syllable",
"symbol",
"system",
"table",
"tail",
"take",
"taken",
"tales",
"talk",
"tall",
"tank",
"tape",
"task",
"taste",
"taught",
"tax",
"tea",
"teach",
"teacher",
"team",
"tears",
"teeth",
"telephone",
"television",
"tell",
"temperature",
"ten",
"tent",
"term",
"terrible",
"test",
"than",
"thank",
"that",
"thee",
"them",
"themselves",
"then",
"theory",
"there",
"therefore",
"these",
"they",
"thick",
"thin",
"thing",
"think",
"third",
"thirty",
"this",
"those",
"thou",
"though",
"thought",
"thousand",
"thread",
"three",
"threw",
"throat",
"through",
"throughout",
"throw",
"thrown",
"thumb",
"thus",
"thy",
"tide",
"tie",
"tight",
"tightly",
"till",
"time",
"tin",
"tiny",
"tip",
"tired",
"title",
"to",
"tobacco",
"today",
"together",
"told",
"tomorrow",
"tone",
"tongue",
"tonight",
"too",
"took",
"tool",
"top",
"topic",
"torn",
"total",
"touch",
"toward",
"tower",
"town",
"toy",
"trace",
"track",
"trade",
"traffic",
"trail",
"train",
"transportation",
"trap",
"travel",
"treated",
"tree",
"triangle",
"tribe",
"trick",
"tried",
"trip",
"troops",
"tropical",
"trouble",
"truck",
"trunk",
"truth",
"try",
"tube",
"tune",
"turn",
"twelve",
"twenty",
"twice",
"two",
"type",
"typical",
"uncle",
"under",
"underline",
"understanding",
"unhappy",
"union",
"unit",
"universe",
"unknown",
"unless",
"until",
"unusual",
"up",
"upon",
"upper",
"upward",
"us",
"use",
"useful",
"using",
"usual",
"usually",
"valley",
"valuable",
"value",
"vapor",
"variety",
"various",
"vast",
"vegetable",
"verb",
"vertical",
"very",
"vessels",
"victory",
"view",
"village",
"visit",
"visitor",
"voice",
"volume",
"vote",
"vowel",
"voyage",
"wagon",
"wait",
"walk",
"wall",
"want",
"war",
"warm",
"warn",
"was",
"wash",
"waste",
"watch",
"water",
"wave",
"way",
"we",
"weak",
"wealth",
"wear",
"weather",
"week",
"weigh",
"weight",
"welcome",
"well",
"went",
"were",
"west",
"western",
"wet",
"whale",
"what",
"whatever",
"wheat",
"wheel",
"when",
"whenever",
"where",
"wherever",
"whether",
"which",
"while",
"whispered",
"whistle",
"white",
"who",
"whole",
"whom",
"whose",
"why",
"wide",
"widely",
"wife",
"wild",
"will",
"willing",
"win",
"wind",
"window",
"wing",
"winter",
"wire",
"wise",
"wish",
"with",
"within",
"without",
"wolf",
"women",
"won",
"wonder",
"wonderful",
"wood",
"wooden",
"wool",
"word",
"wore",
"work",
"worker",
"world",
"worried",
"worry",
"worse",
"worth",
"would",
"wrapped",
"write",
"writer",
"writing",
"written",
"wrong",
"wrote",
"yard",
"year",
"yellow",
"yes",
"yesterday",
"yet",
"you",
"young",
"younger",
"your",
"yourself",
"youth",
"zero",
"zebra",
"zipper",
"zoo",
"zulu",
];
const shortestWordSize = wordList.reduce((shortestWord, currentWord) =>
currentWord.length < shortestWord.length ? currentWord : shortestWord
).length;
const longestWordSize = wordList.reduce((longestWord, currentWord) =>
currentWord.length > longestWord.length ? currentWord : longestWord
).length;
export function generate(options) {
// initalize random number generator for words if options.seed is provided
const random = options?.seed ? new seedrandom(options.seed) : null;
const { minLength, maxLength, ...rest } = options || {};
function word() {
let min =
typeof minLength !== "number"
? shortestWordSize
: limitWordSize(minLength);
const max =
typeof maxLength !== "number"
? longestWordSize
: limitWordSize(maxLength);
if (min > max) min = max;
let rightSize = false;
let wordUsed;
while (!rightSize) {
wordUsed = generateRandomWord();
rightSize = wordUsed.length <= max && wordUsed.length >= min;
}
return wordUsed;
}
function generateRandomWord() {
return wordList[randInt(wordList.length)];
}
// limits the size of words to the minimum and maximum possible
function limitWordSize(wordSize) {
if (wordSize < shortestWordSize) wordSize = shortestWordSize;
if (wordSize > longestWordSize) wordSize = longestWordSize;
return wordSize;
}
// random int as seeded by options.seed if applicable, or Math.random() otherwise
function randInt(lessThan) {
const r = random ? random() : Math.random();
return Math.floor(r * lessThan);
}
// No arguments = generate one word
if (options === undefined) {
return word();
}
// Just a number = return that many words
if (typeof options === "number") {
options = { exactly: options };
} else if (Object.keys(rest).length === 0) {
return word();
}
// options supported: exactly, min, max, join
if (options.exactly) {
options.min = options.exactly;
options.max = options.exactly;
}
// not a number = one word par string
if (typeof options.wordsPerString !== "number") {
options.wordsPerString = 1;
}
//not a function = returns the raw word
if (typeof options.formatter !== "function") {
options.formatter = (word) => word;
}
//not a string = separator is a space
if (typeof options.separator !== "string") {
options.separator = " ";
}
const total = options.min + randInt(options.max + 1 - options.min);
let results = [];
let token = "";
let relativeIndex = 0;
for (let i = 0; i < total * options.wordsPerString; i++) {
if (relativeIndex === options.wordsPerString - 1) {
token += options.formatter(word(), relativeIndex);
} else {
token += options.formatter(word(), relativeIndex) + options.separator;
}
relativeIndex++;
if ((i + 1) % options.wordsPerString === 0) {
results.push(token);
token = "";
relativeIndex = 0;
}
}
if (typeof options.join === "string") {
results = results.join(options.join);
}
return results;
}
export function count(options) {
let { minLength, maxLength } = options || {};
if (typeof minLength !== "number") {
minLength = shortestWordSize;
}
if (typeof maxLength !== "number") {
maxLength = longestWordSize;
}
return wordList.filter(
(word) => word.length >= minLength && word.length <= maxLength
).length;
}