export interface Query { id?: string; operation: string; } export type QueryResult = PointQueryResult | IntersectionQueryResult; export type QueryOperation = 'Project' | 'Unproject' | 'Occlusion' | 'Pick'; export interface PointQuery extends Query { point: { x: number; y: number; z?: number; w?: number; }; operation: 'Project' | 'Unproject'; } export interface IntersectionQuery extends Query { point: { x: number; y: number; z?: number; w?: number; }; tolerance?: number; operation: 'Occlusion' | 'Pick'; } export interface PointQueryResult { x: number; y: number; z?: number; w?: number; inFrustum?: boolean; } export interface IntersectionQueryResult { objects: Array<{ guid: string; object?: Record; point: { x: number; y: number; z: number; }; }> | null; } export type QueryArgsResultMap = { Project: PointQueryResult; Unproject: PointQueryResult; Occlusion: IntersectionQueryResult; Pick: IntersectionQueryResult; } & { [key: string]: unknown; };