/
Validate.ts
78 lines (58 loc) · 1.75 KB
/
Validate.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import type { Command } from '@prisma/internals'
import { arg, format, getConfig, getDMMF, HelpError, loadEnvFile } from '@prisma/internals'
import { getSchemaPathAndPrint } from '@prisma/migrate'
import chalk from 'chalk'
import fs from 'fs'
/**
* $ prisma validate
*/
export class Validate implements Command {
public static new(): Validate {
return new Validate()
}
private static help = format(`
Validate a Prisma schema.
${chalk.bold('Usage')}
${chalk.dim('$')} prisma validate [options]
${chalk.bold('Options')}
-h, --help Display this help message
--schema Custom path to your Prisma schema
${chalk.bold('Examples')}
With an existing Prisma schema
${chalk.dim('$')} prisma validate
Or specify a Prisma schema path
${chalk.dim('$')} prisma validate --schema=./schema.prisma
`)
public async parse(argv: string[]): Promise<string | Error> {
const args = arg(argv, {
'--help': Boolean,
'-h': '--help',
'--schema': String,
'--telemetry-information': String,
})
if (args instanceof Error) {
return this.help(args.message)
}
if (args['--help']) {
return this.help()
}
loadEnvFile(args['--schema'], true)
const schemaPath = await getSchemaPathAndPrint(args['--schema'])
const schema = fs.readFileSync(schemaPath, 'utf-8')
// TODO is the order of getDMMF / getConfig important
await getDMMF({
datamodel: schema,
})
await getConfig({
datamodel: schema,
})
return `The schema at ${chalk.underline(schemaPath)} is valid 🚀`
}
// help message
public help(error?: string): string | HelpError {
if (error) {
return new HelpError(`\n${chalk.bold.red(`!`)} ${error}\n${Validate.help}`)
}
return Validate.help
}
}