Home / Class/ GeneratePhoneNumber Class — drizzle-orm Architecture

GeneratePhoneNumber Class — drizzle-orm Architecture

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

Entity Profile

Dependency Diagram

graph TD
  06b964e7_b23f_279e_aab9_e842d84085a5["GeneratePhoneNumber"]
  e5cee001_0354_7e76_ef0a_06dca71dc8ce["Generators.ts"]
  06b964e7_b23f_279e_aab9_e842d84085a5 -->|defined in| e5cee001_0354_7e76_ef0a_06dca71dc8ce
  1e5fa5ec_0fe2_b4f4_c81b_d7c555a6ab40["init()"]
  06b964e7_b23f_279e_aab9_e842d84085a5 -->|method| 1e5fa5ec_0fe2_b4f4_c81b_d7c555a6ab40
  55b4a788_d2f7_de51_fa94_c8ef1823444e["generate()"]
  06b964e7_b23f_279e_aab9_e842d84085a5 -->|method| 55b4a788_d2f7_de51_fa94_c8ef1823444e

Relationship Graph

Source Code

drizzle-seed/src/services/Generators.ts lines 1887–2081

export class GeneratePhoneNumber extends AbstractGenerator<{
	template?: string;
	prefixes?: string[];
	generatedDigitsNumbers?: number | number[];
	arraySize?: number;
}> {
	static override readonly entityKind: string = 'GeneratePhoneNumber';

	private state: {
		rng: prand.RandomGenerator;
		placeholdersCount?: number;
		prefixesArray: string[];
		generatedDigitsNumbers: number[];
		generatorsMap: Map<string, GenerateUniqueInt>;
		phoneNumbersSet: Set<string>;
	} | undefined;
	public override isUnique = true;

	override init({ count, seed }: { count: number; seed: number }) {
		super.init({ count, seed });

		let { generatedDigitsNumbers } = this.params;
		const { prefixes, template } = this.params;

		const rng = prand.xoroshiro128plus(seed);

		if (template !== undefined) {
			if (this.stringLength !== undefined && this.stringLength < template.length) {
				throw new Error(
					`Length of phone number template is shorter than db column length restriction: ${this.stringLength}. 
					Set the maximum string length to at least ${template.length}.`,
				);
			}

			const iterArray = [...template.matchAll(/#/g)];
			const placeholdersCount = iterArray.length;

			const maxUniquePhoneNumbersCount = Math.pow(10, placeholdersCount);
			if (maxUniquePhoneNumbersCount < count) {
				throw new RangeError(
					`count exceeds max number of unique phone numbers(${maxUniquePhoneNumbersCount}).`,
				);
			}

			const generatorsMap = new Map<string, GenerateUniqueInt>();
			const genObj = new GenerateUniqueInt({ minValue: 0, maxValue: maxUniquePhoneNumbersCount - 1 });
			genObj.init({
				count,
				seed,
			});

			generatorsMap.set(
				template,
				genObj,
			);

			const prefixesArray: string[] = [];
			const generatedDigitsNumbers: number[] = [];
			const phoneNumbersSet = new Set<string>();

			this.state = { rng, placeholdersCount, generatorsMap, prefixesArray, generatedDigitsNumbers, phoneNumbersSet };
			return;
		}

		let prefixesArray: string[];
		if (prefixes === undefined || prefixes.length === 0) {
			prefixesArray = phonesInfo.map((phoneInfo) => phoneInfo.split(',').slice(0, -1).join(' '));
			generatedDigitsNumbers = phonesInfo.map((phoneInfo) => {
				// tokens = ["380","99","9"] =
				// = ["country prefix", "operator prefix", "number length including operator prefix and excluding country prefix"]
				const tokens = phoneInfo.split(',');
				const operatorPrefixLength = tokens[1]!.replaceAll(' ', '').length;

				return Number(tokens[2]) - operatorPrefixLength;
			});
		} else {
			prefixesArray = prefixes;
			if (typeof generatedDigitsNumbers === 'number') {
				generatedDigitsNumbers = Array.from<number>({ length: prefixes.length }).fill(
					generatedDigitsNumbers,
				);

Domain

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free