{"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 EdgeSpecMultiPartFormDataResponse<\n        infer T\n      >\n    ? {\n        multipartFormData: typeof EdgeSpecResponse.multipartFormData<T>\n      }\n    : Exclude<ResponseType, Response> extends EdgeSpecCustomResponse<\n          infer T,\n          infer C\n        >\n      ? {\n          custom: typeof EdgeSpecResponse.custom<T, C>\n        }\n      : {\n          json: typeof EdgeSpecResponse.json<unknown>\n          multipartFormData: typeof EdgeSpecResponse.multipartFormData<\n            Record<string, string>\n          >\n        }\n\nconst DEFAULT_CONTEXT = {\n  json: EdgeSpecResponse.json,\n  multipartFormData: EdgeSpecResponse.multipartFormData,\n  custom: EdgeSpecResponse.custom,\n} as const\n\nexport const getDefaultContext = () => ({ ...DEFAULT_CONTEXT })\n","import type { Middleware } from \"src/middleware/types.js\"\nimport {\n  createEdgeSpecRequest,\n  type EdgeSpecRouteFn,\n  type EdgeSpecRouteParams,\n  EdgeSpecRequest,\n} from \"./web-handler.js\"\n\nimport type { ReadonlyDeep } from \"type-fest\"\nimport { wrapMiddlewares } from \"src/create-with-edge-spec.js\"\nimport { getDefaultContext } from \"./context.js\"\nimport { Server } from \"node:http\"\n\nexport type EdgeSpecRouteMatcher = (pathname: string) =>\n  | {\n      matchedRoute: string\n      routeParams: EdgeSpecRouteParams\n    }\n  | undefined\n  | null\n\nexport type EdgeSpecRouteMap = Record<string, EdgeSpecRouteFn>\n\nexport interface EdgeSpecOptions {\n  handle404?: EdgeSpecRouteFn\n}\n\ninterface MakeRequestOptions {\n  /**\n   * Defaults to true. When true, we will attempt to automatically remove any pathname prefix from the request. This is useful when you're hosting an EdgeSpec service on a subpath of your application.\n   *\n   * For example, if you're hosting an EdgeSpec service \"Foo\" at /foo/[...path], then this option will automatically remove the /foo prefix from the request so that the Foo service only sees /[...path].\n   *\n   * This currently only works if your parent application is also an EdgeSpec service and it's hosting the child service on a wildcard route (/foo/[...path]).\n   */\n  automaticallyRemovePathnamePrefix?: boolean\n\n  /**\n   * If you want to manually remove a pathname prefix, you can specify it here. `automaticallyRemovePathnamePrefix` must be false when specifying this option.\n   */\n  removePathnamePrefix?: string\n\n  middleware?: Middleware[]\n}\n\n// make this deeply immutable to force usage through helper functions\nexport type EdgeSpecRouteBundle = ReadonlyDeep<\n  EdgeSpecOptions & {\n    routeMatcher: EdgeSpecRouteMatcher\n    routeMapWithHandlers: EdgeSpecRouteMap\n    makeRequest: (\n      request: Request,\n      options?: MakeRequestOptions\n    ) => Promise<Response>\n  }\n>\n\nexport type EdgeSpecAdapter<\n  Options extends Array<unknown> = [],\n  ReturnValue = void,\n> = (edgeSpec: EdgeSpecRouteBundle, ...options: Options) => ReturnValue\n\ntype Foo = EdgeSpecAdapter<[], Promise<Server>>\ntype a = ReturnType<Foo>\n\nexport function makeRequestAgainstEdgeSpec(\n  edgeSpec: EdgeSpecRouteBundle,\n  options: MakeRequestOptions = {}\n): (request: Request) => Promise<Response> {\n  return async (request: Request) => {\n    const {\n      routeMatcher,\n      routeMapWithHandlers,\n      handle404 = () =>\n        new Response(\"Not found\", {\n          status: 404,\n        }),\n    } = edgeSpec\n\n    const { removePathnamePrefix, automaticallyRemovePathnamePrefix = true } =\n      options\n\n    let pathname = new URL(request.url).pathname\n    if (removePathnamePrefix) {\n      if (automaticallyRemovePathnamePrefix) {\n        throw new Error(\n          \"automaticallyRemovePathnamePrefix and removePathnamePrefix cannot both be specified\"\n        )\n      }\n\n      pathname = pathname.replace(removePathnamePrefix, \"\")\n    } else {\n      if ((request as any).routeParams) {\n        // These are the route params of the parent route hosting the EdgeSpec service\n        const routeParams = (request as unknown as EdgeSpecRequest).routeParams\n\n        // If the child service is hosted at /foo/[...path], we want to find the [...path] parameter\n        const wildcardRouteParameters = Object.values(routeParams).filter((p) =>\n          Array.isArray(p)\n        )\n        if (wildcardRouteParameters.length === 0) {\n          throw new Error(\"No wildcard route parameters found\")\n        }\n\n        if (wildcardRouteParameters.length > 1) {\n          throw new Error(\"Only one wildcard route parameter is supported\")\n        }\n\n        const wildcardRouteParameter = wildcardRouteParameters[0]\n\n        pathname = `/${(wildcardRouteParameter as string[]).join(\"/\")}`\n      }\n    }\n\n    const { matchedRoute, routeParams } = routeMatcher(pathname) ?? {}\n\n    let routeFn = matchedRoute && routeMapWithHandlers[matchedRoute]\n\n    const edgeSpecRequest = createEdgeSpecRequest(request, {\n      edgeSpec,\n      routeParams: routeParams ?? {},\n    })\n\n    if (!routeFn) {\n      return await handle404(edgeSpecRequest, getDefaultContext())\n    }\n\n    return wrapMiddlewares(\n      options.middleware ?? [],\n      routeFn,\n      edgeSpecRequest,\n      getDefaultContext()\n    )\n  }\n}\n","import { z } from \"zod\"\n\nconst edgeSpecConfigSchema = z\n  .object({\n    /**\n     * Defaults to the current working directory.\n     */\n    rootDirectory: z.string().optional(),\n    /**\n     * If this path is relative, it's resolved relative to the `rootDirectory` option.\n     */\n    tsconfigPath: z.string().optional(),\n    /**\n     * If this path is relative, it's resolved relative to the `rootDirectory` option.\n     */\n    routesDirectory: z.string().optional(),\n    /**\n     * The platform you're targeting.\n     *\n     * Defaults to `wintercg-minimal`, and you should use this whenever possible for maximal compatibility.\n     *\n     * Check [the docs](https://github.com/seamapi/edgespec/blob/main/docs/edgespec-config.md) for more information.\n     */\n    platform: z\n      .enum([\"node\", \"wintercg-minimal\"])\n      .default(\"wintercg-minimal\")\n      .optional(),\n  })\n  .strict()\n\nexport type EdgeSpecConfig = z.infer<typeof edgeSpecConfigSchema>\n\nexport const defineConfig = (config: EdgeSpecConfig): EdgeSpecConfig => {\n  const parsedConfig = edgeSpecConfigSchema.safeParse(config)\n\n  if (parsedConfig.success) {\n    return parsedConfig.data\n  }\n\n  throw new Error(`Invalid config: ${parsedConfig.error}`)\n}\n","import { EdgeSpecRouteBundle } from \"./types/index.js\"\n\n/**\n * Loads a file created by `edgespec bundle` and returns the default export.\n * This is a very thin wrapper over `import()` that adds some types.\n */\nexport const loadBundle = async (\n  bundlePath: string\n): Promise<EdgeSpecRouteBundle> => {\n  const bundle = await import(bundlePath)\n  // If the file is imported as CJS, the default export is nested.\n  // Naming this with .mjs seems to break some on-the-fly transpiling tools downstream.\n  return bundle.default.default ?? bundle.default\n}\n"]}