@elfedali/moroccan-data 1.0.0
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.
- package/README.md +144 -0
- package/dist/index.cjs +612 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +104 -0
- package/dist/index.d.ts +104 -0
- package/dist/index.js +583 -0
- package/dist/index.js.map +1 -0
- package/package.json +39 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,612 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
MoroccanFaker: () => MoroccanFaker,
|
|
24
|
+
createMoroccanFaker: () => createMoroccanFaker,
|
|
25
|
+
morocco: () => morocco
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(index_exports);
|
|
28
|
+
|
|
29
|
+
// src/data.ts
|
|
30
|
+
var firstNamesMale = [
|
|
31
|
+
"Mohamed",
|
|
32
|
+
"Ahmed",
|
|
33
|
+
"Youssef",
|
|
34
|
+
"Omar",
|
|
35
|
+
"Hassan",
|
|
36
|
+
"Hamza",
|
|
37
|
+
"Mehdi",
|
|
38
|
+
"Rachid",
|
|
39
|
+
"Khalid",
|
|
40
|
+
"Adil",
|
|
41
|
+
"Said",
|
|
42
|
+
"Abdelkader",
|
|
43
|
+
"Mustapha",
|
|
44
|
+
"Ayoub",
|
|
45
|
+
"Anas",
|
|
46
|
+
"Karim",
|
|
47
|
+
"Nabil",
|
|
48
|
+
"Ilyas",
|
|
49
|
+
"Zakaria",
|
|
50
|
+
"Badr",
|
|
51
|
+
"Abdellah",
|
|
52
|
+
"Abderrahmane",
|
|
53
|
+
"Abdelaziz",
|
|
54
|
+
"Aziz",
|
|
55
|
+
"Brahim",
|
|
56
|
+
"Ismail",
|
|
57
|
+
"Hicham",
|
|
58
|
+
"Amine",
|
|
59
|
+
"Soufiane",
|
|
60
|
+
"Othmane",
|
|
61
|
+
"Noureddine",
|
|
62
|
+
"Driss",
|
|
63
|
+
"Jamal",
|
|
64
|
+
"Lahcen",
|
|
65
|
+
"Yassine",
|
|
66
|
+
"Tarik",
|
|
67
|
+
"Walid",
|
|
68
|
+
"Reda",
|
|
69
|
+
"Mounir",
|
|
70
|
+
"Abdelilah",
|
|
71
|
+
"Abdelmjid",
|
|
72
|
+
"Abdelghani",
|
|
73
|
+
"Ayman",
|
|
74
|
+
"Bilal",
|
|
75
|
+
"Rayan",
|
|
76
|
+
"Samir",
|
|
77
|
+
"Sami",
|
|
78
|
+
"Fouad",
|
|
79
|
+
"Nizar",
|
|
80
|
+
"Yahya",
|
|
81
|
+
"Imad",
|
|
82
|
+
"Younes",
|
|
83
|
+
"Houssam",
|
|
84
|
+
"Chafik",
|
|
85
|
+
"Mourad",
|
|
86
|
+
"Halim"
|
|
87
|
+
];
|
|
88
|
+
var firstNamesFemale = [
|
|
89
|
+
"Fatima",
|
|
90
|
+
"Aicha",
|
|
91
|
+
"Khadija",
|
|
92
|
+
"Zineb",
|
|
93
|
+
"Sara",
|
|
94
|
+
"Salma",
|
|
95
|
+
"Imane",
|
|
96
|
+
"Nour",
|
|
97
|
+
"Meryem",
|
|
98
|
+
"Hajar",
|
|
99
|
+
"Rania",
|
|
100
|
+
"Asma",
|
|
101
|
+
"Nadia",
|
|
102
|
+
"Samira",
|
|
103
|
+
"Soukaina",
|
|
104
|
+
"Hanane",
|
|
105
|
+
"Wafaa",
|
|
106
|
+
"Aya",
|
|
107
|
+
"Lina",
|
|
108
|
+
"Yasmine",
|
|
109
|
+
"Kawtar",
|
|
110
|
+
"Ikram",
|
|
111
|
+
"Naima",
|
|
112
|
+
"Naila",
|
|
113
|
+
"Laila",
|
|
114
|
+
"Leila",
|
|
115
|
+
"Amal",
|
|
116
|
+
"Siham",
|
|
117
|
+
"Ibtissam",
|
|
118
|
+
"Latifa",
|
|
119
|
+
"Malak",
|
|
120
|
+
"Hind",
|
|
121
|
+
"Chaimae",
|
|
122
|
+
"Oumaima",
|
|
123
|
+
"Mariam",
|
|
124
|
+
"Nisrine",
|
|
125
|
+
"Kenza",
|
|
126
|
+
"Ghita",
|
|
127
|
+
"Ghizlane",
|
|
128
|
+
"Jamila",
|
|
129
|
+
"Saida",
|
|
130
|
+
"Amina",
|
|
131
|
+
"Rim",
|
|
132
|
+
"Ines",
|
|
133
|
+
"Mouna",
|
|
134
|
+
"Sanae",
|
|
135
|
+
"Houda",
|
|
136
|
+
"Bouchra",
|
|
137
|
+
"Ahlam",
|
|
138
|
+
"Dounia",
|
|
139
|
+
"Sofia",
|
|
140
|
+
"Loubna",
|
|
141
|
+
"Karima",
|
|
142
|
+
"Zahra",
|
|
143
|
+
"Kawthar"
|
|
144
|
+
];
|
|
145
|
+
var lastNames = [
|
|
146
|
+
"El Amrani",
|
|
147
|
+
"El Idrissi",
|
|
148
|
+
"Bennani",
|
|
149
|
+
"Alaoui",
|
|
150
|
+
"Benali",
|
|
151
|
+
"El Fassi",
|
|
152
|
+
"Chakir",
|
|
153
|
+
"Tazi",
|
|
154
|
+
"Ouahbi",
|
|
155
|
+
"El Khatib",
|
|
156
|
+
"Berrada",
|
|
157
|
+
"Lamrani",
|
|
158
|
+
"Mansouri",
|
|
159
|
+
"Boukhari",
|
|
160
|
+
"Ait Lahcen",
|
|
161
|
+
"Ait Benhaddou",
|
|
162
|
+
"El Gharbi",
|
|
163
|
+
"Slaoui",
|
|
164
|
+
"Belkacem",
|
|
165
|
+
"Zerouali",
|
|
166
|
+
"Benjelloun",
|
|
167
|
+
"Benkirane",
|
|
168
|
+
"Benslimane",
|
|
169
|
+
"Belhaj",
|
|
170
|
+
"El Alami",
|
|
171
|
+
"El Hachimi",
|
|
172
|
+
"El Haddad",
|
|
173
|
+
"El Ouardi",
|
|
174
|
+
"El Hajjaji",
|
|
175
|
+
"El Mernissi",
|
|
176
|
+
"Cherkaoui",
|
|
177
|
+
"Kabbaj",
|
|
178
|
+
"Lahlou",
|
|
179
|
+
"Sbai",
|
|
180
|
+
"Ziani",
|
|
181
|
+
"Rahmani",
|
|
182
|
+
"Ouali",
|
|
183
|
+
"Boussaid",
|
|
184
|
+
"Boulahcen",
|
|
185
|
+
"Ait Hammou",
|
|
186
|
+
"Ait El Cadi",
|
|
187
|
+
"El Bouazzaoui",
|
|
188
|
+
"El Moutawakil",
|
|
189
|
+
"Benabbou",
|
|
190
|
+
"Bekkali",
|
|
191
|
+
"Belmokhtar",
|
|
192
|
+
"El Mansouri",
|
|
193
|
+
"El Azzouzi",
|
|
194
|
+
"Kouider",
|
|
195
|
+
"El Yamani",
|
|
196
|
+
"El Fedali",
|
|
197
|
+
"Benchekroun",
|
|
198
|
+
"El Filali",
|
|
199
|
+
"Bennouna",
|
|
200
|
+
"Haddou",
|
|
201
|
+
"Bouchta",
|
|
202
|
+
"Ait Ali",
|
|
203
|
+
"Ait Omar",
|
|
204
|
+
"El Hariri",
|
|
205
|
+
"El Mahfoud"
|
|
206
|
+
];
|
|
207
|
+
var regions = [
|
|
208
|
+
"Casablanca-Settat",
|
|
209
|
+
"Rabat-Sal\xE9-K\xE9nitra",
|
|
210
|
+
"Marrakesh-Safi",
|
|
211
|
+
"F\xE8s-Mekn\xE8s",
|
|
212
|
+
"Tanger-T\xE9touan-Al Hoce\xEFma",
|
|
213
|
+
"Souss-Massa",
|
|
214
|
+
"Oriental",
|
|
215
|
+
"B\xE9ni Mellal-Kh\xE9nifra",
|
|
216
|
+
"Dr\xE2a-Tafilalet"
|
|
217
|
+
];
|
|
218
|
+
var cities = [
|
|
219
|
+
"Casablanca",
|
|
220
|
+
"Rabat",
|
|
221
|
+
"Sal\xE9",
|
|
222
|
+
"Marrakesh",
|
|
223
|
+
"F\xE8s",
|
|
224
|
+
"Mekn\xE8s",
|
|
225
|
+
"Tangier",
|
|
226
|
+
"T\xE9touan",
|
|
227
|
+
"Agadir",
|
|
228
|
+
"Oujda",
|
|
229
|
+
"Kenitra",
|
|
230
|
+
"El Jadida",
|
|
231
|
+
"Safi",
|
|
232
|
+
"Nador",
|
|
233
|
+
"Beni Mellal",
|
|
234
|
+
"Khouribga",
|
|
235
|
+
"Taza",
|
|
236
|
+
"Larache",
|
|
237
|
+
"Mohammedia",
|
|
238
|
+
"Errachidia"
|
|
239
|
+
];
|
|
240
|
+
var streetTypes = ["Rue", "Avenue", "Boulevard", "Impasse", "Quartier"];
|
|
241
|
+
var streetNames = [
|
|
242
|
+
"Mohammed V",
|
|
243
|
+
"Hassan II",
|
|
244
|
+
"Allal El Fassi",
|
|
245
|
+
"Zerktouni",
|
|
246
|
+
"Ibn Sina",
|
|
247
|
+
"Ibn Rochd",
|
|
248
|
+
"Al Qods",
|
|
249
|
+
"Al Massira",
|
|
250
|
+
"Zayd Ibn Thabit",
|
|
251
|
+
"Abdelmoumen"
|
|
252
|
+
];
|
|
253
|
+
var companyPrefixes = ["Groupe", "Soci\xE9t\xE9", "Holding", "Atlas", "Maghreb"];
|
|
254
|
+
var companySuffixes = ["SARL", "SA", "SAS", "SNC"];
|
|
255
|
+
var emailDomains = ["example.ma", "example.com"];
|
|
256
|
+
var jobTitles = [
|
|
257
|
+
// Tech
|
|
258
|
+
"Software Engineer",
|
|
259
|
+
"Senior Software Engineer",
|
|
260
|
+
"Frontend Developer",
|
|
261
|
+
"Backend Developer",
|
|
262
|
+
"Full Stack Developer",
|
|
263
|
+
"Mobile Developer",
|
|
264
|
+
"Web Developer",
|
|
265
|
+
"DevOps Engineer",
|
|
266
|
+
"Site Reliability Engineer",
|
|
267
|
+
"Cloud Engineer",
|
|
268
|
+
"Data Analyst",
|
|
269
|
+
"Data Engineer",
|
|
270
|
+
"Data Scientist",
|
|
271
|
+
"Machine Learning Engineer",
|
|
272
|
+
"QA Engineer",
|
|
273
|
+
"Test Automation Engineer",
|
|
274
|
+
"Cybersecurity Analyst",
|
|
275
|
+
"Network Engineer",
|
|
276
|
+
"System Administrator",
|
|
277
|
+
"Database Administrator",
|
|
278
|
+
"Solutions Architect",
|
|
279
|
+
"Product Manager",
|
|
280
|
+
"Project Manager",
|
|
281
|
+
"Scrum Master",
|
|
282
|
+
"Business Analyst",
|
|
283
|
+
"UI/UX Designer",
|
|
284
|
+
"Graphic Designer",
|
|
285
|
+
"IT Support Specialist",
|
|
286
|
+
// Common (non-tech)
|
|
287
|
+
"Accountant",
|
|
288
|
+
"Financial Analyst",
|
|
289
|
+
"Sales Representative",
|
|
290
|
+
"Account Manager",
|
|
291
|
+
"Customer Support Specialist",
|
|
292
|
+
"Marketing Specialist",
|
|
293
|
+
"Content Writer",
|
|
294
|
+
"HR Specialist",
|
|
295
|
+
"Recruiter",
|
|
296
|
+
"Office Manager",
|
|
297
|
+
"Administrative Assistant",
|
|
298
|
+
"Operations Coordinator",
|
|
299
|
+
"Supply Chain Coordinator",
|
|
300
|
+
"Teacher",
|
|
301
|
+
"Nurse",
|
|
302
|
+
"Pharmacist",
|
|
303
|
+
"Driver",
|
|
304
|
+
"Store Manager",
|
|
305
|
+
"Cashier",
|
|
306
|
+
// French titles commonly used in Morocco
|
|
307
|
+
"Ing\xE9nieur Logiciel",
|
|
308
|
+
"Chef de projet",
|
|
309
|
+
"Charg\xE9 de client\xE8le",
|
|
310
|
+
"Responsable RH"
|
|
311
|
+
];
|
|
312
|
+
var textSentences = [
|
|
313
|
+
"The meeting starts on time and the agenda is shared in advance.",
|
|
314
|
+
"Please confirm the delivery address and the preferred time window.",
|
|
315
|
+
"A quick review of the requirements helps avoid rework later.",
|
|
316
|
+
"The customer asked for a clear estimate and weekly progress updates.",
|
|
317
|
+
"Today we fixed the bug and added a regression test to prevent it from coming back.",
|
|
318
|
+
"The invoice includes taxes and a reference number for tracking.",
|
|
319
|
+
"We will follow up by email with the full summary and next steps.",
|
|
320
|
+
"The team agreed to keep the scope small and ship an MVP first.",
|
|
321
|
+
"After the deployment, we monitor logs and performance for a few hours.",
|
|
322
|
+
"The support ticket was resolved and the client confirmed the solution.",
|
|
323
|
+
"Please attach the receipt and provide your order number.",
|
|
324
|
+
"The report highlights key metrics and explains the main assumptions.",
|
|
325
|
+
"This branch contains the feature work and a short changelog.",
|
|
326
|
+
"The database migration completed successfully without downtime.",
|
|
327
|
+
"We validated the inputs and returned a helpful error message.",
|
|
328
|
+
"The store opens early and gets busy before lunchtime.",
|
|
329
|
+
"Traffic is lighter in the morning, so deliveries are faster.",
|
|
330
|
+
"A short break improves focus and reduces mistakes.",
|
|
331
|
+
"The contract is signed and the kickoff is scheduled for next week.",
|
|
332
|
+
"We updated the documentation so new developers can onboard quickly."
|
|
333
|
+
];
|
|
334
|
+
|
|
335
|
+
// src/internal/random.ts
|
|
336
|
+
function mulberry32(seed) {
|
|
337
|
+
let state = seed >>> 0;
|
|
338
|
+
return () => {
|
|
339
|
+
state += 1831565813;
|
|
340
|
+
let t = state;
|
|
341
|
+
t = Math.imul(t ^ t >>> 15, t | 1);
|
|
342
|
+
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
|
|
343
|
+
return ((t ^ t >>> 14) >>> 0) / 4294967296;
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
var Random = class {
|
|
347
|
+
next;
|
|
348
|
+
constructor(options) {
|
|
349
|
+
if (options?.rng) {
|
|
350
|
+
this.next = options.rng;
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
if (typeof options?.seed === "number" && Number.isFinite(options.seed)) {
|
|
354
|
+
this.next = mulberry32(options.seed);
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
this.next = Math.random;
|
|
358
|
+
}
|
|
359
|
+
seed(seed) {
|
|
360
|
+
if (!Number.isFinite(seed)) throw new TypeError("seed must be a finite number");
|
|
361
|
+
this.next = mulberry32(seed);
|
|
362
|
+
}
|
|
363
|
+
number() {
|
|
364
|
+
return this.next();
|
|
365
|
+
}
|
|
366
|
+
int(minInclusive, maxInclusive) {
|
|
367
|
+
if (!Number.isFinite(minInclusive) || !Number.isFinite(maxInclusive)) {
|
|
368
|
+
throw new TypeError("min/max must be finite numbers");
|
|
369
|
+
}
|
|
370
|
+
const min = Math.ceil(Math.min(minInclusive, maxInclusive));
|
|
371
|
+
const max = Math.floor(Math.max(minInclusive, maxInclusive));
|
|
372
|
+
return Math.floor(this.number() * (max - min + 1)) + min;
|
|
373
|
+
}
|
|
374
|
+
boolean(probability = 0.5) {
|
|
375
|
+
if (!Number.isFinite(probability) || probability < 0 || probability > 1) {
|
|
376
|
+
throw new TypeError("probability must be between 0 and 1");
|
|
377
|
+
}
|
|
378
|
+
return this.number() < probability;
|
|
379
|
+
}
|
|
380
|
+
pick(items) {
|
|
381
|
+
if (items.length === 0) throw new RangeError("Cannot pick from an empty array");
|
|
382
|
+
return items[this.int(0, items.length - 1)];
|
|
383
|
+
}
|
|
384
|
+
digits(count) {
|
|
385
|
+
if (!Number.isFinite(count) || count <= 0) throw new TypeError("count must be > 0");
|
|
386
|
+
let out = "";
|
|
387
|
+
for (let i = 0; i < count; i++) out += String(this.int(0, 9));
|
|
388
|
+
return out;
|
|
389
|
+
}
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
// src/morocco.ts
|
|
393
|
+
function pad2(value) {
|
|
394
|
+
return String(value).padStart(2, "0");
|
|
395
|
+
}
|
|
396
|
+
function toDate(value) {
|
|
397
|
+
if (value instanceof Date) return value;
|
|
398
|
+
const d = new Date(value);
|
|
399
|
+
if (Number.isNaN(d.getTime())) throw new TypeError("Invalid date value");
|
|
400
|
+
return d;
|
|
401
|
+
}
|
|
402
|
+
function isoDate(date) {
|
|
403
|
+
return `${date.getFullYear()}-${pad2(date.getMonth() + 1)}-${pad2(date.getDate())}`;
|
|
404
|
+
}
|
|
405
|
+
function slugify(value) {
|
|
406
|
+
return value.normalize("NFKD").replace(/[\u0300-\u036f]/g, "").replace(/[^a-zA-Z0-9]+/g, ".").replace(/^\.+|\.+$/g, "").replace(/\.+/g, ".").toLowerCase();
|
|
407
|
+
}
|
|
408
|
+
function upperLetters(random, count) {
|
|
409
|
+
const A = "A".charCodeAt(0);
|
|
410
|
+
let out = "";
|
|
411
|
+
for (let i = 0; i < count; i++) {
|
|
412
|
+
out += String.fromCharCode(A + random.int(0, 25));
|
|
413
|
+
}
|
|
414
|
+
return out;
|
|
415
|
+
}
|
|
416
|
+
var MoroccanFaker = class {
|
|
417
|
+
random;
|
|
418
|
+
person;
|
|
419
|
+
location;
|
|
420
|
+
phone;
|
|
421
|
+
internet;
|
|
422
|
+
id;
|
|
423
|
+
company;
|
|
424
|
+
date;
|
|
425
|
+
time;
|
|
426
|
+
text;
|
|
427
|
+
number;
|
|
428
|
+
constructor(options) {
|
|
429
|
+
const randomOptions = {};
|
|
430
|
+
if (options?.seed !== void 0) randomOptions.seed = options.seed;
|
|
431
|
+
if (options?.rng !== void 0) randomOptions.rng = options.rng;
|
|
432
|
+
this.random = new Random(randomOptions);
|
|
433
|
+
this.person = {
|
|
434
|
+
firstName: (gender) => {
|
|
435
|
+
const g = gender ?? (this.random.boolean() ? "male" : "female");
|
|
436
|
+
return g === "male" ? this.random.pick(firstNamesMale) : this.random.pick(firstNamesFemale);
|
|
437
|
+
},
|
|
438
|
+
lastName: () => this.random.pick(lastNames),
|
|
439
|
+
fullName: (opts) => `${this.person.firstName(opts?.gender)} ${this.person.lastName()}`,
|
|
440
|
+
jobTitle: () => this.random.pick(jobTitles)
|
|
441
|
+
};
|
|
442
|
+
const floatBetween = (min, max, precision) => {
|
|
443
|
+
if (!Number.isInteger(precision) || precision < 0 || precision > 10) {
|
|
444
|
+
throw new TypeError("precision must be an integer between 0 and 10");
|
|
445
|
+
}
|
|
446
|
+
const lo = Math.min(min, max);
|
|
447
|
+
const hi = Math.max(min, max);
|
|
448
|
+
const raw = lo + this.random.number() * (hi - lo);
|
|
449
|
+
const factor = 10 ** precision;
|
|
450
|
+
return Math.round(raw * factor) / factor;
|
|
451
|
+
};
|
|
452
|
+
const MOROCCO_LAT = { min: 21, max: 35.95 };
|
|
453
|
+
const MOROCCO_LON = { min: -17, max: -1 };
|
|
454
|
+
this.location = {
|
|
455
|
+
region: () => this.random.pick(regions),
|
|
456
|
+
city: () => this.random.pick(cities),
|
|
457
|
+
postalCode: () => this.random.digits(5),
|
|
458
|
+
streetAddress: () => {
|
|
459
|
+
const number = this.random.int(1, 199);
|
|
460
|
+
const type = this.random.pick(streetTypes);
|
|
461
|
+
const name = this.random.pick(streetNames);
|
|
462
|
+
return `${number} ${type} ${name}`;
|
|
463
|
+
},
|
|
464
|
+
latitude: () => floatBetween(MOROCCO_LAT.min, MOROCCO_LAT.max, 6),
|
|
465
|
+
longitude: () => floatBetween(MOROCCO_LON.min, MOROCCO_LON.max, 6),
|
|
466
|
+
coordinates: () => ({ latitude: this.location.latitude(), longitude: this.location.longitude() }),
|
|
467
|
+
address: () => {
|
|
468
|
+
const region = this.location.region();
|
|
469
|
+
const city = this.location.city();
|
|
470
|
+
const { latitude, longitude } = this.location.coordinates();
|
|
471
|
+
return {
|
|
472
|
+
street: this.location.streetAddress(),
|
|
473
|
+
city,
|
|
474
|
+
region,
|
|
475
|
+
postalCode: this.location.postalCode(),
|
|
476
|
+
latitude,
|
|
477
|
+
longitude,
|
|
478
|
+
country: "Morocco",
|
|
479
|
+
countryCode: "MA"
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
};
|
|
483
|
+
const formatPhone = (raw10) => {
|
|
484
|
+
return `${raw10.slice(0, 2)} ${raw10.slice(2, 4)} ${raw10.slice(4, 6)} ${raw10.slice(6, 8)} ${raw10.slice(8, 10)}`;
|
|
485
|
+
};
|
|
486
|
+
this.phone = {
|
|
487
|
+
mobile: (opts) => {
|
|
488
|
+
const prefix = this.random.boolean() ? "06" : "07";
|
|
489
|
+
const raw = `${prefix}${this.random.digits(8)}`;
|
|
490
|
+
return opts?.formatted ? formatPhone(raw) : raw;
|
|
491
|
+
},
|
|
492
|
+
internationalMobile: (opts) => {
|
|
493
|
+
const raw = this.phone.mobile({ formatted: false });
|
|
494
|
+
const withoutZero = raw.startsWith("0") ? raw.slice(1) : raw;
|
|
495
|
+
const intl = `+212${withoutZero}`;
|
|
496
|
+
if (!opts?.formatted) return intl;
|
|
497
|
+
const compact = intl.replace("+212", "");
|
|
498
|
+
return `+212 ${compact.slice(0, 1)} ${compact.slice(1, 3)} ${compact.slice(3, 5)} ${compact.slice(5, 7)} ${compact.slice(7, 9)}`;
|
|
499
|
+
}
|
|
500
|
+
};
|
|
501
|
+
this.internet = {
|
|
502
|
+
username: (opts) => {
|
|
503
|
+
const first = opts?.firstName ?? this.person.firstName();
|
|
504
|
+
const last = opts?.lastName ?? this.person.lastName();
|
|
505
|
+
const base = slugify(`${first}.${last}`);
|
|
506
|
+
const suffix = this.random.boolean(0.25) ? String(this.random.int(1, 9999)) : "";
|
|
507
|
+
return `${base}${suffix}`;
|
|
508
|
+
},
|
|
509
|
+
email: (opts) => {
|
|
510
|
+
const domain = opts?.domain ?? this.random.pick(emailDomains);
|
|
511
|
+
const usernameOptions = {};
|
|
512
|
+
if (opts?.firstName !== void 0) usernameOptions.firstName = opts.firstName;
|
|
513
|
+
if (opts?.lastName !== void 0) usernameOptions.lastName = opts.lastName;
|
|
514
|
+
const user = this.internet.username(usernameOptions);
|
|
515
|
+
return `${user}@${domain}`;
|
|
516
|
+
}
|
|
517
|
+
};
|
|
518
|
+
this.id = {
|
|
519
|
+
cin: () => `${upperLetters(this.random, 2)}${this.random.digits(6)}`,
|
|
520
|
+
ice: () => this.random.digits(15)
|
|
521
|
+
};
|
|
522
|
+
this.company = {
|
|
523
|
+
name: () => {
|
|
524
|
+
const prefix = this.random.pick(companyPrefixes);
|
|
525
|
+
const base = this.person.lastName();
|
|
526
|
+
const suffix = this.random.pick(companySuffixes);
|
|
527
|
+
return `${prefix} ${base} ${suffix}`;
|
|
528
|
+
}
|
|
529
|
+
};
|
|
530
|
+
this.date = {
|
|
531
|
+
between: (from, to) => {
|
|
532
|
+
const a = toDate(from).getTime();
|
|
533
|
+
const b = toDate(to).getTime();
|
|
534
|
+
const min = Math.min(a, b);
|
|
535
|
+
const max = Math.max(a, b);
|
|
536
|
+
const t = this.random.int(min, max);
|
|
537
|
+
return new Date(t);
|
|
538
|
+
},
|
|
539
|
+
isoDate: (options2) => {
|
|
540
|
+
const from = options2?.from ?? "2000-01-01";
|
|
541
|
+
const to = options2?.to ?? "2035-12-31";
|
|
542
|
+
return isoDate(this.date.between(from, to));
|
|
543
|
+
}
|
|
544
|
+
};
|
|
545
|
+
this.time = {
|
|
546
|
+
hhmm: () => {
|
|
547
|
+
const hh = this.random.int(0, 23);
|
|
548
|
+
const mm = this.random.int(0, 59);
|
|
549
|
+
return `${pad2(hh)}:${pad2(mm)}`;
|
|
550
|
+
},
|
|
551
|
+
hhmmss: () => {
|
|
552
|
+
const hh = this.random.int(0, 23);
|
|
553
|
+
const mm = this.random.int(0, 59);
|
|
554
|
+
const ss = this.random.int(0, 59);
|
|
555
|
+
return `${pad2(hh)}:${pad2(mm)}:${pad2(ss)}`;
|
|
556
|
+
}
|
|
557
|
+
};
|
|
558
|
+
const ensureSentenceEnd = (value) => {
|
|
559
|
+
const trimmed = value.trim();
|
|
560
|
+
if (trimmed.length === 0) return trimmed;
|
|
561
|
+
return /[.!?]$/.test(trimmed) ? trimmed : `${trimmed}.`;
|
|
562
|
+
};
|
|
563
|
+
this.text = {
|
|
564
|
+
sentence: () => this.random.pick(textSentences),
|
|
565
|
+
paragraph: (options2) => {
|
|
566
|
+
const count = options2?.sentences ?? this.random.int(2, 5);
|
|
567
|
+
const parts = [];
|
|
568
|
+
for (let i = 0; i < count; i++) parts.push(ensureSentenceEnd(this.text.sentence()));
|
|
569
|
+
return parts.join(" ");
|
|
570
|
+
},
|
|
571
|
+
text: (options2) => this.text.paragraph(options2)
|
|
572
|
+
};
|
|
573
|
+
this.number = {
|
|
574
|
+
int: (options2) => {
|
|
575
|
+
const min = options2?.min ?? 0;
|
|
576
|
+
const max = options2?.max ?? 9999;
|
|
577
|
+
return this.random.int(min, max);
|
|
578
|
+
},
|
|
579
|
+
float: (options2) => {
|
|
580
|
+
const min = options2?.min ?? 0;
|
|
581
|
+
const max = options2?.max ?? 1;
|
|
582
|
+
const precision = options2?.precision ?? 2;
|
|
583
|
+
if (!Number.isInteger(precision) || precision < 0 || precision > 10) {
|
|
584
|
+
throw new TypeError("precision must be an integer between 0 and 10");
|
|
585
|
+
}
|
|
586
|
+
if (!Number.isFinite(min) || !Number.isFinite(max)) {
|
|
587
|
+
throw new TypeError("min/max must be finite numbers");
|
|
588
|
+
}
|
|
589
|
+
const lo = Math.min(min, max);
|
|
590
|
+
const hi = Math.max(min, max);
|
|
591
|
+
const raw = lo + this.random.number() * (hi - lo);
|
|
592
|
+
const factor = 10 ** precision;
|
|
593
|
+
return Math.round(raw * factor) / factor;
|
|
594
|
+
}
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
seed(seed) {
|
|
598
|
+
this.random.seed(seed);
|
|
599
|
+
return this;
|
|
600
|
+
}
|
|
601
|
+
};
|
|
602
|
+
function createMoroccanFaker(options) {
|
|
603
|
+
return new MoroccanFaker(options);
|
|
604
|
+
}
|
|
605
|
+
var morocco = new MoroccanFaker();
|
|
606
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
607
|
+
0 && (module.exports = {
|
|
608
|
+
MoroccanFaker,
|
|
609
|
+
createMoroccanFaker,
|
|
610
|
+
morocco
|
|
611
|
+
});
|
|
612
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/data.ts","../src/internal/random.ts","../src/morocco.ts"],"sourcesContent":["export { MoroccanFaker, createMoroccanFaker, morocco, type MoroccanFakerOptions, type Address, type Gender } from './morocco';\n","export const firstNamesMale = [\n 'Mohamed',\n 'Ahmed',\n 'Youssef',\n 'Omar',\n 'Hassan',\n 'Hamza',\n 'Mehdi',\n 'Rachid',\n 'Khalid',\n 'Adil',\n 'Said',\n 'Abdelkader',\n 'Mustapha',\n 'Ayoub',\n 'Anas',\n 'Karim',\n 'Nabil',\n 'Ilyas',\n 'Zakaria',\n 'Badr',\n 'Abdellah',\n 'Abderrahmane',\n 'Abdelaziz',\n 'Aziz',\n 'Brahim',\n 'Ismail',\n 'Hicham',\n 'Amine',\n 'Soufiane',\n 'Othmane',\n 'Noureddine',\n 'Driss',\n 'Jamal',\n 'Lahcen',\n 'Yassine',\n 'Tarik',\n 'Walid',\n 'Reda',\n 'Mounir',\n 'Abdelilah',\n 'Abdelmjid',\n 'Abdelghani',\n 'Ayman',\n 'Bilal',\n 'Rayan',\n 'Samir',\n 'Sami',\n 'Fouad',\n 'Nizar',\n 'Yahya',\n 'Imad',\n 'Younes',\n 'Houssam',\n 'Chafik',\n 'Mourad',\n 'Halim',\n] as const;\n\nexport const firstNamesFemale = [\n 'Fatima',\n 'Aicha',\n 'Khadija',\n 'Zineb',\n 'Sara',\n 'Salma',\n 'Imane',\n 'Nour',\n 'Meryem',\n 'Hajar',\n 'Rania',\n 'Asma',\n 'Nadia',\n 'Samira',\n 'Soukaina',\n 'Hanane',\n 'Wafaa',\n 'Aya',\n 'Lina',\n 'Yasmine',\n 'Kawtar',\n 'Ikram',\n 'Naima',\n 'Naila',\n 'Laila',\n 'Leila',\n 'Amal',\n 'Siham',\n 'Ibtissam',\n 'Latifa',\n 'Malak',\n 'Hind',\n 'Chaimae',\n 'Oumaima',\n 'Mariam',\n 'Nisrine',\n 'Kenza',\n 'Ghita',\n 'Ghizlane',\n 'Jamila',\n 'Saida',\n 'Amina',\n 'Rim',\n 'Ines',\n 'Mouna',\n 'Sanae',\n 'Houda',\n 'Bouchra',\n 'Ahlam',\n 'Dounia',\n 'Sofia',\n 'Loubna',\n 'Karima',\n 'Zahra',\n 'Kawthar',\n] as const;\n\nexport const lastNames = [\n 'El Amrani',\n 'El Idrissi',\n 'Bennani',\n 'Alaoui',\n 'Benali',\n 'El Fassi',\n 'Chakir',\n 'Tazi',\n 'Ouahbi',\n 'El Khatib',\n 'Berrada',\n 'Lamrani',\n 'Mansouri',\n 'Boukhari',\n 'Ait Lahcen',\n 'Ait Benhaddou',\n 'El Gharbi',\n 'Slaoui',\n 'Belkacem',\n 'Zerouali',\n 'Benjelloun',\n 'Benkirane',\n 'Benslimane',\n 'Belhaj',\n 'El Alami',\n 'El Hachimi',\n 'El Haddad',\n 'El Ouardi',\n 'El Hajjaji',\n 'El Mernissi',\n 'Cherkaoui',\n 'Kabbaj',\n 'Lahlou',\n 'Sbai',\n 'Ziani',\n 'Rahmani',\n 'Ouali',\n 'Boussaid',\n 'Boulahcen',\n 'Ait Hammou',\n 'Ait El Cadi',\n 'El Bouazzaoui',\n 'El Moutawakil',\n 'Benabbou',\n 'Bekkali',\n 'Belmokhtar',\n 'El Mansouri',\n 'El Azzouzi',\n 'Kouider',\n 'El Yamani',\n 'El Fedali',\n 'Benchekroun',\n 'El Filali',\n 'Bennouna',\n 'Haddou',\n 'Bouchta',\n 'Ait Ali',\n 'Ait Omar',\n 'El Hariri',\n 'El Mahfoud',\n] as const;\n\nexport const regions = [\n 'Casablanca-Settat',\n 'Rabat-Salé-Kénitra',\n 'Marrakesh-Safi',\n 'Fès-Meknès',\n 'Tanger-Tétouan-Al Hoceïma',\n 'Souss-Massa',\n 'Oriental',\n 'Béni Mellal-Khénifra',\n 'Drâa-Tafilalet',\n] as const;\n\nexport const cities = [\n 'Casablanca',\n 'Rabat',\n 'Salé',\n 'Marrakesh',\n 'Fès',\n 'Meknès',\n 'Tangier',\n 'Tétouan',\n 'Agadir',\n 'Oujda',\n 'Kenitra',\n 'El Jadida',\n 'Safi',\n 'Nador',\n 'Beni Mellal',\n 'Khouribga',\n 'Taza',\n 'Larache',\n 'Mohammedia',\n 'Errachidia',\n] as const;\n\nexport const streetTypes = ['Rue', 'Avenue', 'Boulevard', 'Impasse', 'Quartier'] as const;\n\nexport const streetNames = [\n 'Mohammed V',\n 'Hassan II',\n 'Allal El Fassi',\n 'Zerktouni',\n 'Ibn Sina',\n 'Ibn Rochd',\n 'Al Qods',\n 'Al Massira',\n 'Zayd Ibn Thabit',\n 'Abdelmoumen',\n] as const;\n\nexport const companyPrefixes = ['Groupe', 'Société', 'Holding', 'Atlas', 'Maghreb'] as const;\nexport const companySuffixes = ['SARL', 'SA', 'SAS', 'SNC'] as const;\n\nexport const emailDomains = ['example.ma', 'example.com'] as const;\n\nexport const jobTitles = [\n // Tech\n 'Software Engineer',\n 'Senior Software Engineer',\n 'Frontend Developer',\n 'Backend Developer',\n 'Full Stack Developer',\n 'Mobile Developer',\n 'Web Developer',\n 'DevOps Engineer',\n 'Site Reliability Engineer',\n 'Cloud Engineer',\n 'Data Analyst',\n 'Data Engineer',\n 'Data Scientist',\n 'Machine Learning Engineer',\n 'QA Engineer',\n 'Test Automation Engineer',\n 'Cybersecurity Analyst',\n 'Network Engineer',\n 'System Administrator',\n 'Database Administrator',\n 'Solutions Architect',\n 'Product Manager',\n 'Project Manager',\n 'Scrum Master',\n 'Business Analyst',\n 'UI/UX Designer',\n 'Graphic Designer',\n 'IT Support Specialist',\n\n // Common (non-tech)\n 'Accountant',\n 'Financial Analyst',\n 'Sales Representative',\n 'Account Manager',\n 'Customer Support Specialist',\n 'Marketing Specialist',\n 'Content Writer',\n 'HR Specialist',\n 'Recruiter',\n 'Office Manager',\n 'Administrative Assistant',\n 'Operations Coordinator',\n 'Supply Chain Coordinator',\n 'Teacher',\n 'Nurse',\n 'Pharmacist',\n 'Driver',\n 'Store Manager',\n 'Cashier',\n\n // French titles commonly used in Morocco\n 'Ingénieur Logiciel',\n 'Chef de projet',\n 'Chargé de clientèle',\n 'Responsable RH',\n] as const;\n\nexport const textSentences = [\n 'The meeting starts on time and the agenda is shared in advance.',\n 'Please confirm the delivery address and the preferred time window.',\n 'A quick review of the requirements helps avoid rework later.',\n 'The customer asked for a clear estimate and weekly progress updates.',\n 'Today we fixed the bug and added a regression test to prevent it from coming back.',\n 'The invoice includes taxes and a reference number for tracking.',\n 'We will follow up by email with the full summary and next steps.',\n 'The team agreed to keep the scope small and ship an MVP first.',\n 'After the deployment, we monitor logs and performance for a few hours.',\n 'The support ticket was resolved and the client confirmed the solution.',\n 'Please attach the receipt and provide your order number.',\n 'The report highlights key metrics and explains the main assumptions.',\n 'This branch contains the feature work and a short changelog.',\n 'The database migration completed successfully without downtime.',\n 'We validated the inputs and returned a helpful error message.',\n 'The store opens early and gets busy before lunchtime.',\n 'Traffic is lighter in the morning, so deliveries are faster.',\n 'A short break improves focus and reduces mistakes.',\n 'The contract is signed and the kickoff is scheduled for next week.',\n 'We updated the documentation so new developers can onboard quickly.',\n] as const;\n","export type Rng = () => number;\n\nfunction mulberry32(seed: number): Rng {\n let state = seed >>> 0;\n return () => {\n state += 0x6d2b79f5;\n let t = state;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nexport class Random {\n private next: Rng;\n\n constructor(options?: { seed?: number; rng?: Rng }) {\n if (options?.rng) {\n this.next = options.rng;\n return;\n }\n\n if (typeof options?.seed === 'number' && Number.isFinite(options.seed)) {\n this.next = mulberry32(options.seed);\n return;\n }\n\n this.next = Math.random;\n }\n\n seed(seed: number): void {\n if (!Number.isFinite(seed)) throw new TypeError('seed must be a finite number');\n this.next = mulberry32(seed);\n }\n\n number(): number {\n return this.next();\n }\n\n int(minInclusive: number, maxInclusive: number): number {\n if (!Number.isFinite(minInclusive) || !Number.isFinite(maxInclusive)) {\n throw new TypeError('min/max must be finite numbers');\n }\n\n const min = Math.ceil(Math.min(minInclusive, maxInclusive));\n const max = Math.floor(Math.max(minInclusive, maxInclusive));\n\n return Math.floor(this.number() * (max - min + 1)) + min;\n }\n\n boolean(probability = 0.5): boolean {\n if (!Number.isFinite(probability) || probability < 0 || probability > 1) {\n throw new TypeError('probability must be between 0 and 1');\n }\n return this.number() < probability;\n }\n\n pick<T>(items: readonly T[]): T {\n if (items.length === 0) throw new RangeError('Cannot pick from an empty array');\n return items[this.int(0, items.length - 1)]!;\n }\n\n digits(count: number): string {\n if (!Number.isFinite(count) || count <= 0) throw new TypeError('count must be > 0');\n let out = '';\n for (let i = 0; i < count; i++) out += String(this.int(0, 9));\n return out;\n }\n}\n","import {\n cities,\n companyPrefixes,\n companySuffixes,\n emailDomains,\n firstNamesFemale,\n firstNamesMale,\n jobTitles,\n lastNames,\n regions,\n streetNames,\n streetTypes,\n textSentences,\n} from './data';\nimport { Random, type Rng } from './internal/random';\n\nexport type Gender = 'male' | 'female';\n\nexport interface Address {\n street: string;\n city: string;\n region: string;\n postalCode: string;\n latitude: number;\n longitude: number;\n country: 'Morocco';\n countryCode: 'MA';\n}\n\nfunction pad2(value: number): string {\n return String(value).padStart(2, '0');\n}\n\nfunction toDate(value: Date | number | string): Date {\n if (value instanceof Date) return value;\n const d = new Date(value);\n if (Number.isNaN(d.getTime())) throw new TypeError('Invalid date value');\n return d;\n}\n\nfunction isoDate(date: Date): string {\n return `${date.getFullYear()}-${pad2(date.getMonth() + 1)}-${pad2(date.getDate())}`;\n}\n\nfunction slugify(value: string): string {\n return value\n .normalize('NFKD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/[^a-zA-Z0-9]+/g, '.')\n .replace(/^\\.+|\\.+$/g, '')\n .replace(/\\.+/g, '.')\n .toLowerCase();\n}\n\nfunction upperLetters(random: Random, count: number): string {\n const A = 'A'.charCodeAt(0);\n let out = '';\n for (let i = 0; i < count; i++) {\n out += String.fromCharCode(A + random.int(0, 25));\n }\n return out;\n}\n\nexport interface MoroccanFakerOptions {\n seed?: number;\n rng?: Rng;\n}\n\nexport class MoroccanFaker {\n private readonly random: Random;\n\n public readonly person: {\n firstName: (gender?: Gender) => string;\n lastName: () => string;\n fullName: (options?: { gender?: Gender }) => string;\n jobTitle: () => string;\n };\n\n public readonly location: {\n region: () => string;\n city: () => string;\n postalCode: () => string;\n streetAddress: () => string;\n latitude: () => number;\n longitude: () => number;\n coordinates: () => { latitude: number; longitude: number };\n address: () => Address;\n };\n\n public readonly phone: {\n mobile: (options?: { formatted?: boolean }) => string;\n internationalMobile: (options?: { formatted?: boolean }) => string;\n };\n\n public readonly internet: {\n username: (options?: { firstName?: string; lastName?: string }) => string;\n email: (options?: { firstName?: string; lastName?: string; domain?: string }) => string;\n };\n\n public readonly id: {\n cin: () => string;\n ice: () => string;\n };\n\n public readonly company: {\n name: () => string;\n };\n\n public readonly date: {\n between: (from: Date | number | string, to: Date | number | string) => Date;\n isoDate: (options?: { from?: Date | number | string; to?: Date | number | string }) => string;\n };\n\n public readonly time: {\n hhmm: () => string;\n hhmmss: () => string;\n };\n\n public readonly text: {\n sentence: () => string;\n paragraph: (options?: { sentences?: number }) => string;\n text: (options?: { sentences?: number }) => string;\n };\n\n public readonly number: {\n int: (options?: { min?: number; max?: number }) => number;\n float: (options?: { min?: number; max?: number; precision?: number }) => number;\n };\n\n constructor(options?: MoroccanFakerOptions) {\n const randomOptions: { seed?: number; rng?: Rng } = {};\n if (options?.seed !== undefined) randomOptions.seed = options.seed;\n if (options?.rng !== undefined) randomOptions.rng = options.rng;\n this.random = new Random(randomOptions);\n\n this.person = {\n firstName: (gender?: Gender) => {\n const g: Gender = gender ?? (this.random.boolean() ? 'male' : 'female');\n return g === 'male' ? this.random.pick(firstNamesMale) : this.random.pick(firstNamesFemale);\n },\n lastName: () => this.random.pick(lastNames),\n fullName: (opts?: { gender?: Gender }) => `${this.person.firstName(opts?.gender)} ${this.person.lastName()}`,\n jobTitle: () => this.random.pick(jobTitles),\n };\n\n const floatBetween = (min: number, max: number, precision: number): number => {\n if (!Number.isInteger(precision) || precision < 0 || precision > 10) {\n throw new TypeError('precision must be an integer between 0 and 10');\n }\n const lo = Math.min(min, max);\n const hi = Math.max(min, max);\n const raw = lo + this.random.number() * (hi - lo);\n const factor = 10 ** precision;\n return Math.round(raw * factor) / factor;\n };\n\n // Morocco bounding box (approx.)\n const MOROCCO_LAT = { min: 21.0, max: 35.95 } as const;\n const MOROCCO_LON = { min: -17.0, max: -1.0 } as const;\n\n this.location = {\n region: () => this.random.pick(regions),\n city: () => this.random.pick(cities),\n postalCode: () => this.random.digits(5),\n streetAddress: () => {\n const number = this.random.int(1, 199);\n const type = this.random.pick(streetTypes);\n const name = this.random.pick(streetNames);\n return `${number} ${type} ${name}`;\n },\n latitude: () => floatBetween(MOROCCO_LAT.min, MOROCCO_LAT.max, 6),\n longitude: () => floatBetween(MOROCCO_LON.min, MOROCCO_LON.max, 6),\n coordinates: () => ({ latitude: this.location.latitude(), longitude: this.location.longitude() }),\n address: () => {\n const region = this.location.region();\n const city = this.location.city();\n const { latitude, longitude } = this.location.coordinates();\n return {\n street: this.location.streetAddress(),\n city,\n region,\n postalCode: this.location.postalCode(),\n latitude,\n longitude,\n country: 'Morocco',\n countryCode: 'MA',\n };\n },\n };\n\n const formatPhone = (raw10: string): string => {\n // 06XXXXXXXX or 07XXXXXXXX → \"06 12 34 56 78\"\n return `${raw10.slice(0, 2)} ${raw10.slice(2, 4)} ${raw10.slice(4, 6)} ${raw10.slice(6, 8)} ${raw10.slice(8, 10)}`;\n };\n\n this.phone = {\n mobile: (opts?: { formatted?: boolean }) => {\n const prefix = this.random.boolean() ? '06' : '07';\n const raw = `${prefix}${this.random.digits(8)}`;\n return opts?.formatted ? formatPhone(raw) : raw;\n },\n internationalMobile: (opts?: { formatted?: boolean }) => {\n const raw = this.phone.mobile({ formatted: false });\n const withoutZero = raw.startsWith('0') ? raw.slice(1) : raw;\n const intl = `+212${withoutZero}`;\n if (!opts?.formatted) return intl;\n // \"+212 6 12 34 56 78\"\n const compact = intl.replace('+212', '');\n return `+212 ${compact.slice(0, 1)} ${compact.slice(1, 3)} ${compact.slice(3, 5)} ${compact.slice(5, 7)} ${compact.slice(7, 9)}`;\n },\n };\n\n this.internet = {\n username: (opts?: { firstName?: string; lastName?: string }) => {\n const first = opts?.firstName ?? this.person.firstName();\n const last = opts?.lastName ?? this.person.lastName();\n const base = slugify(`${first}.${last}`);\n const suffix = this.random.boolean(0.25) ? String(this.random.int(1, 9999)) : '';\n return `${base}${suffix}`;\n },\n email: (opts?: { firstName?: string; lastName?: string; domain?: string }) => {\n const domain = opts?.domain ?? this.random.pick(emailDomains);\n const usernameOptions: { firstName?: string; lastName?: string } = {};\n if (opts?.firstName !== undefined) usernameOptions.firstName = opts.firstName;\n if (opts?.lastName !== undefined) usernameOptions.lastName = opts.lastName;\n const user = this.internet.username(usernameOptions);\n return `${user}@${domain}`;\n },\n };\n\n this.id = {\n cin: () => `${upperLetters(this.random, 2)}${this.random.digits(6)}`,\n ice: () => this.random.digits(15),\n };\n\n this.company = {\n name: () => {\n const prefix = this.random.pick(companyPrefixes);\n const base = this.person.lastName();\n const suffix = this.random.pick(companySuffixes);\n return `${prefix} ${base} ${suffix}`;\n },\n };\n\n this.date = {\n between: (from: Date | number | string, to: Date | number | string) => {\n const a = toDate(from).getTime();\n const b = toDate(to).getTime();\n const min = Math.min(a, b);\n const max = Math.max(a, b);\n const t = this.random.int(min, max);\n return new Date(t);\n },\n isoDate: (options?: { from?: Date | number | string; to?: Date | number | string }) => {\n const from = options?.from ?? '2000-01-01';\n const to = options?.to ?? '2035-12-31';\n return isoDate(this.date.between(from, to));\n },\n };\n\n this.time = {\n hhmm: () => {\n const hh = this.random.int(0, 23);\n const mm = this.random.int(0, 59);\n return `${pad2(hh)}:${pad2(mm)}`;\n },\n hhmmss: () => {\n const hh = this.random.int(0, 23);\n const mm = this.random.int(0, 59);\n const ss = this.random.int(0, 59);\n return `${pad2(hh)}:${pad2(mm)}:${pad2(ss)}`;\n },\n };\n\n const ensureSentenceEnd = (value: string): string => {\n const trimmed = value.trim();\n if (trimmed.length === 0) return trimmed;\n return /[.!?]$/.test(trimmed) ? trimmed : `${trimmed}.`;\n };\n\n this.text = {\n sentence: () => this.random.pick(textSentences),\n paragraph: (options?: { sentences?: number }) => {\n const count = options?.sentences ?? this.random.int(2, 5);\n const parts: string[] = [];\n for (let i = 0; i < count; i++) parts.push(ensureSentenceEnd(this.text.sentence()));\n return parts.join(' ');\n },\n text: (options?: { sentences?: number }) => this.text.paragraph(options),\n };\n\n this.number = {\n int: (options?: { min?: number; max?: number }) => {\n const min = options?.min ?? 0;\n const max = options?.max ?? 9999;\n return this.random.int(min, max);\n },\n float: (options?: { min?: number; max?: number; precision?: number }) => {\n const min = options?.min ?? 0;\n const max = options?.max ?? 1;\n const precision = options?.precision ?? 2;\n\n if (!Number.isInteger(precision) || precision < 0 || precision > 10) {\n throw new TypeError('precision must be an integer between 0 and 10');\n }\n\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n throw new TypeError('min/max must be finite numbers');\n }\n\n const lo = Math.min(min, max);\n const hi = Math.max(min, max);\n const raw = lo + this.random.number() * (hi - lo);\n const factor = 10 ** precision;\n return Math.round(raw * factor) / factor;\n },\n };\n }\n\n seed(seed: number): this {\n this.random.seed(seed);\n return this;\n }\n}\n\nexport function createMoroccanFaker(options?: MoroccanFakerOptions): MoroccanFaker {\n return new MoroccanFaker(options);\n}\n\nexport const morocco = new MoroccanFaker();\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,iBAAiB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEO,IAAM,mBAAmB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AA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","names":["options"]}
|