aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatt Mayer <[email protected]>2023-02-21 15:43:28 +0700
committerGitHub <[email protected]>2023-02-21 08:43:28 +0000
commit0f98518f0906a9660dcdb8993b6cb983c5e4c92f (patch)
treeb5a3fe8c0c270e7b07050a9712d66df8a0774f3d /src
parenta05c3e5fed805c5086a22841a81da0d86ab89386 (diff)
downloadfaker-0f98518f0906a9660dcdb8993b6cb983c5e4c92f.tar.xz
faker-0f98518f0906a9660dcdb8993b6cb983c5e4c92f.zip
fix(person): avoid repeated last name via new last_name_patterns (#1819)
Diffstat (limited to 'src')
-rw-r--r--src/definitions/person.ts7
-rw-r--r--src/locales/en_GB/index.ts2
-rw-r--r--src/locales/en_GB/person/index.ts14
-rw-r--r--src/locales/en_GB/person/last_name_patterns.ts4
-rw-r--r--src/locales/en_GB/person/name.ts7
-rw-r--r--src/locales/en_GH/person/index.ts2
-rw-r--r--src/locales/en_GH/person/last_name_patterns.ts4
-rw-r--r--src/locales/en_GH/person/name.ts4
-rw-r--r--src/locales/es/person/index.ts2
-rw-r--r--src/locales/es/person/last_name_patterns.ts6
-rw-r--r--src/locales/es/person/name.ts5
-rw-r--r--src/locales/es_MX/person/index.ts2
-rw-r--r--src/locales/es_MX/person/last_name_patterns.ts10
-rw-r--r--src/locales/es_MX/person/name.ts14
-rw-r--r--src/locales/lv/person/female_last_name_patterns.ts7
-rw-r--r--src/locales/lv/person/index.ts4
-rw-r--r--src/locales/lv/person/male_last_name_patterns.ts4
-rw-r--r--src/locales/lv/person/name.ts9
-rw-r--r--src/locales/nb_NO/person/index.ts2
-rw-r--r--src/locales/nb_NO/person/last_name_patterns.ts4
-rw-r--r--src/locales/nb_NO/person/name.ts10
-rw-r--r--src/locales/sv/person/index.ts2
-rw-r--r--src/locales/sv/person/last_name_patterns.ts4
-rw-r--r--src/locales/sv/person/name.ts6
-rw-r--r--src/modules/person/index.ts67
25 files changed, 142 insertions, 60 deletions
diff --git a/src/definitions/person.ts b/src/definitions/person.ts
index b6096e81..7b54860c 100644
--- a/src/definitions/person.ts
+++ b/src/definitions/person.ts
@@ -30,6 +30,13 @@ export type PersonDefinitions = LocaleEntry<{
*/
name: Array<{ value: string; weight: number }>;
+ /**
+ * A weighted list of patterns used to generate last names.
+ */
+ last_name_patterns?: Array<{ value: string; weight: number }>;
+ male_last_name_patterns?: Array<{ value: string; weight: number }>;
+ female_last_name_patterns?: Array<{ value: string; weight: number }>;
+
bio_patterns?: string[];
title: PersonTitleDefinitions;
diff --git a/src/locales/en_GB/index.ts b/src/locales/en_GB/index.ts
index d800b976..11ae9ac6 100644
--- a/src/locales/en_GB/index.ts
+++ b/src/locales/en_GB/index.ts
@@ -6,6 +6,7 @@ import type { LocaleDefinition } from '../..';
import cell_phone from './cell_phone';
import internet from './internet';
import location from './location';
+import person from './person';
import phone_number from './phone_number';
const en_GB: LocaleDefinition = {
@@ -13,6 +14,7 @@ const en_GB: LocaleDefinition = {
cell_phone,
internet,
location,
+ person,
phone_number,
};
diff --git a/src/locales/en_GB/person/index.ts b/src/locales/en_GB/person/index.ts
new file mode 100644
index 00000000..e76a78a7
--- /dev/null
+++ b/src/locales/en_GB/person/index.ts
@@ -0,0 +1,14 @@
+/*
+ * This file is automatically generated.
+ * Run 'pnpm run generate:locales' to update.
+ */
+import type { PersonDefinitions } from '../../..';
+import last_name_patterns from './last_name_patterns';
+import name_ from './name';
+
+const person: PersonDefinitions = {
+ last_name_patterns,
+ name: name_,
+};
+
+export default person;
diff --git a/src/locales/en_GB/person/last_name_patterns.ts b/src/locales/en_GB/person/last_name_patterns.ts
new file mode 100644
index 00000000..c5b25524
--- /dev/null
+++ b/src/locales/en_GB/person/last_name_patterns.ts
@@ -0,0 +1,4 @@
+export default [
+ { value: '{{person.last_name}}', weight: 9 },
+ { value: '{{person.last_name}}-{{person.last_name}}', weight: 1 },
+];
diff --git a/src/locales/en_GB/person/name.ts b/src/locales/en_GB/person/name.ts
new file mode 100644
index 00000000..4bc2ba83
--- /dev/null
+++ b/src/locales/en_GB/person/name.ts
@@ -0,0 +1,7 @@
+export default [
+ { value: '{{person.firstName}} {{person.lastName}}', weight: 7 },
+ {
+ value: '{{person.prefix}} {{person.firstName}} {{person.lastName}}',
+ weight: 1,
+ },
+];
diff --git a/src/locales/en_GH/person/index.ts b/src/locales/en_GH/person/index.ts
index b0887ae5..89be81cc 100644
--- a/src/locales/en_GH/person/index.ts
+++ b/src/locales/en_GH/person/index.ts
@@ -6,6 +6,7 @@ import type { PersonDefinitions } from '../../..';
import female_first_name from './female_first_name';
import first_name from './first_name';
import last_name from './last_name';
+import last_name_patterns from './last_name_patterns';
import male_first_name from './male_first_name';
import name_ from './name';
@@ -13,6 +14,7 @@ const person: PersonDefinitions = {
female_first_name,
first_name,
last_name,
+ last_name_patterns,
male_first_name,
name: name_,
};
diff --git a/src/locales/en_GH/person/last_name_patterns.ts b/src/locales/en_GH/person/last_name_patterns.ts
new file mode 100644
index 00000000..3778cee9
--- /dev/null
+++ b/src/locales/en_GH/person/last_name_patterns.ts
@@ -0,0 +1,4 @@
+export default [
+ { value: '{{person.last_name}}', weight: 1 },
+ { value: '{{person.last_name}}-{{person.last_name}}', weight: 1 },
+];
diff --git a/src/locales/en_GH/person/name.ts b/src/locales/en_GH/person/name.ts
index b0892e31..3ed8a80c 100644
--- a/src/locales/en_GH/person/name.ts
+++ b/src/locales/en_GH/person/name.ts
@@ -1,7 +1,3 @@
export default [
{ value: '{{person.firstName}} {{person.lastName}}', weight: 1 },
- {
- value: '{{person.firstName}} {{person.lastName}}-{{person.lastName}}',
- weight: 1,
- },
];
diff --git a/src/locales/es/person/index.ts b/src/locales/es/person/index.ts
index 45178928..96cc5d1e 100644
--- a/src/locales/es/person/index.ts
+++ b/src/locales/es/person/index.ts
@@ -7,6 +7,7 @@ import female_first_name from './female_first_name';
import female_prefix from './female_prefix';
import first_name from './first_name';
import last_name from './last_name';
+import last_name_patterns from './last_name_patterns';
import male_first_name from './male_first_name';
import male_prefix from './male_prefix';
import name_ from './name';
@@ -19,6 +20,7 @@ const person: PersonDefinitions = {
female_prefix,
first_name,
last_name,
+ last_name_patterns,
male_first_name,
male_prefix,
name: name_,
diff --git a/src/locales/es/person/last_name_patterns.ts b/src/locales/es/person/last_name_patterns.ts
new file mode 100644
index 00000000..4ba8e35f
--- /dev/null
+++ b/src/locales/es/person/last_name_patterns.ts
@@ -0,0 +1,6 @@
+export default [
+ {
+ value: '{{person.last_name}} {{person.last_name}}',
+ weight: 1,
+ },
+];
diff --git a/src/locales/es/person/name.ts b/src/locales/es/person/name.ts
index 68a1d1f7..5b10b8d7 100644
--- a/src/locales/es/person/name.ts
+++ b/src/locales/es/person/name.ts
@@ -1,11 +1,10 @@
export default [
{
- value:
- '{{person.prefix}} {{person.firstName}} {{person.lastName}} {{person.lastName}}',
+ value: '{{person.prefix}} {{person.firstName}} {{person.lastName}}',
weight: 1,
},
{
- value: '{{person.firstName}} {{person.lastName}} {{person.lastName}}',
+ value: '{{person.firstName}} {{person.lastName}}',
weight: 9,
},
];
diff --git a/src/locales/es_MX/person/index.ts b/src/locales/es_MX/person/index.ts
index 45178928..96cc5d1e 100644
--- a/src/locales/es_MX/person/index.ts
+++ b/src/locales/es_MX/person/index.ts
@@ -7,6 +7,7 @@ import female_first_name from './female_first_name';
import female_prefix from './female_prefix';
import first_name from './first_name';
import last_name from './last_name';
+import last_name_patterns from './last_name_patterns';
import male_first_name from './male_first_name';
import male_prefix from './male_prefix';
import name_ from './name';
@@ -19,6 +20,7 @@ const person: PersonDefinitions = {
female_prefix,
first_name,
last_name,
+ last_name_patterns,
male_first_name,
male_prefix,
name: name_,
diff --git a/src/locales/es_MX/person/last_name_patterns.ts b/src/locales/es_MX/person/last_name_patterns.ts
new file mode 100644
index 00000000..a67c682b
--- /dev/null
+++ b/src/locales/es_MX/person/last_name_patterns.ts
@@ -0,0 +1,10 @@
+export default [
+ {
+ value: '{{person.last_name}} {{person.last_name}}',
+ weight: 5,
+ },
+ {
+ value: '{{person.last_name}} de {{person.last_name}}',
+ weight: 1,
+ },
+];
diff --git a/src/locales/es_MX/person/name.ts b/src/locales/es_MX/person/name.ts
index 7253fc0f..011fdfe6 100644
--- a/src/locales/es_MX/person/name.ts
+++ b/src/locales/es_MX/person/name.ts
@@ -1,20 +1,14 @@
export default [
{
- value:
- '{{person.prefix}} {{person.firstName}} {{person.lastName}} {{person.lastName}}',
+ value: '{{person.prefix}} {{person.firstName}} {{person.lastName}}',
weight: 1,
},
{
- value: '{{person.firstName}} {{person.lastName}} de {{person.lastName}}',
- weight: 3,
+ value: '{{person.firstName}} {{person.lastName}}',
+ weight: 8,
},
{
- value:
- '{{person.suffix}} {{person.firstName}} {{person.lastName}} {{person.lastName}}',
+ value: '{{person.firstName}} {{person.lastName}} {{person.suffix}}',
weight: 1,
},
- {
- value: '{{person.firstName}} {{person.lastName}} {{person.lastName}}',
- weight: 5,
- },
];
diff --git a/src/locales/lv/person/female_last_name_patterns.ts b/src/locales/lv/person/female_last_name_patterns.ts
new file mode 100644
index 00000000..b1840442
--- /dev/null
+++ b/src/locales/lv/person/female_last_name_patterns.ts
@@ -0,0 +1,7 @@
+export default [
+ { value: '{{person.female_last_name}}', weight: 8 },
+ {
+ value: '{{person.female_last_name}}-{{person.female_last_name}}',
+ weight: 2,
+ },
+];
diff --git a/src/locales/lv/person/index.ts b/src/locales/lv/person/index.ts
index 42de5bcb..ac331974 100644
--- a/src/locales/lv/person/index.ts
+++ b/src/locales/lv/person/index.ts
@@ -5,10 +5,12 @@
import type { PersonDefinitions } from '../../..';
import female_first_name from './female_first_name';
import female_last_name from './female_last_name';
+import female_last_name_patterns from './female_last_name_patterns';
import female_prefix from './female_prefix';
import first_name from './first_name';
import male_first_name from './male_first_name';
import male_last_name from './male_last_name';
+import male_last_name_patterns from './male_last_name_patterns';
import male_prefix from './male_prefix';
import name_ from './name';
import prefix from './prefix';
@@ -18,10 +20,12 @@ import title from './title';
const person: PersonDefinitions = {
female_first_name,
female_last_name,
+ female_last_name_patterns,
female_prefix,
first_name,
male_first_name,
male_last_name,
+ male_last_name_patterns,
male_prefix,
name: name_,
prefix,
diff --git a/src/locales/lv/person/male_last_name_patterns.ts b/src/locales/lv/person/male_last_name_patterns.ts
new file mode 100644
index 00000000..104a5aa1
--- /dev/null
+++ b/src/locales/lv/person/male_last_name_patterns.ts
@@ -0,0 +1,4 @@
+export default [
+ { value: '{{person.male_last_name}}', weight: 8 },
+ { value: '{{person.male_last_name}}-{{person.male_last_name}}', weight: 2 },
+];
diff --git a/src/locales/lv/person/name.ts b/src/locales/lv/person/name.ts
index 492a7e6f..845ffaf9 100644
--- a/src/locales/lv/person/name.ts
+++ b/src/locales/lv/person/name.ts
@@ -8,13 +8,4 @@ export default [
weight: 1,
},
{ value: '{{person.firstName}} {{person.lastName}}', weight: 7 },
- { value: '{{person.lastName}} {{person.firstName}}', weight: 2 },
- {
- value: '{{person.firstName}} {{person.firstName}} {{person.lastName}}',
- weight: 2,
- },
- {
- value: '{{person.firstName}} {{person.lastName}}-{{person.lastName}}',
- weight: 2,
- },
];
diff --git a/src/locales/nb_NO/person/index.ts b/src/locales/nb_NO/person/index.ts
index eb000343..c54bfc4e 100644
--- a/src/locales/nb_NO/person/index.ts
+++ b/src/locales/nb_NO/person/index.ts
@@ -7,6 +7,7 @@ import female_first_name from './female_first_name';
import female_prefix from './female_prefix';
import first_name from './first_name';
import last_name from './last_name';
+import last_name_patterns from './last_name_patterns';
import male_first_name from './male_first_name';
import male_prefix from './male_prefix';
import name_ from './name';
@@ -18,6 +19,7 @@ const person: PersonDefinitions = {
female_prefix,
first_name,
last_name,
+ last_name_patterns,
male_first_name,
male_prefix,
name: name_,
diff --git a/src/locales/nb_NO/person/last_name_patterns.ts b/src/locales/nb_NO/person/last_name_patterns.ts
new file mode 100644
index 00000000..8a31eeae
--- /dev/null
+++ b/src/locales/nb_NO/person/last_name_patterns.ts
@@ -0,0 +1,4 @@
+export default [
+ { value: '{{person.last_name}}', weight: 8 },
+ { value: '{{person.last_name}} {{person.last_name}}', weight: 2 },
+];
diff --git a/src/locales/nb_NO/person/name.ts b/src/locales/nb_NO/person/name.ts
index 3cfec1ea..5f37f6ee 100644
--- a/src/locales/nb_NO/person/name.ts
+++ b/src/locales/nb_NO/person/name.ts
@@ -7,13 +7,5 @@ export default [
value: '{{person.firstName}} {{person.lastName}} {{person.suffix}}',
weight: 1,
},
- {
- value: '{{person.firstName}} {{person.firstName}} {{person.lastName}}',
- weight: 1,
- },
- {
- value: '{{person.firstName}} {{person.lastName}} {{person.lastName}}',
- weight: 1,
- },
- { value: '{{person.firstName}} {{person.lastName}}', weight: 8 },
+ { value: '{{person.firstName}} {{person.lastName}}', weight: 9 },
];
diff --git a/src/locales/sv/person/index.ts b/src/locales/sv/person/index.ts
index 8dd6f4d6..b12b544e 100644
--- a/src/locales/sv/person/index.ts
+++ b/src/locales/sv/person/index.ts
@@ -7,6 +7,7 @@ import female_first_name from './female_first_name';
import female_prefix from './female_prefix';
import first_name from './first_name';
import last_name from './last_name';
+import last_name_patterns from './last_name_patterns';
import male_first_name from './male_first_name';
import male_prefix from './male_prefix';
import name_ from './name';
@@ -18,6 +19,7 @@ const person: PersonDefinitions = {
female_prefix,
first_name,
last_name,
+ last_name_patterns,
male_first_name,
male_prefix,
name: name_,
diff --git a/src/locales/sv/person/last_name_patterns.ts b/src/locales/sv/person/last_name_patterns.ts
new file mode 100644
index 00000000..8a31eeae
--- /dev/null
+++ b/src/locales/sv/person/last_name_patterns.ts
@@ -0,0 +1,4 @@
+export default [
+ { value: '{{person.last_name}}', weight: 8 },
+ { value: '{{person.last_name}} {{person.last_name}}', weight: 2 },
+];
diff --git a/src/locales/sv/person/name.ts b/src/locales/sv/person/name.ts
index 37334af6..5f37f6ee 100644
--- a/src/locales/sv/person/name.ts
+++ b/src/locales/sv/person/name.ts
@@ -7,9 +7,5 @@ export default [
value: '{{person.firstName}} {{person.lastName}} {{person.suffix}}',
weight: 1,
},
- { value: '{{person.firstName}} {{person.lastName}}', weight: 8 },
- {
- value: '{{person.firstName}} {{person.lastName}} {{person.lastName}}',
- weight: 1,
- },
+ { value: '{{person.firstName}} {{person.lastName}}', weight: 9 },
];
diff --git a/src/modules/person/index.ts b/src/modules/person/index.ts
index ccbb8e14..5618110b 100644
--- a/src/modules/person/index.ts
+++ b/src/modules/person/index.ts
@@ -11,6 +11,7 @@ export type SexType = `${Sex}`;
* Select a definition based on given sex.
*
* @param faker Faker instance.
+ * @param elementSelectorFn The method used to select the actual element.
* @param sex Sex.
* @param param2 Definitions.
* @param param2.generic Non-sex definitions.
@@ -18,17 +19,14 @@ export type SexType = `${Sex}`;
* @param param2.male Male definitions.
* @returns Definition based on given sex.
*/
-function selectDefinition(
+function selectDefinition<T>(
faker: Faker,
+ elementSelectorFn: (values: T[]) => string,
sex: SexType | undefined,
// TODO @Shinigami92 2022-03-21: Remove fallback empty object when `strict: true`
- {
- generic,
- female,
- male,
- }: { generic?: string[]; female?: string[]; male?: string[] } = {}
-) {
- let values: string[] | undefined;
+ { generic, female, male }: { generic?: T[]; female?: T[]; male?: T[] } = {}
+): string {
+ let values: T[] | undefined;
switch (sex) {
case Sex.Female:
@@ -52,7 +50,7 @@ function selectDefinition(
}
}
- return faker.helpers.arrayElement(values);
+ return elementSelectorFn(values);
}
/**
@@ -89,7 +87,7 @@ export class PersonModule {
const { first_name, female_first_name, male_first_name } =
this.faker.definitions.person;
- return selectDefinition(this.faker, sex, {
+ return selectDefinition(this.faker, this.faker.helpers.arrayElement, sex, {
generic: first_name,
female: female_first_name,
male: male_first_name,
@@ -110,14 +108,43 @@ export class PersonModule {
* @since 8.0.0
*/
lastName(sex?: SexType): string {
- const { last_name, female_last_name, male_last_name } =
- this.faker.definitions.person;
-
- return selectDefinition(this.faker, sex, {
- generic: last_name,
- female: female_last_name,
- male: male_last_name,
- });
+ const {
+ last_name,
+ female_last_name,
+ male_last_name,
+ last_name_patterns,
+ male_last_name_patterns,
+ female_last_name_patterns,
+ } = this.faker.definitions.person;
+
+ if (
+ last_name_patterns != null ||
+ male_last_name_patterns != null ||
+ female_last_name_patterns != null
+ ) {
+ const pattern = selectDefinition(
+ this.faker,
+ this.faker.helpers.weightedArrayElement,
+ sex,
+ {
+ generic: last_name_patterns,
+ female: female_last_name_patterns,
+ male: male_last_name_patterns,
+ }
+ );
+ return this.faker.helpers.fake(pattern);
+ } else {
+ return selectDefinition(
+ this.faker,
+ this.faker.helpers.arrayElement,
+ sex,
+ {
+ generic: last_name,
+ female: female_last_name,
+ male: male_last_name,
+ }
+ );
+ }
}
/**
@@ -137,7 +164,7 @@ export class PersonModule {
const { middle_name, female_middle_name, male_middle_name } =
this.faker.definitions.person;
- return selectDefinition(this.faker, sex, {
+ return selectDefinition(this.faker, this.faker.helpers.arrayElement, sex, {
generic: middle_name,
female: female_middle_name,
male: male_middle_name,
@@ -278,7 +305,7 @@ export class PersonModule {
const { prefix, female_prefix, male_prefix } =
this.faker.definitions.person;
- return selectDefinition(this.faker, sex, {
+ return selectDefinition(this.faker, this.faker.helpers.arrayElement, sex, {
generic: prefix,
female: female_prefix,
male: male_prefix,