TypeScript 61.9%
HTML 37.2%
SQL 0.7%
1/** Helpers for reading Next.js searchParams (Promise<Record<string, string | string[] | undefined>>). */2export type SP = Record<string, string | string[] | undefined>;34export function sp1(sp: SP, key: string): string | undefined {5 const v = sp[key];6 const s = Array.isArray(v) ? v[0] : v;7 return s && s.length ? s : undefined;8}910export function spNum(sp: SP, key: string): number | null {11 const s = sp1(sp, key);12 if (s === undefined) return null;13 const n = Number(s.replace(/[,$\s]/g, ''));14 return Number.isFinite(n) ? n : null;15}1617export function spInt(sp: SP, key: string, fallback = 1): number {18 const n = spNum(sp, key);19 return n === null ? fallback : Math.max(1, Math.trunc(n));20}2122export function spEnum<T extends string>(sp: SP, key: string, allowed: readonly T[], fallback: T): T {23 const s = sp1(sp, key);24 return s && (allowed as readonly string[]).includes(s) ? (s as T) : fallback;25}2627export function pick(sp: SP, keys: string[]): Record<string, string | undefined> {28 const out: Record<string, string | undefined> = {};29 for (const k of keys) out[k] = sp1(sp, k);30 return out;31}3233export function withParams(base: string, params: Record<string, string | number | null | undefined>): string {34 const u = new URLSearchParams();35 for (const [k, v] of Object.entries(params)) if (v !== undefined && v !== null && v !== '') u.set(k, String(v));36 const qs = u.toString();37 return qs ? `${base}?${qs}` : base;38}39