Skip to content

Commit 7acdb75

Browse files
committed
feat: add internet.emoji
1 parent b192d25 commit 7acdb75

7 files changed

Lines changed: 179 additions & 3 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ Faker provides many useful utility functions.
333333
| color | Generates a random hexadecimal color |
334334
| mac | Generates a random mac address |
335335
| password | Generates a random password |
336+
| emoji | Generates a random emoji |
336337

337338
- faker.lorem
338339

src/definitions/internet.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,22 @@ export interface InternetDefinitions {
1616
* Some free-mail domains used in that country (e.g. `gmail.de`).
1717
*/
1818
free_email: string[];
19+
/**
20+
* List of all fully-qualified emoji ordered by groups.
21+
*/
22+
emoji: {
23+
[key in
24+
| 'smileys'
25+
| 'body'
26+
| 'person'
27+
| 'nature'
28+
| 'food'
29+
| 'travel'
30+
| 'activities'
31+
| 'objects'
32+
| 'symbols'
33+
| 'flags']: string[];
34+
};
1935
}
2036

2137
/**
@@ -24,5 +40,6 @@ export interface InternetDefinitions {
2440
export const INTERNET = allOf<keyof InternetDefinitions>()(
2541
'domain_suffix',
2642
'example_email',
27-
'free_email'
43+
'free_email',
44+
'emoji'
2845
);

src/internet.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Faker } from '.';
1+
import type { Faker, InternetDefinitions } from '.';
22

33
import * as random_ua from './vendor/user-agent';
44

@@ -405,4 +405,25 @@ export class Internet {
405405
};
406406
return _password(len, memorable, pattern, prefix);
407407
}
408+
409+
/**
410+
* Generates a random emoji.
411+
*
412+
* @param filters A list of the emoji groups that should be used.
413+
*
414+
* @example
415+
* faker.internet.emoji() // '🥰'
416+
* faker.internet.emoji(['food', 'nature']) // '🥐'
417+
*/
418+
emoji(filters?: Array<keyof InternetDefinitions['emoji']>): string {
419+
filters =
420+
filters ||
421+
(Object.keys(this.faker.definitions.internet.emoji) as Array<
422+
keyof InternetDefinitions['emoji']
423+
>);
424+
const group = this.faker.random.arrayElement(filters);
425+
return this.faker.random.arrayElement(
426+
this.faker.definitions.internet.emoji[group]
427+
);
428+
}
408429
}

src/locales/en/internet/emoji.ts

Lines changed: 121 additions & 0 deletions
Large diffs are not rendered by default.

src/locales/en/internet/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
import type { InternetDefinitions } from '../../..';
66
import avatar_uri from './avatar_uri';
77
import domain_suffix from './domain_suffix';
8+
import emoji from './emoji';
89
import example_email from './example_email';
910
import free_email from './free_email';
1011

1112
const internet = {
1213
avatar_uri,
1314
domain_suffix,
15+
emoji,
1416
example_email,
1517
free_email,
1618
} as InternetDefinitions;

src/locales/fa/internet/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import domain_suffix from './domain_suffix';
77
import example_email from './example_email';
88
import free_email from './free_email';
99

10-
const internet: InternetDefinitions = {
10+
const internet: Partial<InternetDefinitions> = {
1111
domain_suffix,
1212
example_email,
1313
free_email,

test/internet.spec.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ const seededRuns = [
2626
color: '#30667a',
2727
mac: '5c:f2:bc:99:27:21',
2828
password: 'Dl2fkYYKLsZdepz',
29+
emoji: '🦟',
2930
},
3031
},
3132
{
@@ -50,6 +51,7 @@ const seededRuns = [
5051
color: '#214814',
5152
mac: '48:23:48:70:53:89',
5253
password: '9V05TL7RY9fmECg',
54+
emoji: '💇‍♂️',
5355
},
5456
},
5557
{
@@ -74,6 +76,7 @@ const seededRuns = [
7476
color: '#773a72',
7577
mac: 'e7:ec:32:f0:a2:a3',
7678
password: 'yLuj60b5iHB0bhn',
79+
emoji: '🇮🇸',
7780
},
7881
},
7982
];
@@ -98,6 +101,7 @@ const functionNames = [
98101
'color',
99102
'mac',
100103
'password',
104+
'emoji',
101105
];
102106

103107
describe('internet', () => {
@@ -546,6 +550,16 @@ describe('internet', () => {
546550
expect(password).satisfy(validator.isStrongPassword);
547551
});
548552
});
553+
554+
describe('emoji', () => {
555+
it('should return a random emoji', () => {
556+
const emoji = faker.internet.emoji();
557+
558+
expect(emoji).toBeTruthy();
559+
expect(typeof emoji).toBe('string');
560+
expect(emoji.length).toBeGreaterThanOrEqual(1);
561+
});
562+
});
549563
}
550564
});
551565
});

0 commit comments

Comments
 (0)