aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShinigami <[email protected]>2022-01-24 19:30:46 +0100
committerGitHub <[email protected]>2022-01-24 19:30:46 +0100
commita3792251766ed9a87a59c760ea87f64792e54caa (patch)
tree9a9dc7ee3b67bf08f9db7b14326385f118d39ca0
parentbe6ea47ffab857e3328bc620502b31732d53d82d (diff)
downloadfaker-a3792251766ed9a87a59c760ea87f64792e54caa.tar.xz
faker-a3792251766ed9a87a59c760ea87f64792e54caa.zip
chore: migrate vendor (#254)
-rw-r--r--package.json3
-rw-r--r--src/internet.ts2
-rw-r--r--src/mersenne.ts2
-rw-r--r--src/unique.ts13
-rw-r--r--src/vendor/mersenne.ts (renamed from vendor/mersenne.js)142
-rw-r--r--src/vendor/unique.ts (renamed from vendor/unique.js)64
-rw-r--r--src/vendor/user-agent.ts (renamed from vendor/user-agent.js)170
7 files changed, 208 insertions, 188 deletions
diff --git a/package.json b/package.json
index 30896e6f..c06e478f 100644
--- a/package.json
+++ b/package.json
@@ -31,8 +31,7 @@
"index.js",
"lib",
"locale",
- "tsconfig.json",
- "vendor"
+ "tsconfig.json"
],
"scripts": {
"preinstall": "npx only-allow pnpm",
diff --git a/src/internet.ts b/src/internet.ts
index 6384b155..3b7f0291 100644
--- a/src/internet.ts
+++ b/src/internet.ts
@@ -1,6 +1,6 @@
import type { Faker } from '.';
-const random_ua = require('../vendor/user-agent');
+import * as random_ua from './vendor/user-agent';
export class Internet {
constructor(private readonly faker: Faker) {
diff --git a/src/mersenne.ts b/src/mersenne.ts
index fe7fbb44..7f42501e 100644
--- a/src/mersenne.ts
+++ b/src/mersenne.ts
@@ -1,4 +1,4 @@
-const Gen = require('../vendor/mersenne').MersenneTwister19937;
+import Gen from './vendor/mersenne';
export class Mersenne {
private gen = new Gen();
diff --git a/src/unique.ts b/src/unique.ts
index c077ea58..382d2e2d 100644
--- a/src/unique.ts
+++ b/src/unique.ts
@@ -1,4 +1,4 @@
-const uniqueExec = require('../vendor/unique');
+import * as uniqueExec from './vendor/unique';
export class Unique {
// maximum time unique.exec will attempt to run before aborting
@@ -25,17 +25,18 @@ export class Unique {
*
* @method unique
*/
- unique(
- method: any,
- args: any,
+ unique<Method extends (args: Args) => string, Args extends any[]>(
+ method: Method,
+ args: Args,
opts?: {
startTime?: number;
maxTime?: number;
maxRetries?: number;
currentIterations?: number;
- [key: string]: any;
+ exclude?: string | string[];
+ compare?: (obj: Record<string, string>, key: string) => 0 | -1;
}
- ): any {
+ ): string {
opts ||= {};
opts.startTime = new Date().getTime();
if (typeof opts.maxTime !== 'number') {
diff --git a/vendor/mersenne.js b/src/vendor/mersenne.ts
index 3ce1dec5..6a94522b 100644
--- a/vendor/mersenne.js
+++ b/src/vendor/mersenne.ts
@@ -7,89 +7,91 @@
// lines commented with /* and */ are original comments.
// lines commented with // are additional comments in this JavaScript version.
// before using this version, create at least one instance of MersenneTwister19937 class, and initialize the each state, given below in c comments, of all the instances.
-/*
- A C-program for MT19937, with initialization improved 2002/1/26.
- Coded by Takuji Nishimura and Makoto Matsumoto.
-
- Before using, initialize the state by using init_genrand(seed)
- or init_by_array(init_key, key_length).
-
- Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- 3. The names of its contributors may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/*
+ * A C-program for MT19937, with initialization improved 2002/1/26.
+ * Coded by Takuji Nishimura and Makoto Matsumoto.
+ *
+ * Before using, initialize the state by using init_genrand(seed)
+ * or init_by_array(init_key, key_length).
+ *
+ * Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of its contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *
+ * Any feedback is very welcome.
+ * http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
+ * email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)
+ */
- Any feedback is very welcome.
- http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
- email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)
-*/
+let dbg: number;
-function MersenneTwister19937() {
+function MersenneTwister19937(): void {
/* constants should be scoped inside the class */
- var N, M, MATRIX_A, UPPER_MASK, LOWER_MASK;
/* Period parameters */
//c//#define N 624
//c//#define M 397
//c//#define MATRIX_A 0x9908b0dfUL /* constant vector a */
//c//#define UPPER_MASK 0x80000000UL /* most significant w-r bits */
//c//#define LOWER_MASK 0x7fffffffUL /* least significant r bits */
- N = 624;
- M = 397;
- MATRIX_A = 0x9908b0df; /* constant vector a */
- UPPER_MASK = 0x80000000; /* most significant w-r bits */
- LOWER_MASK = 0x7fffffff; /* least significant r bits */
+ const N = 624;
+ const M = 397;
+ const MATRIX_A = 0x9908b0df; /* constant vector a */
+ const UPPER_MASK = 0x80000000; /* most significant w-r bits */
+ const LOWER_MASK = 0x7fffffff; /* least significant r bits */
//c//static unsigned long mt[N]; /* the array for the state vector */
//c//static int mti=N+1; /* mti==N+1 means mt[N] is not initialized */
- var mt = new Array(N); /* the array for the state vector */
- var mti = N + 1; /* mti==N+1 means mt[N] is not initialized */
+ const mt: number[] = new Array(N); /* the array for the state vector */
+ let mti = N + 1; /* mti==N+1 means mt[N] is not initialized */
- function unsigned32(n1) {
+ function unsigned32(n1: number): number {
// returns a 32-bits unsiged integer from an operand to which applied a bit operator.
return n1 < 0 ? (n1 ^ UPPER_MASK) + UPPER_MASK : n1;
}
- function subtraction32(n1, n2) {
+ function subtraction32(n1: number, n2: number): number {
// emulates lowerflow of a c 32-bits unsiged integer variable, instead of the operator -. these both arguments must be non-negative integers expressible using unsigned 32 bits.
return n1 < n2
? unsigned32((0x100000000 - (n2 - n1)) & 0xffffffff)
: n1 - n2;
}
- function addition32(n1, n2) {
+ function addition32(n1: number, n2: number): number {
// emulates overflow of a c 32-bits unsiged integer variable, instead of the operator +. these both arguments must be non-negative integers expressible using unsigned 32 bits.
return unsigned32((n1 + n2) & 0xffffffff);
}
- function multiplication32(n1, n2) {
+ function multiplication32(n1: number, n2: number): number {
// emulates overflow of a c 32-bits unsiged integer variable, instead of the operator *. these both arguments must be non-negative integers expressible using unsigned 32 bits.
- var sum = 0;
- for (var i = 0; i < 32; ++i) {
+ let sum = 0;
+ for (let i = 0; i < 32; ++i) {
if ((n1 >>> i) & 0x1) {
sum = addition32(sum, unsigned32(n2 << i));
}
@@ -99,7 +101,7 @@ function MersenneTwister19937() {
/* initializes mt[N] with a seed */
//c//void init_genrand(unsigned long s)
- this.init_genrand = function (s) {
+ this.init_genrand = function (s: number) {
//c//mt[0]= s & 0xffffffff;
mt[0] = unsigned32(s & 0xffffffff);
for (mti = 1; mti < N; mti++) {
@@ -128,13 +130,11 @@ function MersenneTwister19937() {
/* slight change for C++, 2004/2/26 */
//c//void init_by_array(unsigned long init_key[], int key_length)
this.init_by_array = function (init_key, key_length) {
- //c//int i, j, k;
- var i, j, k;
//c//init_genrand(19650218);
this.init_genrand(19650218);
- i = 1;
- j = 0;
- k = N > key_length ? N : key_length;
+ let i = 1;
+ let j = 0;
+ let k = N > key_length ? N : key_length;
for (; k; k--) {
//c//mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525))
//c// + init_key[j] + j; /* non linear */
@@ -189,20 +189,20 @@ function MersenneTwister19937() {
};
/* moved outside of genrand_int32() by jwatte 2010-11-17; generate less garbage */
- var mag01 = [0x0, MATRIX_A];
+ const mag01 = [0x0, MATRIX_A];
/* generates a random number on [0,0xffffffff]-interval */
//c//unsigned long genrand_int32(void)
this.genrand_int32 = function () {
//c//unsigned long y;
//c//static unsigned long mag01[2]={0x0UL, MATRIX_A};
- var y;
+ let y: number;
/* mag01[x] = x * MATRIX_A for x=0,1 */
if (mti >= N) {
/* generate N words at one time */
//c//int kk;
- var kk;
+ let kk: number;
if (mti == N + 1) {
/* if init_genrand() has not been called, */
@@ -246,14 +246,14 @@ function MersenneTwister19937() {
/* generates a random number on [0,0x7fffffff]-interval */
//c//long genrand_int31(void)
- this.genrand_int31 = function () {
+ this.genrand_int31 = function (): number {
//c//return (genrand_int32()>>1);
return this.genrand_int32() >>> 1;
};
/* generates a random number on [0,1]-real-interval */
//c//double genrand_real1(void)
- this.genrand_real1 = function () {
+ this.genrand_real1 = function (): number {
//c//return genrand_int32()*(1.0/4294967295.0);
return this.genrand_int32() * (1.0 / 4294967295.0);
/* divided by 2^32-1 */
@@ -261,7 +261,7 @@ function MersenneTwister19937() {
/* generates a random number on [0,1)-real-interval */
//c//double genrand_real2(void)
- this.genrand_real2 = function () {
+ this.genrand_real2 = function (): number {
//c//return genrand_int32()*(1.0/4294967296.0);
return this.genrand_int32() * (1.0 / 4294967296.0);
/* divided by 2^32 */
@@ -269,7 +269,7 @@ function MersenneTwister19937() {
/* generates a random number on (0,1)-real-interval */
//c//double genrand_real3(void)
- this.genrand_real3 = function () {
+ this.genrand_real3 = function (): number {
//c//return ((genrand_int32()) + 0.5)*(1.0/4294967296.0);
return (this.genrand_int32() + 0.5) * (1.0 / 4294967296.0);
/* divided by 2^32 */
@@ -277,9 +277,9 @@ function MersenneTwister19937() {
/* generates a random number on [0,1) with 53-bit resolution*/
//c//double genrand_res53(void)
- this.genrand_res53 = function () {
+ this.genrand_res53 = function (): number {
//c//unsigned long a=genrand_int32()>>5, b=genrand_int32()>>6;
- var a = this.genrand_int32() >>> 5,
+ const a = this.genrand_int32() >>> 5,
b = this.genrand_int32() >>> 6;
return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0);
};
@@ -289,4 +289,4 @@ function MersenneTwister19937() {
// Exports: Public API
// Export the twister class
-exports.MersenneTwister19937 = MersenneTwister19937;
+export default MersenneTwister19937;
diff --git a/vendor/unique.js b/src/vendor/unique.ts
index 2a956f5d..1fc80d5f 100644
--- a/vendor/unique.js
+++ b/src/vendor/unique.ts
@@ -1,30 +1,31 @@
-// the `unique` module
-var unique = {};
-
// global results store
// currently uniqueness is global to entire faker instance
// this means that faker should currently *never* return duplicate values across all API methods when using `Faker.unique`
// it's possible in the future that some users may want to scope found per function call instead of faker instance
-var found = {};
+const found: Record<string, string> = {};
// global exclude list of results
// defaults to nothing excluded
-var exclude = [];
+const exclude: string[] = [];
// current iteration or retries of unique.exec ( current loop depth )
-var currentIterations = 0;
+let currentIterations = 0;
// uniqueness compare function
// default behavior is to check value as key against object hash
-var defaultCompare = function (obj, key) {
+function defaultCompare<T, Key extends keyof T>(obj: T, key: Key): 0 | -1 {
if (typeof obj[key] === 'undefined') {
return -1;
}
return 0;
-};
+}
// common error handler for messages
-unique.errorMessage = function (now, code, opts) {
+function errorMessage(
+ now: number,
+ code: string,
+ opts: { startTime: number }
+): never {
console.error('error', code);
console.log(
'found',
@@ -39,12 +40,23 @@ unique.errorMessage = function (now, code, opts) {
code +
' for uniqueness check \n\nMay not be able to generate any more unique values with current settings. \nTry adjusting maxTime or maxRetries parameters for faker.unique()'
);
-};
-
-unique.exec = function (method, args, opts) {
- //console.log(currentIterations)
-
- var now = new Date().getTime();
+}
+
+// TODO @Shinigami92 2022-01-24: We should investigate deeper into the types
+// Especially the `opts.compare` parameter and `Result` type
+export function exec<Method extends (args: Args) => string, Args extends any[]>(
+ method: Method,
+ args: Args,
+ opts: {
+ maxTime?: number;
+ maxRetries?: number;
+ exclude?: string | string[];
+ compare?: (obj: Record<string, string>, key: string) => 0 | -1;
+ currentIterations?: number;
+ startTime?: number;
+ }
+): string {
+ const now = new Date().getTime();
opts = opts || {};
opts.maxTime = opts.maxTime || 3;
@@ -60,7 +72,7 @@ unique.exec = function (method, args, opts) {
opts.startTime = new Date().getTime();
}
- var startTime = opts.startTime;
+ const startTime = opts.startTime;
// support single exclude argument as string
if (typeof opts.exclude === 'string') {
@@ -73,19 +85,25 @@ unique.exec = function (method, args, opts) {
// console.log(now - startTime)
if (now - startTime >= opts.maxTime) {
- return unique.errorMessage(now, 'Exceeded maxTime:' + opts.maxTime, opts);
+ return errorMessage(
+ now,
+ 'Exceeded maxTime:' + opts.maxTime,
+ // @ts-expect-error: we know that opts.startTime is defined
+ opts
+ );
}
if (opts.currentIterations >= opts.maxRetries) {
- return unique.errorMessage(
+ return errorMessage(
now,
'Exceeded maxRetries:' + opts.maxRetries,
+ // @ts-expect-error: we know that opts.startTime is defined
opts
);
}
- // execute the provided method to find a potential satifised value
- var result = method.apply(this, args);
+ // execute the provided method to find a potential satisfied value
+ const result: string = method.apply(this, args);
// if the result has not been previously found, add it to the found array and return the value as it's unique
if (
@@ -98,8 +116,6 @@ unique.exec = function (method, args, opts) {
} else {
// console.log('conflict', result);
opts.currentIterations++;
- return unique.exec(method, args, opts);
+ return exec(method, args, opts);
}
-};
-
-module.exports = unique;
+}
diff --git a/vendor/user-agent.js b/src/vendor/user-agent.ts
index 487d36f4..4aef3381 100644
--- a/vendor/user-agent.js
+++ b/src/vendor/user-agent.ts
@@ -1,35 +1,40 @@
/*
-
-Copyright (c) 2012-2014 Jeffrey Mealo
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
-to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-------------------------------------------------------------------------------------------------------------------------
-
-Based loosely on Luka Pusic's PHP Script: http://360percents.com/posts/php-random-user-agent-generator/
-
-The license for that script is as follows:
-
-"THE BEER-WARE LICENSE" (Revision 42):
-
-<[email protected]> wrote this file. As long as you retain this notice you can do whatever you want with this stuff.
-If we meet some day, and you think this stuff is worth it, you can buy me a beer in return. Luka Pusic
-
-*/
-
-exports.generate = function generate(faker) {
- function rnd(a, b) {
+ * Copyright (c) 2012-2014 Jeffrey Mealo
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
+ * documentation files (the "Software"), to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
+ * to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * ------------------------------------------------------------------------------------------------------------------------
+ *
+ * Based loosely on Luka Pusic's PHP Script: http://360percents.com/posts/php-random-user-agent-generator/
+ *
+ * The license for that script is as follows:
+ *
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ *
+ * <[email protected]> wrote this file. As long as you retain this notice you can do whatever you want with this stuff.
+ * If we meet some day, and you think this stuff is worth it, you can buy me a beer in return. Luka Pusic
+ */
+
+import type { Faker } from '..';
+
+export type Arch = 'lin' | 'mac' | 'win';
+
+export function generate(faker: Faker) {
+ function rnd(
+ a?: string[] | number | Record<string, number>,
+ b?: number
+ ): string | number {
//calling rnd() with no arguments is identical to rnd(0, 100)
a = a || 0;
b = b || 100;
@@ -39,21 +44,20 @@ exports.generate = function generate(faker) {
return faker.datatype.number({ min: a, max: b });
}
- if (Object.prototype.toString.call(a) === '[object Array]') {
+ if (Array.isArray(a)) {
//returns a random element from array (a), even weighting
return faker.random.arrayElement(a);
}
if (a && typeof a === 'object') {
//returns a random key from the passed object; keys are weighted by the decimal probability in their value
- return (function (obj) {
- var rand = rnd(0, 100) / 100,
- min = 0,
- max = 0,
- key,
- return_val;
+ return ((obj) => {
+ const rand = (rnd(0, 100) as number) / 100;
+ let min = 0;
+ let max = 0;
+ let return_val: string;
- for (key in obj) {
+ for (let key in obj) {
if (obj.hasOwnProperty(key)) {
max = obj[key] + min;
return_val = key;
@@ -73,7 +77,7 @@ exports.generate = function generate(faker) {
);
}
- function randomLang() {
+ function randomLang(): string | number {
return rnd([
'AB',
'AF',
@@ -174,27 +178,27 @@ exports.generate = function generate(faker) {
]);
}
- function randomBrowserAndOS() {
- var browser = rnd({
- chrome: 0.45132810566,
- iexplorer: 0.27477061836,
- firefox: 0.19384170608,
- safari: 0.06186781118,
- opera: 0.01574236955,
- }),
- os = {
- 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'],
- };
+ function randomBrowserAndOS(): Array<string | number> {
+ const browser = rnd({
+ chrome: 0.45132810566,
+ iexplorer: 0.27477061836,
+ firefox: 0.19384170608,
+ safari: 0.06186781118,
+ opera: 0.01574236955,
+ });
+ const os = {
+ 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'],
+ };
return [browser, rnd(os[browser])];
}
- function randomProc(arch) {
- var procs = {
+ function randomProc(arch: Arch): string | number {
+ 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'],
@@ -202,50 +206,50 @@ exports.generate = function generate(faker) {
return rnd(procs[arch]);
}
- function randomRevision(dots) {
- var return_val = '';
+ function randomRevision(dots: number): string {
+ let return_val = '';
//generate a random revision
//dots = 2 returns .x.y where x & y are between 0 and 9
- for (var x = 0; x < dots; x++) {
+ for (let x = 0; x < dots; x++) {
return_val += '.' + rnd(0, 9);
}
return return_val;
}
- var version_string = {
- net: function () {
+ const version_string = {
+ net() {
return [rnd(1, 4), rnd(0, 9), rnd(10000, 99999), rnd(0, 9)].join('.');
},
- nt: function () {
+ nt() {
return rnd(5, 6) + '.' + rnd(0, 3);
},
- ie: function () {
+ ie() {
return rnd(7, 11);
},
- trident: function () {
+ trident() {
return rnd(3, 7) + '.' + rnd(0, 1);
},
- osx: function (delim) {
+ osx(delim?: string) {
return [10, rnd(5, 10), rnd(0, 9)].join(delim || '.');
},
- chrome: function () {
+ chrome() {
return [rnd(13, 39), 0, rnd(800, 899), 0].join('.');
},
- presto: function () {
+ presto() {
return '2.9.' + rnd(160, 190);
},
- presto2: function () {
+ presto2() {
return rnd(10, 12) + '.00';
},
- safari: function () {
+ safari() {
return rnd(531, 538) + '.' + rnd(0, 2) + '.' + rnd(0, 2);
},
};
- var browser = {
- firefox: function firefox(arch) {
+ const browser = {
+ firefox(arch: Arch): string {
//https://developer.mozilla.org/en-US/docs/Gecko_user_agent_string_reference
- var firefox_ver = rnd(5, 15) + randomRevision(2),
+ const firefox_ver = rnd(5, 15) + randomRevision(2),
gecko_ver = 'Gecko/20100101 Firefox/' + firefox_ver,
proc = randomProc(arch),
os_ver =
@@ -265,8 +269,8 @@ exports.generate = function generate(faker) {
);
},
- iexplorer: function iexplorer() {
- var ver = version_string.ie();
+ iexplorer(): string {
+ const ver = version_string.ie();
if (ver >= 11) {
//http://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx
@@ -292,9 +296,9 @@ exports.generate = function generate(faker) {
);
},
- opera: function opera(arch) {
+ opera(arch: Arch): string {
//http://www.opera.com/docs/history/
- var presto_ver =
+ const presto_ver =
' Presto/' +
version_string.presto() +
' Version/' +
@@ -326,8 +330,8 @@ exports.generate = function generate(faker) {
return 'Opera/' + rnd(9, 14) + '.' + rnd(0, 99) + ' ' + os_ver;
},
- safari: function safari(arch) {
- var safari = version_string.safari(),
+ safari(arch: Arch): string {
+ const safari = version_string.safari(),
ver = rnd(4, 7) + '.' + rnd(0, 1) + '.' + rnd(0, 10),
os_ver =
arch === 'mac'
@@ -354,8 +358,8 @@ exports.generate = function generate(faker) {
);
},
- chrome: function chrome(arch) {
- var safari = version_string.safari(),
+ chrome(arch: Arch): string {
+ const safari = version_string.safari(),
os_ver =
arch === 'mac'
? '(Macintosh; ' +
@@ -380,6 +384,6 @@ exports.generate = function generate(faker) {
},
};
- var random = randomBrowserAndOS();
+ const random = randomBrowserAndOS();
return browser[random[0]](random[1]);
-};
+}