@instantdb/core
Version:
Instant's core local abstraction
45 lines • 1.58 kB
TypeScript
export type RoomSchemaShape = {
[k: string]: {
presence?: {
[k: string]: any;
};
topics?: {
[k: string]: {
[k: string]: any;
};
};
};
};
export type PresenceOpts<PresenceShape, Keys extends keyof PresenceShape> = {
user?: boolean;
peers?: string[];
keys?: Keys[];
initialData?: Partial<PresenceShape>;
};
type PresencePeer<PresenceShape, Keys extends keyof PresenceShape> = Pick<PresenceShape, Keys> & {
peerId: string;
};
export type PresenceSlice<PresenceShape, Keys extends keyof PresenceShape> = {
user?: PresencePeer<PresenceShape, Keys>;
peers: {
[peerId: string]: PresencePeer<PresenceShape, Keys>;
};
};
export type PresenceResponse<PresenceShape, Keys extends keyof PresenceShape> = PresenceSlice<PresenceShape, Keys> & {
isLoading: boolean;
error?: string;
};
export declare function buildPresenceSlice<PresenceShape, Keys extends keyof PresenceShape>(data: {
user?: PresenceShape;
peers: Record<string, PresenceShape>;
}, opts: PresenceOpts<PresenceShape, Keys>, userPeerId: string): PresenceSlice<PresenceShape, Keys>;
/**
* Compare two presence slices
* 0. compare isLoading and error
* 1. shallow compare user
* 2. compare peers keys
* 3. shallow compare each peer
*/
export declare function hasPresenceResponseChanged<PresenceShape, Keys extends keyof PresenceShape>(a: PresenceResponse<PresenceShape, Keys>, b: PresenceResponse<PresenceShape, Keys>): boolean;
export {};
//# sourceMappingURL=presence.d.ts.map