diff --git a/src/faker.ts b/src/faker.ts index c42c313e787..62a3bf6fa65 100644 --- a/src/faker.ts +++ b/src/faker.ts @@ -1,5 +1,6 @@ import type { LocaleDefinition } from './definitions'; import { FakerError } from './errors/faker-error'; +import { MersenneModule } from './internal/mersenne/mersenne'; import type { KnownLocale } from './locales'; import { AddressModule } from './modules/address'; import { AnimalModule } from './modules/animal'; @@ -16,7 +17,6 @@ import { HelpersModule } from './modules/helpers'; import { ImageModule } from './modules/image'; import { InternetModule } from './modules/internet'; import { LoremModule } from './modules/lorem'; -import { MersenneModule } from './modules/mersenne'; import { MusicModule } from './modules/music'; import { NameModule } from './modules/name'; import { PhoneModule } from './modules/phone'; @@ -74,10 +74,9 @@ export class Faker { readonly definitions: LocaleDefinition = this.initDefinitions(); - /** - * @internal - */ - readonly mersenne: MersenneModule = new MersenneModule(); + /** @internal */ + private readonly _mersenne: MersenneModule = new MersenneModule(); + readonly random: RandomModule = new RandomModule(this); readonly helpers: HelpersModule = new HelpersModule(this); @@ -241,9 +240,9 @@ export class Faker { seed: number | number[] = Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER) ): number | number[] { if (Array.isArray(seed) && seed.length) { - this.mersenne.seed_array(seed); + this._mersenne.seed_array(seed); } else if (!Array.isArray(seed) && !isNaN(seed)) { - this.mersenne.seed(seed); + this._mersenne.seed(seed); } return seed; diff --git a/src/modules/mersenne/index.ts b/src/internal/mersenne/mersenne.ts similarity index 100% rename from src/modules/mersenne/index.ts rename to src/internal/mersenne/mersenne.ts diff --git a/src/modules/mersenne/twister.ts b/src/internal/mersenne/twister.ts similarity index 99% rename from src/modules/mersenne/twister.ts rename to src/internal/mersenne/twister.ts index 5859f3ae671..f7757842b1d 100644 --- a/src/modules/mersenne/twister.ts +++ b/src/internal/mersenne/twister.ts @@ -68,8 +68,9 @@ * 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) + * + * @internal */ - export default class MersenneTwister19937 { private readonly N = 624; private readonly M = 397; diff --git a/src/modules/datatype/index.ts b/src/modules/datatype/index.ts index 336f8f9f119..4c522d53b75 100644 --- a/src/modules/datatype/index.ts +++ b/src/modules/datatype/index.ts @@ -1,5 +1,6 @@ import type { Faker } from '../..'; import { FakerError } from '../../errors/faker-error'; +import type { MersenneModule } from '../../internal/mersenne/mersenne'; /** * Module to generate various primitive values and data types. @@ -54,8 +55,12 @@ export class DatatypeModule { throw new FakerError(`Max ${max} should be greater than min ${min}.`); } + const mersenne: MersenneModule = + // @ts-expect-error: access private member field + this.faker._mersenne; + const randomNumber = Math.floor( - this.faker.mersenne.rand(max / precision + 1, min / precision) + mersenne.rand(max / precision + 1, min / precision) ); // Workaround problem in float point arithmetics for e.g. 6681493 / 0.01 diff --git a/test/all_functional.spec.ts b/test/all_functional.spec.ts index f857b84c6de..5ae065becb0 100644 --- a/test/all_functional.spec.ts +++ b/test/all_functional.spec.ts @@ -8,7 +8,7 @@ const IGNORED_MODULES = [ 'definitions', 'fake', 'helpers', - 'mersenne', + '_mersenne', ]; function isTestableModule(mod: string) { diff --git a/test/mersenne.spec.ts b/test/mersenne.spec.ts index 62b65a69be6..6b0a3125a0a 100644 --- a/test/mersenne.spec.ts +++ b/test/mersenne.spec.ts @@ -1,6 +1,6 @@ import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; import { FakerError } from '../src/errors/faker-error'; -import { MersenneModule } from '../src/modules/mersenne'; +import { MersenneModule } from '../src/internal/mersenne/mersenne'; import { seededRuns } from './support/seededRuns'; const minMaxTestCases = [ diff --git a/test/scripts/apidoc/examplesAndDeprecations.spec.ts b/test/scripts/apidoc/examplesAndDeprecations.spec.ts index 37d61399acb..772307a9d04 100644 --- a/test/scripts/apidoc/examplesAndDeprecations.spec.ts +++ b/test/scripts/apidoc/examplesAndDeprecations.spec.ts @@ -32,15 +32,13 @@ describe('examples and deprecations', () => { const modules: Record = selectApiModules( project - ) - .filter((module) => module.name !== 'MersenneModule') - .reduce( - (a, v) => ({ - ...a, - [v.name]: v.getChildrenByKind(ReflectionKind.Method), - }), - {} - ); + ).reduce( + (a, v) => ({ + ...a, + [v.name]: v.getChildrenByKind(ReflectionKind.Method), + }), + {} + ); const consoleSpies: Array = Object.keys(console) .filter((key) => typeof console[key] === 'function')