@zero-server/orm 0.9.1 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/LICENSE +21 -21
  2. package/index.js +35 -35
  3. package/lib/debug.js +372 -0
  4. package/lib/orm/adapters/json.js +290 -0
  5. package/lib/orm/adapters/memory.js +764 -0
  6. package/lib/orm/adapters/mongo.js +764 -0
  7. package/lib/orm/adapters/mysql.js +933 -0
  8. package/lib/orm/adapters/postgres.js +1144 -0
  9. package/lib/orm/adapters/redis.js +1534 -0
  10. package/lib/orm/adapters/sql-base.js +212 -0
  11. package/lib/orm/adapters/sqlite.js +858 -0
  12. package/lib/orm/audit.js +649 -0
  13. package/lib/orm/cache.js +394 -0
  14. package/lib/orm/geo.js +387 -0
  15. package/lib/orm/index.js +784 -0
  16. package/lib/orm/migrate.js +432 -0
  17. package/lib/orm/model.js +1706 -0
  18. package/lib/orm/plugin.js +375 -0
  19. package/lib/orm/procedures.js +836 -0
  20. package/lib/orm/profiler.js +233 -0
  21. package/lib/orm/query.js +1772 -0
  22. package/lib/orm/replicas.js +241 -0
  23. package/lib/orm/schema.js +307 -0
  24. package/lib/orm/search.js +380 -0
  25. package/lib/orm/seed/data/commerce.js +136 -0
  26. package/lib/orm/seed/data/internet.js +111 -0
  27. package/lib/orm/seed/data/locations.js +204 -0
  28. package/lib/orm/seed/data/names.js +338 -0
  29. package/lib/orm/seed/data/person.js +128 -0
  30. package/lib/orm/seed/data/phone.js +211 -0
  31. package/lib/orm/seed/data/words.js +134 -0
  32. package/lib/orm/seed/factory.js +178 -0
  33. package/lib/orm/seed/fake.js +1186 -0
  34. package/lib/orm/seed/index.js +18 -0
  35. package/lib/orm/seed/rng.js +71 -0
  36. package/lib/orm/seed/seeder.js +125 -0
  37. package/lib/orm/seed/unique.js +68 -0
  38. package/lib/orm/snapshot.js +366 -0
  39. package/lib/orm/tenancy.js +605 -0
  40. package/lib/orm/views.js +350 -0
  41. package/package.json +11 -2
