UNPKG

rethinkts

Version:

A model system for RethinkDB, written in and for TypeScript.

40 lines (33 loc) 1.2 kB
import { createModelInfo, ModelInfo, modelInfoKey } from './model'; export interface ColumnInfo { modelKey: string; key: string; tags: string[]; primary?: boolean; secondary?: boolean; computed?: boolean; } export function Column(info?: Partial<ColumnInfo>): any { return (target: any, key: string, descriptor: PropertyDescriptor) => { let computed = false; if (descriptor) { if (!descriptor.get) { throw new Error('Cannot apply colum decorator to methods'); } computed = true; } const columnInfo: ColumnInfo = { modelKey: String(key), key: String(key), tags: [], computed, ...info, }; const modelInfo: ModelInfo = createModelInfo(<any> target.constructor, { columns: [columnInfo], tags: new Map(columnInfo.tags.map<[string, Set<string>]>(tag => [tag, new Set([columnInfo.key])])), }); columnInfo.secondary && modelInfo.indexes.push({ name: columnInfo.key, keys: [columnInfo.key] }); columnInfo.primary && (modelInfo.primaryKey = columnInfo.key); } }