From f19a296e95a5b0ef144396696d7e60bce091b664 Mon Sep 17 00:00:00 2001 From: Mohd Imran <42844688+MohdImran001@users.noreply.github.com> Date: Fri, 14 Jan 2022 21:48:57 +0530 Subject: [PATCH] feat: migrate word (#102) --- src/index.ts | 3 +- src/word.ts | 171 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 src/word.ts diff --git a/src/index.ts b/src/index.ts index f2f4520ef6f..70f74f4a079 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,6 +12,7 @@ import { Name } from './name'; import { Random } from './random'; import { System } from './system'; import { Time } from './time'; +import { Word } from './word'; export interface FakerOptions { locales?: string[]; @@ -192,7 +193,7 @@ export class Faker { readonly system: System = new System(this); readonly time: Time = new Time(); readonly vehicle = new (require('./vehicle'))(this); - readonly word = new (require('./word'))(this); + readonly word: Word = new Word(this); constructor(opts: FakerOptions = {}) { this.locales = this.locales || opts.locales || {}; diff --git a/src/word.ts b/src/word.ts new file mode 100644 index 00000000000..a5f4c35e5e6 --- /dev/null +++ b/src/word.ts @@ -0,0 +1,171 @@ +import type { Faker } from '.'; + +export class Word { + constructor(private readonly faker: Faker) { + // Bind `this` so namespaced is working correctly + for (const name of Object.getOwnPropertyNames(Word.prototype)) { + if (name === 'constructor' || typeof this[name] !== 'function') { + continue; + } + this[name] = this[name].bind(this); + } + } + + /** + * Returns an adjective of random or optionally specified length. + * If specified length is unresolvable, returns random adjective. + * + * @method faker.word.adjective + * @param optional length of word to return + * @returns a random adjective + */ + adjective(length?: number): string { + var wordList = this.faker.definitions.word.adjective; + if (length) { + wordList = this.faker.definitions.word.adjective.filter( + (word: string) => word.length == length + ); + } + + // If result of filtered word list is undefined, return an element + // from the unfiltered list. + return ( + this.faker.random.arrayElement(wordList) || + this.faker.random.arrayElement(this.faker.definitions.word.adjective) + ); + } + + /** + * Returns an adverb of random or optionally specified length. + * If specified length is unresolvable, returns random adverb. + * + * @method faker.word.adverb + * @param optional length of word to return + * @returns random adverb + */ + adverb(length?: number): string { + var wordList = this.faker.definitions.word.adverb; + if (length) { + wordList = this.faker.definitions.word.adverb.filter( + (word: string) => word.length == length + ); + } + // If result of filtered word list is undefined, return an element + // from the unfiltered list. + return ( + this.faker.random.arrayElement(wordList) || + this.faker.random.arrayElement(this.faker.definitions.word.adverb) + ); + } + + /** + * Returns a conjunction of random or optionally specified length. + * If specified length is unresolvable, returns random conjunction. + * + * @method faker.word.conjunction + * @param optional length of word to return + * @returns random conjunction + */ + conjunction(length?: number): string { + var wordList = this.faker.definitions.word.conjunction; + if (length) { + wordList = this.faker.definitions.word.conjunction.filter( + (word: string) => word.length == length + ); + } + // If result of filtered word list is undefined, return an element + // from the unfiltered list. + return ( + this.faker.random.arrayElement(wordList) || + this.faker.random.arrayElement(this.faker.definitions.word.conjunction) + ); + } + /** + * Returns an interjection of random or optionally specified length. + * If specified length is unresolvable, returns random interjection. + * + * @method faker.word.interjection + * @param optional length of word to return + * @returns random interjection + */ + interjection(length?: number): string { + var wordList = this.faker.definitions.word.interjection; + if (length) { + wordList = this.faker.definitions.word.interjection.filter( + (word: string) => word.length == length + ); + } + // If result of filtered word list is undefined, return an element + // from the unfiltered list. + return ( + this.faker.random.arrayElement(wordList) || + this.faker.random.arrayElement(this.faker.definitions.word.interjection) + ); + } + /** + * Returns a noun of random or optionally specified length. + * If specified length is unresolvable, returns random noun. + * + * @method faker.word.noun + * @param optional length of word to return + * @returns random noun + */ + noun(length?: number): string { + var wordList = this.faker.definitions.word.noun; + if (length) { + wordList = this.faker.definitions.word.noun.filter( + (word: string) => word.length == length + ); + } + // If result of filtered word list is undefined, return an element + // from the unfiltered list. + return ( + this.faker.random.arrayElement(wordList) || + this.faker.random.arrayElement(this.faker.definitions.word.noun) + ); + } + /** + * Returns a preposition of random or optionally specified length. + * If specified length is unresolvable, returns random preposition. + * + * @method faker.word.preposition + * @param optional length of word to return + * @returns random preposition + */ + preposition(length?: number): string { + var wordList = this.faker.definitions.word.preposition; + if (length) { + wordList = this.faker.definitions.word.preposition.filter( + (word: string) => word.length == length + ); + } + // If result of filtered word list is undefined, return an element + // from the unfiltered list. + return ( + this.faker.random.arrayElement(wordList) || + this.faker.random.arrayElement(this.faker.definitions.word.preposition) + ); + } + /** + * Returns a verb of random or optionally specified length. + * If specified length is unresolvable, returns random verb. + * + * @method faker.word.verb + * @param optional length of word to return + * @returns random verb + */ + verb(length?: number): string { + var wordList = this.faker.definitions.word.verb; + if (length) { + wordList = this.faker.definitions.word.verb.filter( + (word: string) => word.length == length + ); + } + // If result of filtered word list is undefined, return an element + // from the unfiltered list. + return ( + this.faker.random.arrayElement(wordList) || + this.faker.random.arrayElement(this.faker.definitions.word.verb) + ); + } +}