UNPKG

pims

Version:

An ORM for document-oriented database systems, written in and for TypeScript.

49 lines (42 loc) 1.34 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 column 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); }; }