///
import { EventEmitter } from 'events';
import { ChangePlantBlueprint, ChangePlantProcessingResultWithClock, IChangePlantBlueprintGenericParams, IContext, IRPCDefinition, ISyncable, ISyncableAdapter, ISyncableObject, IViewQuery, RefDictToSyncableObjectDict, ViewQueryFilter, ViewQueryUpdateObject } from '@syncable/core';
import { Dict, OmitValueOfKey } from 'tslang';
import { IServerAdapter } from './server-adapter';
export interface LoadOptions {
context?: IContext;
loadRequisiteDependencyOnly?: boolean;
}
export interface LoadSyncablesByRefsOptions {
loadedKeySet?: Set;
changeType?: string;
loadRequisiteDependencyOnly?: boolean;
skipReadableFilter?: boolean;
}
export interface LoadDependentSyncablesOptions {
loadedKeySet?: Set;
changeType?: string;
requisiteOnly?: boolean;
skipReadableFilter?: boolean;
}
export interface IServerGenericParams extends IChangePlantBlueprintGenericParams {
syncableObject: ISyncableObject;
viewQueryDict: object;
customClientRPCDefinition: IRPCDefinition;
}
export declare type SyncableTypeToSyncableObjectsDict = {
[TKey in TSyncableObject['ref']['type']]?: Extract[];
};
export interface ViewQueryInfo {
filter: ViewQueryFilter;
query: IViewQuery;
}
export interface ServerApplyChangeResult extends OmitValueOfKey {
subsequent?: Promise[];
}
export declare class Server extends EventEmitter {
private context;
private serverAdapter;
private syncableAdapter;
private groupToConnectionSetMap;
private changePlant;
constructor(
/**
* Non-user context for server-side initiated changes.
*/
context: TGenericParams['context'], serverAdapter: IServerAdapter, syncableAdapter: ISyncableAdapter, blueprint: ChangePlantBlueprint);
load(group: string, refDict: TRefDict, { context, loadRequisiteDependencyOnly, }?: LoadOptions): Promise>;
query(group: string, update: ViewQueryUpdateObject): Promise>;
applyChange(group: string, change: TGenericParams['change'], context?: IContext>, Dict>): Promise;
protected log(event: string, data: object): void;
private onConnection;
private onBroadcast;
private addConnection;
private removeConnection;
private broadcastChangeResult;
}