Skip to content

Commit 31ff094

Browse files
committed
fix(cli): require datasource url for running migration and db push commands
1 parent 71ee094 commit 31ff094

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

packages/cli/src/actions/action-utils.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,11 @@ function findUp<Multiple extends boolean = false>(
135135
}
136136
return findUp(names, up, multiple, result);
137137
}
138+
139+
export async function requireDataSourceUrl(schemaFile: string) {
140+
const zmodel = await loadSchemaDocument(schemaFile);
141+
const dataSource = zmodel.declarations.find(isDataSource);
142+
if (!dataSource?.fields.some((f) => f.name === 'url')) {
143+
throw new CliError('The schema\'s "datasource" must have a "url" field to use this command.');
144+
}
145+
}

packages/cli/src/actions/db.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import fs from 'node:fs';
22
import { execPrisma } from '../utils/exec-utils';
3-
import { generateTempPrismaSchema, getSchemaFile, handleSubProcessError } from './action-utils';
3+
import { generateTempPrismaSchema, getSchemaFile, handleSubProcessError, requireDataSourceUrl } from './action-utils';
44

55
type Options = {
66
schema?: string;
@@ -20,8 +20,12 @@ export async function run(command: string, options: Options) {
2020
}
2121

2222
async function runPush(options: Options) {
23-
// generate a temp prisma schema file
2423
const schemaFile = getSchemaFile(options.schema);
24+
25+
// validate datasource url exists
26+
await requireDataSourceUrl(schemaFile);
27+
28+
// generate a temp prisma schema file
2529
const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);
2630

2731
try {

packages/cli/src/actions/migrate.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import fs from 'node:fs';
22
import path from 'node:path';
33
import { CliError } from '../cli-error';
44
import { execPrisma } from '../utils/exec-utils';
5-
import { generateTempPrismaSchema, getSchemaFile } from './action-utils';
5+
import { generateTempPrismaSchema, getSchemaFile, requireDataSourceUrl } from './action-utils';
66
import { run as runSeed } from './seed';
77

88
type CommonOptions = {
@@ -34,6 +34,10 @@ type ResolveOptions = CommonOptions & {
3434
*/
3535
export async function run(command: string, options: CommonOptions) {
3636
const schemaFile = getSchemaFile(options.schema);
37+
38+
// validate datasource url exists
39+
await requireDataSourceUrl(schemaFile);
40+
3741
const prismaSchemaDir = options.migrations ? path.dirname(options.migrations) : undefined;
3842
const prismaSchemaFile = await generateTempPrismaSchema(schemaFile, prismaSchemaDir);
3943

0 commit comments

Comments
 (0)