UNPKG

edgespec

Version:

Write Winter-CG compatible routes with filesystem routing and tons of features

1 lines 57.1 kB
{"version":3,"sources":["../src/types/web-handler.ts","../src/lib/format-zod-error.ts","../src/middleware/http-exceptions.ts","../src/middleware/with-methods.ts","../src/middleware/with-input-validation.ts","../src/middleware/with-unhandled-exception-handling.ts","../src/create-with-edge-spec.ts","../src/types/context.ts","../src/types/edge-spec.ts","../src/config/config.ts","../src/helpers.ts"],"names":["z","ZodFirstPartyTypeKind","ZodError","ctx","request","routeParams"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { FetchEvent } from \"@edge-runtime/primitives\"\nimport { EdgeSpecRouteBundle } from \"./edge-spec.js\"\nimport { Primitive } from \"type-fest\"\nimport { z } from \"zod\"\nimport { ResponseTypeToContext } from \"./context.js\"\nimport type { RouteSpec } from \"./route-spec.js\"\nimport type { GlobalSpec } from \"./global-spec.js\"\n\nexport type HTTPMethods =\n | \"GET\"\n | \"POST\"\n | \"DELETE\"\n | \"PUT\"\n | \"PATCH\"\n | \"HEAD\"\n | \"OPTIONS\"\n\nexport type EdgeSpecRouteParams = {\n [routeParam: string]: string | string[]\n}\n\nexport type HeadersDescriptor = Headers | HeadersInit\n\nexport interface EdgeSpecRequestOptions {\n routeParams: EdgeSpecRouteParams\n edgeSpec: EdgeSpecRouteBundle\n}\n\nexport type EdgeSpecRequest<T = {}> = EdgeSpecRequestOptions & Request & T\n\nexport interface SerializableToResponse {\n /**\n * Serialize the response to a Response object\n *\n * @throws z.ZodError if the response does not match the schema\n * @param schema - the schema to validate the response against\n */\n serializeToResponse(schema: z.ZodTypeAny): Response\n\n statusCode(): number\n}\n\nexport type ValidFormDataValue = Primitive | Blob\n\nexport abstract class EdgeSpecResponse implements SerializableToResponse {\n abstract serializeToResponse(schema: z.ZodTypeAny): Response\n\n statusCode(): number {\n return this.options.status ?? 200\n }\n\n status(status: number): this {\n this.options.status = status\n return this\n }\n\n header(key: string, value: string): this {\n this.options.headers = mergeHeaders(this.options.headers, {\n [key]: value,\n })\n\n return this\n }\n\n headers(headers: HeadersInit): this {\n this.options.headers = mergeHeaders(this.options.headers, headers)\n return this\n }\n\n statusText(statusText: string): this {\n this.options.statusText = statusText\n return this\n }\n\n constructor(protected options: ResponseInit = {}) {}\n\n static json<T>(\n ...args: ConstructorParameters<typeof EdgeSpecJsonResponse<T>>\n ) {\n return new EdgeSpecJsonResponse<T>(...args)\n }\n\n static multipartFormData<T extends Record<string, ValidFormDataValue>>(\n ...args: ConstructorParameters<typeof EdgeSpecMultiPartFormDataResponse<T>>\n ) {\n return new EdgeSpecMultiPartFormDataResponse<T>(...args)\n }\n\n static custom<T, const C extends string>(\n ...args: ConstructorParameters<typeof EdgeSpecCustomResponse<T, C>>\n ) {\n return new EdgeSpecCustomResponse<T, C>(...args)\n }\n}\n\nexport class EdgeSpecJsonResponse<T> extends EdgeSpecResponse {\n constructor(\n public data: T,\n options: ResponseInit = {}\n ) {\n super(options)\n this.options.headers = mergeHeaders(this.options.headers, {\n \"Content-Type\": \"application/json\",\n })\n }\n\n override serializeToResponse(schema: z.ZodTypeAny) {\n return new Response(JSON.stringify(schema.parse(this.data)), this.options)\n }\n}\n\nexport class EdgeSpecCustomResponse<\n T,\n const C extends string,\n> extends EdgeSpecResponse {\n constructor(\n public data: T,\n public contentType: C,\n options: ResponseInit = {}\n ) {\n super(options)\n this.options.headers = mergeHeaders(this.options.headers, {\n \"Content-Type\": contentType,\n })\n }\n\n serializeToResponse(schema: z.ZodTypeAny) {\n return new Response(schema.parse(this.data), this.options)\n }\n}\n\nexport class MiddlewareResponseData extends EdgeSpecResponse {\n constructor(options: ResponseInit = {}) {\n super(options)\n }\n\n serializeToResponse() {\n return new Response(undefined, this.options)\n }\n}\n\nexport class EdgeSpecMultiPartFormDataResponse<\n T extends Record<string, ValidFormDataValue>,\n> extends EdgeSpecResponse {\n constructor(\n public data: T,\n options: ResponseInit = {}\n ) {\n super(options)\n this.options.headers = mergeHeaders(this.options.headers, {\n \"Content-Type\": \"multipart/form-data\",\n })\n }\n\n serializeToResponse(schema: z.ZodTypeAny) {\n const formData = new FormData()\n\n for (const [key, value] of Object.entries(schema.parse(this.data))) {\n // TODO: nested objects?\n formData.append(key, value instanceof Blob ? value : String(value))\n }\n\n return new Response(formData, this.options)\n }\n}\n\nexport type EdgeSpecRouteFn<\n RequestOptions = EdgeSpecRequestOptions,\n ResponseType extends SerializableToResponse | Response = Response,\n Context = ResponseTypeToContext<ResponseType>,\n> = ((\n req: EdgeSpecRequest<RequestOptions>,\n ctx: Context\n) => ResponseType | Promise<ResponseType>) & {\n _globalSpec?: GlobalSpec\n _routeSpec?: RouteSpec<any>\n}\n\nexport type EdgeSpecFetchEvent = FetchEvent & {\n request: EdgeSpecRequest\n}\n\nexport function createEdgeSpecRequest(\n request: Request,\n options: EdgeSpecRequestOptions\n): EdgeSpecRequest {\n return Object.assign(request, options)\n}\n\nexport function mergeHeaders(\n h1: HeadersDescriptor | undefined | null,\n h2: HeadersDescriptor | undefined | null\n) {\n return new Headers(\n Object.fromEntries([\n ...(h1 instanceof Headers\n ? h1\n : new Headers(h1 ?? undefined).entries() ?? []),\n ...(h2 instanceof Headers\n ? h2\n : new Headers(h2 ?? undefined).entries() ?? []),\n ])\n )\n}\n","import type { ZodIssue, ZodError } from \"zod\"\n\nconst zodIssueToString = (issue: ZodIssue) => {\n if (issue.path.join(\".\") === \"\") {\n return issue.message\n }\n if (issue.message === \"Required\") {\n return `\\`${issue.path.join(\".\")}\\` is required`\n }\n return `${issue.message} for \"${issue.path.join(\".\")}\"`\n}\n\nexport const formatZodError = (error: ZodError): string => {\n let message: string\n if (error.issues.length === 1) {\n const issue = error.issues[0]\n message = zodIssueToString(issue)\n } else {\n const message_components: string[] = []\n for (const issue of error.issues) {\n message_components.push(zodIssueToString(issue))\n }\n message =\n `${error.issues.length} Zod validation issues: ` +\n message_components.join(\", \")\n }\n\n message += `. Full Zod error: ${JSON.stringify(error.issues, null, 2)}`\n\n return message\n}\n","import { formatZodError } from \"src/lib/format-zod-error.js\"\nimport { z } from \"zod\"\n\nexport interface HttpException {\n status: number\n message?: string\n\n _isHttpException: true\n}\n\nexport abstract class EdgeSpecMiddlewareError\n extends Error\n implements HttpException\n{\n _isHttpException = true as const\n\n constructor(\n public message: string,\n public status: number = 500\n ) {\n super(message)\n this.name = this.constructor.name\n }\n}\n\nexport class MethodNotAllowedError extends EdgeSpecMiddlewareError {\n constructor(allowedMethods: readonly string[]) {\n super(`only ${allowedMethods.join(\",\")} accepted`, 405)\n }\n}\n\nexport class NotFoundError extends EdgeSpecMiddlewareError {\n constructor(message: string) {\n super(message, 404)\n }\n}\n\nexport abstract class BadRequestError extends EdgeSpecMiddlewareError {\n constructor(message: string) {\n super(message, 400)\n }\n}\n\nexport class InvalidQueryParamsError extends BadRequestError {\n constructor(message: string) {\n super(message)\n }\n}\n\nexport class InvalidContentTypeError extends BadRequestError {\n constructor(message: string) {\n super(message)\n }\n}\n\nexport class InputParsingError extends BadRequestError {\n constructor(message: string) {\n super(message)\n }\n}\n\nexport class InputValidationError extends BadRequestError {\n constructor(error: z.ZodError<any>) {\n super(formatZodError(error))\n }\n}\n\nexport class ResponseValidationError extends EdgeSpecMiddlewareError {\n constructor(error: z.ZodError<any>) {\n super(formatZodError(error), 500)\n }\n}\n","import { Middleware } from \"src/middleware/types.js\"\nimport { HTTPMethods } from \"src/types/web-handler.js\"\nimport { MethodNotAllowedError } from \"./http-exceptions.js\"\n\nexport const withMethods =\n (methods: readonly HTTPMethods[]): Middleware =>\n (req, ctx, next) => {\n if (!(methods as string[]).includes(req.method)) {\n throw new MethodNotAllowedError(methods)\n }\n\n return next(req, ctx)\n }\n","import { z, ZodError, ZodFirstPartyTypeKind } from \"zod\"\n\nimport type { QueryArrayFormats } from \"src/types/global-spec.js\"\nimport { Middleware } from \"src/middleware/index.js\"\nimport {\n BadRequestError,\n InputParsingError,\n InputValidationError,\n InvalidContentTypeError,\n InvalidQueryParamsError,\n} from \"./http-exceptions.js\"\n\nconst getZodObjectSchemaFromZodEffectSchema = (\n isZodEffect: boolean,\n schema: z.ZodTypeAny\n): z.ZodTypeAny | z.ZodObject<any> => {\n if (!isZodEffect) {\n return schema as z.ZodObject<any>\n }\n\n let currentSchema = schema\n\n while (currentSchema instanceof z.ZodEffects) {\n currentSchema = currentSchema._def.schema\n }\n\n return currentSchema as z.ZodObject<any>\n}\n\n/**\n * This function is used to get the correct schema from a ZodEffect | ZodDefault | ZodOptional schema.\n * TODO: this function should handle all special cases of ZodSchema and not just ZodEffect | ZodDefault | ZodOptional\n */\nconst getZodDefFromZodSchemaHelpers = (schema: z.ZodTypeAny) => {\n const special_zod_types = [\n ZodFirstPartyTypeKind.ZodOptional,\n ZodFirstPartyTypeKind.ZodDefault,\n ZodFirstPartyTypeKind.ZodEffects,\n ]\n\n while (special_zod_types.includes(schema._def.typeName)) {\n if (\n schema._def.typeName === ZodFirstPartyTypeKind.ZodOptional ||\n schema._def.typeName === ZodFirstPartyTypeKind.ZodDefault\n ) {\n schema = schema._def.innerType\n continue\n }\n\n if (schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects) {\n schema = schema._def.schema\n continue\n }\n }\n return schema._def\n}\n\nconst tryGetZodSchemaAsObject = (\n schema: z.ZodTypeAny\n): z.ZodObject<any> | undefined => {\n const isZodEffect = schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n const safe_schema = getZodObjectSchemaFromZodEffectSchema(isZodEffect, schema)\n const isZodObject =\n safe_schema._def.typeName === ZodFirstPartyTypeKind.ZodObject\n\n if (!isZodObject) {\n return undefined\n }\n\n return safe_schema as z.ZodObject<any>\n}\n\nconst isZodSchemaArray = (schema: z.ZodTypeAny) => {\n const def = getZodDefFromZodSchemaHelpers(schema)\n return def.typeName === ZodFirstPartyTypeKind.ZodArray\n}\n\nconst isZodSchemaBoolean = (schema: z.ZodTypeAny) => {\n const def = getZodDefFromZodSchemaHelpers(schema)\n return def.typeName === ZodFirstPartyTypeKind.ZodBoolean\n}\n\nconst parseQueryParams = (\n schema: z.ZodTypeAny,\n input: Record<string, unknown>,\n supportedArrayFormats: QueryArrayFormats\n) => {\n const parsed_input = Object.assign({}, input)\n const obj_schema = tryGetZodSchemaAsObject(schema)\n\n if (obj_schema) {\n for (const [key, value] of Object.entries(obj_schema.shape)) {\n if (isZodSchemaArray(value as z.ZodTypeAny)) {\n const array_input = input[key]\n\n if (\n typeof array_input === \"string\" &&\n supportedArrayFormats.includes(\"comma\")\n ) {\n parsed_input[key] = array_input.split(\",\")\n }\n\n const bracket_syntax_array_input = input[`${key}[]`]\n if (\n typeof bracket_syntax_array_input === \"string\" &&\n supportedArrayFormats.includes(\"brackets\")\n ) {\n const pre_split_array = bracket_syntax_array_input\n parsed_input[key] = pre_split_array.split(\",\")\n }\n\n if (\n Array.isArray(bracket_syntax_array_input) &&\n supportedArrayFormats.includes(\"brackets\")\n ) {\n parsed_input[key] = bracket_syntax_array_input\n }\n\n continue\n }\n\n if (isZodSchemaBoolean(value as z.ZodTypeAny)) {\n const boolean_input = input[key]\n\n if (typeof boolean_input === \"string\") {\n parsed_input[key] = boolean_input === \"true\"\n }\n }\n }\n }\n\n return schema.parse(parsed_input)\n}\n\nconst validateQueryParams = (\n inputUrl: string,\n schema: z.ZodTypeAny,\n supportedArrayFormats: QueryArrayFormats\n) => {\n const url = new URL(inputUrl, \"http://dummy.com\")\n\n const seenKeys = new Set<string>()\n\n const obj_schema = tryGetZodSchemaAsObject(schema)\n if (!obj_schema) {\n return\n }\n\n for (const key of url.searchParams.keys()) {\n for (const [schemaKey, value] of Object.entries(obj_schema.shape)) {\n if (isZodSchemaArray(value as z.ZodTypeAny)) {\n if (\n key === `${schemaKey}[]` &&\n !supportedArrayFormats.includes(\"brackets\")\n ) {\n throw new InvalidQueryParamsError(\n `Bracket syntax not supported for query param \"${schemaKey}\"`\n )\n }\n }\n }\n\n const key_schema = obj_schema.shape[key]\n\n if (key_schema) {\n if (isZodSchemaArray(key_schema)) {\n if (seenKeys.has(key) && !supportedArrayFormats.includes(\"repeat\")) {\n throw new InvalidQueryParamsError(\n `Repeated parameters not supported for duplicate query param \"${key}\"`\n )\n }\n }\n }\n\n seenKeys.add(key)\n }\n}\n\nexport interface RequestInput<\n JsonBody extends z.ZodTypeAny,\n QueryParams extends z.ZodTypeAny,\n CommonParams extends z.ZodTypeAny,\n FormData extends z.ZodTypeAny,\n UrlEncodedFormData extends z.ZodTypeAny,\n RouteParams extends z.ZodTypeAny,\n> {\n jsonBody?: JsonBody\n queryParams?: QueryParams\n commonParams?: CommonParams\n formData?: FormData\n routeParams?: RouteParams\n urlEncodedFormData?: UrlEncodedFormData\n supportedArrayFormats: QueryArrayFormats\n}\n\nexport const withInputValidation =\n <\n JsonBody extends z.ZodTypeAny,\n QueryParams extends z.ZodTypeAny,\n CommonParams extends z.ZodTypeAny,\n FormData extends z.ZodTypeAny,\n UrlEncodedFormData extends z.ZodTypeAny,\n RouteParams extends z.ZodTypeAny,\n >(\n input: RequestInput<\n JsonBody,\n QueryParams,\n CommonParams,\n FormData,\n UrlEncodedFormData,\n RouteParams\n >\n ): Middleware<\n {},\n {},\n {\n jsonBody: z.output<JsonBody>\n multiPartFormData: z.output<FormData>\n query: z.output<QueryParams>\n commonParams: z.output<CommonParams>\n urlEncodedFormData: z.output<UrlEncodedFormData>\n }\n > =>\n async (req, ctx, next) => {\n const { supportedArrayFormats } = input\n\n if (\n (input.formData && input.jsonBody) ||\n (input.formData && input.commonParams)\n ) {\n throw new Error(\"Cannot use formData with jsonBody or commonParams\")\n }\n\n if (\n (req.method === \"POST\" || req.method === \"PATCH\") &&\n (input.jsonBody || input.commonParams) &&\n !req.headers.get(\"content-type\")?.includes(\"application/json\")\n ) {\n throw new InvalidContentTypeError(\n `${req.method} requests must have Content-Type header with \"application/json\"`\n )\n }\n\n if (\n input.urlEncodedFormData &&\n req.method !== \"GET\" &&\n !req.headers\n .get(\"content-type\")\n ?.includes(\"application/x-www-form-urlencoded\")\n ) {\n throw new InvalidContentTypeError(\n `Must have Content-Type header with \"application/x-www-form-urlencoded\"`\n )\n }\n\n if (\n input.formData &&\n (req.method === \"POST\" || req.method === \"PATCH\") &&\n !req.headers.get(\"content-type\")?.includes(\"multipart/form-data\")\n ) {\n throw new InvalidContentTypeError(\n `${req.method} requests must have Content-Type header with \"multipart/form-data\"`\n )\n }\n\n // TODO eventually we should support multipart/form-data\n\n const originalParams = Object.fromEntries(\n new URL(req.url).searchParams.entries()\n )\n\n let jsonBody: any\n\n if (input.jsonBody || input.commonParams) {\n try {\n jsonBody = await req.clone().json()\n } catch (e: any) {\n if (!input.jsonBody?.isOptional()) {\n throw new InputParsingError(\"Error while parsing JSON body\")\n }\n }\n }\n\n let multiPartFormData = undefined\n\n if (input.formData) {\n try {\n multiPartFormData = await req.clone().formData()\n multiPartFormData = Object.fromEntries(multiPartFormData.entries())\n } catch (e: any) {\n if (!input.formData?.isOptional()) {\n throw new InputParsingError(\"Error while parsing form data\")\n }\n }\n }\n\n let urlEncodedFormData = undefined\n\n if (input.urlEncodedFormData) {\n try {\n const params = new URLSearchParams(await req.clone().text())\n urlEncodedFormData = Object.fromEntries(params.entries())\n } catch (e: any) {\n if (!input.urlEncodedFormData?.isOptional()) {\n throw new InputParsingError(\n \"Error while parsing url encoded form data\"\n )\n }\n }\n }\n\n try {\n const originalCombinedParams = {\n ...originalParams,\n ...(typeof jsonBody === \"object\" ? jsonBody : {}),\n }\n\n const willValidateRequestBody = ![\"GET\", \"DELETE\", \"HEAD\"].includes(\n req.method\n )\n\n if (Boolean(input.formData) && willValidateRequestBody) {\n req.multiPartFormData = input.formData?.parse(multiPartFormData)\n }\n\n if (Boolean(input.jsonBody) && willValidateRequestBody) {\n req.jsonBody = input.jsonBody?.parse(jsonBody)\n }\n\n if (Boolean(input.urlEncodedFormData) && willValidateRequestBody) {\n req.urlEncodedFormData =\n input.urlEncodedFormData?.parse(urlEncodedFormData)\n }\n\n if (Boolean(input.routeParams) && \"routeParams\" in req) {\n req.routeParams = input.routeParams?.parse(req.routeParams)\n }\n\n if (input.queryParams) {\n if (!req.url) {\n throw new Error(\"req.url is undefined\")\n }\n\n validateQueryParams(req.url, input.queryParams, supportedArrayFormats)\n\n req.query = parseQueryParams(\n input.queryParams,\n originalParams,\n supportedArrayFormats\n )\n }\n\n if (input.commonParams) {\n /**\n * as commonParams includes query params, we can use the parseQueryParams function\n */\n req.commonParams = parseQueryParams(\n input.commonParams,\n originalCombinedParams,\n supportedArrayFormats\n )\n }\n } catch (error: any) {\n if (error instanceof BadRequestError) {\n throw error\n }\n\n if (error instanceof ZodError) {\n throw new InputValidationError(error)\n }\n\n throw new InputParsingError(\"Error while parsing input\")\n }\n\n return next(req, ctx)\n }\n","import { Middleware } from \"src/middleware/types.js\"\nimport { Logger } from \"./with-logger.js\"\n\nexport const withUnhandledExceptionHandling: Middleware<{\n logger?: Logger\n}> = async (req, ctx, next) => {\n try {\n return await next(req, ctx)\n } catch (e: any) {\n const logger = ctx.logger ?? console\n\n if (\"_isHttpException\" in e) {\n logger.warn(\n \"Caught unhandled HTTP exception thrown by EdgeSpec provided middleware. Consider adding createWithDefaultExceptionHandling middleware to your global or route spec.\"\n )\n } else {\n logger.warn(\n \"Caught unknown unhandled exception; consider adding a exception handling middleware to your global or route spec.\"\n )\n }\n\n logger.error(e)\n\n return new Response(null, {\n status: 500,\n })\n }\n}\n","import { z } from \"zod\"\nimport type { GlobalSpec } from \"./types/global-spec.js\"\nimport type { Middleware, MiddlewareChain } from \"./middleware/types.js\"\nimport type { CreateWithRouteSpecFn, RouteSpec } from \"./types/route-spec.js\"\nimport type { ResponseTypeToContext } from \"./types/context.js\"\nimport type { InferRecordKey } from \"./types/util.js\"\nimport {\n EdgeSpecMultiPartFormDataResponse,\n EdgeSpecJsonResponse,\n EdgeSpecRequest,\n EdgeSpecResponse,\n EdgeSpecRouteFn,\n EdgeSpecCustomResponse,\n SerializableToResponse,\n} from \"./types/web-handler.js\"\nimport { withMethods } from \"./middleware/with-methods.js\"\nimport { withInputValidation } from \"./middleware/with-input-validation.js\"\nimport { withUnhandledExceptionHandling } from \"./middleware/with-unhandled-exception-handling.js\"\nimport { ResponseValidationError } from \"./middleware/http-exceptions.js\"\n\nconst attachMetadataToRouteFn = <\n const GS extends GlobalSpec,\n const RS extends RouteSpec<InferRecordKey<GS[\"authMiddleware\"]>>,\n>(\n { globalSpec, routeSpec }: { globalSpec: GS; routeSpec: RS },\n routeFn: EdgeSpecRouteFn\n) => {\n routeFn._globalSpec = globalSpec\n routeFn._routeSpec = routeSpec\n return routeFn\n}\n\nexport const createWithEdgeSpec = <const GS extends GlobalSpec>(\n globalSpec: GS\n): CreateWithRouteSpecFn<GS> => {\n return (routeSpec) => (routeFn) =>\n attachMetadataToRouteFn(\n {\n globalSpec,\n routeSpec,\n },\n async (request, ctx) => {\n const onMultipleAuthMiddlewareFailures =\n globalSpec.onMultipleAuthMiddlewareFailures ??\n routeSpec.onMultipleAuthMiddlewareFailures\n\n const supportedAuthMiddlewares = new Set<string>(\n routeSpec.auth == null || routeSpec.auth === \"none\"\n ? []\n : Array.isArray(routeSpec.auth)\n ? routeSpec.auth\n : [routeSpec.auth]\n )\n\n const authMiddlewares = Object.entries(globalSpec.authMiddleware)\n .filter(([k, _]) => supportedAuthMiddlewares.has(k))\n .map(([_, v]) => v)\n\n return await wrapMiddlewares(\n [\n // Injected into the VM when running in WinterCG emulation mode\n // @ts-expect-error\n ...(typeof _injectedEdgeSpecMiddleware !== \"undefined\"\n ? // @ts-expect-error\n _injectedEdgeSpecMiddleware\n : []),\n withUnhandledExceptionHandling,\n // this serializes responses that are returned by middleware WITHOUT\n // validating them against the routeSpec\n //\n // this allows returning EdgeSpecResponse.json or ctx.json in a\n // middleware, instead of having to return a raw Response\n //\n // this is needed, for instance, when an error middleware returns an\n // error response that does not match the routeSpec's response shape\n serializeResponse(globalSpec, routeSpec, false),\n ...(globalSpec.beforeAuthMiddleware ?? []),\n firstAuthMiddlewareThatSucceeds(\n authMiddlewares,\n onMultipleAuthMiddlewareFailures\n ),\n ...(globalSpec.afterAuthMiddleware ?? []),\n ...(routeSpec.middleware ?? []),\n withMethods(routeSpec.methods),\n withInputValidation({\n supportedArrayFormats: globalSpec.supportedArrayFormats ?? [\n \"brackets\",\n \"comma\",\n \"repeat\",\n ],\n commonParams: routeSpec.commonParams,\n formData: routeSpec.multiPartFormData,\n jsonBody: routeSpec.jsonBody,\n queryParams: routeSpec.queryParams,\n routeParams: routeSpec.routeParams,\n urlEncodedFormData: routeSpec.urlEncodedFormData,\n }),\n // this serializes responses that are returned by the route function,\n // validating them against the routeSpec\n serializeResponse(globalSpec, routeSpec),\n ],\n routeFn,\n request,\n ctx\n )\n }\n )\n}\n\n/**\n * Ensure that the default response is always merged with the final output\n * response from the route function.\n *\n * Without this, headers accumulated through middleware would never make their\n * way to the final response\n *\n * This also handles validation of the response and serializing it from an\n * EdgeSpecResponse to a wintercg-compatible Response\n */\nfunction serializeResponse(\n globalSpec: GlobalSpec,\n routeSpec: RouteSpec<any>,\n skipValidation: boolean = false\n): Middleware {\n return async (req, ctx, next) => {\n const rawResponse = await next(req, ctx)\n\n const statusCode =\n rawResponse instanceof EdgeSpecResponse\n ? rawResponse.statusCode()\n : rawResponse.status\n\n const isSuccess = statusCode >= 200 && statusCode < 300\n\n try {\n const response = serializeToResponse(\n isSuccess &&\n !skipValidation &&\n (globalSpec.shouldValidateResponses ?? true),\n routeSpec,\n rawResponse\n )\n\n return response\n } catch (err: any) {\n throw new ResponseValidationError(err)\n }\n }\n}\n\nexport async function wrapMiddlewares(\n middlewares: MiddlewareChain,\n routeFn: EdgeSpecRouteFn<any, any, any>,\n request: EdgeSpecRequest,\n ctx: ResponseTypeToContext<Response>\n) {\n return await middlewares.reduceRight(\n (next, middleware) => {\n return async (req, ctx) => {\n return middleware(req, ctx, next as any)\n }\n },\n async (request: EdgeSpecRequest, ctx: ResponseTypeToContext<Response>) =>\n routeFn(request, ctx)\n )(request, ctx)\n}\n\nfunction serializeToResponse(\n shouldValidateResponse: boolean,\n routeSpec: RouteSpec<any>,\n response: SerializableToResponse | Response\n): Response {\n if (!shouldValidateResponse) {\n return \"serializeToResponse\" in response\n ? response.serializeToResponse(z.any())\n : response\n }\n\n if (response instanceof EdgeSpecResponse) {\n if (response instanceof EdgeSpecJsonResponse) {\n return response.serializeToResponse(routeSpec.jsonResponse ?? z.any())\n }\n\n if (response instanceof EdgeSpecMultiPartFormDataResponse) {\n return response.serializeToResponse(\n routeSpec.multipartFormDataResponse ?? z.any()\n )\n }\n\n if (response instanceof EdgeSpecCustomResponse) {\n return response.serializeToResponse(z.any())\n }\n }\n\n if (\"serializeToResponse\" in response) {\n throw new Error(\"Unknown Response type\")\n }\n\n return response\n}\n\nfunction firstAuthMiddlewareThatSucceeds(\n authMiddlewares: MiddlewareChain,\n onMultipleAuthMiddlewareFailures:\n | ((errs: unknown[]) => void)\n | null\n | undefined\n): Middleware {\n return async (req, ctx, next) => {\n if (authMiddlewares.length === 0) {\n return next(req, ctx)\n }\n\n let errors: unknown[] = []\n let didAuthMiddlewareThrow = true\n\n for (const middleware of authMiddlewares) {\n try {\n return await middleware(req, ctx, (...args) => {\n // Otherwise errors unrelated to auth thrown by built-in middleware (withMethods, withValidation) will be caught here\n didAuthMiddlewareThrow = false\n return next(...args)\n })\n } catch (error) {\n if (didAuthMiddlewareThrow) {\n errors.push(error)\n continue\n } else {\n throw error\n }\n }\n }\n\n if (onMultipleAuthMiddlewareFailures && didAuthMiddlewareThrow) {\n onMultipleAuthMiddlewareFailures(errors)\n }\n\n throw errors[errors.length - 1]\n }\n}\n","import {\n EdgeSpecCustomResponse,\n EdgeSpecJsonResponse,\n EdgeSpecMultiPartFormDataResponse,\n EdgeSpecResponse,\n SerializableToResponse,\n} from \"./web-handler.js\"\n\nexport type ResponseTypeToContext<\n ResponseType extends SerializableToResponse | Response,\n> = Exclude<ResponseType, Response> extends EdgeSpecJsonResponse<infer T>\n ? {\n json: typeof EdgeSpecResponse.json<T>\n }\n : Exclude<ResponseType, Response> extends E