trilogy
Version:
TypeScript SQLite layer with support for both native C++ & pure JavaScript drivers.
50 lines (49 loc) • 1.59 kB
JavaScript
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
});