From 31ff094cd50a9dc2d3fcab54914d7582524f862d Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Wed, 19 Nov 2025 17:19:38 -0800 Subject: [PATCH] fix(cli): require datasource url for running migration and db push commands --- packages/cli/src/actions/action-utils.ts | 8 ++++++++ packages/cli/src/actions/db.ts | 8 ++++++-- packages/cli/src/actions/migrate.ts | 6 +++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/actions/action-utils.ts b/packages/cli/src/actions/action-utils.ts index ed5ed238..e32d2f8a 100644 --- a/packages/cli/src/actions/action-utils.ts +++ b/packages/cli/src/actions/action-utils.ts @@ -135,3 +135,11 @@ function findUp( } return findUp(names, up, multiple, result); } + +export async function requireDataSourceUrl(schemaFile: string) { + const zmodel = await loadSchemaDocument(schemaFile); + const dataSource = zmodel.declarations.find(isDataSource); + if (!dataSource?.fields.some((f) => f.name === 'url')) { + throw new CliError('The schema\'s "datasource" must have a "url" field to use this command.'); + } +} diff --git a/packages/cli/src/actions/db.ts b/packages/cli/src/actions/db.ts index bd3d45a8..3d010837 100644 --- a/packages/cli/src/actions/db.ts +++ b/packages/cli/src/actions/db.ts @@ -1,6 +1,6 @@ import fs from 'node:fs'; import { execPrisma } from '../utils/exec-utils'; -import { generateTempPrismaSchema, getSchemaFile, handleSubProcessError } from './action-utils'; +import { generateTempPrismaSchema, getSchemaFile, handleSubProcessError, requireDataSourceUrl } from './action-utils'; type Options = { schema?: string; @@ -20,8 +20,12 @@ export async function run(command: string, options: Options) { } async function runPush(options: Options) { - // generate a temp prisma schema file const schemaFile = getSchemaFile(options.schema); + + // validate datasource url exists + await requireDataSourceUrl(schemaFile); + + // generate a temp prisma schema file const prismaSchemaFile = await generateTempPrismaSchema(schemaFile); try { diff --git a/packages/cli/src/actions/migrate.ts b/packages/cli/src/actions/migrate.ts index 916111c1..c0b5ffc4 100644 --- a/packages/cli/src/actions/migrate.ts +++ b/packages/cli/src/actions/migrate.ts @@ -2,7 +2,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { CliError } from '../cli-error'; import { execPrisma } from '../utils/exec-utils'; -import { generateTempPrismaSchema, getSchemaFile } from './action-utils'; +import { generateTempPrismaSchema, getSchemaFile, requireDataSourceUrl } from './action-utils'; import { run as runSeed } from './seed'; type CommonOptions = { @@ -34,6 +34,10 @@ type ResolveOptions = CommonOptions & { */ export async function run(command: string, options: CommonOptions) { const schemaFile = getSchemaFile(options.schema); + + // validate datasource url exists + await requireDataSourceUrl(schemaFile); + const prismaSchemaDir = options.migrations ? path.dirname(options.migrations) : undefined; const prismaSchemaFile = await generateTempPrismaSchema(schemaFile, prismaSchemaDir);