@@ -0,0 +1,204 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @module seed/data/locations
5
+ * @description Data pools for location-based fake data:
6
+ * cities, countries, US states, street parts, timezones, zip patterns.
7
+ */
8
+
9
+ /**
10
+ * Top-tier world cities with their country code.
11
+ * Used by Fake.city() and Fake.address().
12
+ */
13
+ const CITIES = [
14
+ { name: 'New York', country: 'US' }, { name: 'Los Angeles', country: 'US' },
15
+ { name: 'Chicago', country: 'US' }, { name: 'Houston', country: 'US' },
16
+ { name: 'Phoenix', country: 'US' }, { name: 'San Antonio', country: 'US' },
17
+ { name: 'San Diego', country: 'US' }, { name: 'Dallas', country: 'US' },
18
+ { name: 'San Francisco', country: 'US' }, { name: 'Seattle', country: 'US' },
19
+ { name: 'Boston', country: 'US' }, { name: 'Atlanta', country: 'US' },
20
+ { name: 'Denver', country: 'US' }, { name: 'Las Vegas', country: 'US' },
21
+ { name: 'Portland', country: 'US' }, { name: 'Nashville', country: 'US' },
22
+ { name: 'London', country: 'GB' }, { name: 'Manchester', country: 'GB' },
23
+ { name: 'Birmingham', country: 'GB' }, { name: 'Edinburgh', country: 'GB' },
24
+ { name: 'Paris', country: 'FR' }, { name: 'Lyon', country: 'FR' },
25
+ { name: 'Marseille', country: 'FR' }, { name: 'Berlin', country: 'DE' },
26
+ { name: 'Munich', country: 'DE' }, { name: 'Hamburg', country: 'DE' },
27
+ { name: 'Frankfurt', country: 'DE' }, { name: 'Rome', country: 'IT' },
28
+ { name: 'Milan', country: 'IT' }, { name: 'Naples', country: 'IT' },
29
+ { name: 'Madrid', country: 'ES' }, { name: 'Barcelona', country: 'ES' },
30
+ { name: 'Seville', country: 'ES' }, { name: 'Lisbon', country: 'PT' },
31
+ { name: 'Porto', country: 'PT' }, { name: 'São Paulo', country: 'BR' },
32
+ { name: 'Rio de Janeiro', country: 'BR' }, { name: 'Brasília', country: 'BR' },
33
+ { name: 'Mexico City', country: 'MX' }, { name: 'Guadalajara', country: 'MX' },
34
+ { name: 'Moscow', country: 'RU' }, { name: 'Saint Petersburg',country: 'RU' },
35
+ { name: 'Tokyo', country: 'JP' }, { name: 'Osaka', country: 'JP' },
36
+ { name: 'Kyoto', country: 'JP' }, { name: 'Beijing', country: 'CN' },
37
+ { name: 'Shanghai', country: 'CN' }, { name: 'Shenzhen', country: 'CN' },
38
+ { name: 'Seoul', country: 'KR' }, { name: 'Busan', country: 'KR' },
39
+ { name: 'Mumbai', country: 'IN' }, { name: 'Delhi', country: 'IN' },
40
+ { name: 'Bangalore', country: 'IN' }, { name: 'Dubai', country: 'AE' },
41
+ { name: 'Abu Dhabi', country: 'AE' }, { name: 'Cairo', country: 'EG' },
42
+ { name: 'Lagos', country: 'NG' }, { name: 'Nairobi', country: 'KE' },
43
+ { name: 'Johannesburg', country: 'ZA' }, { name: 'Cape Town', country: 'ZA' },
44
+ { name: 'Sydney', country: 'AU' }, { name: 'Melbourne', country: 'AU' },
45
+ { name: 'Brisbane', country: 'AU' }, { name: 'Toronto', country: 'CA' },
46
+ { name: 'Vancouver', country: 'CA' }, { name: 'Montreal', country: 'CA' },
47
+ { name: 'Amsterdam', country: 'NL' }, { name: 'Stockholm', country: 'SE' },
48
+ { name: 'Copenhagen', country: 'DK' }, { name: 'Oslo', country: 'NO' },
49
+ { name: 'Zurich', country: 'CH' }, { name: 'Geneva', country: 'CH' },
50
+ { name: 'Vienna', country: 'AT' }, { name: 'Warsaw', country: 'PL' },
51
+ { name: 'Prague', country: 'CZ' }, { name: 'Budapest', country: 'HU' },
52
+ { name: 'Singapore', country: 'SG' }, { name: 'Bangkok', country: 'TH' },
53
+ { name: 'Jakarta', country: 'ID' }, { name: 'Kuala Lumpur', country: 'MY' },
54
+ { name: 'Ho Chi Minh', country: 'VN' }, { name: 'Manila', country: 'PH' },
55
+ { name: 'Karachi', country: 'PK' }, { name: 'Lahore', country: 'PK' },
56
+ { name: 'Dhaka', country: 'BD' }, { name: 'Colombo', country: 'LK' },
57
+ { name: 'Santiago', country: 'CL' }, { name: 'Lima', country: 'PE' },
58
+ { name: 'Buenos Aires', country: 'AR' }, { name: 'Bogotá', country: 'CO' },
59
+ ];
60
+
61
+ /**
62
+ * Countries with ISO 3166-1 alpha-2 codes.
63
+ */
64
+ const COUNTRIES = [
65
+ { name: 'United States', code: 'US' }, { name: 'United Kingdom', code: 'GB' },
66
+ { name: 'Canada', code: 'CA' }, { name: 'Australia', code: 'AU' },
67
+ { name: 'Germany', code: 'DE' }, { name: 'France', code: 'FR' },
68
+ { name: 'Italy', code: 'IT' }, { name: 'Spain', code: 'ES' },
69
+ { name: 'Portugal', code: 'PT' }, { name: 'Netherlands', code: 'NL' },
70
+ { name: 'Sweden', code: 'SE' }, { name: 'Norway', code: 'NO' },
71
+ { name: 'Denmark', code: 'DK' }, { name: 'Finland', code: 'FI' },
72
+ { name: 'Switzerland', code: 'CH' }, { name: 'Austria', code: 'AT' },
73
+ { name: 'Belgium', code: 'BE' }, { name: 'Poland', code: 'PL' },
74
+ { name: 'Czech Republic', code: 'CZ' }, { name: 'Hungary', code: 'HU' },
75
+ { name: 'Russia', code: 'RU' }, { name: 'Japan', code: 'JP' },
76
+ { name: 'China', code: 'CN' }, { name: 'South Korea', code: 'KR' },
77
+ { name: 'India', code: 'IN' }, { name: 'Brazil', code: 'BR' },
78
+ { name: 'Mexico', code: 'MX' }, { name: 'Argentina', code: 'AR' },
79
+ { name: 'Chile', code: 'CL' }, { name: 'Colombia', code: 'CO' },
80
+ { name: 'Peru', code: 'PE' }, { name: 'South Africa', code: 'ZA' },
81
+ { name: 'Nigeria', code: 'NG' }, { name: 'Kenya', code: 'KE' },
82
+ { name: 'Egypt', code: 'EG' }, { name: 'UAE', code: 'AE' },
83
+ { name: 'Saudi Arabia', code: 'SA' }, { name: 'Israel', code: 'IL' },
84
+ { name: 'Turkey', code: 'TR' }, { name: 'Indonesia', code: 'ID' },
85
+ { name: 'Thailand', code: 'TH' }, { name: 'Vietnam', code: 'VN' },
86
+ { name: 'Malaysia', code: 'MY' }, { name: 'Singapore', code: 'SG' },
87
+ { name: 'Philippines', code: 'PH' }, { name: 'Pakistan', code: 'PK' },
88
+ { name: 'Bangladesh', code: 'BD' }, { name: 'New Zealand', code: 'NZ' },
89
+ { name: 'Greece', code: 'GR' }, { name: 'Romania', code: 'RO' },
90
+ ];
91
+
92
+ /** US States with 2-letter USPS abbreviations. */
93
+ const US_STATES = [
94
+ { name: 'Alabama', abbr: 'AL' }, { name: 'Alaska', abbr: 'AK' },
95
+ { name: 'Arizona', abbr: 'AZ' }, { name: 'Arkansas', abbr: 'AR' },
96
+ { name: 'California', abbr: 'CA' }, { name: 'Colorado', abbr: 'CO' },
97
+ { name: 'Connecticut', abbr: 'CT' }, { name: 'Delaware', abbr: 'DE' },
98
+ { name: 'Florida', abbr: 'FL' }, { name: 'Georgia', abbr: 'GA' },
99
+ { name: 'Hawaii', abbr: 'HI' }, { name: 'Idaho', abbr: 'ID' },
100
+ { name: 'Illinois', abbr: 'IL' }, { name: 'Indiana', abbr: 'IN' },
101
+ { name: 'Iowa', abbr: 'IA' }, { name: 'Kansas', abbr: 'KS' },
102
+ { name: 'Kentucky', abbr: 'KY' }, { name: 'Louisiana', abbr: 'LA' },
103
+ { name: 'Maine', abbr: 'ME' }, { name: 'Maryland', abbr: 'MD' },
104
+ { name: 'Massachusetts', abbr: 'MA' }, { name: 'Michigan', abbr: 'MI' },
105
+ { name: 'Minnesota', abbr: 'MN' }, { name: 'Mississippi', abbr: 'MS' },
106
+ { name: 'Missouri', abbr: 'MO' }, { name: 'Montana', abbr: 'MT' },
107
+ { name: 'Nebraska', abbr: 'NE' }, { name: 'Nevada', abbr: 'NV' },
108
+ { name: 'New Hampshire', abbr: 'NH' }, { name: 'New Jersey', abbr: 'NJ' },
109
+ { name: 'New Mexico', abbr: 'NM' }, { name: 'New York', abbr: 'NY' },
110
+ { name: 'North Carolina', abbr: 'NC' }, { name: 'North Dakota', abbr: 'ND' },
111
+ { name: 'Ohio', abbr: 'OH' }, { name: 'Oklahoma', abbr: 'OK' },
112
+ { name: 'Oregon', abbr: 'OR' }, { name: 'Pennsylvania', abbr: 'PA' },
113
+ { name: 'Rhode Island', abbr: 'RI' }, { name: 'South Carolina', abbr: 'SC' },
114
+ { name: 'South Dakota', abbr: 'SD' }, { name: 'Tennessee', abbr: 'TN' },
115
+ { name: 'Texas', abbr: 'TX' }, { name: 'Utah', abbr: 'UT' },
116
+ { name: 'Vermont', abbr: 'VT' }, { name: 'Virginia', abbr: 'VA' },
117
+ { name: 'Washington', abbr: 'WA' }, { name: 'West Virginia', abbr: 'WV' },
118
+ { name: 'Wisconsin', abbr: 'WI' }, { name: 'Wyoming', abbr: 'WY' },
119
+ ];
120
+
121
+ /** Street type suffixes. */
122
+ const STREET_TYPES = [
123
+ 'Street', 'Avenue', 'Boulevard', 'Drive', 'Lane', 'Road', 'Court',
124
+ 'Place', 'Way', 'Circle', 'Trail', 'Highway', 'Parkway', 'Terrace',
125
+ 'Path', 'Ridge', 'Creek', 'Bridge', 'Meadows', 'Heights',
126
+ ];
127
+
128
+ /** Street name words (first part of a street name). */
129
+ const STREET_NAMES = [
130
+ 'Oak', 'Maple', 'Cedar', 'Pine', 'Elm', 'Walnut', 'Cherry', 'Birch',
131
+ 'Willow', 'Aspen', 'Magnolia', 'Chestnut', 'Sycamore', 'Cypress', 'Poplar',
132
+ 'Washington', 'Lincoln', 'Jefferson', 'Madison', 'Adams', 'Roosevelt',
133
+ 'Kennedy', 'Franklin', 'Hamilton', 'Jackson', 'Grant', 'Harrison',
134
+ 'Park', 'Hill', 'Lake', 'River', 'Meadow', 'Forest', 'Valley', 'Highland',
135
+ 'Sunrise', 'Sunset', 'Spring', 'Summer', 'Winter', 'Autumn',
136
+ 'Church', 'School', 'Mill', 'Bridge', 'Market', 'Garden', 'Union',
137
+ 'Cardinal', 'Eagle', 'Hawk', 'Falcon', 'Robin', 'Blue Jay', 'Sparrow',
138
+ ];
139
+
140
+ /**
141
+ * Postal / ZIP code format patterns per country code.
142
+ * # → random digit 0–9
143
+ * A → random uppercase letter
144
+ */
145
+ const ZIP_PATTERNS = {
146
+ 'US': '#####',
147
+ 'CA': 'A#A #A#',
148
+ 'GB': 'AA## #AA',
149
+ 'DE': '#####',
150
+ 'FR': '#####',
151
+ 'IT': '#####',
152
+ 'ES': '#####',
153
+ 'PT': '####-###',
154
+ 'BR': '#####-###',
155
+ 'MX': '#####',
156
+ 'NL': '#### AA',
157
+ 'SE': '### ##',
158
+ 'NO': '####',
159
+ 'DK': '####',
160
+ 'FI': '#####',
161
+ 'CH': '####',
162
+ 'AT': '####',
163
+ 'BE': '####',
164
+ 'AU': '####',
165
+ 'NZ': '####',
166
+ 'JP': '###-####',
167
+ 'CN': '######',
168
+ 'KR': '#####',
169
+ 'IN': '######',
170
+ 'RU': '######',
171
+ 'ZA': '####',
172
+ 'NG': '######',
173
+ };
174
+
175
+ /** Common IANA timezone identifiers. */
176
+ const TIMEZONES = [
177
+ 'America/New_York', 'America/Chicago', 'America/Denver',
178
+ 'America/Los_Angeles', 'America/Toronto', 'America/Vancouver',
179
+ 'America/Sao_Paulo', 'America/Mexico_City', 'America/Buenos_Aires',
180
+ 'America/Santiago', 'America/Bogota', 'America/Lima',
181
+ 'Europe/London', 'Europe/Paris', 'Europe/Berlin',
182
+ 'Europe/Rome', 'Europe/Madrid', 'Europe/Amsterdam',
183
+ 'Europe/Stockholm', 'Europe/Moscow', 'Europe/Warsaw',
184
+ 'Europe/Istanbul', 'Europe/Athens', 'Europe/Lisbon',
185
+ 'Africa/Cairo', 'Africa/Johannesburg', 'Africa/Lagos',
186
+ 'Africa/Nairobi', 'Asia/Dubai', 'Asia/Kolkata',
187
+ 'Asia/Kolkata', 'Asia/Karachi', 'Asia/Dhaka',
188
+ 'Asia/Bangkok', 'Asia/Jakarta', 'Asia/Singapore',
189
+ 'Asia/Kuala_Lumpur', 'Asia/Manila', 'Asia/Shanghai',
190
+ 'Asia/Tokyo', 'Asia/Seoul', 'Asia/Hong_Kong',
191
+ 'Asia/Taipei', 'Asia/Riyadh', 'Asia/Tehran',
192
+ 'Australia/Sydney', 'Australia/Melbourne', 'Australia/Perth',
193
+ 'Pacific/Auckland', 'Pacific/Auckland', 'Pacific/Honolulu',
194
+ ];
195
+
196
+ module.exports = {
197
+ CITIES,
198
+ COUNTRIES,
199
+ US_STATES,
200
+ STREET_TYPES,
201
+ STREET_NAMES,
202
+ ZIP_PATTERNS,
203
+ TIMEZONES,
204
+ };
@@ -0,0 +1,338 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @module seed/data/names
5
+ * @description Multi-locale name pools for fake person name generation.
6
+ * Supports 14 locales with separate male, female, and last-name arrays.
7
+ *
8
+ * Supported locale codes:
9
+ * en English (US / UK) es Spanish
10
+ * fr French de German
11
+ * it Italian pt Portuguese / Brazilian
12
+ * ru Russian (romanized) ja Japanese (romanized)
13
+ * zh Chinese Mandarin (Pinyin) ar Arabic (romanized)
14
+ * hi Hindi (romanized) ko Korean (romanized)
15
+ * nl Dutch sv Swedish / Nordic
16
+ */
17
+
18
+ const NAMES = {
19
+
20
+ // -- English -------------------------------------------------------------
21
+ en: {
22
+ male: [
23
+ 'James', 'John', 'Robert', 'Michael', 'William', 'David', 'Richard',
24
+ 'Joseph', 'Thomas', 'Charles', 'Daniel', 'Matthew', 'Anthony', 'Mark',
25
+ 'Donald', 'Steven', 'Kevin', 'Brian', 'George', 'Edward', 'Ronald',
26
+ 'Timothy', 'Kenneth', 'Jacob', 'Ryan', 'Eric', 'Nicholas', 'Jonathan',
27
+ 'Joshua', 'Andrew', 'Patrick', 'Justin', 'Brandon', 'Samuel', 'Nathan',
28
+ 'Christian', 'Dylan', 'Henry', 'Tyler', 'Ethan', 'Austin', 'Gabriel',
29
+ ],
30
+ female: [
31
+ 'Mary', 'Patricia', 'Jennifer', 'Linda', 'Barbara', 'Margaret', 'Elizabeth',
32
+ 'Susan', 'Dorothy', 'Lisa', 'Nancy', 'Karen', 'Betty', 'Helen', 'Sandra',
33
+ 'Donna', 'Carol', 'Ruth', 'Sharon', 'Michelle', 'Laura', 'Sarah', 'Kimberly',
34
+ 'Deborah', 'Jessica', 'Shirley', 'Cynthia', 'Angela', 'Melissa', 'Ashley',
35
+ 'Amanda', 'Stephanie', 'Rebecca', 'Megan', 'Rachel', 'Emily', 'Samantha',
36
+ 'Katherine', 'Christina', 'Emma', 'Olivia', 'Sophia', 'Ava', 'Isabella',
37
+ ],
38
+ last: [
39
+ 'Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller',
40
+ 'Davis', 'Rodriguez', 'Martinez', 'Hernandez', 'Lopez', 'Gonzalez',
41
+ 'Wilson', 'Anderson', 'Thomas', 'Taylor', 'Moore', 'Jackson', 'Martin',
42
+ 'Lee', 'Perez', 'Thompson', 'White', 'Harris', 'Sanchez', 'Clark',
43
+ 'Ramirez', 'Lewis', 'Robinson', 'Walker', 'Young', 'Allen', 'King',
44
+ 'Wright', 'Scott', 'Torres', 'Nguyen', 'Hill', 'Flores', 'Green', 'Adams',
45
+ ],
46
+ },
47
+
48
+ // -- Spanish -------------------------------------------------------------
49
+ es: {
50
+ male: [
51
+ 'Alejandro', 'Carlos', 'Miguel', 'Juan', 'José', 'Luis', 'Antonio',
52
+ 'Fernando', 'Eduardo', 'Roberto', 'Francisco', 'Diego', 'Andrés',
53
+ 'Sergio', 'Joaquín', 'Rodrigo', 'Javier', 'Rafael', 'Álvaro', 'Pablo',
54
+ 'Marcos', 'Héctor', 'Raúl', 'Ignacio', 'Sebastián', 'Tomás', 'Daniel',
55
+ 'Martín', 'Benjamín', 'Emilio', 'Adrián', 'Felipe', 'Óscar', 'Iván',
56
+ ],
57
+ female: [
58
+ 'María', 'Ana', 'Carmen', 'Isabel', 'Sofía', 'Valentina', 'Lucía',
59
+ 'Adriana', 'Elena', 'Gabriela', 'Patricia', 'Rosa', 'Fernanda', 'Andrea',
60
+ 'Cristina', 'Laura', 'Victoria', 'Alejandra', 'Paula', 'Natalia',
61
+ 'Daniela', 'Pilar', 'Mercedes', 'Beatriz', 'Guadalupe', 'Mónica',
62
+ 'Estrella', 'Raquel', 'Inés', 'Esperanza', 'Gloria', 'Marta', 'Silvia',
63
+ ],
64
+ last: [
65
+ 'García', 'Martínez', 'López', 'González', 'Sánchez', 'Rodríguez',
66
+ 'Pérez', 'Fernández', 'Torres', 'Ramírez', 'Flores', 'Cruz', 'Moreno',
67
+ 'Ortiz', 'Reyes', 'Herrera', 'Medina', 'Aguilar', 'Castro', 'Jiménez',
68
+ 'Vargas', 'Morales', 'Romero', 'Álvarez', 'Domínguez', 'Fuentes',
69
+ 'Mendoza', 'Rojas', 'Gutiérrez', 'Navarro', 'Díaz', 'Ruiz',
70
+ ],
71
+ },
72
+
73
+ // -- French --------------------------------------------------------------
74
+ fr: {
75
+ male: [
76
+ 'Pierre', 'Jean', 'Michel', 'André', 'Louis', 'Philippe', 'Thomas',
77
+ 'Nicolas', 'Julien', 'Raphaël', 'Antoine', 'François', 'Henri',
78
+ 'Édouard', 'Sébastien', 'Vincent', 'Benoît', 'Guillaume', 'Stéphane',
79
+ 'Grégoire', 'Xavier', 'Clément', 'Yves', 'Luc', 'Christophe',
80
+ 'Maxime', 'Théo', 'Hugo', 'Mathieu', 'Baptiste',
81
+ ],
82
+ female: [
83
+ 'Marie', 'Hélène', 'Jeanne', 'Françoise', 'Nathalie', 'Isabelle',
84
+ 'Sophie', 'Camille', 'Lucie', 'Émilie', 'Anne', 'Claire', 'Amélie',
85
+ 'Chloé', 'Mathilde', 'Léa', 'Julie', 'Alice', 'Margot', 'Élise',
86
+ 'Anaïs', 'Charlotte', 'Pauline', 'Adèle', 'Justine', 'Manon',
87
+ 'Inès', 'Zoé', 'Valentine', 'Céline',
88
+ ],
89
+ last: [
90
+ 'Martin', 'Bernard', 'Thomas', 'Petit', 'Robert', 'Richard', 'Durand',
91
+ 'Dupont', 'Moreau', 'Simon', 'Laurent', 'Lefebvre', 'Michel', 'David',
92
+ 'Bertrand', 'Roux', 'Vincent', 'Fournier', 'Morel', 'Girard', 'André',
93
+ 'Lefèvre', 'Mercier', 'Dupuis', 'Lambert', 'Bonnet', 'François',
94
+ 'Martinez', 'Legrand', 'Garnier',
95
+ ],
96
+ },
97
+
98
+ // -- German --------------------------------------------------------------
99
+ de: {
100
+ male: [
101
+ 'Hans', 'Klaus', 'Wolfgang', 'Karl', 'Friedrich', 'Werner', 'Walter',
102
+ 'Dieter', 'Gerhard', 'Jürgen', 'Martin', 'Stefan', 'Thomas', 'Andreas',
103
+ 'Markus', 'Michael', 'Peter', 'Christian', 'Tobias', 'Sebastian',
104
+ 'Florian', 'Jan', 'Felix', 'Lukas', 'Jonas', 'Luca', 'Leon', 'Noah',
105
+ 'Paul', 'Elias', 'Ben', 'Finn', 'Moritz', 'Philipp',
106
+ ],
107
+ female: [
108
+ 'Ursula', 'Ingrid', 'Anna', 'Maria', 'Elisabeth', 'Heike', 'Monika',
109
+ 'Claudia', 'Petra', 'Andrea', 'Sabine', 'Christine', 'Sandra', 'Katharina',
110
+ 'Julia', 'Lisa', 'Nina', 'Lena', 'Sarah', 'Leonie', 'Emma', 'Sophie',
111
+ 'Johanna', 'Laura', 'Hannah', 'Mia', 'Clara', 'Marie', 'Lea', 'Amelie',
112
+ ],
113
+ last: [
114
+ 'Müller', 'Schmidt', 'Schneider', 'Fischer', 'Weber', 'Meyer', 'Wagner',
115
+ 'Becker', 'Schulz', 'Hoffmann', 'Schäfer', 'Koch', 'Bauer', 'Richter',
116
+ 'Klein', 'Wolf', 'Schröder', 'Neumann', 'Schwarz', 'Zimmermann',
117
+ 'Braun', 'Krüger', 'Hartmann', 'Lange', 'Schmitt', 'Werner', 'Krause',
118
+ 'Lehmann', 'Walter', 'König', 'Huber',
119
+ ],
120
+ },
121
+
122
+ // -- Italian -------------------------------------------------------------
123
+ it: {
124
+ male: [
125
+ 'Marco', 'Andrea', 'Luca', 'Giovanni', 'Francesco', 'Antonio', 'Mario',
126
+ 'Giuseppe', 'Alessandro', 'Lorenzo', 'Federico', 'Stefano', 'Matteo',
127
+ 'Paolo', 'Roberto', 'Giorgio', 'Alberto', 'Claudio', 'Riccardo', 'Davide',
128
+ 'Simone', 'Giacomo', 'Filippo', 'Nicola', 'Emanuele', 'Leonardo',
129
+ ],
130
+ female: [
131
+ 'Giulia', 'Sofia', 'Martina', 'Francesca', 'Sara', 'Alessia', 'Laura',
132
+ 'Anna', 'Chiara', 'Elena', 'Valentina', 'Federica', 'Marta', 'Elisa',
133
+ 'Camilla', 'Paola', 'Cristina', 'Silvia', 'Roberta', 'Serena',
134
+ 'Beatrice', 'Irene', 'Alessandra', 'Viviana', 'Arianna',
135
+ ],
136
+ last: [
137
+ 'Rossi', 'Russo', 'Ferrari', 'Esposito', 'Bianchi', 'Romano', 'Colombo',
138
+ 'Ricci', 'Marino', 'Greco', 'Bruno', 'Gallo', 'Conti', 'De Luca',
139
+ 'Costa', 'Giordano', 'Mancini', 'Rizzo', 'Lombardi', 'Moretti',
140
+ 'Barbieri', 'Fontana', 'Santoro', 'Marini', 'Fabbri',
141
+ ],
142
+ },
143
+
144
+ // -- Portuguese / Brazilian -----------------------------------------------
145
+ pt: {
146
+ male: [
147
+ 'João', 'Pedro', 'Paulo', 'Ricardo', 'Eduardo', 'Felipe', 'Gustavo',
148
+ 'André', 'Diego', 'Mateus', 'Rodrigo', 'Carlos', 'Thiago', 'Lucas',
149
+ 'Gabriel', 'Rafael', 'Henrique', 'Bruno', 'Alexandre', 'Igor',
150
+ 'Vitor', 'Renato', 'Otávio', 'Leandro', 'Sérgio',
151
+ ],
152
+ female: [
153
+ 'Ana', 'Maria', 'Fernanda', 'Juliana', 'Amanda', 'Camila', 'Patrícia',
154
+ 'Beatriz', 'Larissa', 'Gabriela', 'Renata', 'Isabela', 'Carolina',
155
+ 'Natália', 'Letícia', 'Viviane', 'Márcia', 'Adriana', 'Priscila', 'Aline',
156
+ 'Bruna', 'Daniela', 'Vanessa', 'Tatiana', 'Cristiane',
157
+ ],
158
+ last: [
159
+ 'Silva', 'Santos', 'Oliveira', 'Souza', 'Rodrigues', 'Ferreira', 'Alves',
160
+ 'Pereira', 'Lima', 'Gomes', 'Costa', 'Ribeiro', 'Martins', 'Carvalho',
161
+ 'Almeida', 'Lopes', 'Nunes', 'Freitas', 'Araujo', 'Correia',
162
+ 'Cardoso', 'Mendes', 'Pinto', 'Teixeira', 'Nascimento',
163
+ ],
164
+ },
165
+
166
+ // -- Russian (romanized) --------------------------------------------------
167
+ ru: {
168
+ male: [
169
+ 'Alexander', 'Dmitry', 'Ivan', 'Maxim', 'Sergei', 'Andrei', 'Vladimir',
170
+ 'Nikolai', 'Pavel', 'Alexei', 'Mikhail', 'Vasily', 'Yuri', 'Boris',
171
+ 'Oleg', 'Viktor', 'Konstantin', 'Roman', 'Artem', 'Igor',
172
+ 'Evgeny', 'Fyodor', 'Leonid', 'Stanislav', 'Timur',
173
+ ],
174
+ female: [
175
+ 'Anna', 'Elena', 'Maria', 'Natalia', 'Olga', 'Tatiana', 'Irina',
176
+ 'Svetlana', 'Yulia', 'Ekaterina', 'Anastasia', 'Oksana', 'Vera',
177
+ 'Nina', 'Galina', 'Larisa', 'Valentina', 'Lyudmila', 'Sofia', 'Alina',
178
+ 'Ksenia', 'Daria', 'Polina', 'Vika', 'Margarita',
179
+ ],
180
+ last: [
181
+ 'Ivanov', 'Smirnov', 'Kuznetsov', 'Popov', 'Vasiliev', 'Petrov',
182
+ 'Sokolov', 'Mikhailov', 'Novikov', 'Fedorov', 'Morozov', 'Volkov',
183
+ 'Alexeyev', 'Lebedev', 'Semyonov', 'Egorov', 'Pavlov', 'Kozlov',
184
+ 'Stepanov', 'Nikolaev', 'Orlov', 'Andreev', 'Makarov', 'Nikitin',
185
+ ],
186
+ },
187
+
188
+ // -- Japanese (romanized) -------------------------------------------------
189
+ ja: {
190
+ male: [
191
+ 'Haruto', 'Sota', 'Yuki', 'Ren', 'Kaito', 'Takumi', 'Kento', 'Ryu',
192
+ 'Shota', 'Hayato', 'Yamato', 'Daiki', 'Kenji', 'Hiroshi', 'Takeshi',
193
+ 'Masaki', 'Naoki', 'Ryota', 'Shunsuke', 'Yusuke', 'Kohei', 'Taichi',
194
+ 'Akira', 'Kazuki', 'Tsubasa',
195
+ ],
196
+ female: [
197
+ 'Yui', 'Aoi', 'Hina', 'Misaki', 'Koharu', 'Sakura', 'Nana', 'Rina',
198
+ 'Yuka', 'Miyu', 'Akane', 'Haruka', 'Mei', 'Riko', 'Saki', 'Momoko',
199
+ 'Ayane', 'Kanon', 'Moe', 'Sora', 'Hikari', 'Nozomi', 'Nanami',
200
+ 'Asuka', 'Kana',
201
+ ],
202
+ last: [
203
+ 'Sato', 'Suzuki', 'Takahashi', 'Tanaka', 'Watanabe', 'Ito', 'Yamamoto',
204
+ 'Nakamura', 'Kobayashi', 'Kato', 'Yoshida', 'Yamada', 'Sasaki',
205
+ 'Yamaguchi', 'Matsumoto', 'Inoue', 'Kimura', 'Hayashi', 'Shimizu',
206
+ 'Yamazaki', 'Mori', 'Abe', 'Ikeda', 'Hashimoto',
207
+ ],
208
+ },
209
+
210
+ // -- Chinese Mandarin (Pinyin) ---------------------------------------------
211
+ zh: {
212
+ male: [
213
+ 'Wei', 'Hao', 'Ming', 'Lei', 'Jian', 'Tao', 'Feng', 'Long', 'Kai',
214
+ 'Bo', 'Kun', 'Yu', 'Gang', 'Cheng', 'Bin', 'Jie', 'Liang', 'Peng',
215
+ 'Dong', 'Zhe', 'Qi', 'Heng', 'Xuan', 'Rui', 'Chen',
216
+ ],
217
+ female: [
218
+ 'Yan', 'Xiu', 'Mei', 'Jun', 'Ling', 'Hua', 'Juan', 'Xiao', 'Jing',
219
+ 'Lin', 'Ping', 'Lan', 'Dan', 'Yi', 'Qing', 'Lu', 'Yun', 'Hong',
220
+ 'Fei', 'Rong', 'Xia', 'Zhen', 'Yue', 'Shan', 'Ying',
221
+ ],
222
+ last: [
223
+ 'Wang', 'Li', 'Zhang', 'Liu', 'Chen', 'Yang', 'Huang', 'Wu', 'Zhao',
224
+ 'Zhou', 'Xu', 'Sun', 'Ma', 'Zhu', 'Hu', 'Guo', 'He', 'Lin', 'Gao',
225
+ 'Luo', 'Zheng', 'Liang', 'Xie', 'Tang', 'Han',
226
+ ],
227
+ },
228
+
229
+ // -- Arabic (romanized) ---------------------------------------------------
230
+ ar: {
231
+ male: [
232
+ 'Mohammed', 'Ahmed', 'Ali', 'Omar', 'Khalid', 'Ibrahim', 'Yusuf',
233
+ 'Hamza', 'Hassan', 'Tariq', 'Karim', 'Samir', 'Nabil', 'Faris',
234
+ 'Zaid', 'Sami', 'Rami', 'Walid', 'Adel', 'Bilal', 'Amir', 'Nasser',
235
+ 'Riyadh', 'Tarek', 'Mostafa',
236
+ ],
237
+ female: [
238
+ 'Fatima', 'Aisha', 'Sara', 'Nour', 'Layla', 'Mariam', 'Zainab',
239
+ 'Hana', 'Rania', 'Dina', 'Yasmin', 'Amira', 'Salma', 'Lina', 'Alya',
240
+ 'Nadia', 'Rima', 'Rana', 'Samira', 'Nada', 'Heba', 'Mona', 'Suha',
241
+ 'Randa', 'Ghada',
242
+ ],
243
+ last: [
244
+ 'Al-Masri', 'Al-Rashid', 'Mansour', 'Nasser', 'Khalil', 'Hamdan',
245
+ 'Qasim', 'Saleh', 'Abboud', 'Barakat', 'Haddad', 'Khoury', 'Nassar',
246
+ 'Awad', 'Saad', 'Jabir', 'Othman', 'Aziz', 'Amin', 'Hassan',
247
+ 'Ibrahim', 'Omar', 'Abdullah', 'Yousef',
248
+ ],
249
+ },
250
+
251
+ // -- Hindi (romanized) ----------------------------------------------------
252
+ hi: {
253
+ male: [
254
+ 'Rahul', 'Amit', 'Vijay', 'Rajesh', 'Suresh', 'Ankit', 'Mohit',
255
+ 'Aditya', 'Vishal', 'Sandeep', 'Rohit', 'Gaurav', 'Deepak', 'Sanjay',
256
+ 'Ravi', 'Ashish', 'Manish', 'Nikhil', 'Abhinav', 'Kartik', 'Arjun',
257
+ 'Dhruv', 'Varun', 'Karan', 'Pranav',
258
+ ],
259
+ female: [
260
+ 'Priya', 'Pooja', 'Neha', 'Asha', 'Kavita', 'Sunita', 'Rekha',
261
+ 'Anita', 'Sanjana', 'Meena', 'Shreya', 'Divya', 'Jyoti', 'Preeti',
262
+ 'Sonia', 'Ritu', 'Shilpa', 'Radha', 'Meera', 'Nisha', 'Anjali',
263
+ 'Tanvi', 'Swati', 'Deepa', 'Puja',
264
+ ],
265
+ last: [
266
+ 'Sharma', 'Patel', 'Verma', 'Gupta', 'Singh', 'Kumar', 'Mehta',
267
+ 'Joshi', 'Rao', 'Malhotra', 'Chopra', 'Nair', 'Yadav', 'Pandey',
268
+ 'Agarwal', 'Kapoor', 'Shukla', 'Srivastava', 'Dubey', 'Mishra',
269
+ 'Shah', 'Bose', 'Chatterjee', 'Mukherjee',
270
+ ],
271
+ },
272
+
273
+ // -- Korean (romanized) ---------------------------------------------------
274
+ ko: {
275
+ male: [
276
+ 'Min-jun', 'Seo-jun', 'Do-yoon', 'Ji-ho', 'Jun-seo', 'Ye-jun',
277
+ 'Joon-woo', 'Hyun-woo', 'Min-hyuk', 'Jae-won', 'Sung-jin', 'Tae-yang',
278
+ 'Jin-ho', 'Ji-woo', 'Seung-hyun', 'Young-soo', 'Ki-tae', 'Dong-hyun',
279
+ 'Sung-min', 'Hyeon-jun', 'Woo-jin', 'Chan-woo', 'Jae-hyun', 'Hyun-jin',
280
+ ],
281
+ female: [
282
+ 'Seo-yeon', 'Min-seo', 'Ha-eun', 'Ji-woo', 'Soo-yeon', 'Na-yeon',
283
+ 'Hye-won', 'Eun-ji', 'So-hyun', 'Ji-yeon', 'Yoo-jin', 'Chae-won',
284
+ 'Min-ji', 'Ji-min', 'Soo-bin', 'Yun-ah', 'Da-eun', 'Hana', 'Ji-hye',
285
+ 'Bo-ra', 'Seul-gi', 'Ye-jin', 'Ha-ru', 'Na-eun',
286
+ ],
287
+ last: [
288
+ 'Kim', 'Lee', 'Park', 'Choi', 'Jung', 'Kang', 'Cho', 'Yoon', 'Chang',
289
+ 'Lim', 'Han', 'Oh', 'Seo', 'Shin', 'Kwon', 'Hwang', 'Ahn', 'Song',
290
+ 'Yoo', 'Hong', 'Jeon', 'Ko', 'Moon', 'Yang',
291
+ ],
292
+ },
293
+
294
+ // -- Dutch ----------------------------------------------------------------
295
+ nl: {
296
+ male: [
297
+ 'Jan', 'Pieter', 'Hendrik', 'Willem', 'Johan', 'Dirk', 'Gerrit',
298
+ 'Bas', 'Sander', 'Ruben', 'Lars', 'Tim', 'Niels', 'Joost', 'Bram',
299
+ 'Thomas', 'Luca', 'Noah', 'Milan', 'Jesse', 'Daan', 'Finn', 'Tijs',
300
+ ],
301
+ female: [
302
+ 'Anna', 'Maria', 'Emma', 'Sophie', 'Julia', 'Lotte', 'Sara', 'Lisa',
303
+ 'Marieke', 'Inge', 'Femke', 'Noor', 'Fleur', 'Manon', 'Roos',
304
+ 'Iris', 'Sanne', 'Kim', 'Amber', 'Hannah', 'Ella', 'Fien',
305
+ ],
306
+ last: [
307
+ 'De Jong', 'Jansen', 'De Vries', 'Van den Berg', 'Van Dijk', 'Bakker',
308
+ 'Janssen', 'Visser', 'Smit', 'Meijer', 'De Boer', 'Mulder', 'Bos',
309
+ 'Vos', 'Peters', 'Hendriks', 'Van Leeuwen', 'Dekker', 'Brouwer',
310
+ 'De Wit', 'Dijkstra', 'Smits', 'Vermeulen',
311
+ ],
312
+ },
313
+
314
+ // -- Swedish / Nordic -----------------------------------------------------
315
+ sv: {
316
+ male: [
317
+ 'Lars', 'Björn', 'Erik', 'Karl', 'Henrik', 'Anders', 'Sven', 'Johan',
318
+ 'Magnus', 'Mikael', 'Jonas', 'Peter', 'Nils', 'Olof', 'Gunnar',
319
+ 'Viktor', 'Axel', 'Liam', 'Elias', 'Isak', 'Oliver', 'Lucas', 'Hugo',
320
+ ],
321
+ female: [
322
+ 'Anna', 'Maria', 'Karin', 'Kristina', 'Ingrid', 'Eva', 'Sara', 'Emma',
323
+ 'Lena', 'Ulrika', 'Malin', 'Sofia', 'Maja', 'Alice', 'Julia', 'Elin',
324
+ 'Amanda', 'Ida', 'Johanna', 'Hanna', 'Alva', 'Filippa', 'Saga',
325
+ ],
326
+ last: [
327
+ 'Andersson', 'Johansson', 'Karlsson', 'Nilsson', 'Eriksson', 'Larsson',
328
+ 'Olsson', 'Persson', 'Svensson', 'Gustafsson', 'Pettersson', 'Jonsson',
329
+ 'Jansson', 'Hansson', 'Bengtsson', 'Lindqvist', 'Magnusson', 'Lindgren',
330
+ 'Jensen', 'Hansen', 'Andersen', 'Pedersen', 'Berg',
331
+ ],
332
+ },
333
+ };
334
+
335
+ /** All supported locale codes. */
336
+ const LOCALES = Object.keys(NAMES);
337
+
338
+ module.exports = { NAMES, LOCALES };