This directory contains the crates that belong to the schema engine behind prisma-migrate.
The code and documentation for the executable binary are in the cli directory.
The core logic shared across connectors is in the core directory.
The connector interface and the built-in connectors are in the connectors directory.
The TypeScript CLI in prisma/prisma
interacts with the binary compiled from the cli crate. Some commands
are exposed through the CLI directly, like create-database
, but most of them
through the JSON-RPC API, which is the default command if you just run the
schema-engine
binary. These two sets of commands are separated because
previously, you needed a valid database connection to the database referenced
in the Prisma schema to start a schema engine instance, but we did not have
that requirement in commands like schema-engine cli create-database
. This
is legacy, as the JSON-RPC API now connects lazily.
The reason why we have a JSON-RPC API in the first place is so the TypeScript CLI can issue multiple commands on the same connection, get results back and act on them.
Logging and crash reporting happens through JSON logs on the Schema Engine's stderr. Every line contains a single JSON object conforming to the following interface:
interface StdErrLine {
timestamp: string;
level: LogLevel;
fields: LogFields;
}
interface LogFields {
message: string;
/// Only for ERROR level messages
is_panic?: boolean;
error_code?: string;
[key: string]: any;
}
type LogLevel = "INFO" | "ERROR" | "DEBUG" | "WARN";
0
: normal exit
1
: abnormal (error) exit
101
: panic
Non-zero exit codes should always be accompanied by a log message on stderr with
the ERROR
level.