{"version":3,"sources":["../../../src/server/requests.ts"],"names":["cookies","query","method","path","headers","params","parseJSONObject","stream","opts","Response","status","contentType","piped","key","values","val"],"mappings":"AASA,kIAQU,MACA,CAAA,CACT,eAOA,QAAA,CAAA,KACC,WAEA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAAA,IACA,CAAA,CAAA,CAAA,OACA,CAAA,CAAA,CAAAC,MACA,CAAA,CAAA,CAAAC,KACA,CAAA,CAAAC,CAAAA,MACA,CAAA,CAAA,CAAAC,IACA,CAAA,CAAA,CAAA,OAYA,CAAA,CAAA,CAAK,KACL,CAAA,CAAA,CAAA,CAAA,gCAAK,IAAA,CAAA,EAASF,CAAAA,CACd,CAAA,IAAK,CAAA,MACL,CAAA,CAAA,CAAA,IAAK,CAAA,IAASG,CAAAA,CACd,CAAA,IAAK,CAAA,MAAA,CAAUL,CAAAA,CACf,IAAA,CAAK,OAAA,CAAUI,CAAAA,CACf,IAAA,CAAK,OAAQE,CAAgBL,CAAK,CAAA,IAClC,CAAA,KAAK,CAAY,0CAAA,CAAA,CAAA,CAAA,IAAO,CAAA,IAAOK,CAAAA,MAChC,CAEA,MAAKC,CAAkBC,0CAAAA,CAA4G,CAAA,CAAG,CACrI,CAAA,CAAA,IAAA,CAAO,CAAA,CAAA,CAAA,CAAIC,CAAAA,CAA8D,CAAE,CAAA,OAAS,IAAO,CAAA,CAAM,CAAA,GAAA,CAAMF,CAAO,KAG/G,CAAA,CAAIF,CAAAA,CAAuD,IAC1D,CAAA,CAAA,CAAA,CAAO,CAAA,GAAII,CAAAA,CAAmB,CAAE,CAAA,OAAW,IAAO,CAAM,CAAC,CAC1D,GAEA,CAAA,CAAA,KASC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAWA,CAAAA,CAAiB,CAAE,CAAA,OAAW,IAAO,CAAM,CAAC,CACxD,GAmBM,CAAA,CAAA,KACN,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,MACA,CAAA,CAAA,WAOC,CAAAC,CAAAA,IAAc,CACd,CAAA,CAAA,MAAAN,CAAAA,CAAe,CAAC,GAChB,CAAA,OAAAJ,CAAe,CAAC,CAAA,CAChB,CAAA,CAAA,OAAQ,CAAA,CACR,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAAW,CAAAA,CAAmB,CAAA,WAAA,CAAA,CAAA,CAAA,kBAGnB,CAAA,CAAA,CAAA,IAAK,CAAA,IAASD,CAAAA,CACd,CAAA,IAAK,CAAA,MAAA,CAAA,CAAA,CAAA,IACL,CAAA,WAAK,CAAUN,CAAAA,CACf,IAAA,CAAK,OAAA,CAAUJ,CAAAA,CACf,IAAA,CAAK,OAAQY,CAER,CAAA,CAAA,IAAK,CAAA,KAAA,CAET,CAAA,CAAA,IAAK,CAAA,KAAA,EAAQ,CAAA,IAAA,CAAA,OAAc,CAAA,cAIzB,CAAA,CAAA,CAAA,CAAA,CAAA,IACH,YAAO,CAAA,CAAO,CAAA,OAAA,MAAY,CAAA,WAAO,CAAQ,MAAK,CAAA,OAAS,CAAA,IAAK,CAACC,OAAc,CAACA,CAAAA,GAAkB,CAAC,CAChG,CAEA,CAAA,CAAA,CAAA,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAqC,YACjC,CAAA,CAAA,CAAA,CAAQC,MAAQ,CAAA,OAAUD,CAAKE,CAAG,CAAA,CAAA,OAEpC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAW,CAAA,IAAG,CAAA,OAAK,CAAA,CAAA,CAAA,EAAW,CAAA,IAAE,CAAA,OAG5C,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,0CAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/server/requests.min.cjs","sourcesContent":["import type { IncomingHttpHeaders } from 'node:http2'\nimport type { Readable } from 'node:stream'\n\nimport type { SerializeOptions } from '@fastify/cookie'\nimport type { DistributiveOmit, IsInTypeList } from 'valleyed'\n\nimport type { RequestError } from '../errors'\nimport type { DefaultCookies, DefaultHeaders, IncomingFile, MethodsEnum, RouteDef, RouteDefToReqRes } from './types'\nimport type { AuthUser } from '../types'\nimport { parseJSONObject } from '../utilities'\n\nexport type CookieVal<C extends DefaultCookies> = {\n\t[K in keyof C]: SerializeOptions & { value: C[K] }\n}\n\nexport class Request<Def extends RouteDefToReqRes<any>> {\n\treadonly ip: string | undefined\n\treadonly method: MethodsEnum\n\treadonly path: string\n\tbody: Def['body']\n\tparams: Def['params']\n\tquery: Def['query']\n\theaders: IncomingHttpHeaders & Def['requestHeaders']\n\tcookies: Record<string, string | undefined> & Def['requestCookies']\n\tauthUser: AuthUser | null = null\n\n\tconstructor({\n\t\tip,\n\t\tbody,\n\t\tcookies,\n\t\tparams,\n\t\tquery,\n\t\tmethod,\n\t\tpath,\n\t\theaders,\n\t\tfiles,\n\t}: {\n\t\tip: string | undefined\n\t\tbody: Def['body']\n\t\tparams: Def['params']\n\t\tquery: Def['query']\n\t\tcookies: Record<string, string | undefined> & Def['requestCookies']\n\t\theaders: IncomingHttpHeaders\n\t\tfiles: Record<string, IncomingFile[]>\n\t\tmethod: MethodsEnum\n\t\tpath: string\n\t\t}) {\n\t\tthis.ip = ip\n\t\tthis.method = method\n\t\tthis.path = path\n\t\tthis.params = params\n\t\tthis.cookies = cookies\n\t\tthis.headers = headers\n\t\tthis.query = parseJSONObject(query)\n\t\tthis.body = <any>Object.assign(parseJSONObject(body), files)\n\t}\n\n\tpipe(stream: Readable, opts: { headers?: Def['responseHeaders']; cookies?: Def['responseCookies']; status?: Def['statusCode'] } = {}) {\n\t\treturn new Response<Omit<Def, 'response'> & { response: Readable }>(<any>{ ...opts, piped: true, body: stream })\n\t}\n\n\tres(params: DistributiveOmit<RequestParams<Def>, 'piped'>) {\n\t\treturn new Response<Def>(<any>{ ...params, piped: false })\n\t}\n\n\terror<\n\t\tT extends Omit<Def, 'response' | 'statusCode' | 'responseHeaders' | 'responseCookies' | 'contentType'> & {\n\t\t\tresponse: RequestError['serializedErrors']\n\t\t\tstatusCode: RequestError['statusCode']\n\t\t\tresponseHeaders: DefaultHeaders\n\t\t\tresponseCookies: DefaultCookies\n\t\t\tcontentType: 'application/json'\n\t\t},\n\t>(params: DistributiveOmit<RequestParams<T>, 'piped'>) {\n\t\treturn new Response<T>(<any>{ ...params, piped: false })\n\t}\n}\n\ntype RequestParams<Def extends RouteDefToReqRes<any>, T = Def['response']> = { body: T; piped?: boolean } & (IsInTypeList<\n\tDef['statusCode'],\n\t[NonNullable<RouteDef['defaultStatusCode']>, 200]\n> extends true\n\t? { status?: Def['statusCode'] }\n\t: { status: Def['statusCode'] }) &\n\t(IsInTypeList<Def['contentType'], [NonNullable<RouteDef['defaultContentType']>, 'application/json']> extends true\n\t\t? { contentType?: Def['contentType'] }\n\t\t: { contentType: Def['contentType'] }) &\n\t(IsInTypeList<Def['responseHeaders'], [DefaultHeaders]> extends true\n\t\t? { headers?: Def['responseHeaders'] }\n\t\t: { headers: Def['responseHeaders'] }) &\n\t(IsInTypeList<Def['responseCookies'], [DefaultCookies]> extends true\n\t\t? { cookies?: CookieVal<Def['responseCookies']> }\n\t\t: { cookies: CookieVal<Def['responseCookies']> })\n\nexport class Response<Def extends RouteDefToReqRes<any>> {\n\tbody: Def['response'] | undefined\n\theaders: Def['responseHeaders']\n\tcookies: CookieVal<Def['responseCookies']>\n\treadonly status: Def['statusCode']\n\treadonly contentType: Def['contentType']\n\treadonly piped: boolean\n\n\tconstructor({\n\t\tbody,\n\t\tstatus = <any>200,\n\t\theaders = <any>{},\n\t\tcookies = <any>{},\n\t\tpiped = false,\n\t\tcontentType = <any>'application/json',\n\t}: RequestParams<Def>) {\n\t\tthis.body = body\n\t\tthis.status = status\n\t\tthis.contentType = contentType\n\t\tthis.headers = headers\n\t\tthis.cookies = cookies\n\t\tthis.piped = piped\n\n\t\tif (!this.piped) {\n\t\t\t// @ts-expect-error indexing on generic\n\t\t\tthis.headers['Content-Type'] = contentType\n\t\t}\n\t}\n\n\tget cookieValues() {\n\t\treturn Object.fromEntries(Object.entries(this.cookies).map(([key, val]) => [key, val] as const))\n\t}\n\n\tset cookieValues(values: DefaultCookies) {\n\t\tObject.entries(values).forEach(([key, val]) => {\n\t\t\t// @ts-expect-error indexing on generic\n\t\t\tif (this.cookies[key]) this.cookies[key].value = val\n\t\t})\n\t}\n}\n"]}