import type { Context } from "./context.ts";import type { RouterContext } from "./router.ts";import { isRouterContext } from "./util.ts";
interface GetQueryOptionsBase { asMap?: boolean;
mergeParams?: boolean;}
interface GetQueryOptionsAsMap extends GetQueryOptionsBase { asMap: true;}
export type GetParamsOptions = GetQueryOptionsBase | GetQueryOptionsAsMap;
export function getQuery( ctx: Context | RouterContext<string>, options: GetQueryOptionsAsMap,): Map<string, string>;export function getQuery( ctx: Context | RouterContext<string>, options?: GetQueryOptionsBase,): Record<string, string>;export function getQuery( ctx: Context | RouterContext<string>, { mergeParams, asMap }: GetParamsOptions = {},): Map<string, string> | Record<string, string> { const result: Record<string, string> = {}; if (mergeParams && isRouterContext(ctx)) { Object.assign(result, ctx.params); } for (const [key, value] of ctx.request.url.searchParams) { result[key] = value; } return asMap ? new Map(Object.entries(result)) : result;}