Home / Class/ GenerateUniqueStreetAddress Class — drizzle-orm Architecture

GenerateUniqueStreetAddress Class — drizzle-orm Architecture

Architecture documentation for the GenerateUniqueStreetAddress class in Generators.ts from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  1054b61b_b48b_edf5_f7d5_53582dab5417["GenerateUniqueStreetAddress"]
  e5cee001_0354_7e76_ef0a_06dca71dc8ce["Generators.ts"]
  1054b61b_b48b_edf5_f7d5_53582dab5417 -->|defined in| e5cee001_0354_7e76_ef0a_06dca71dc8ce
  9da05167_80c6_e057_92b7_994ab2f4899b["init()"]
  1054b61b_b48b_edf5_f7d5_53582dab5417 -->|method| 9da05167_80c6_e057_92b7_994ab2f4899b
  fc0bcf81_b23c_cf17_c1e2_83da990b111e["generate()"]
  1054b61b_b48b_edf5_f7d5_53582dab5417 -->|method| fc0bcf81_b23c_cf17_c1e2_83da990b111e

Relationship Graph

Source Code

drizzle-seed/src/services/Generators.ts lines 2244–2335

export class GenerateUniqueStreetAddress extends AbstractGenerator<{ isUnique?: boolean }> {
	static override readonly entityKind: string = 'GenerateUniqueStreetAddress';

	private state: {
		rng: prand.RandomGenerator;
		possStreetNameObjs: {
			indicesGen: GenerateUniqueInt;
			maxUniqueStreetNamesNumber: number;
			count: number;
			arraysToChooseFrom: string[][];
		}[];
	} | undefined;
	public override isUnique = true;

	override init({ count, seed }: { count: number; seed: number }) {
		const streetNumberStrs = Array.from({ length: 999 }, (_, i) => String(i + 1));
		const maxUniqueStreetnamesNumber = streetNumberStrs.length * firstNames.length * streetSuffix.length
			+ streetNumberStrs.length * firstNames.length * streetSuffix.length;

		if (count > maxUniqueStreetnamesNumber) {
			throw new RangeError(
				`count exceeds max number of unique street names(${maxUniqueStreetnamesNumber}).`,
			);
		}

		const maxStreetAddressLength = 4 + Math.max(maxFirstNameLength, maxLastNameLength) + 1 + maxStreetSuffixLength;
		if (this.stringLength !== undefined && this.stringLength < maxStreetAddressLength) {
			throw new Error(
				`You can't use street address generator with a db column length restriction of ${this.stringLength}. Set the maximum string length to at least ${maxStreetAddressLength}.`,
			);
		}

		const rng = prand.xoroshiro128plus(seed);
		// ["1", "2", ..., "999"]

		const possStreetNameObjs = [
			{
				indicesGen: new GenerateUniqueInt({
					minValue: 0,
					maxValue: streetNumberStrs.length * firstNames.length * streetSuffix.length - 1,
				}),
				maxUniqueStreetNamesNumber: streetNumberStrs.length * firstNames.length * streetSuffix.length,
				count: 0,
				arraysToChooseFrom: [streetNumberStrs, firstNames, streetSuffix],
			},
			{
				indicesGen: new GenerateUniqueInt({
					minValue: 0,
					maxValue: streetNumberStrs.length * lastNames.length * streetSuffix.length - 1,
				}),
				maxUniqueStreetNamesNumber: streetNumberStrs.length * firstNames.length * streetSuffix.length,
				count: 0,
				arraysToChooseFrom: [streetNumberStrs, lastNames, streetSuffix],
			},
		];

		for (const possStreetNameObj of possStreetNameObjs) {
			possStreetNameObj.indicesGen.skipCheck = true;
			possStreetNameObj.indicesGen.init({ count, seed });
		}

		this.state = { rng, possStreetNameObjs };
	}

	generate() {
		if (this.state === undefined) {
			throw new Error('state is not defined.');
		}

		let streetNameObjIdx;
		[streetNameObjIdx, this.state.rng] = prand.uniformIntDistribution(
			0,
			this.state.possStreetNameObjs.length - 1,
			this.state.rng,
		);
		const streetNameObj = this.state.possStreetNameObjs[streetNameObjIdx]!;

		const idx = streetNameObj.indicesGen.generate() as number;
		const values = fastCartesianProduct(streetNameObj.arraysToChooseFrom, idx) as string[];

		streetNameObj.count += 1;

Domain

Frequently Asked Questions

What is the GenerateUniqueStreetAddress class?
GenerateUniqueStreetAddress is a class in the drizzle-orm codebase, defined in drizzle-seed/src/services/Generators.ts.
Where is GenerateUniqueStreetAddress defined?
GenerateUniqueStreetAddress is defined in drizzle-seed/src/services/Generators.ts at line 2244.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free