{"version":3,"sources":["../../../src/errors/index.ts","../../../src/errors/equippedError.ts","../../../src/errors/requestError.ts","../../../src/server/types.ts","../../../src/errors/types/badRequestError.ts","../../../src/errors/types/notAuthenticatedError.ts","../../../src/errors/types/notAuthorizedError.ts","../../../src/errors/types/notFoundError.ts","../../../src/errors/types/preconditionRequiredError.ts","../../../src/errors/types/tokenExpired.ts","../../../src/errors/types/validationError.ts"],"sourcesContent":["export * from './equippedError'\nexport * from './requestError'\nexport * from './types/badRequestError'\nexport * from './types/notAuthenticatedError'\nexport * from './types/notAuthorizedError'\nexport * from './types/notFoundError'\nexport * from './types/preconditionRequiredError'\nexport * from './types/tokenExpired'\nexport * from './types/validationError'\n","export class EquippedError extends Error {\n\tconstructor(\n\t\tpublic readonly message: string,\n\t\tpublic readonly context: Record<string, unknown>,\n\t\tpublic readonly cause?: unknown,\n\t) {\n\t\tsuper(message, { cause })\n\t}\n}\n","import type { StatusCodesEnum } from '../server'\nimport { EquippedError } from './equippedError'\n\nexport abstract class RequestError extends EquippedError {\n\tabstract readonly statusCode: StatusCodesEnum\n\n\tprotected constructor(\n\t\tpublic readonly message: string,\n\t\tpublic readonly serializedErrors: { message: string; field?: string }[],\n\t\tcause?: unknown,\n\t) {\n\t\tsuper(message, { serializedErrors }, cause)\n\t}\n}\n","import type { IsInTypeList, Pipe, PipeInput, PipeOutput, Prettify } from 'valleyed'\n\nimport type { RequestError } from '../errors'\nimport type { Enum } from '../types'\nimport type { Request, Response } from './requests'\n\nexport const Methods = {\n\thead: 'head',\n\tget: 'get',\n\tpost: 'post',\n\tput: 'put',\n\tpatch: 'patch',\n\tdelete: 'delete',\n\toptions: 'options',\n} as const\n\nexport const StatusCodes = {\n\tOk: 200,\n\tFound: 302,\n\tBadRequest: 400,\n\tNotAuthenticated: 401,\n\tNotAuthorized: 403,\n\tNotFound: 404,\n\tValidationError: 422,\n\tPreconditionRequired: 428,\n\tTooManyRequests: 429,\n\tTokenExpired: 461,\n} as const\n\nexport type MethodsEnum = Enum<typeof Methods>\nexport type StatusCodesEnum = Enum<typeof StatusCodes>\n\nexport type DefaultHeaders = Record<string, ArrayOrValue<string>>\nexport type DefaultCookies = Record<string, string | undefined>\n\ntype ArrayOrValue<T> = T | T[] | undefined\n\nexport type IncomingFile = {\n\tname: string\n\ttype: string\n\tsize: number\n\tisTruncated: boolean\n\tdata: Buffer\n\tduration: number\n}\n\nexport type RouteDef = {\n\tparams?: Pipe<Record<string, ArrayOrValue<string>>, Record<string, ArrayOrValue<string>>>\n\tquery?: Pipe<Record<string, ArrayOrValue<unknown>>, Record<string, ArrayOrValue<unknown>>>\n\theaders?: Pipe<DefaultHeaders, DefaultHeaders>\n\tcookies?: Pipe<DefaultCookies, DefaultCookies>\n\tbody?: Pipe<Record<string, unknown>, Record<string, unknown>>\n\tresponse?: Pipe<unknown, unknown>\n\tresponseHeaders?: Pipe<DefaultHeaders, DefaultHeaders>\n\tresponseCookies?: Pipe<DefaultCookies, DefaultCookies>\n\tdefaultStatusCode?: StatusCodesEnum\n\tdefaultContentType?: string\n}\n\ntype RouteGroup = { name: string; description?: string }\ntype HandlerSetup<T extends RouteDef> = (route: Route<T>) => void\n\nexport type RouteConfig<T extends RouteDef> = {\n\tmiddlewares?: ReturnType<typeof makeMiddleware<RouteDef>>[]\n\tresponseMiddlewares?: ReturnType<typeof makeResponseMiddleware<RouteDef>>[]\n\tonError?: ReturnType<typeof makeErrorMiddleware<RouteDef>>\n\tgroups?: (RouteGroup | RouteGroup['name'])[]\n\ttitle?: string\n\tdescriptions?: string[]\n\tsecurity?: Record<string, string[]>[]\n\tschema?: T\n\thide?: boolean\n}\n\nexport type RouterConfig<T extends RouteDef> = RouteConfig<T> & { path: string }\nexport type Route<T extends RouteDef> = RouteConfig<T> & {\n\tpath: string\n\tmethod: MethodsEnum\n\thandler: RouteDefHandler<T>\n}\n\ntype GetApiPart<T extends RouteDef, K extends keyof RouteDef> = NonNullable<IsInTypeList<T[K], [unknown]> extends true ? RouteDef[K] : T[K]>\n\ntype ArePipes<A, B> = A extends Pipe<any, any> ? (B extends Pipe<any, any> ? true : false) : false\ntype Compare<K extends keyof RouteDef, A, B> =\n\tIsInTypeList<B, [unknown]> extends true\n\t\t? A\n\t\t: IsInTypeList<A, [unknown]> extends true\n\t\t\t? B\n\t\t\t: K extends `default${string}` | 'context'\n\t\t\t\t? B\n\t\t\t\t: ArePipes<A, B> extends true\n\t\t\t\t\t? Pipe<PipeInput<A> & PipeInput<B>, PipeOutput<A> & PipeOutput<B>>\n\t\t\t\t\t: B\n\nexport type MergeRouteDefs<A extends RouteDef, B extends RouteDef> = {\n\t[K in keyof RouteDef]: Compare<K, A[K], B[K]>\n}\n\nexport type RouteDefToReqRes<T extends RouteDef> = Prettify<{\n\tbody: PipeOutput<GetApiPart<T, 'body'>>\n\tparams: PipeOutput<GetApiPart<T, 'params'>>\n\trequestHeaders: PipeOutput<GetApiPart<T, 'headers'>>\n\trequestCookies: PipeOutput<GetApiPart<T, 'cookies'>>\n\tquery: PipeOutput<GetApiPart<T, 'query'>>\n\tresponse: PipeOutput<GetApiPart<T, 'response'>>\n\tresponseHeaders: PipeOutput<GetApiPart<T, 'responseHeaders'>>\n\tresponseCookies: PipeOutput<GetApiPart<T, 'responseCookies'>>\n\tstatusCode: GetApiPart<T, 'defaultStatusCode'>\n\tcontentType: GetApiPart<T, 'defaultContentType'>\n}>\n\ntype Awaitable<T> = Promise<T> | T\ntype Res<T extends RouteDefToReqRes<any>> = Awaitable<\n\tIsInTypeList<T['statusCode'], [StatusCodesEnum, 200]> extends true\n\t\t? IsInTypeList<T['responseHeaders'], [DefaultHeaders]> extends true\n\t\t\t? IsInTypeList<T['responseCookies'], [DefaultCookies]> extends true\n\t\t\t\t? Response<T> | T['response']\n\t\t\t\t: Response<T>\n\t\t\t: Response<T>\n\t\t: Response<T>\n>\nexport type RouteDefHandler<Def extends RouteDef> = (req: Request<RouteDefToReqRes<Def>>) => Res<RouteDefToReqRes<Def>>\ntype RouteMiddlewareHandler<_Def extends RouteDef> = (req: Request<RouteDefToReqRes<RouteDef>>) => Awaitable<void>\ntype RouteResponseMiddlewareHandler<_Def extends RouteDef> = (\n\treq: Request<RouteDefToReqRes<RouteDef>>,\n\tres: Response<RouteDefToReqRes<RouteDef>>,\n) => Awaitable<void>\ntype ErrorHandler<Def extends RouteDef> = (\n\treq: Request<RouteDefToReqRes<Def>>,\n\terr: Error,\n) => Res<\n\tOmit<RouteDefToReqRes<Def>, 'response' | 'statusCode' | 'responseHeaders' | 'responseCookies'> & {\n\t\tresponse: RequestError['serializedErrors']\n\t\tstatusCode: RequestError['statusCode']\n\t\tresponseHeaders: DefaultHeaders\n\t\tresponseCookies: DefaultCookies\n\t}\n>\n\nfunction makeMiddlewareHandler<Cb extends Function, T extends RouteDef>(cb: Cb, onSetup?: HandlerSetup<T>) {\n\treturn { cb, onSetup }\n}\n\nexport const makeMiddleware = <Def extends RouteDef>(...args: Parameters<typeof makeMiddlewareHandler<RouteMiddlewareHandler<Def>, Def>>) =>\n\tmakeMiddlewareHandler(...args)\nexport const makeResponseMiddleware = <Def extends RouteDef>(\n\t...args: Parameters<typeof makeMiddlewareHandler<RouteResponseMiddlewareHandler<Def>, Def>>\n) => makeMiddlewareHandler(...args)\nexport const makeErrorMiddleware = <Def extends RouteDef>(...args: Parameters<typeof makeMiddlewareHandler<ErrorHandler<Def>, Def>>) =>\n\tmakeMiddlewareHandler(...args)\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class BadRequestError extends RequestError {\n\tstatusCode = StatusCodes.BadRequest\n\n\tconstructor(message: string, cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class NotAuthenticatedError extends RequestError {\n\tstatusCode = StatusCodes.NotAuthenticated\n\n\tconstructor(message = 'Not authenticated', cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class NotAuthorizedError extends RequestError {\n\tstatusCode = StatusCodes.NotAuthorized\n\n\tconstructor(message = 'Not authorized', cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class NotFoundError extends RequestError {\n\tstatusCode = StatusCodes.NotFound\n\n\tconstructor(message = 'Not found', cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class PreconditionRequiredError extends RequestError {\n\tstatusCode = StatusCodes.PreconditionRequired\n\n\tconstructor(message = 'Precondition required', cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class TokenExpired extends RequestError {\n\tstatusCode = StatusCodes.TokenExpired\n\n\tconstructor(message = 'Token expired', cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\ntype ValidError = {\n\tmessages: string[]\n\tfield: string\n}\n\nexport class ValidationError extends RequestError {\n\tstatusCode = StatusCodes.ValidationError\n\n\tconstructor(errors: ValidError[], cause?: unknown) {\n\t\tsuper(\n\t\t\t'Unprocessable Entity',\n\t\t\terrors.flatMap(({ field, messages }) => messages.map((message) => ({ message, field }))),\n\t\t\tcause,\n\t\t)\n\t}\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,EAAA,kBAAAC,EAAA,0BAAAC,EAAA,uBAAAC,EAAA,kBAAAC,EAAA,8BAAAC,EAAA,iBAAAC,EAAA,iBAAAC,EAAA,oBAAAC,IAAA,eAAAC,EAAAX,GCAO,IAAMY,EAAN,cAA4B,KAAM,CACxC,YACiBC,EACAC,EACAC,EACf,CACD,MAAMF,EAAS,CAAE,MAAAE,CAAM,CAAC,EAJR,aAAAF,EACA,aAAAC,EACA,WAAAC,CAGjB,CACD,ECLO,IAAeC,EAAf,cAAoCC,CAAc,CAG9C,YACOC,EACAC,EAChBC,EACC,CACD,MAAMF,EAAS,CAAE,iBAAAC,CAAiB,EAAGC,CAAK,EAJ1B,aAAAF,EACA,sBAAAC,CAIjB,CACD,ECGO,IAAME,EAAc,CAC1B,GAAI,IACJ,MAAO,IACP,WAAY,IACZ,iBAAkB,IAClB,cAAe,IACf,SAAU,IACV,gBAAiB,IACjB,qBAAsB,IACtB,gBAAiB,IACjB,aAAc,GACf,ECxBO,IAAMC,EAAN,cAA8BC,CAAa,CACjD,WAAaC,EAAY,WAEzB,YAAYC,EAAiBC,EAAiB,CAC7C,MAAMD,EAAS,CAAC,CAAE,QAAAA,CAAQ,CAAC,EAAGC,CAAK,CACpC,CACD,ECNO,IAAMC,EAAN,cAAoCC,CAAa,CACvD,WAAaC,EAAY,iBAEzB,YAAYC,EAAU,oBAAqBC,EAAiB,CAC3D,MAAMD,EAAS,CAAC,CAAE,QAAAA,CAAQ,CAAC,EAAGC,CAAK,CACpC,CACD,ECNO,IAAMC,EAAN,cAAiCC,CAAa,CACpD,WAAaC,EAAY,cAEzB,YAAYC,EAAU,iBAAkBC,EAAiB,CACxD,MAAMD,EAAS,CAAC,CAAE,QAAAA,CAAQ,CAAC,EAAGC,CAAK,CACpC,CACD,ECNO,IAAMC,EAAN,cAA4BC,CAAa,CAC/C,WAAaC,EAAY,SAEzB,YAAYC,EAAU,YAAaC,EAAiB,CACnD,MAAMD,EAAS,CAAC,CAAE,QAAAA,CAAQ,CAAC,EAAGC,CAAK,CACpC,CACD,ECNO,IAAMC,EAAN,cAAwCC,CAAa,CAC3D,WAAaC,EAAY,qBAEzB,YAAYC,EAAU,wBAAyBC,EAAiB,CAC/D,MAAMD,EAAS,CAAC,CAAE,QAAAA,CAAQ,CAAC,EAAGC,CAAK,CACpC,CACD,ECNO,IAAMC,EAAN,cAA2BC,CAAa,CAC9C,WAAaC,EAAY,aAEzB,YAAYC,EAAU,gBAAiBC,EAAiB,CACvD,MAAMD,EAAS,CAAC,CAAE,QAAAA,CAAQ,CAAC,EAAGC,CAAK,CACpC,CACD,ECDO,IAAMC,EAAN,cAA8BC,CAAa,CACjD,WAAaC,EAAY,gBAEzB,YAAYC,EAAsBC,EAAiB,CAClD,MACC,uBACAD,EAAO,QAAQ,CAAC,CAAE,MAAAE,EAAO,SAAAC,CAAS,IAAMA,EAAS,IAAKC,IAAa,CAAE,QAAAA,EAAS,MAAAF,CAAM,EAAE,CAAC,EACvFD,CACD,CACD,CACD","names":["errors_exports","__export","BadRequestError","EquippedError","NotAuthenticatedError","NotAuthorizedError","NotFoundError","PreconditionRequiredError","RequestError","TokenExpired","ValidationError","__toCommonJS","EquippedError","message","context","cause","RequestError","EquippedError","message","serializedErrors","cause","StatusCodes","BadRequestError","RequestError","StatusCodes","message","cause","NotAuthenticatedError","RequestError","StatusCodes","message","cause","NotAuthorizedError","RequestError","StatusCodes","message","cause","NotFoundError","RequestError","StatusCodes","message","cause","PreconditionRequiredError","RequestError","StatusCodes","message","cause","TokenExpired","RequestError","StatusCodes","message","cause","ValidationError","RequestError","StatusCodes","errors","cause","field","messages","message"]}