const isPlainObject = (value: unknown): value is Record => Object.prototype.toString.call(value) === "[object Object]"; export function sortQueryValue(value: T): T { if (Array.isArray(value)) { return value.map((entry) => sortQueryValue(entry)) as T; } if (!isPlainObject(value)) { return value; } return Object.keys(value) .sort() .reduce((acc, key) => { acc[key] = sortQueryValue(value[key]); return acc; }, {} as Record) as T; } export function sortAndSerializeQueryObject( tables: string, query: Record, ) { return `${tables} ${JSON.stringify(sortQueryValue(query))}`; }