drizzle-team/drizzle-orm · error · Error

Version should be in range [1, ${latestVersion}].

Error message

Version should be in range [1, ${latestVersion}].

What it means

generatePossibleGenerators accepts an options.version that selects which generator implementation revision to use. The valid range is [1, latestVersion] where latestVersion is currently 2. Passing NaN, zero, a negative number, or a version above latestVersion causes an immediate throw.

Source

Thrown at drizzle-seed/src/services/SeedService.ts:46

	// there is no max parameters number in mysql, so you can increase mysqlMaxParametersNumber if it's needed.
	private mysqlMaxParametersNumber = 100000;
	//  SQLITE_MAX_VARIABLE_NUMBER, which by default equals to 999 for SQLite versions prior to 3.32.0 (2020-05-22) or 32766 for SQLite versions after 3.32.0.
	private sqliteMaxParametersNumber = 32766;
	private version?: number;

	generatePossibleGenerators = (
		connectionType: 'postgresql' | 'mysql' | 'sqlite',
		tables: Table[],
		relations: (Relation & { isCyclic: boolean })[],
		refinements?: RefinementsType,
		options?: { count?: number; seed?: number; version?: number },
	) => {
		let columnPossibleGenerator: Prettify<GeneratePossibleGeneratorsColumnType>;
		let tablePossibleGenerators: Prettify<GeneratePossibleGeneratorsTableType>;
		const customSeed = options?.seed === undefined ? 0 : options.seed;
		this.version = options?.version === undefined ? latestVersion : options.version;
		if (Number.isNaN(this.version) || this.version < 1 || this.version > latestVersion) {
			throw new Error(`Version should be in range [1, ${latestVersion}].`);
		}

		// sorting table in order which they will be filled up (tables with foreign keys case)
		const { tablesInOutRelations } = this.getInfoFromRelations(relations);
		const orderedTablesNames = this.getOrderedTablesList(tablesInOutRelations);
		tables = tables.sort((table1, table2) => {
			const rel = relations.find((rel) => rel.table === table1.name && rel.refTable === table2.name);

			if (rel?.isCyclic === true) {
				const reverseRel = relations.find((rel) => rel.table === table2.name && rel.refTable === table1.name);
				return this.cyclicTablesCompare(table1, table2, rel, reverseRel);
			}

			const table1Order = orderedTablesNames.indexOf(
					table1.name,
				),
				table2Order = orderedTablesNames.indexOf(
					table2.name,

View on GitHub (pinned to b7862528fd)

Solutions

  1. Set options.version to 1 or 2 (or omit it entirely to default to latestVersion).
  2. If the version comes from an env var, validate/coerce it before passing: const v = Number(process.env.SEED_VERSION); options.version = Number.isNaN(v) ? undefined : v.
  3. Check the installed drizzle-seed version's apiVersion.ts for the current latestVersion before pinning.

Example fix

// before
await seed(db, { schema }, { version: 3 });
// after
await seed(db, { schema }, { version: 2 }); // or omit version entirely
Defensive patterns

Strategy: validation

Validate before calling

import { latestVersion } from 'drizzle-seed/services/apiVersion'; // or hardcode 2
function isValidVersion(v: unknown): v is number {
  return typeof v === 'number' && !Number.isNaN(v) && v >= 1 && v <= 2;
}
// Usage:
const version = isValidVersion(options.version) ? options.version : undefined; // undefined => defaults to latest

Type guard

function isSeedVersion(v: unknown): v is number {
  return typeof v === 'number' && Number.isInteger(v) && v >= 1 && v <= 2;
}

Prevention

When it happens

Trigger: Calling seed() with options.version set to 0, 3+, NaN, or a value from an unconfigured env variable (e.g. Number(process.env.SEED_VERSION) when the var is unset yields NaN).

Common situations: Upgrading drizzle-seed and accidentally passing an old/new version integer; reading version from an environment variable that is unset or mistyped; hard-coding a version that was removed in a newer release.

Related errors


AI-assisted analysis of drizzle-team/drizzle-orm@b7862528fd (2026-08-03). Data as JSON: /data/errors/c708b319da397a87.json. Report an issue: GitHub.