From 32595811423f8573d4e73ede67e8db93a0ed2671 Mon Sep 17 00:00:00 2001 From: JDP818 Date: Thu, 25 Apr 2024 14:50:14 +0100 Subject: [PATCH 1/3] Add option to exclude emoji --- src/definitions/person.ts | 3 ++- src/locales/en/person/bio_pattern.ts | 13 ++++++++++--- src/modules/person/index.ts | 20 ++++++++++++++++---- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/definitions/person.ts b/src/definitions/person.ts index 87250ed9917..3f38aa5c5d8 100644 --- a/src/definitions/person.ts +++ b/src/definitions/person.ts @@ -1,3 +1,4 @@ +import { BioType } from '../modules/person'; import type { LocaleEntry } from './definitions'; /** @@ -37,7 +38,7 @@ export type PersonDefinition = LocaleEntry<{ male_last_name_pattern: Array<{ value: string; weight: number }>; female_last_name_pattern: Array<{ value: string; weight: number }>; - bio_pattern: string[]; + bio_pattern: Record; job_descriptor: string[]; job_area: string[]; diff --git a/src/locales/en/person/bio_pattern.ts b/src/locales/en/person/bio_pattern.ts index 80caf4edc3c..e7f40782831 100644 --- a/src/locales/en/person/bio_pattern.ts +++ b/src/locales/en/person/bio_pattern.ts @@ -1,4 +1,5 @@ -export default [ +export default { + default :[ '{{person.bio_part}}', '{{person.bio_part}}, {{person.bio_part}}', '{{person.bio_part}}, {{person.bio_part}}, {{person.bio_part}}', @@ -6,5 +7,11 @@ export default [ '{{word.noun}} {{person.bio_supporter}}', '{{word.noun}} {{person.bio_supporter}} {{internet.emoji}}', '{{word.noun}} {{person.bio_supporter}}, {{person.bio_part}}', - '{{word.noun}} {{person.bio_supporter}}, {{person.bio_part}} {{internet.emoji}}', -]; + '{{word.noun}} {{person.bio_supporter}}, {{person.bio_part}} {{internet.emoji}}'], + text:[ + '{{person.bio_part}}', + '{{person.bio_part}}, {{person.bio_part}}', + '{{person.bio_part}}, {{person.bio_part}}, {{person.bio_part}}', + '{{word.noun}} {{person.bio_supporter}}', + '{{word.noun}} {{person.bio_supporter}}, {{person.bio_part}}'] +}; diff --git a/src/modules/person/index.ts b/src/modules/person/index.ts index 6bb4f7766c0..1b9ff6f30bf 100644 --- a/src/modules/person/index.ts +++ b/src/modules/person/index.ts @@ -9,6 +9,10 @@ export enum Sex { export type SexType = `${Sex}`; +export type BioType = + | 'default' + | 'text'; + /** * Select a definition based on given sex. * @@ -317,10 +321,18 @@ export class PersonModule extends ModuleBase { * * @since 8.0.0 */ - bio(): string { - const { bio_pattern } = this.faker.definitions.person; - - return this.faker.helpers.fake(bio_pattern); + bio( + options: { + types?: ReadonlyArray; + } = {} + ): string { + const { + types = Object.keys(this.faker.definitions.person) as BioType[], + } = options; + const bioType = this.faker.helpers.arrayElement(types); + return this.faker.helpers.arrayElement( + this.faker.definitions.person.bio_pattern[bioType] + ); } /** From 1e30f4e969c8f096a1822360b4624acff01e3e31 Mon Sep 17 00:00:00 2001 From: JDP818 Date: Thu, 25 Apr 2024 17:43:01 +0100 Subject: [PATCH 2/3] Updated Documentation and tests --- src/definitions/person.ts | 2 +- src/locales/en/person/bio_pattern.ts | 31 +++++++++---------- src/locales/eo/person/bio_pattern.ts | 20 +++++++----- src/locales/zh_CN/person/bio_pattern.ts | 24 ++++++++------ src/modules/person/index.ts | 17 +++++++--- .../modules/__snapshots__/person.spec.ts.snap | 12 +++++-- test/modules/person.spec.ts | 7 +++-- 7 files changed, 69 insertions(+), 44 deletions(-) diff --git a/src/definitions/person.ts b/src/definitions/person.ts index 3f38aa5c5d8..976ab086e46 100644 --- a/src/definitions/person.ts +++ b/src/definitions/person.ts @@ -1,4 +1,4 @@ -import { BioType } from '../modules/person'; +import type { BioType } from '../modules/person'; import type { LocaleEntry } from './definitions'; /** diff --git a/src/locales/en/person/bio_pattern.ts b/src/locales/en/person/bio_pattern.ts index e7f40782831..5aaca63e4d4 100644 --- a/src/locales/en/person/bio_pattern.ts +++ b/src/locales/en/person/bio_pattern.ts @@ -1,17 +1,16 @@ -export default { - default :[ - '{{person.bio_part}}', - '{{person.bio_part}}, {{person.bio_part}}', - '{{person.bio_part}}, {{person.bio_part}}, {{person.bio_part}}', - '{{person.bio_part}}, {{person.bio_part}}, {{person.bio_part}} {{internet.emoji}}', - '{{word.noun}} {{person.bio_supporter}}', - '{{word.noun}} {{person.bio_supporter}} {{internet.emoji}}', - '{{word.noun}} {{person.bio_supporter}}, {{person.bio_part}}', - '{{word.noun}} {{person.bio_supporter}}, {{person.bio_part}} {{internet.emoji}}'], - text:[ - '{{person.bio_part}}', - '{{person.bio_part}}, {{person.bio_part}}', - '{{person.bio_part}}, {{person.bio_part}}, {{person.bio_part}}', - '{{word.noun}} {{person.bio_supporter}}', - '{{word.noun}} {{person.bio_supporter}}, {{person.bio_part}}'] +export default { + emoji: [ + '{{person.bio_part}}, {{internet.emoji}}', + '{{person.bio_part}}, {{person.bio_part}}, {{internet.emoji}}', + '{{person.bio_part}}, {{person.bio_part}}, {{person.bio_part}} {{internet.emoji}}', + '{{word.noun}} {{person.bio_supporter}} {{internet.emoji}}', + '{{word.noun}} {{person.bio_supporter}}, {{person.bio_part}} {{internet.emoji}}', + ], + text: [ + '{{person.bio_part}}', + '{{person.bio_part}}, {{person.bio_part}}', + '{{person.bio_part}}, {{person.bio_part}}, {{person.bio_part}}', + '{{word.noun}} {{person.bio_supporter}}', + '{{word.noun}} {{person.bio_supporter}}, {{person.bio_part}}', + ], }; diff --git a/src/locales/eo/person/bio_pattern.ts b/src/locales/eo/person/bio_pattern.ts index 59668efc6f1..05d271ae5a9 100644 --- a/src/locales/eo/person/bio_pattern.ts +++ b/src/locales/eo/person/bio_pattern.ts @@ -1,8 +1,12 @@ -export default [ - '{{person.bio_part}}', - '{{person.bio_part}} {{internet.emoji}}', - '{{person.bio_part}}, {{person.bio_part}}', - '{{person.bio_part}}, {{person.bio_part}} {{internet.emoji}}', - '{{person.bio_part}}, {{person.bio_part}}, {{person.bio_part}}', - '{{person.bio_part}}, {{person.bio_part}}, {{person.bio_part}} {{internet.emoji}}', -]; +export default { + emoji: [ + '{{person.bio_part}} {{internet.emoji}}', + '{{person.bio_part}}, {{person.bio_part}} {{internet.emoji}}', + '{{person.bio_part}}, {{person.bio_part}}, {{person.bio_part}} {{internet.emoji}}', + ], + text: [ + '{{person.bio_part}}', + '{{person.bio_part}}, {{person.bio_part}}', + '{{person.bio_part}}, {{person.bio_part}}, {{person.bio_part}}', + ], +}; diff --git a/src/locales/zh_CN/person/bio_pattern.ts b/src/locales/zh_CN/person/bio_pattern.ts index 6c76228f444..1307ec57522 100644 --- a/src/locales/zh_CN/person/bio_pattern.ts +++ b/src/locales/zh_CN/person/bio_pattern.ts @@ -1,10 +1,14 @@ -export default [ - '{{person.bio_part}}', - '{{person.bio_part}},{{person.bio_part}}', - '{{person.bio_part}},{{person.bio_part}},{{person.bio_part}}', - '{{person.bio_part}},{{person.bio_part}},{{person.bio_part}}{{internet.emoji}}', - '{{word.noun}}{{person.bio_supporter}}', - '{{word.noun}}{{person.bio_supporter}}{{internet.emoji}}', - '{{word.noun}}{{person.bio_supporter}},{{person.bio_part}}', - '{{word.noun}}{{person.bio_supporter}},{{person.bio_part}}{{internet.emoji}}', -]; +export default { + emoji: [ + '{{person.bio_part}},{{person.bio_part}},{{person.bio_part}}{{internet.emoji}}', + '{{word.noun}}{{person.bio_supporter}}{{internet.emoji}}', + '{{word.noun}}{{person.bio_supporter}},{{person.bio_part}}{{internet.emoji}}', + ], + text: [ + '{{person.bio_part}}', + '{{person.bio_part}},{{person.bio_part}}', + '{{person.bio_part}},{{person.bio_part}},{{person.bio_part}}', + '{{word.noun}}{{person.bio_supporter}}', + '{{word.noun}}{{person.bio_supporter}},{{person.bio_part}}', + ], +}; diff --git a/src/modules/person/index.ts b/src/modules/person/index.ts index 1b9ff6f30bf..6dbcdda7a81 100644 --- a/src/modules/person/index.ts +++ b/src/modules/person/index.ts @@ -9,9 +9,7 @@ export enum Sex { export type SexType = `${Sex}`; -export type BioType = - | 'default' - | 'text'; +export type BioType = 'emoji' | 'text'; /** * Select a definition based on given sex. @@ -316,18 +314,29 @@ export class PersonModule extends ModuleBase { /** * Returns a random short biography * + * @param options Options object. + * @param options.types A list of pattern types that can be generated. Possible values are `'emoji'`, `'text'`. By default, any pattern will be included. + * * @example * faker.person.bio() // 'oatmeal advocate, veteran 🐠' + * faker.person.bio({ types: ['text'] }) // 'oatmeal advocate, veteran' * * @since 8.0.0 */ bio( options: { + /** + * A list of the bio pattern types that should be used. + * + * @default Object.keys(faker.definitions.person.bio_pattern) + */ types?: ReadonlyArray; } = {} ): string { const { - types = Object.keys(this.faker.definitions.person) as BioType[], + types = Object.keys( + this.faker.definitions.person.bio_pattern + ) as BioType[], } = options; const bioType = this.faker.helpers.arrayElement(types); return this.faker.helpers.arrayElement( diff --git a/test/modules/__snapshots__/person.spec.ts.snap b/test/modules/__snapshots__/person.spec.ts.snap index 44e98694310..a4f1dbdbcf9 100644 --- a/test/modules/__snapshots__/person.spec.ts.snap +++ b/test/modules/__snapshots__/person.spec.ts.snap @@ -1,6 +1,8 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`person > 42 > bio 1`] = `"traveler, philosopher, model"`; +exports[`person > 42 > bio > noArgs 1`] = `"{{word.noun}} {{person.bio_supporter}}, {{person.bio_part}} {{internet.emoji}}"`; + +exports[`person > 42 > bio > with options 1`] = `"{{person.bio_part}}, {{person.bio_part}}, {{internet.emoji}}"`; exports[`person > 42 > firstName > noArgs 1`] = `"Garnet"`; @@ -50,7 +52,9 @@ exports[`person > 42 > suffix > with sex 1`] = `"III"`; exports[`person > 42 > zodiacSign 1`] = `"Gemini"`; -exports[`person > 1211 > bio 1`] = `"decongestant supporter, parent 🎲"`; +exports[`person > 1211 > bio > noArgs 1`] = `"{{word.noun}} {{person.bio_supporter}}, {{person.bio_part}}"`; + +exports[`person > 1211 > bio > with options 1`] = `"{{word.noun}} {{person.bio_supporter}}, {{person.bio_part}} {{internet.emoji}}"`; exports[`person > 1211 > firstName > noArgs 1`] = `"Tito"`; @@ -100,7 +104,9 @@ exports[`person > 1211 > suffix > with sex 1`] = `"DVM"`; exports[`person > 1211 > zodiacSign 1`] = `"Capricorn"`; -exports[`person > 1337 > bio 1`] = `"creator, engineer, friend"`; +exports[`person > 1337 > bio > noArgs 1`] = `"{{person.bio_part}}, {{internet.emoji}}"`; + +exports[`person > 1337 > bio > with options 1`] = `"{{person.bio_part}}, {{person.bio_part}}, {{internet.emoji}}"`; exports[`person > 1337 > firstName > noArgs 1`] = `"Devyn"`; diff --git a/test/modules/person.spec.ts b/test/modules/person.spec.ts index 1b831217947..59202b35dca 100644 --- a/test/modules/person.spec.ts +++ b/test/modules/person.spec.ts @@ -13,8 +13,7 @@ describe('person', () => { 'jobTitle', 'jobDescriptor', 'jobArea', - 'jobType', - 'bio' + 'jobType' ); t.describeEach( @@ -39,6 +38,10 @@ describe('person', () => { }); t.it('zodiacSign'); + + t.describe('bio', (t) => { + t.it('noArgs').it('with options', { types: ['emoji'] }); + }); }); describe.each(times(NON_SEEDED_BASED_RUN).map(() => faker.seed()))( From b9b8e4206750b308e5216edfb7f88c86800c72b4 Mon Sep 17 00:00:00 2001 From: JDP818 Date: Thu, 25 Apr 2024 20:18:48 +0100 Subject: [PATCH 3/3] Fix to the return method --- src/modules/person/index.ts | 2 +- test/modules/__snapshots__/person.spec.ts.snap | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/modules/person/index.ts b/src/modules/person/index.ts index 6dbcdda7a81..105a5bef062 100644 --- a/src/modules/person/index.ts +++ b/src/modules/person/index.ts @@ -339,7 +339,7 @@ export class PersonModule extends ModuleBase { ) as BioType[], } = options; const bioType = this.faker.helpers.arrayElement(types); - return this.faker.helpers.arrayElement( + return this.faker.helpers.fake( this.faker.definitions.person.bio_pattern[bioType] ); } diff --git a/test/modules/__snapshots__/person.spec.ts.snap b/test/modules/__snapshots__/person.spec.ts.snap index a4f1dbdbcf9..c78716fe0b4 100644 --- a/test/modules/__snapshots__/person.spec.ts.snap +++ b/test/modules/__snapshots__/person.spec.ts.snap @@ -1,8 +1,8 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`person > 42 > bio > noArgs 1`] = `"{{word.noun}} {{person.bio_supporter}}, {{person.bio_part}} {{internet.emoji}}"`; +exports[`person > 42 > bio > noArgs 1`] = `"negotiation devotee, creator 💛"`; -exports[`person > 42 > bio > with options 1`] = `"{{person.bio_part}}, {{person.bio_part}}, {{internet.emoji}}"`; +exports[`person > 42 > bio > with options 1`] = `"traveler, philosopher, 🏩"`; exports[`person > 42 > firstName > noArgs 1`] = `"Garnet"`; @@ -52,9 +52,9 @@ exports[`person > 42 > suffix > with sex 1`] = `"III"`; exports[`person > 42 > zodiacSign 1`] = `"Gemini"`; -exports[`person > 1211 > bio > noArgs 1`] = `"{{word.noun}} {{person.bio_supporter}}, {{person.bio_part}}"`; +exports[`person > 1211 > bio > noArgs 1`] = `"yogurt junkie, patriot"`; -exports[`person > 1211 > bio > with options 1`] = `"{{word.noun}} {{person.bio_supporter}}, {{person.bio_part}} {{internet.emoji}}"`; +exports[`person > 1211 > bio > with options 1`] = `"decongestant supporter, parent 🎲"`; exports[`person > 1211 > firstName > noArgs 1`] = `"Tito"`; @@ -104,9 +104,9 @@ exports[`person > 1211 > suffix > with sex 1`] = `"DVM"`; exports[`person > 1211 > zodiacSign 1`] = `"Capricorn"`; -exports[`person > 1337 > bio > noArgs 1`] = `"{{person.bio_part}}, {{internet.emoji}}"`; +exports[`person > 1337 > bio > noArgs 1`] = `"engineer, 🧇"`; -exports[`person > 1337 > bio > with options 1`] = `"{{person.bio_part}}, {{person.bio_part}}, {{internet.emoji}}"`; +exports[`person > 1337 > bio > with options 1`] = `"creator, engineer, 🧇"`; exports[`person > 1337 > firstName > noArgs 1`] = `"Devyn"`;