diff options
| author | DivisionByZero <[email protected]> | 2023-01-29 16:43:33 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-01-29 15:43:33 +0000 |
| commit | cec78775e995ece1e6004e8aece6304820126296 (patch) | |
| tree | 8014a5dc9c4b64a7fea6b562346b93b22e16cbb5 /src | |
| parent | ac1a3de17c8840e80fe1609b44e26d287eec952c (diff) | |
| download | faker-cec78775e995ece1e6004e8aece6304820126296.tar.xz faker-cec78775e995ece1e6004e8aece6304820126296.zip | |
refactor(internet): remove weigths in userAgent (#1761)
Diffstat (limited to 'src')
| -rw-r--r-- | src/modules/internet/user-agent.ts | 72 |
1 files changed, 19 insertions, 53 deletions
diff --git a/src/modules/internet/user-agent.ts b/src/modules/internet/user-agent.ts index 58ef441b..43a1b3ce 100644 --- a/src/modules/internet/user-agent.ts +++ b/src/modules/internet/user-agent.ts @@ -54,30 +54,6 @@ type Browser = 'chrome' | 'iexplorer' | 'firefox' | 'safari' | 'opera'; * @param faker An existing faker instance. */ export function generate(faker: Faker): string { - const weightedKeyFromObject = <T extends Record<string, number>>( - obj: T - ): keyof T => { - //returns a random key from the passed object; keys are weighted by the decimal probability in their value - const rand = faker.number.int(100) / 100; - let min = 0; - let max = 0; - let return_val: string; - - for (const key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - max = obj[key] + min; - return_val = key; - if (rand >= min && rand <= max) { - break; - } - - min = min + obj[key]; - } - } - - return return_val; - }; - const randomLang = (): string => faker.helpers.arrayElement([ 'AB', @@ -179,39 +155,29 @@ export function generate(faker: Faker): string { ]); const randomBrowserAndOS = (): [Browser, OS] => { - const browser: Browser = weightedKeyFromObject({ - chrome: 0.45132810566, - iexplorer: 0.27477061836, - firefox: 0.19384170608, - safari: 0.06186781118, - opera: 0.01574236955, - }); - const os: OS = weightedKeyFromObject( - { - chrome: { win: 0.89, mac: 0.09, lin: 0.02 }, - firefox: { win: 0.83, mac: 0.16, lin: 0.01 }, - opera: { win: 0.91, mac: 0.03, lin: 0.06 }, - safari: { win: 0.04, mac: 0.96 }, - iexplorer: { win: 1 }, - }[browser] - ); + const browserToOsMap = { + chrome: ['win', 'mac', 'lin'], + firefox: ['win', 'mac', 'lin'], + opera: ['win', 'mac', 'lin'], + safari: ['win', 'mac'], + iexplorer: ['win'], + } satisfies Record<Browser, OS[]>; + const browser: Browser = faker.helpers.objectKey(browserToOsMap); + const os: OS = faker.helpers.arrayElement(browserToOsMap[browser]); return [browser, os]; }; - const randomProc = (arch: OS): string => { - const procs = { - lin: ['i686', 'x86_64'], - mac: { Intel: 0.48, PPC: 0.01, 'U; Intel': 0.48, 'U; PPC': 0.01 }, - win: ['', 'WOW64', 'Win64; x64'], - }; - const archValue = procs[arch]; - const proc = Array.isArray(archValue) - ? faker.helpers.arrayElement(archValue) - : weightedKeyFromObject(archValue); - - return proc; - }; + const randomProc = (arch: OS): string => + faker.helpers.arrayElement( + ( + { + lin: ['i686', 'x86_64'], + mac: ['Intel', 'PPC', 'U; Intel', 'U; PPC'], + win: ['', 'WOW64', 'Win64; x64'], + } satisfies Record<OS, string[]> + )[arch] + ); const randomRevision = (dots: number): string => { let return_val = ''; |
