import type { DataSource, DMMF, GeneratorConfig } from '@prisma/generator-helper'; import { Fetch } from '../data-proxy/utils/request'; import { TracingConfig } from '../tracing/getTracingConfig'; import { EventEmitter } from './types/Events'; import { JsonQuery } from './types/JsonProtocol'; import type { Metrics, MetricsOptionsJson, MetricsOptionsPrometheus } from './types/Metrics'; import type { QueryEngineResult } from './types/QueryEngine'; import type * as Transaction from './types/Transaction'; export type NullableEnvValue = { fromEnvVar: string | null; value?: string | null; }; export type InlineDatasource = { url: NullableEnvValue; }; export type BatchTransactionOptions = { isolationLevel?: Transaction.IsolationLevel; }; export type TransactionOptions = { kind: 'itx'; options: InteractiveTransactionOptions; } | { kind: 'batch'; options: BatchTransactionOptions; }; export type InteractiveTransactionOptions = Transaction.InteractiveTransactionInfo; export type GraphQLQuery = { query: string; variables: object; }; export type EngineProtocol = 'graphql' | 'json'; export type EngineQuery = GraphQLQuery | JsonQuery; export type EngineBatchQueries = GraphQLQuery[] | JsonQuery[]; export type RequestOptions = { traceparent?: string; numTry?: number; interactiveTransaction?: InteractiveTransactionOptions; isWrite: boolean; customDataProxyFetch?: (fetch: Fetch) => Fetch; }; export type RequestBatchOptions = { transaction?: TransactionOptions; traceparent?: string; numTry?: number; containsWrite: boolean; customDataProxyFetch?: (fetch: Fetch) => Fetch; }; export type BatchQueryEngineResult = QueryEngineResult | Error; export declare abstract class Engine { abstract on(event: EngineEventType, listener: (args?: any) => any): void; abstract start(): Promise; abstract stop(): Promise; abstract getDmmf(): Promise; abstract version(forceRun?: boolean): Promise | string; abstract request(query: EngineQuery, options: RequestOptions): Promise>; abstract requestBatch(queries: EngineBatchQueries, options: RequestBatchOptions): Promise[]>; abstract transaction(action: 'start', headers: Transaction.TransactionHeaders, options?: Transaction.Options): Promise>; abstract transaction(action: 'commit', headers: Transaction.TransactionHeaders, info: Transaction.InteractiveTransactionInfo): Promise; abstract transaction(action: 'rollback', headers: Transaction.TransactionHeaders, info: Transaction.InteractiveTransactionInfo): Promise; abstract metrics(options: MetricsOptionsJson): Promise; abstract metrics(options: MetricsOptionsPrometheus): Promise; } export type EngineEventType = 'query' | 'info' | 'warn' | 'error' | 'beforeExit'; export interface DatasourceOverwrite { name: string; url?: string; env?: string; } export interface EngineConfig { cwd: string; dirname?: string; datamodelPath: string; enableDebugLogs?: boolean; allowTriggerPanic?: boolean; prismaPath?: string; generator?: GeneratorConfig; datasources?: DatasourceOverwrite[]; showColors?: boolean; logQueries?: boolean; logLevel?: 'info' | 'warn'; env: Record; flags?: string[]; clientVersion?: string; previewFeatures?: string[]; engineEndpoint?: string; activeProvider?: string; logEmitter: EventEmitter; engineProtocol: EngineProtocol; /** * The contents of the schema encoded into a string * @remarks only used for the purpose of data proxy */ inlineSchema?: string; /** * The contents of the datasource url saved in a string * @remarks only used for the purpose of data proxy */ inlineDatasources?: Record; /** * The string hash that was produced for a given schema * @remarks only used for the purpose of data proxy */ inlineSchemaHash?: string; /** * The configuration object for enabling tracing * @remarks enabling is determined by the client */ tracingConfig: TracingConfig; } export type GetConfigResult = { datasources: DataSource[]; generators: GeneratorConfig[]; };