# core/factories/seed.factory.ts

> 15 lines of code and 5 definitions.

Tree: GovLab Patterns
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/patterns#file-patterns-core-factories-seed-factory-ts
Source text: https://banes-lab.com/source/patterns/core/factories/seed.factory.ts.txt

Listed in [core/factories](https://banes-lab.com/api/source/patterns/core/factories.md), after [core/factories/representation.factory.ts](https://banes-lab.com/source/patterns/core/factories/representation.factory.ts.md).

## Definitions

- `MODULUS` (lexical_declaration, line 3)
- `MULTIPLIER` (lexical_declaration, line 4)
- `createRng` (lexical_declaration, line 6, exported)
- `state` (lexical_declaration, line 7, exported)
- `next` (method_definition, line 12, exported)

## Contained in

- [core/factories](https://banes-lab.com/anatomy/patterns/folder-patterns-core-factories.md)

## Source

```typescript
import type { Rng } from "#types/seed.types";

const MODULUS = 2_147_483_647;
const MULTIPLIER = 16_807;

export const createRng = function createRng(seed: number): Rng {
    let state = Math.abs(Math.floor(seed)) % MODULUS;
    if (state === 0) {
        state = 1;
    }
    return {
        next(): number {
            state = (state * MULTIPLIER) % MODULUS;
            return state / MODULUS;
        },
    };
};
```
