SPB Git forge

spb/rareindex

Public
54commits 1branches 0releases
7.1 MBsize
maindefault branch
10 days agolast push
TypeScript 61.9% HTML 37.2% SQL 0.7%
1.4 KB · 39 lines typescript
Raw Blame History
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