You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
230 lines
6.2 KiB
230 lines
6.2 KiB
export type Mode = 'text' | 'binary'
|
|
|
|
export type MessageName =
|
|
| 'parseComplete'
|
|
| 'bindComplete'
|
|
| 'closeComplete'
|
|
| 'noData'
|
|
| 'portalSuspended'
|
|
| 'replicationStart'
|
|
| 'emptyQuery'
|
|
| 'copyDone'
|
|
| 'copyData'
|
|
| 'rowDescription'
|
|
| 'parameterDescription'
|
|
| 'parameterStatus'
|
|
| 'backendKeyData'
|
|
| 'notification'
|
|
| 'readyForQuery'
|
|
| 'commandComplete'
|
|
| 'dataRow'
|
|
| 'copyInResponse'
|
|
| 'copyOutResponse'
|
|
| 'authenticationOk'
|
|
| 'authenticationMD5Password'
|
|
| 'authenticationCleartextPassword'
|
|
| 'authenticationSASL'
|
|
| 'authenticationSASLContinue'
|
|
| 'authenticationSASLFinal'
|
|
| 'error'
|
|
| 'notice'
|
|
|
|
export interface BackendMessage {
|
|
name: MessageName
|
|
length: number
|
|
}
|
|
|
|
export const parseComplete: BackendMessage = {
|
|
name: 'parseComplete',
|
|
length: 5,
|
|
}
|
|
|
|
export const bindComplete: BackendMessage = {
|
|
name: 'bindComplete',
|
|
length: 5,
|
|
}
|
|
|
|
export const closeComplete: BackendMessage = {
|
|
name: 'closeComplete',
|
|
length: 5,
|
|
}
|
|
|
|
export const noData: BackendMessage = {
|
|
name: 'noData',
|
|
length: 5,
|
|
}
|
|
|
|
export const portalSuspended: BackendMessage = {
|
|
name: 'portalSuspended',
|
|
length: 5,
|
|
}
|
|
|
|
export const replicationStart: BackendMessage = {
|
|
name: 'replicationStart',
|
|
length: 4,
|
|
}
|
|
|
|
export const emptyQuery: BackendMessage = {
|
|
name: 'emptyQuery',
|
|
length: 4,
|
|
}
|
|
|
|
export const copyDone: BackendMessage = {
|
|
name: 'copyDone',
|
|
length: 4,
|
|
}
|
|
|
|
interface NoticeOrError {
|
|
message: string | undefined
|
|
severity: string | undefined
|
|
code: string | undefined
|
|
detail: string | undefined
|
|
hint: string | undefined
|
|
position: string | undefined
|
|
internalPosition: string | undefined
|
|
internalQuery: string | undefined
|
|
where: string | undefined
|
|
schema: string | undefined
|
|
table: string | undefined
|
|
column: string | undefined
|
|
dataType: string | undefined
|
|
constraint: string | undefined
|
|
file: string | undefined
|
|
line: string | undefined
|
|
routine: string | undefined
|
|
}
|
|
|
|
export class DatabaseError extends Error implements NoticeOrError {
|
|
public severity: string | undefined
|
|
public code: string | undefined
|
|
public detail: string | undefined
|
|
public hint: string | undefined
|
|
public position: string | undefined
|
|
public internalPosition: string | undefined
|
|
public internalQuery: string | undefined
|
|
public where: string | undefined
|
|
public schema: string | undefined
|
|
public table: string | undefined
|
|
public column: string | undefined
|
|
public dataType: string | undefined
|
|
public constraint: string | undefined
|
|
public file: string | undefined
|
|
public line: string | undefined
|
|
public routine: string | undefined
|
|
constructor(message: string, public readonly length: number, public readonly name: MessageName) {
|
|
super(message)
|
|
}
|
|
}
|
|
|
|
export class CopyDataMessage {
|
|
public readonly name = 'copyData'
|
|
constructor(public readonly length: number, public readonly chunk: Buffer) {}
|
|
}
|
|
|
|
export class CopyResponse {
|
|
public readonly columnTypes: number[]
|
|
constructor(
|
|
public readonly length: number,
|
|
public readonly name: MessageName,
|
|
public readonly binary: boolean,
|
|
columnCount: number
|
|
) {
|
|
this.columnTypes = new Array(columnCount)
|
|
}
|
|
}
|
|
|
|
export class Field {
|
|
constructor(
|
|
public readonly name: string,
|
|
public readonly tableID: number,
|
|
public readonly columnID: number,
|
|
public readonly dataTypeID: number,
|
|
public readonly dataTypeSize: number,
|
|
public readonly dataTypeModifier: number,
|
|
public readonly format: Mode
|
|
) {}
|
|
}
|
|
|
|
export class RowDescriptionMessage {
|
|
public readonly name: MessageName = 'rowDescription'
|
|
public readonly fields: Field[]
|
|
constructor(public readonly length: number, public readonly fieldCount: number) {
|
|
this.fields = new Array(this.fieldCount)
|
|
}
|
|
}
|
|
|
|
export class ParameterDescriptionMessage {
|
|
public readonly name: MessageName = 'parameterDescription'
|
|
public readonly dataTypeIDs: number[]
|
|
constructor(public readonly length: number, public readonly parameterCount: number) {
|
|
this.dataTypeIDs = new Array(this.parameterCount)
|
|
}
|
|
}
|
|
|
|
export class ParameterStatusMessage {
|
|
public readonly name: MessageName = 'parameterStatus'
|
|
constructor(
|
|
public readonly length: number,
|
|
public readonly parameterName: string,
|
|
public readonly parameterValue: string
|
|
) {}
|
|
}
|
|
|
|
export class AuthenticationMD5Password implements BackendMessage {
|
|
public readonly name: MessageName = 'authenticationMD5Password'
|
|
constructor(public readonly length: number, public readonly salt: Buffer) {}
|
|
}
|
|
|
|
export class BackendKeyDataMessage {
|
|
public readonly name: MessageName = 'backendKeyData'
|
|
constructor(public readonly length: number, public readonly processID: number, public readonly secretKey: number) {}
|
|
}
|
|
|
|
export class NotificationResponseMessage {
|
|
public readonly name: MessageName = 'notification'
|
|
constructor(
|
|
public readonly length: number,
|
|
public readonly processId: number,
|
|
public readonly channel: string,
|
|
public readonly payload: string
|
|
) {}
|
|
}
|
|
|
|
export class ReadyForQueryMessage {
|
|
public readonly name: MessageName = 'readyForQuery'
|
|
constructor(public readonly length: number, public readonly status: string) {}
|
|
}
|
|
|
|
export class CommandCompleteMessage {
|
|
public readonly name: MessageName = 'commandComplete'
|
|
constructor(public readonly length: number, public readonly text: string) {}
|
|
}
|
|
|
|
export class DataRowMessage {
|
|
public readonly fieldCount: number
|
|
public readonly name: MessageName = 'dataRow'
|
|
constructor(public length: number, public fields: any[]) {
|
|
this.fieldCount = fields.length
|
|
}
|
|
}
|
|
|
|
export class NoticeMessage implements BackendMessage, NoticeOrError {
|
|
constructor(public readonly length: number, public readonly message: string | undefined) {}
|
|
public readonly name = 'notice'
|
|
public severity: string | undefined
|
|
public code: string | undefined
|
|
public detail: string | undefined
|
|
public hint: string | undefined
|
|
public position: string | undefined
|
|
public internalPosition: string | undefined
|
|
public internalQuery: string | undefined
|
|
public where: string | undefined
|
|
public schema: string | undefined
|
|
public table: string | undefined
|
|
public column: string | undefined
|
|
public dataType: string | undefined
|
|
public constraint: string | undefined
|
|
public file: string | undefined
|
|
public line: string | undefined
|
|
public routine: string | undefined
|
|
}
|
|
|