UNPKG

@trpc/server

Version:

The tRPC server library

50 lines (47 loc) 1.3 kB
import { TRPCError } from '../error/TRPCError'; import { isObject } from '../utils'; import type { TRPCRequestInfo } from './types'; export function parseConnectionParamsFromUnknown( parsed: unknown, ): TRPCRequestInfo['connectionParams'] { try { if (parsed === null) { return null; } if (!isObject(parsed)) { throw new Error('Expected object'); } const nonStringValues = Object.entries(parsed).filter( ([_key, value]) => typeof value !== 'string', ); if (nonStringValues.length > 0) { throw new Error( `Expected connectionParams to be string values. Got ${nonStringValues .map(([key, value]) => `${key}: ${typeof value}`) .join(', ')}`, ); } return parsed as Record<string, string>; } catch (cause) { throw new TRPCError({ code: 'PARSE_ERROR', message: 'Invalid connection params shape', cause, }); } } export function parseConnectionParamsFromString( str: string, ): TRPCRequestInfo['connectionParams'] { let parsed: unknown; try { parsed = JSON.parse(str); } catch (cause) { throw new TRPCError({ code: 'PARSE_ERROR', message: 'Not JSON-parsable query params', cause, }); } return parseConnectionParamsFromUnknown(parsed); }