@prisma-psm/core
Version:
PSM - Prisma SAFE MIGRATE: ferramenta CLI para migração segura de bancos Prisma com suporte avançado.
227 lines (198 loc) • 5.01 kB
text/typescript
export interface PSMField {
comment?:string
restore?: {
expression?:string
}
}
export interface UniqueOptions {
name:string,
fields:string[]
indexes:[]
}
export interface IndexOptions {
model:string,
type:"id"|"unique"|"normal"
name?:string
dbName?:string
isDefinedOnField?:boolean
algorithm:string
fields: ({ name:string })[]
}
export interface FieldOption {
"name": string
documentation?: string
psm?: PSMField
dbName?: string
"kind": "scalar"|"object"
"isList": boolean,
"isRequired": boolean,
"isUnique": boolean,
"isId": boolean,
"isReadOnly": boolean,
"hasDefaultValue": boolean,
"type": string,
"isGenerated": boolean,
"isUpdatedAt": boolean,
relationName?:string
relationFromFields?:string[]
relationToFields?:string[]
"default"?: {
"name": string,
"args": []
},
"nativeType"?: [
string,
[
"6"
]
],
}
export interface PSMParserOptions {
models:ModelOptions[]
indexes:IndexOptions[]
backup:string
sys:string
migration:string
shadow:string
}
export interface PSMModel {
view?:boolean
query?:{
[p:string]:string
}
backup?:{
skip?:boolean
clean?:boolean,
rev?:{
version?:string
apply?:"ALWAYS"|"WHEN"|"WHEN_EXCEPTION",
from?: "query"|"query:linked"|"relation"|"model"
expression?:string
exists?:string
when?:string
}
}
comment?:string
}
export interface ModelOptions {
name:string,
model:string,
index:number
documentation?:string,
psm?:PSMModel,
dbName?:string,
schema:string,
temp:string,
fields:FieldOption[]
primaryKey:FieldOption[]
uniqueFields:string[][]
uniqueIndexes:UniqueOptions[]
isGenerated:FieldOption[]
indexes:IndexOptions[]
}
export interface MigrationOptions {
sql:string
url:string,
label:string
}
export interface PSMMigrationOptions {
check:string,
core:string,
url:string,
migrate:string
}
export interface Migrated {
sid:string,
date: Date
}
export interface PSMMigratedOptions {
url:string,
sys:string
}
export interface PSMMigrationResult {
success?:boolean
messages?:string[]
error?:any
}
export interface PSMGenerator {
migrate():string,
check():string,
core():string,
}
export interface PSMMigrated {
messages:string[]
error?:any
success?:boolean
migrated?:Migrated[]
}
export interface PSMDumpResponse {
error?:Error,
output?:string
}
export interface PSMMigrator {
core():Promise<PSMMigrationResult>,
test():Promise<PSMMigrationResult>,
migrate():Promise<PSMMigrationResult>,
dump():Promise<PSMDumpResponse>,
}
export interface QueryBuilderResult {
sql:string,
template:string[],
values:any
push( ...builders:QueryBuilderResult[] ):void
}
export type ScriptLine = {
line:number,
filename: string,
error:Error,
column:number,
func:string
}
export type RevisionProps<Props extends {[p in keyof Props]:Props[p]}> = Props
export type RevisionWhen<Props> = boolean|( (props:RevisionProps<Props>)=>boolean)|( (props:RevisionProps<Props>)=>Promise<boolean>);
export interface RegistryOptions <Props>{
identifier?: string;
connection?: string|"default"|"standard"|"superuser";
unique?: boolean;
force?: string;
flags?: string[];
level?: "critical" | "normal" | "optional";
line?:ScriptLine,
when?:RevisionWhen<Props>
}
export interface SimpleFile {
filename: string;
}
export type PatchOptions<Props> = RegistryOptions<Props> & {
module?: NodeModule | SimpleFile
}
// Define o tipo de ouvinte de revisão que inclui tratamento de atualização
export type RevisionListener = {
onRegister?(error: Error, onRelease: () => void): void;
}
type SQLTemplate = ( sqlTemplate:TemplateStringsArray, ...values:any[] ) => QueryBuilderResult & {
sql:SQLTemplate
joins( ...builders:QueryBuilderResult[] ):void
}
export interface SqlPatch <Props>{
opts:RegistryOptions<Props> & PatchOptions<Props>
str: string | QueryBuilderResult;
values: any[] | RevisionListener;
listener?: RevisionListener;
line:ScriptLine
}
export interface PSMDriver {
migrated:( opts:PSMMigratedOptions )=>Promise<PSMMigrated>,
generator:( opts:PSMParserOptions )=>PSMGenerator,
migrator:( opts:PSMMigrationOptions ) =>PSMMigrator,
prepare: ( model:ModelOptions )=>Promise<any>|void,
// sql:SQLTemplate,
// joins( ...builders:QueryBuilderResult[] ):void
// patch <Props>(opts:PatchOptions<Props>, sql:QueryBuilderResult, listener?: RevisionListener):SqlPatch<Props>
// patchSQL <Props>(opts?:PatchOptions<Props>, listener?: RevisionListener):SQLTemplate
}
export interface DriverConfigs {
driver:string,
url:string,
sys:string,
}