UNPKG

trilogy

Version:

TypeScript SQLite layer with support for both native C++ & pure JavaScript drivers.

50 lines (49 loc) 1.59 kB
import * as t from 'runtypes'; import { ColumnTypes } from './constants'; import { isFunction } from './util'; export const Index = t.Union(t.String, t.Array(t.Union(t.String, t.Array(t.String))), t.Dictionary(t.Union(t.String, t.Array(t.String)))); export const GroupClause = t.Union(t.String, t.Array(t.String)); export const OrderClause = t.Union(t.String, t.Tuple(t.String, t.String)); export const TrilogyOptions = t.Partial({ client: t.Union(t.Literal('sqlite3'), t.Literal('sql.js')), dir: t.String }); export const ModelOptions = t.Partial({ index: Index, primary: t.Array(t.String), unique: t.Array(t.String), timestamps: t.Boolean }); export const AggregateOptions = t.Partial({ distinct: t.Boolean, group: GroupClause, order: OrderClause }); export const CreateOptions = t.Partial({ raw: t.Boolean }); export const FindOptions = t.Partial({ limit: t.Number, order: OrderClause, random: t.Boolean, raw: t.Boolean, skip: t.Number }); export const UpdateOptions = t.Partial({ raw: t.Boolean }); export const ColumnKind = t.Union(t.String, t.Function).withConstraint(value => { const type = isFunction(value) ? value.name : String(value); return type.toLowerCase() in ColumnTypes; }, { name: 'ColumnKind' }); export const ColumnDescriptor = t.Partial({ defaultTo: t.Unknown, index: t.String, notNullable: t.Boolean, nullable: t.Boolean, primary: t.Boolean, unique: t.Boolean, type: ColumnKind, get: t.Function, set: t.Function });