aboutsummaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
authorDivisionByZero <[email protected]>2024-09-26 17:50:05 +0200
committerGitHub <[email protected]>2024-09-26 17:50:05 +0200
commit9537dfddba882bd93d9a429697fd44bc72428426 (patch)
treef60b5b694d5e4e8ddab228aeb20c7b7746685edc /src/utils
parent424b120a4d94b15b6e77c04a0aaffd0016a9c870 (diff)
downloadfaker-9537dfddba882bd93d9a429697fd44bc72428426.tar.xz
faker-9537dfddba882bd93d9a429697fd44bc72428426.zip
infra: update file structure for util/internal (#3141)
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/mersenne.ts48
-rw-r--r--src/utils/types.ts39
2 files changed, 48 insertions, 39 deletions
diff --git a/src/utils/mersenne.ts b/src/utils/mersenne.ts
new file mode 100644
index 00000000..de415f91
--- /dev/null
+++ b/src/utils/mersenne.ts
@@ -0,0 +1,48 @@
+import { MersenneTwister19937 } from '../internal/mersenne';
+import type { Randomizer } from '../randomizer';
+
+/**
+ * Generates a MersenneTwister19937 randomizer with 32 bits of precision.
+ * This is the default randomizer used by faker prior to v9.0.
+ */
+export function generateMersenne32Randomizer(): Randomizer {
+ const twister = new MersenneTwister19937();
+
+ twister.initGenrand(Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER));
+
+ return {
+ next(): number {
+ return twister.genrandReal2();
+ },
+ seed(seed: number | number[]): void {
+ if (typeof seed === 'number') {
+ twister.initGenrand(seed);
+ } else if (Array.isArray(seed)) {
+ twister.initByArray(seed, seed.length);
+ }
+ },
+ };
+}
+
+/**
+ * Generates a MersenneTwister19937 randomizer with 53 bits of precision.
+ * This is the default randomizer used by faker starting with v9.0.
+ */
+export function generateMersenne53Randomizer(): Randomizer {
+ const twister = new MersenneTwister19937();
+
+ twister.initGenrand(Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER));
+
+ return {
+ next(): number {
+ return twister.genrandRes53();
+ },
+ seed(seed: number | number[]): void {
+ if (typeof seed === 'number') {
+ twister.initGenrand(seed);
+ } else if (Array.isArray(seed)) {
+ twister.initByArray(seed, seed.length);
+ }
+ },
+ };
+}
diff --git a/src/utils/types.ts b/src/utils/types.ts
deleted file mode 100644
index affdda7e..00000000
--- a/src/utils/types.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Type that provides auto-suggestions but also any string.
- *
- * @see https://github.com/microsoft/TypeScript/issues/29729#issuecomment-471566609
- */
-export type LiteralUnion<TSuggested extends TBase, TBase = string> =
- | TSuggested
- | (TBase & { zz_IGNORE_ME?: never });
-
-/**
- * A function that returns a value.
- *
- * `Function` cannot be used instead because it doesn't accept class declarations.
- * These would fail when invoked since they are invoked without the `new` keyword.
- */
-export type Callable = (
- // TODO @Shinigami92 2023-02-14: This `any` type can be fixed by anyone if they want to.
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- ...args: any[]
-) => unknown;
-
-/**
- * Type that represents a single method/function name of the given type.
- */
-export type MethodOf<TObjectType, TSignature extends Callable = Callable> = {
- [Key in keyof TObjectType]: TObjectType[Key] extends TSignature
- ? Key extends string
- ? Key
- : never
- : never;
-}[keyof TObjectType];
-
-/**
- * Type that represents all method/function names of the given type.
- */
-export type MethodsOf<
- TObjectType,
- TSignature extends Callable = Callable,
-> = ReadonlyArray<MethodOf<TObjectType, TSignature>>;