import * as sd from "type-mapping"; import {IColumn} from "./column"; export type AssertMap = { readonly [columnName : string] : sd.AnySafeMapper }; export namespace AssertMapUtil { export type NullableNameUnion< AssertMapT extends AssertMap > = ( { [columnName in Extract] : ( null extends sd.OutputOf ? columnName : never ) }[Extract] ); export function nullableNames ( assertMap : AssertMapT ) : ( NullableNameUnion[] ) { const columnNames = Object.keys(assertMap) as Extract[]; return columnNames.filter( columnName => sd.canOutputNull(assertMap[columnName]) ) as any; } export type FromColumn = ( ColumnT extends IColumn ? { [columnName in ColumnT["name"]] : ReturnType } : never ); }