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