import {Dict} from 'tslang'; import {ISyncable, SyncableRef, SyncableType} from '../syncable'; export type ViewQueryUpdateObject< TViewQueryObject extends object = Dict > = {[TName in keyof TViewQueryObject]?: TViewQueryObject[TName] | false}; export type ViewQueryFilter = ( syncable: T, ) => boolean; export interface IViewQuery { refs: object; options: object; } export interface GeneralViewQuery extends IViewQuery { refs: Dict; } export type ViewQueryRefDictToViewQuerySyncableDict = { [TName in keyof T]: SyncableType; }; export interface ResolvedViewQuery { syncables: ViewQueryRefDictToViewQuerySyncableDict; options: T['options']; } export type ResolvedViewQueryType = TViewQuery extends IViewQuery ? ResolvedViewQuery : never; export type ViewQueryResolvedSyncableDict< T extends IViewQuery > = ViewQueryRefDictToViewQuerySyncableDict; export type ViewQueryDictToResolvedViewQueryDict = { [TName in keyof T]: T[TName] extends IViewQuery ? ResolvedViewQuery : never; };