import { type SonamuQueryMode } from "../types/types"; // semanticQuery가 있으면 similarity를 추가하는 조건부 타입 type WithSimilarity = LP extends { semanticQuery: Record } ? T & { similarity: number } : T; export type ListResult< LP extends { queryMode?: SonamuQueryMode }, T, > = LP["queryMode"] extends "list" ? { rows: WithSimilarity[] } : LP["queryMode"] extends "count" ? { total: number } : { rows: WithSimilarity[]; total: number }; export type ArrayOr = T | T[]; export function asArray(param: T | T[]): T[] { if (Array.isArray(param)) { return param; } else { return [param] as T[]; } } export function objToMap(obj: { [k: string]: T }) { const keys = Object.keys(obj); if (keys.every((key) => parseInt(key).toString() === key)) { return new Map(keys.map((key) => [parseInt(key), obj[key]])); } else { return new Map(Object.entries(obj)); } } export interface BaseListParams { id?: number | number[]; num?: number; page?: number; keyword?: string; queryMode?: "list" | "count" | "both"; semanticQuery?: Record; }