Home / Class/ GenerateValuesFromArray Class — drizzle-orm Architecture

GenerateValuesFromArray Class — drizzle-orm Architecture

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

Entity Profile

Dependency Diagram

graph TD
  ebde298b_d6a3_4062_c1b1_f4cfa069de7b["GenerateValuesFromArray"]
  e5cee001_0354_7e76_ef0a_06dca71dc8ce["Generators.ts"]
  ebde298b_d6a3_4062_c1b1_f4cfa069de7b -->|defined in| e5cee001_0354_7e76_ef0a_06dca71dc8ce
  b3c3a50c_06a8_f41b_767f_088142c03301["checks()"]
  ebde298b_d6a3_4062_c1b1_f4cfa069de7b -->|method| b3c3a50c_06a8_f41b_767f_088142c03301
  81c8cbf9_2fb1_f2b8_0172_4f36943e36bf["init()"]
  ebde298b_d6a3_4062_c1b1_f4cfa069de7b -->|method| 81c8cbf9_2fb1_f2b8_0172_4f36943e36bf
  86fb88c9_2a66_2c82_d020_863198e16aa0["generate()"]
  ebde298b_d6a3_4062_c1b1_f4cfa069de7b -->|method| 86fb88c9_2a66_2c82_d020_863198e16aa0

Relationship Graph

Source Code

drizzle-seed/src/services/Generators.ts lines 189–404

export class GenerateValuesFromArray extends AbstractGenerator<
	{
		values:
			| (number | string | boolean | undefined)[]
			| { weight: number; values: (number | string | boolean | undefined)[] }[];
		isUnique?: boolean;
		arraySize?: number;
	}
> {
	static override readonly entityKind: string = 'GenerateValuesFromArray';

	private state: {
		rng: prand.RandomGenerator;
		values:
			| (number | string | boolean | undefined)[]
			| { weight: number; values: (number | string | boolean | undefined)[] }[];
		genIndicesObj: GenerateUniqueInt | undefined;
		genIndicesObjList: GenerateUniqueInt[] | undefined;
		valuesWeightedIndices: number[] | undefined;
		genMaxRepeatedValuesCount: GenerateDefault | GenerateWeightedCount | undefined;
	} | undefined;
	public override timeSpent: number = 0;

	checks({ count }: { count: number }) {
		const { values } = this.params;
		const { maxRepeatedValuesCount, notNull, isUnique } = this;
		if (values.length === 0) {
			throw new Error('Values length equals zero.');
		}

		if (
			isObject(values[0])
			&& !(values as { weight: number; values: any[] }[]).every((val) => val.values.length !== 0)
		) {
			throw new Error('One of weighted values length equals zero.');
		}

		if (
			maxRepeatedValuesCount !== undefined && (
				(typeof maxRepeatedValuesCount === 'number' && maxRepeatedValuesCount <= 0)
				|| (typeof maxRepeatedValuesCount === 'object' && !maxRepeatedValuesCount
					.every((obj) =>
						(typeof obj.count) === 'number'
							? (obj.count as number) > 0
							: (obj.count as number[]).every((count) => count > 0)
					))
			)
		) {
			throw new Error('maxRepeatedValuesCount should be greater than zero.');
		}

		let allValuesCount = values.length;
		if (isObject(values[0])) {
			allValuesCount = (values as { values: any[] }[]).reduce((acc, currVal) => acc + currVal.values.length, 0);
		}

		if (
			notNull === true
			&& maxRepeatedValuesCount !== undefined
			&& (
				(!isObject(values[0]) && typeof maxRepeatedValuesCount === 'number'
					&& maxRepeatedValuesCount * values.length < count)
				|| (isObject(values[0]) && typeof maxRepeatedValuesCount === 'number'
					&& maxRepeatedValuesCount * allValuesCount < count)
			)
		) {
			throw new Error("Can't fill notNull column with null values.");
		}

		if (
			isUnique === true && maxRepeatedValuesCount !== undefined && (
				(typeof maxRepeatedValuesCount === 'number' && maxRepeatedValuesCount > 1)
				|| (typeof maxRepeatedValuesCount === 'object' && !maxRepeatedValuesCount
					.every((obj) =>
						(typeof obj.count) === 'number'
							? obj.count === 1
							: (obj.count as number[]).every((count) => count === 1)
					))
			)
		) {
			throw new Error("Can't be greater than 1 if column is unique.");

Domain

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free