UNPKG

api-wizard

Version:

A powerful TypeScript wrapper for native Fetch API with token management, interceptors, and type-safe HTTP requests

57 lines (56 loc) 2.07 kB
/** 평탄화: string | undefined 만 남기기 */ function normalizeQueryLike(input) { const out = {}; for (const [k, v] of Object.entries(input ?? {})) { if (typeof v === "string" || v === undefined) out[k] = v; else if (Array.isArray(v)) { const first = v.find((x) => typeof x === "string"); out[k] = first ?? undefined; } else { out[k] = undefined; // 중첩 객체는 버림 } } return out; } export function createParsedParams(schema, opts = {}) { const numberDefault = opts.numberDefault ?? 0; const stringDefault = opts.stringDefault ?? ""; const allowUnknown = opts.allowUnknown ?? true; async function parse(inputs) { const flats = inputs.map(normalizeQueryLike); const out = {}; for (const key in schema) { const field = schema[key]; const raws = flats.map(f => f[key]).filter(x => x !== undefined); const val = raws[0]; if (field.type === "number") { const n = val == null ? NaN : parseInt(val, 10); const parsed = Number.isNaN(n) ? (field.default ?? numberDefault) : n; out[key] = parsed; } else { const parsed = val ?? field.default ?? stringDefault; out[key] = parsed; } } if (allowUnknown) { const allKeys = new Set(); for (const f of flats) for (const k of Object.keys(f)) allKeys.add(k); for (const k of allKeys) { if (k in schema) continue; // 이미 처리됨 const raws = flats.map(f => f[k]).filter(x => x !== undefined); const val = raws[0]; out[k] = (val ?? stringDefault); // ← 항상 string 보장 } } return out; } return Object.assign(parse, { normalize: normalizeQueryLike }); }