miniorm
Version:
A lightweight, minimal TypeScript ORM & query‑builder for MySQL, PostgreSQL and SQLite
99 lines (98 loc) • 2.77 kB
TypeScript
type Operator = ' =' | ' <' | ' >' | ' <=' | ' >=' | ' <>' | ' !=';
type InOperator = ' IN ';
type LikeOperator = ' LIKE ' | ' NOT LIKE ';
type WithOperators<T> = {
[K in keyof T as `${K & string}${Operator}`]?: T[K];
};
type WithInOperator<T> = {
[K in keyof T as `${K & string}${InOperator}`]?: T[K][];
};
type WithLikeOperator<T> = {
[K in keyof T as `${K & string}${LikeOperator}`]?: T[K] | string;
};
export type WhereObject<T> = {
[K in keyof T]?: T[K] | 'IS NULL' | 'IS NOT NULL';
} & WithOperators<T> & WithInOperator<T> & WithLikeOperator<T> & {
_OR?: boolean;
_AND?: boolean;
};
export declare enum DatabaseColumnType {
NULL = "NULL",
INTEGER = "INTEGER",
INT = "INT",
TINYINT = "TINYINT",
SMALLINT = "SMALLINT",
MEDIUMINT = "MEDIUMINT",
BIGINT = "BIGINT",
UNSIGNED_BIG_INT = "UNSIGNED BIG INT",
INT2 = "INT2",
INT8 = "INT8",
BIT = "BIT",// MySQL
REAL = "REAL",
DOUBLE = "DOUBLE",
DOUBLE_PRECISION = "DOUBLE PRECISION",
FLOAT = "FLOAT",
TEXT = "TEXT",
CHARACTER = "CHARACTER",
CHAR = "CHAR",
VARCHAR = "VARCHAR",
VARYING_CHARACTER = "VARYING CHARACTER",
NCHAR = "NCHAR",
NATIVE_CHARACTER = "NATIVE CHARACTER",
NVARCHAR = "NVARCHAR",
CLOB = "CLOB",
TINYTEXT = "TINYTEXT",
MEDIUMTEXT = "MEDIUMTEXT",
LONGTEXT = "LONGTEXT",
NUMERIC = "NUMERIC",
DECIMAL = "DECIMAL",
BOOLEAN = "BOOLEAN",
BOOL = "BOOL",// MySQL
DATE = "DATE",
DATETIME = "DATETIME",
TIME = "TIME",
TIMESTAMP = "TIMESTAMP",
YEAR = "YEAR",// MySQL
BLOB = "BLOB",
BINARY = "BINARY",
VARBINARY = "VARBINARY",
TINYBLOB = "TINYBLOB",
MEDIUMBLOB = "MEDIUMBLOB",
LONGBLOB = "LONGBLOB",
ENUM = "ENUM",
SET = "SET",
JSON = "JSON",
GEOMETRY = "GEOMETRY",
POINT = "POINT",
LINESTRING = "LINESTRING",
POLYGON = "POLYGON",
MULTIPOINT = "MULTIPOINT",
MULTILINESTRING = "MULTILINESTRING",
MULTIPOLYGON = "MULTIPOLYGON",
GEOMETRYCOLLECTION = "GEOMETRYCOLLECTION",
ANY = "ANY"
}
export interface DatabaseColumn {
name: string;
type: keyof typeof DatabaseColumnType;
primaryKey?: boolean;
notNull?: boolean;
unique?: boolean;
defaultValue?: string | number | boolean | null;
check?: string;
length?: number;
autoIncrement?: boolean;
collate?: string;
enum?: string[] | number[] | boolean[];
references?: {
table: string;
column: string;
onDelete?: 'SET NULL' | 'SET DEFAULT' | 'RESTRICT' | 'NO ACTION' | 'CASCADE';
onUpdate?: 'SET NULL' | 'SET DEFAULT' | 'RESTRICT' | 'NO ACTION' | 'CASCADE';
};
}
export interface SQLiteTable {
name: string;
columns: DatabaseColumn[];
}
export {};