{"version":3,"sources":["../src/api/endpoint.ts","../src/api/route-schema.ts","../src/api/route.ts","../src/api/plugin-route-runtime.ts","../src/api/runtime.ts"],"sourcesContent":["import { createEndpoint as betterCallEndpoint } from \"better-call\";\nimport { applyFarmCacheInvalidationTargets, type FarmCacheInvalidationTarget } from \"../cache\";\nimport { isMultipartSchema, type MultipartSchema, type TypedFormData } from \"./transport\";\nimport type { RouteSchema, RouteSchemaInput, RouteSchemaOutput } from \"./route-schema\";\n\n// Share the route factory's Zod and Standard Schema contract.\ntype AnySchema = RouteSchema;\n\ntype MaybePromise<T> = T | Promise<T>;\ntype Simplify<T> = { [TKey in keyof T]: T[TKey] } & {};\ntype UnionToIntersection<T> = (T extends unknown ? (value: T) => void : never) extends (\n  value: infer TIntersection,\n) => void\n  ? TIntersection\n  : never;\n\n// Handlers receive parsed output; callers supply the schema input.\ntype InferOutput<T> = RouteSchemaOutput<T>;\n\ntype InferInput<T> = T extends { _input: infer I }\n  ? I\n  : T extends { \"~standard\": unknown }\n    ? RouteSchemaInput<T>\n    : T extends { parse: (data: infer I) => unknown }\n      ? I\n      : unknown;\n\ntype InferBodyInput<T> =\n  T extends MultipartSchema<AnySchema> ? TypedFormData<InferInput<T>> : InferInput<T>;\n\ntype InferHeadersOutput<T> = [T] extends [never]\n  ? Record<string, string>\n  : T extends AnySchema\n    ? InferOutput<T>\n    : Record<string, string>;\n\nexport type EndpointErrorSchema = AnySchema & { parse: (data: unknown) => unknown };\n\ntype EndpointErrorDefinitionBase<TStatus extends number> = {\n  status: TStatus;\n  /** Public message safe to expose to API callers. */\n  message?: string;\n};\n\nexport type EndpointErrorDefinition<\n  TSchema extends EndpointErrorSchema = EndpointErrorSchema,\n  TStatus extends number = number,\n> = EndpointErrorDefinitionBase<TStatus> &\n  (\n    | {\n        /** Schema for the public error payload exposed to API callers. */\n        data: TSchema;\n        schema?: never;\n      }\n    | {\n        data?: never;\n        /** @deprecated Use `data` for consistency with server functions. */\n        schema: TSchema;\n      }\n  );\n\nexport type EndpointErrorDefinitions = Record<\n  string,\n  EndpointErrorDefinition<EndpointErrorSchema, number>\n>;\n\ntype InferEndpointErrorSchema<TDefinition> = TDefinition extends {\n  data: infer TSchema extends AnySchema;\n}\n  ? TSchema\n  : TDefinition extends { schema: infer TSchema extends AnySchema }\n    ? TSchema\n    : never;\n\nexport type EndpointErrorContracts<TErrors extends EndpointErrorDefinitions> = {\n  [TCode in keyof TErrors]: {\n    data: InferOutput<InferEndpointErrorSchema<TErrors[TCode]>>;\n    status: TErrors[TCode][\"status\"];\n  };\n};\n\nexport type EndpointErrorHandler<TErrors extends EndpointErrorDefinitions> = <\n  TCode extends keyof TErrors & string,\n>(\n  code: TCode,\n  data: InferInput<InferEndpointErrorSchema<TErrors[TCode]>>,\n) => never;\n\n/** @deprecated Use `EndpointErrorHandler`. */\nexport type EndpointFail<TErrors extends EndpointErrorDefinitions> = EndpointErrorHandler<TErrors>;\n\nexport class EndpointFailure<TCode extends string = string, TData = unknown> extends Error {\n  readonly code: TCode;\n  readonly data: TData;\n  readonly status: number;\n\n  constructor(\n    code: TCode,\n    data: TData,\n    options: {\n      status: number;\n      message: string;\n    },\n  ) {\n    super(options.message);\n    this.name = \"EndpointFailure\";\n    this.code = code;\n    this.data = data;\n    this.status = options.status;\n  }\n}\n\nexport function isEndpointFailure(value: unknown): value is EndpointFailure<string, unknown> {\n  return value instanceof EndpointFailure;\n}\n\nexport type EndpointParamValue = string | string[];\nexport type EndpointParams = Record<string, EndpointParamValue>;\n\nexport type EndpointMiddlewareContext<\n  TContext extends object = {},\n  TBody = unknown,\n  TQuery = unknown,\n  THeaders = Record<string, string>,\n> = {\n  body: TBody;\n  query: TQuery;\n  headers: THeaders;\n  request: Request;\n  /** Context accumulated from middleware that ran earlier in the chain. */\n  context: Readonly<TContext>;\n  params: EndpointParams;\n};\n\nexport type EndpointMiddlewareResult<TProvidedContext extends object = object> =\n  | TProvidedContext\n  | true\n  | false\n  | Response;\n\n/** A plain async function. No wrapper or `next()` callback is required. */\nexport type EndpointMiddleware<\n  TProvidedContext extends object = object,\n  TContext extends object = {},\n  TBody = unknown,\n  TQuery = unknown,\n  THeaders = Record<string, string>,\n> = (\n  ctx: EndpointMiddlewareContext<TContext, TBody, TQuery, THeaders>,\n) => MaybePromise<EndpointMiddlewareResult<TProvidedContext>>;\n\nexport type AnyEndpointMiddleware = (ctx: EndpointMiddlewareContext<any, any, any, any>) => unknown;\n\nexport type EndpointInvalidationTarget = FarmCacheInvalidationTarget;\n\nexport type EndpointInvalidationContext<\n  TContext extends object = {},\n  TBody = unknown,\n  TQuery = unknown,\n  THeaders = Record<string, string>,\n> = EndpointMiddlewareContext<TContext, TBody, TQuery, THeaders> & {\n  /** The raw value returned by the endpoint handler. */\n  result: unknown;\n};\n\nexport type EndpointInvalidations<\n  TContext extends object = {},\n  TBody = unknown,\n  TQuery = unknown,\n  THeaders = Record<string, string>,\n> =\n  | readonly EndpointInvalidationTarget[]\n  | ((\n      context: EndpointInvalidationContext<TContext, TBody, TQuery, THeaders>,\n    ) => readonly EndpointInvalidationTarget[] | Promise<readonly EndpointInvalidationTarget[]>);\n\ntype ValidateEndpointMiddlewares<TMiddlewares extends readonly AnyEndpointMiddleware[]> = {\n  readonly [TIndex in keyof TMiddlewares]: TMiddlewares[TIndex] extends AnyEndpointMiddleware\n    ? [Awaited<ReturnType<TMiddlewares[TIndex]>>] extends [EndpointMiddlewareResult<object>]\n      ? TMiddlewares[TIndex]\n      : never\n    : never;\n};\n\ntype ContextFromMiddlewareResult<TResult> =\n  Exclude<TResult, Response | boolean> extends infer TContext\n    ? [TContext] extends [never]\n      ? {}\n      : TContext extends object\n        ? TContext\n        : {}\n    : {};\n\ntype ContextFromMiddleware<TMiddleware> = TMiddleware extends (...args: any[]) => infer TResult\n  ? ContextFromMiddlewareResult<Awaited<TResult>>\n  : {};\n\nexport type InferEndpointMiddlewareContext<\n  TMiddlewares extends readonly ((...args: any[]) => any)[],\n  TContext extends object = {},\n> = TMiddlewares extends readonly [infer TMiddleware, ...infer TRest]\n  ? TMiddleware extends (...args: any[]) => any\n    ? TRest extends readonly ((...args: any[]) => any)[]\n      ? InferEndpointMiddlewareContext<\n          TRest,\n          Simplify<TContext & ContextFromMiddleware<TMiddleware>>\n        >\n      : Simplify<TContext>\n    : Simplify<TContext>\n  : number extends TMiddlewares[\"length\"]\n    ? Simplify<TContext & UnionToIntersection<ContextFromMiddleware<TMiddlewares[number]>>>\n    : Simplify<TContext>;\n\nexport type EndpointOptions<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TMiddlewares extends readonly AnyEndpointMiddleware[] = readonly [],\n  TErrors extends EndpointErrorDefinitions = {},\n> = {\n  method?: \"GET\" | \"HEAD\" | \"QUERY\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\" | \"OPTIONS\";\n  body?: TBody;\n  query?: TQuery;\n  headers?: THeaders;\n  middleware?: TMiddlewares;\n  /**\n   * Cache keys, tags, and route paths made stale after a successful handler result.\n   * The resolver receives validated input and middleware context.\n   */\n  invalidates?: EndpointInvalidations<\n    InferEndpointMiddlewareContext<TMiddlewares>,\n    InferOutput<TBody>,\n    InferOutput<TQuery>,\n    InferHeadersOutput<THeaders>\n  >;\n  errors?: TErrors;\n  /** @deprecated Use plain functions in `middleware` for Farm endpoint middleware. */\n  use?: any[];\n};\n\nexport type EndpointHandler<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n  TContext extends object = {},\n  TErrors extends EndpointErrorDefinitions = {},\n> = (ctx: {\n  body: InferOutput<TBody>;\n  query: InferOutput<TQuery>;\n  headers: InferHeadersOutput<THeaders>;\n  request: Request;\n  context: Readonly<TContext>;\n  params: EndpointParams;\n  error: EndpointErrorHandler<TErrors>;\n  /** @deprecated Use `error`. */\n  fail: EndpointFail<TErrors>;\n}) => Promise<TResponse> | TResponse;\n\n// Type to represent an endpoint with its input/output types\nexport type TypedEndpoint<\n  TBody = never,\n  TQuery = never,\n  TResponse = any,\n  THeaders = Record<string, string>,\n  TErrors = never,\n  TBodyInput = TBody,\n  TQueryInput = TQuery,\n> = {\n  __types: {\n    body: TBody;\n    inputBody: TBodyInput;\n    query: TQuery;\n    inputQuery: TQueryInput;\n    headers: THeaders;\n    response: TResponse;\n    errors: TErrors;\n  };\n  __path?: string;\n  __method?: string;\n} & ((options?: { body?: TBodyInput; query?: TQueryInput }) => Promise<TResponse>);\n\ntype CreatedEndpoint<\n  TBody extends AnySchema,\n  TQuery extends AnySchema,\n  THeaders extends AnySchema,\n  TResponse,\n  TErrors extends EndpointErrorDefinitions = {},\n> = TypedEndpoint<\n  InferOutput<TBody>,\n  InferOutput<TQuery>,\n  Awaited<TResponse>,\n  InferHeadersOutput<THeaders>,\n  EndpointErrorContracts<TErrors>,\n  InferBodyInput<TBody>,\n  InferInput<TQuery>\n>;\n\ntype AnyEndpointOptions = EndpointOptions<\n  AnySchema,\n  AnySchema,\n  AnySchema,\n  readonly AnyEndpointMiddleware[],\n  EndpointErrorDefinitions\n>;\ntype EndpointBodyFromOptions<TOptions> = TOptions extends {\n  body: infer TBody extends AnySchema;\n}\n  ? TBody\n  : never;\ntype EndpointQueryFromOptions<TOptions> = TOptions extends {\n  query: infer TQuery extends AnySchema;\n}\n  ? TQuery\n  : never;\ntype EndpointHeadersFromOptions<TOptions> = TOptions extends {\n  headers: infer THeaders extends AnySchema;\n}\n  ? THeaders\n  : never;\ntype EndpointMiddlewaresFromOptions<TOptions> = TOptions extends {\n  middleware: infer TMiddlewares extends readonly AnyEndpointMiddleware[];\n}\n  ? TMiddlewares\n  : readonly [];\ntype EndpointErrorsFromOptions<TOptions> = TOptions extends {\n  errors: infer TErrors extends EndpointErrorDefinitions;\n}\n  ? TErrors\n  : {};\ntype MethodlessEndpointOptions = Omit<AnyEndpointOptions, \"method\">;\ntype EndpointHandlerFromOptions<TOptions, TResponse> = EndpointHandler<\n  EndpointBodyFromOptions<TOptions>,\n  EndpointQueryFromOptions<TOptions>,\n  EndpointHeadersFromOptions<TOptions>,\n  TResponse,\n  InferEndpointMiddlewareContext<EndpointMiddlewaresFromOptions<TOptions>>,\n  EndpointErrorsFromOptions<TOptions>\n>;\ntype ValidatedEndpointHandlerFromOptions<TOptions, TResponse> = EndpointHandlerFromOptions<\n  TOptions,\n  TResponse\n> &\n  (EndpointMiddlewaresFromOptions<TOptions> extends ValidateEndpointMiddlewares<\n    EndpointMiddlewaresFromOptions<TOptions>\n  >\n    ? unknown\n    : never);\ntype CreatedEndpointFromOptions<TOptions, TResponse> = CreatedEndpoint<\n  EndpointBodyFromOptions<TOptions>,\n  EndpointQueryFromOptions<TOptions>,\n  EndpointHeadersFromOptions<TOptions>,\n  TResponse,\n  EndpointErrorsFromOptions<TOptions>\n>;\n\n/**\n * Create a Farm.js API endpoint\n *\n * Supports two patterns:\n * 1. File-based routing (path auto-inferred from file location):\n *    `export const POST = createEndpoint({ method: 'POST', body: schema }, handler)`\n *    `createEndpoint({ method: 'GET', query: z.object({...}) }, handler)`\n *\n * 2. Explicit path (for routes.ts at project root):\n *    `createEndpoint('/api/hello', { method: 'GET', query: z.object({...}) }, handler)`\n */\nexport function createEndpoint<const TOptions extends AnyEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function createEndpoint<const TOptions extends AnyEndpointOptions, TResponse = any>(\n  path: string,\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function createEndpoint<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: EndpointOptions<TBody, TQuery, THeaders, readonly []>,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function createEndpoint<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  path: string,\n  options: EndpointOptions<TBody, TQuery, THeaders, readonly []>,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function createEndpoint(\n  pathOrOptions:\n    | string\n    | EndpointOptions<any, any, any, readonly AnyEndpointMiddleware[], EndpointErrorDefinitions>,\n  optionsOrHandler:\n    | EndpointOptions<any, any, any, readonly AnyEndpointMiddleware[], EndpointErrorDefinitions>\n    | EndpointHandler<any, any, any, any, any, EndpointErrorDefinitions>,\n  maybeHandler?: EndpointHandler<any, any, any, any, any, EndpointErrorDefinitions>,\n): TypedEndpoint<any, any, any, any> {\n  // Determine if first arg is path or options\n  let path: string;\n  let options: EndpointOptions<\n    any,\n    any,\n    any,\n    readonly AnyEndpointMiddleware[],\n    EndpointErrorDefinitions\n  >;\n  let handler: EndpointHandler<any, any, any, any, any, EndpointErrorDefinitions>;\n\n  if (typeof pathOrOptions === \"string\") {\n    // createEndpoint('/path', options, handler)\n    path = pathOrOptions;\n    options = optionsOrHandler as typeof options;\n    handler = maybeHandler as typeof handler;\n  } else {\n    // createEndpoint(options, handler) - path will be set by API plugin from file location\n    path = \"\";\n    options = pathOrOptions;\n    handler = optionsOrHandler as typeof handler;\n  }\n\n  if (typeof handler !== \"function\") {\n    throw new TypeError(\"createEndpoint requires a handler function\");\n  }\n\n  const middleware = normalizeEndpointMiddleware(options.middleware);\n  const errors = normalizeEndpointErrors(options.errors);\n  const error = createEndpointErrorHandler(errors);\n  const wrappedHandler = (async (ctx: EndpointMiddlewareContext<any, any, any, any>) => {\n    const execution = await runEndpointMiddleware(\n      middleware,\n      ctx,\n      handler,\n      error,\n      options.invalidates,\n    );\n    return execution.result;\n  }) as typeof handler;\n  const {\n    middleware: _middleware,\n    errors: _errors,\n    invalidates: _invalidates,\n    ...betterCallOptions\n  } = options;\n\n  // Create the endpoint - path will be set later by API plugin if not provided\n  // We use a temporary path that will be replaced when the router is created\n  const endpoint = betterCallEndpoint(\n    path || \"/__farm_auto_path__\",\n    betterCallOptions as any,\n    wrappedHandler as any,\n  ) as any;\n\n  // Store the path and type information on the endpoint for later access\n  // Empty/undefined path means it will be inferred from file location by the API plugin\n  endpoint.__path = path || undefined;\n  endpoint.__method = options.method || \"GET\";\n  endpoint.__autoPath = !path; // Flag to indicate path should be auto-inferred\n  endpoint.__handler = wrappedHandler; // Used by Farm's route runtime.\n  endpoint.__farmInvoke = (ctx: EndpointMiddlewareContext<any, any, any, any>) =>\n    runEndpointMiddleware(middleware, ctx, handler, error, options.invalidates);\n  endpoint.__middleware = middleware;\n  endpoint.__sourceHandler = handler;\n  endpoint.__invalidates = options.invalidates;\n  endpoint.__errors = errors;\n\n  // Store type information for inference\n  endpoint.__types = {\n    body: options.body,\n    inputBody: isMultipartSchema(options.body) ? \"form-data\" : options.body,\n    query: options.query,\n    inputQuery: options.query,\n    headers: options.headers,\n    response: null as any,\n    errors,\n  };\n\n  return endpoint as any;\n}\n\nconst EMPTY_ENDPOINT_MIDDLEWARE = Object.freeze([]) as readonly AnyEndpointMiddleware[];\nconst EMPTY_ENDPOINT_CONTEXT = Object.freeze(Object.create(null)) as Readonly<\n  Record<string | symbol, unknown>\n>;\nconst UNSAFE_ENDPOINT_CONTEXT_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\nfunction normalizeEndpointErrors(\n  definitions: EndpointErrorDefinitions | undefined,\n): Readonly<EndpointErrorDefinitions> {\n  if (definitions === undefined) return Object.freeze({});\n  if (!isPlainEndpointContext(definitions)) {\n    throw new TypeError(\"createEndpoint errors must be an object\");\n  }\n\n  const normalized: EndpointErrorDefinitions = Object.create(null);\n  for (const [code, definition] of Object.entries(definitions)) {\n    if (!code.trim()) {\n      throw new TypeError(\"Endpoint error codes cannot be empty\");\n    }\n    if (!definition || typeof definition !== \"object\") {\n      throw new TypeError(`Endpoint error \"${code}\" must be an object`);\n    }\n    if (\n      !Number.isInteger(definition.status) ||\n      definition.status < 400 ||\n      definition.status > 599\n    ) {\n      throw new TypeError(`Endpoint error \"${code}\" status must be an integer between 400 and 599`);\n    }\n    const dataSchema = resolveEndpointErrorSchema(definition);\n    if (!dataSchema || typeof dataSchema.parse !== \"function\") {\n      throw new TypeError(`Endpoint error \"${code}\" requires a data schema with parse()`);\n    }\n    if (definition.message !== undefined && typeof definition.message !== \"string\") {\n      throw new TypeError(`Endpoint error \"${code}\" message must be a string`);\n    }\n\n    normalized[code] = Object.freeze({ ...definition });\n  }\n\n  return Object.freeze(normalized);\n}\n\nfunction resolveEndpointErrorSchema(\n  definition: EndpointErrorDefinition<EndpointErrorSchema, number>,\n): EndpointErrorSchema | undefined {\n  if (definition.data && definition.schema) {\n    throw new TypeError(\"Endpoint errors cannot define both data and schema\");\n  }\n  return definition.data ?? definition.schema;\n}\n\nfunction createEndpointErrorHandler(\n  definitions: Readonly<EndpointErrorDefinitions>,\n): EndpointErrorHandler<EndpointErrorDefinitions> {\n  return ((code: string, data: unknown): never => {\n    const definition = definitions[code];\n    if (!definition) {\n      throw new TypeError(`Endpoint error \"${code}\" is not declared`);\n    }\n\n    const parsed = resolveEndpointErrorSchema(definition)!.parse(data);\n    throw new EndpointFailure(code, parsed, {\n      status: definition.status,\n      message: definition.message ?? \"Request failed\",\n    });\n  }) as EndpointErrorHandler<EndpointErrorDefinitions>;\n}\n\nfunction normalizeEndpointMiddleware(\n  middleware: readonly AnyEndpointMiddleware[] | undefined,\n): readonly AnyEndpointMiddleware[] {\n  if (middleware === undefined) return EMPTY_ENDPOINT_MIDDLEWARE;\n  if (!Array.isArray(middleware)) {\n    throw new TypeError(\"createEndpoint middleware must be an array of functions\");\n  }\n\n  const normalized = [...middleware];\n  for (const entry of normalized) {\n    if (typeof entry !== \"function\") {\n      throw new TypeError(\"createEndpoint middleware entries must be functions\");\n    }\n  }\n\n  return Object.freeze(normalized);\n}\n\nasync function runEndpointMiddleware(\n  middleware: readonly AnyEndpointMiddleware[],\n  handlerContext: EndpointMiddlewareContext<any, any, any, any>,\n  handler: EndpointHandler<any, any, any, any, any, EndpointErrorDefinitions>,\n  error: EndpointErrorHandler<EndpointErrorDefinitions>,\n  invalidations: EndpointInvalidations<any, any, any, any> | undefined,\n): Promise<{\n  result: unknown;\n  context: Readonly<Record<string | symbol, unknown>>;\n  handlerExecuted: boolean;\n  invalidations: readonly string[];\n}> {\n  let context = createInitialEndpointContext(handlerContext.context);\n\n  for (let index = 0; index < middleware.length; index++) {\n    const result = await middleware[index]({ ...handlerContext, context });\n\n    if (isEndpointResponse(result)) {\n      return {\n        result,\n        context,\n        handlerExecuted: false,\n        invalidations: [],\n      };\n    }\n    if (result === false) {\n      return {\n        result: forbiddenEndpointResponse(),\n        context,\n        handlerExecuted: false,\n        invalidations: [],\n      };\n    }\n    if (result === true) continue;\n\n    if (!isPlainEndpointContext(result)) {\n      throw new TypeError(\n        `Endpoint middleware ${index + 1} must return an object, true, false, or a Response`,\n      );\n    }\n\n    context = mergeEndpointContext(context, result, index);\n  }\n\n  const result = await handler({ ...handlerContext, context, error, fail: error });\n  return {\n    result,\n    context,\n    handlerExecuted: true,\n    invalidations: await applyEndpointInvalidations(\n      invalidations,\n      {\n        ...handlerContext,\n        context,\n        result,\n      },\n      result,\n    ),\n  };\n}\n\nasync function applyEndpointInvalidations(\n  declaration: EndpointInvalidations<any, any, any, any> | undefined,\n  context: EndpointInvalidationContext<any, any, any, any>,\n  result: unknown,\n): Promise<readonly string[]> {\n  if (!declaration || (isEndpointResponse(result) && result.status >= 400)) {\n    return [];\n  }\n\n  const targets = typeof declaration === \"function\" ? await declaration(context) : declaration;\n  if (!Array.isArray(targets)) {\n    throw new TypeError(\n      \"Endpoint invalidates must resolve to an array of { key }, { path }, or { tag } targets\",\n    );\n  }\n\n  return applyFarmCacheInvalidationTargets(targets);\n}\n\nfunction createInitialEndpointContext(value: unknown) {\n  if (value === undefined || value === null) return EMPTY_ENDPOINT_CONTEXT;\n  if (!isPlainEndpointContext(value)) {\n    throw new TypeError(\"Endpoint context must be a plain object\");\n  }\n\n  return mergeEndpointContext(EMPTY_ENDPOINT_CONTEXT, value);\n}\n\nfunction mergeEndpointContext(\n  current: Readonly<Record<string | symbol, unknown>>,\n  added: object,\n  middlewareIndex?: number,\n) {\n  const next = Object.assign(Object.create(null), current) as Record<string | symbol, unknown>;\n\n  for (const key of Reflect.ownKeys(added)) {\n    if (!Object.prototype.propertyIsEnumerable.call(added, key)) continue;\n    if (typeof key === \"string\" && UNSAFE_ENDPOINT_CONTEXT_KEYS.has(key)) {\n      throw new TypeError(`Endpoint middleware cannot provide the unsafe context key \"${key}\"`);\n    }\n    if (Object.prototype.hasOwnProperty.call(current, key)) {\n      const source =\n        middlewareIndex === undefined\n          ? \"Endpoint context\"\n          : `Endpoint middleware ${middlewareIndex + 1}`;\n      throw new TypeError(`${source} cannot replace the existing context key \"${String(key)}\"`);\n    }\n    next[key] = (added as Record<string | symbol, unknown>)[key];\n  }\n\n  return Object.freeze(next);\n}\n\nfunction isPlainEndpointContext(value: unknown): value is object {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n\nfunction isEndpointResponse(value: unknown): value is Response {\n  return (\n    value instanceof Response ||\n    (typeof value === \"object\" &&\n      value !== null &&\n      \"headers\" in value &&\n      \"status\" in value &&\n      typeof (value as Response).arrayBuffer === \"function\")\n  );\n}\n\nfunction forbiddenEndpointResponse() {\n  return new Response(JSON.stringify({ error: \"Forbidden\" }), {\n    status: 403,\n    headers: { \"Content-Type\": \"application/json\" },\n  });\n}\n\n/**\n * Convenience method for GET requests\n */\nexport function GET<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function GET<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function GET<\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<never, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<never, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<never, TQuery, THeaders, TResponse>;\nexport function GET(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"GET\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"GET\" }, args[1]);\n}\n\n/**\n * Convenience method for HEAD requests\n */\nexport function HEAD<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function HEAD<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function HEAD<\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<never, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<never, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<never, TQuery, THeaders, TResponse>;\nexport function HEAD(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"HEAD\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"HEAD\" }, args[1]);\n}\n\n/**\n * Convenience method for safe, idempotent QUERY requests with a request body\n */\nexport function QUERY<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function QUERY<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function QUERY<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function QUERY(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"QUERY\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"QUERY\" }, args[1]);\n}\n\n/**\n * Convenience method for POST requests\n */\nexport function POST<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function POST<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function POST<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function POST(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"POST\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"POST\" }, args[1]);\n}\n\n/**\n * Convenience method for PUT requests\n */\nexport function PUT<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function PUT<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function PUT<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function PUT(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"PUT\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"PUT\" }, args[1]);\n}\n\n/**\n * Convenience method for DELETE requests\n */\nexport function DELETE<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function DELETE<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function DELETE<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function DELETE(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"DELETE\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"DELETE\" }, args[1]);\n}\n\n/**\n * Convenience method for PATCH requests\n */\nexport function PATCH<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function PATCH<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function PATCH<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function PATCH(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"PATCH\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"PATCH\" }, args[1]);\n}\n\n/**\n * Convenience method for OPTIONS requests\n */\nexport function OPTIONS<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function OPTIONS<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function OPTIONS<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function OPTIONS(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"OPTIONS\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"OPTIONS\" }, args[1]);\n}\n","/** Server-only schema contract shared by declarative routes and the API runtime. */\nexport interface RouteSchema {\n  readonly _input?: unknown;\n  readonly _output?: unknown;\n  parse?: (value: unknown) => unknown;\n  parseAsync?: (value: unknown) => Promise<unknown>;\n  readonly \"~standard\"?: {\n    readonly types?: { input: unknown; output: unknown };\n    validate(value: unknown): unknown;\n  };\n}\n\nexport type RouteSchemaInput<T> = T extends { _input: infer I }\n  ? I\n  : T extends { \"~standard\": { types?: { input: infer I } } }\n    ? I\n    : unknown;\n\nexport type RouteSchemaOutput<T> = T extends { _output: infer O }\n  ? O\n  : T extends { \"~standard\": { types?: { output: infer O } } }\n    ? O\n    : T extends { parse: (...args: any[]) => infer O }\n      ? Awaited<O>\n      : unknown;\n\nexport async function parseRouteSchema(schema: RouteSchema, value: unknown): Promise<unknown> {\n  if (schema[\"~standard\"]) {\n    const result = (await schema[\"~standard\"].validate(value)) as {\n      value?: unknown;\n      issues?: readonly unknown[];\n    };\n    if (result.issues)\n      throw Object.assign(new Error(\"Validation failed\"), { issues: result.issues });\n    return result.value;\n  }\n  if (schema.parseAsync) return schema.parseAsync(value);\n  if (schema.parse) return schema.parse(value);\n  throw new TypeError(\"Route validators must implement Standard Schema or parse().\");\n}\n","import {\n  createEndpoint,\n  type TypedEndpoint,\n  type AnyEndpointMiddleware,\n  type EndpointMiddlewareResult,\n  type InferEndpointMiddlewareContext,\n} from \"./endpoint\";\nimport {\n  assertBrowserStableRoutePath,\n  assertUniqueRouteParameters,\n  getRoutePatternShape,\n} from \"../routing/specificity\";\nimport type { RouteSchema, RouteSchemaInput, RouteSchemaOutput } from \"./route-schema\";\n\nexport type RouteMethod =\n  | \"GET\"\n  | \"HEAD\"\n  | \"QUERY\"\n  | \"POST\"\n  | \"PUT\"\n  | \"PATCH\"\n  | \"DELETE\"\n  | \"OPTIONS\";\nexport type RoutePathParams<Path extends string> = Path extends `${infer Head}/${infer Tail}`\n  ? RoutePathParams<Head> & RoutePathParams<Tail>\n  : Path extends `[[...${infer Name}]]`\n    ? { [K in Name]?: string[] }\n    : Path extends `[...${infer Name}]`\n      ? { [K in Name]: string[] }\n      : Path extends `[${infer Name}]`\n        ? { [K in Name]: string }\n        : {};\n\nexport interface RouteInputSchemas {\n  body?: RouteSchema;\n  query?: RouteSchema;\n  params?: RouteSchema;\n  headers?: RouteSchema;\n}\ntype Input<I, K extends PropertyKey> = K extends keyof I ? RouteSchemaInput<I[K]> : never;\ntype Output<I, K extends PropertyKey, Fallback = unknown> = K extends keyof I\n  ? RouteSchemaOutput<I[K]>\n  : Fallback;\n/** JSON responses have wire types, not server-side instances such as Date. */\nexport type RouteJSON<T> = T extends Response\n  ? unknown\n  : T extends { toJSON(): infer J }\n    ? RouteJSON<J>\n    : T extends bigint | symbol | ((...args: any[]) => any)\n      ? never\n      : T extends readonly (infer V)[]\n        ? RouteJSON<V>[]\n        : T extends object\n          ? { [K in keyof T]: RouteJSON<T[K]> }\n          : T;\n\nexport type RouteDefinition<\n  P extends string = string,\n  M extends RouteMethod = RouteMethod,\n  E = any,\n> = {\n  readonly path: P;\n  readonly method: M;\n  readonly endpoint: E;\n};\n\ntype RouteEndpoint<P extends string, I extends RouteInputSchemas, R> = TypedEndpoint<\n  Output<I, \"body\">,\n  Input<I, \"query\">,\n  RouteJSON<R>,\n  Input<I, \"headers\">,\n  never,\n  Input<I, \"body\">\n> & {\n  __types: { params: RoutePathParams<P>; inputHeaders: Input<I, \"headers\"> };\n};\n\ntype TrimStart<P extends string> = P extends `/${infer Rest}` ? TrimStart<Rest> : P;\ntype Join<P extends string, C extends string> = C extends \"\" ? P : `${P}/${TrimStart<C>}`;\ntype ParamsCheck<P extends string, I extends RouteInputSchemas> = I extends { params: infer S }\n  ? Exclude<keyof RoutePathParams<P>, keyof RouteSchemaOutput<S>> extends never\n    ? Exclude<keyof RouteSchemaOutput<S>, keyof RoutePathParams<P>> extends never\n      ? unknown\n      : { __error_unknown_route_params: never }\n    : { __error_missing_route_params: never }\n  : unknown;\n\ntype RouteMiddlewareResults = readonly (\n  | EndpointMiddlewareResult\n  | Promise<EndpointMiddlewareResult>\n)[];\n// Infer callback results directly so inline middleware is contextually typed before\n// its returned context is exposed to the route handler.\ntype RouteMiddlewares<Results extends readonly unknown[]> = {\n  readonly [K in keyof Results]: (context: Parameters<AnyEndpointMiddleware>[0]) => Results[K];\n};\n\nexport type RouteOptions<\n  P extends string,\n  I extends RouteInputSchemas,\n  O extends RouteSchema | undefined,\n  R,\n  MiddlewareResults extends RouteMiddlewareResults = RouteMiddlewareResults,\n> = {\n  input?: I & ParamsCheck<P, I>;\n  /** Validate plain JSON handler results. Raw Response/stream results are never buffered. */\n  output?: O;\n  middleware?: RouteMiddlewares<MiddlewareResults>;\n  handler(\n    request: Request,\n    context: {\n      input: {\n        body: Output<I, \"body\">;\n        query: Output<I, \"query\", Record<string, string | string[]>>;\n        headers: Output<I, \"headers\", Record<string, string>>;\n        params: Output<I, \"params\", RoutePathParams<P>>;\n      };\n      params: Output<I, \"params\", RoutePathParams<P>>;\n      context: Readonly<InferEndpointMiddlewareContext<RouteMiddlewares<MiddlewareResults>>>;\n    },\n  ): R | Promise<R>;\n};\n\ntype RouteBuilder<P extends string, M extends RouteMethod> = <\n  const C extends string,\n  const MiddlewareResults extends RouteMiddlewareResults,\n  const I extends RouteInputSchemas = {},\n  O extends RouteSchema | undefined = undefined,\n  R = unknown,\n>(\n  path: C,\n  options: RouteOptions<Join<P, C>, I, O, R, MiddlewareResults>,\n) => RouteDefinition<\n  Join<P, C>,\n  M,\n  RouteEndpoint<\n    Join<P, C>,\n    I,\n    Extract<Awaited<R>, Response> extends never\n      ? O extends RouteSchema\n        ? RouteSchemaOutput<O>\n        : Awaited<R>\n      : unknown\n  >\n>;\n\nexport type RouteFactory<P extends string = \"\"> = {\n  [M in Lowercase<RouteMethod>]: RouteBuilder<P, Uppercase<M> & RouteMethod>;\n} & {\n  /** Return a new builder; never mutate the parent scope. */\n  scope<const C extends string>(path: C): RouteFactory<Join<P, C>>;\n};\n\nexport type PluginRoutes = readonly RouteDefinition[];\nexport type PluginRoutesFactory<R extends PluginRoutes = PluginRoutes> = (context: {\n  route: RouteFactory;\n}) => R;\n\nexport function createRouteFactory(): RouteFactory {\n  return createRouteFactoryAt(\"\");\n}\n\nfunction createRouteFactoryAt(prefix: string): RouteFactory {\n  const factory: Record<string, unknown> = {\n    scope(child: string) {\n      return createRouteFactoryAt(joinRoutePath(prefix, child));\n    },\n  };\n  for (const method of [\n    \"GET\",\n    \"HEAD\",\n    \"QUERY\",\n    \"POST\",\n    \"PUT\",\n    \"PATCH\",\n    \"DELETE\",\n    \"OPTIONS\",\n  ] as const) {\n    factory[method.toLowerCase()] = (\n      child: string,\n      options: RouteOptions<string, any, any, any>,\n    ) => {\n      const path = joinRoutePath(prefix, child);\n      const input = options.input ?? {};\n      const endpoint = createEndpoint(\n        path,\n        {\n          method,\n          body: input.body,\n          query: input.query,\n          headers: input.headers,\n          middleware: options.middleware,\n        },\n        (ctx) =>\n          options.handler(ctx.request, {\n            input: { body: ctx.body, query: ctx.query, headers: ctx.headers, params: ctx.params },\n            params: ctx.params,\n            context: ctx.context,\n          }),\n      ) as any;\n      endpoint.__types.params = input.params;\n      endpoint.__output = options.output;\n      return Object.freeze({ path, method, endpoint });\n    };\n  }\n  return Object.freeze(factory) as RouteFactory;\n}\n\nfunction joinRoutePath(prefix: string, child: string): string {\n  if (typeof child !== \"string\") throw new TypeError(\"Route paths must be strings.\");\n  const path = child === \"\" ? prefix : `${prefix}/${child.replace(/^\\//, \"\")}`;\n  if (!(path === \"/api\" || path.startsWith(\"/api/\")) || /[?#]|\\/\\/|\\/$/.test(path)) {\n    throw new TypeError(\n      `Plugin route \"${path}\" must be a canonical /api path without a query, hash, or empty segment.`,\n    );\n  }\n  assertBrowserStableRoutePath(path);\n  assertUniqueRouteParameters(path, \"api\");\n  getRoutePatternShape(path, \"api\");\n  for (const segment of path.split(\"/\")) {\n    if ([\"__proto__\", \"constructor\", \"prototype\", \"$params\"].includes(segment)) {\n      throw new TypeError(`Route segment \"${segment}\" is reserved.`);\n    }\n  }\n  return path;\n}\n\ntype UnionToIntersection<U> = (U extends unknown ? (v: U) => void : never) extends (\n  v: infer I,\n) => void\n  ? I\n  : never;\ntype RouteTree<P extends string, M extends string, E> = P extends `${infer Head}/${infer Tail}`\n  ? { [K in Head]: RouteTree<Tail, M, E> }\n  : P extends \"\"\n    ? { [K in Lowercase<M>]: E }\n    : { [K in P]: { [Method in Lowercase<M>]: E } };\ntype HasMethodSegment<P extends string> = P extends `${infer H}/${infer T}`\n  ? H extends Lowercase<RouteMethod>\n    ? true\n    : HasMethodSegment<T>\n  : P extends Lowercase<RouteMethod>\n    ? true\n    : false;\ntype DefinitionTree<D> =\n  D extends RouteDefinition<infer P, infer M, infer E>\n    ? string extends P\n      ? {}\n      : (P extends `/api/integrations${string}` ? true : HasMethodSegment<P>) extends true\n        ? { [K in P extends `/api/${infer C}` ? `/${C}` : \"/\"]: { [Method in Lowercase<M>]: E } }\n        : RouteTree<P extends `/api/${infer C}` ? C : \"\", M, E>\n    : {};\nexport type PluginAPIRouter<C> = C extends { plugins: readonly (infer P)[] }\n  ? UnionToIntersection<\n      P extends { routes?: PluginRoutesFactory<infer R> } ? DefinitionTree<R[number]> : {}\n    >\n  : {};\n\nexport function resolvePluginRoutes(\n  plugins: readonly { name: string; routes?: PluginRoutesFactory }[] = [],\n): PluginRoutes {\n  return plugins.flatMap((plugin) => {\n    if (!plugin.routes) return [];\n    const routes = plugin.routes({ route: createRouteFactory() });\n    if (!Array.isArray(routes))\n      throw new TypeError(`Plugin \"${plugin.name}\" routes must return an array synchronously.`);\n    for (const route of routes) {\n      if (\n        !route ||\n        joinRoutePath(\"\", route.path) !== route.path ||\n        typeof route.endpoint !== \"function\" ||\n        ![\"GET\", \"HEAD\", \"QUERY\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"OPTIONS\"].includes(\n          route.method,\n        )\n      ) {\n        throw new TypeError(`Plugin \"${plugin.name}\" returned an invalid API route.`);\n      }\n    }\n    return routes;\n  });\n}\n","import { resolvePluginRoutes, type PluginRoutesFactory } from \"./route\";\nimport { registerAPIRouteShape } from \"./route-shape\";\n\ninterface MountedRoute {\n  path: string;\n  methods: string[];\n  endpoints: Record<string, any>;\n  filePath?: string;\n  pluginMethods?: string[];\n}\n\n/** The same registration step is used by dev discovery and the production bundle. */\nexport function mergePluginAPIRoutes(\n  existing: readonly MountedRoute[],\n  plugins: readonly { name: string; routes?: PluginRoutesFactory }[],\n  expected?: readonly { path: string; methods: readonly string[] }[],\n): Array<MountedRoute & { filePath: string }> {\n  const routes = new Map<string, MountedRoute & { filePath: string }>();\n  const shapes = new Map();\n  for (const route of existing) {\n    registerAPIRouteShape(shapes, route.path, route.filePath || route.path, \"app\");\n    routes.set(route.path, {\n      ...route,\n      filePath: route.filePath || \"\",\n      methods: [...route.methods],\n      endpoints: { ...route.endpoints },\n    });\n  }\n  for (const definition of resolvePluginRoutes(plugins)) {\n    registerAPIRouteShape(shapes, definition.path, `plugin:${definition.path}`, \"app\");\n    let route = routes.get(definition.path);\n    if (route?.methods.includes(definition.method)) {\n      throw new Error(\n        `Duplicate API route for ${definition.method} ${definition.path}. Plugin routes cannot override app or other plugin endpoints.`,\n      );\n    }\n    if (!route) {\n      route = { path: definition.path, filePath: \"\", methods: [], endpoints: {} };\n      routes.set(definition.path, route);\n    }\n    route.methods.push(definition.method);\n    route.pluginMethods = [...(route.pluginMethods ?? []), definition.method];\n    route.endpoints[definition.method] = definition.endpoint;\n  }\n  const result = [...routes.values()];\n  if (expected) {\n    const signature = (entries: readonly { path: string; methods: readonly string[] }[]) =>\n      entries\n        .map(({ path, methods }) => `${path}:${[...methods].sort().join(\",\")}`)\n        .sort()\n        .join(\"\\n\");\n    if (signature(result) !== signature(expected)) {\n      throw new Error(\n        \"Plugin API routes changed between build and runtime. Route paths and methods must be stable across environments; rebuild the app.\",\n      );\n    }\n  }\n  return result;\n}\n","import { _runWithCurrentRequest } from \"../server/request\";\nimport {\n  decodeFarmCacheInvalidations,\n  encodeFarmCacheInvalidations,\n  FARM_CACHE_INVALIDATION_HEADER,\n} from \"../cache-invalidation\";\nimport { isEndpointFailure, type EndpointFailure } from \"./endpoint\";\nimport {\n  bufferFarmRequestBody,\n  createFarmRequestBodyErrorResponse,\n  DEFAULT_FARM_SERVER_BODY_SIZE_LIMIT,\n} from \"../server-http\";\nimport { DEFAULT_FARM_API_BASE_PATH, normalizeFarmAPIBasePath } from \"./config\";\nimport { resolveFarmAPICanonicalPathname } from \"./server-path\";\nimport { parseRouteSchema } from \"./route-schema\";\nimport { omitFarmResponseBody } from \"../response-body\";\n\nexport { registerAPIRouteShape, type APIRouteShapeSource } from \"./route-shape\";\nexport { mergePluginAPIRoutes } from \"./plugin-route-runtime\";\n\nexport {\n  matchAPIRoute,\n  type APIRouteParams,\n  type APIRouteParamValue,\n  type APIRouteMatch,\n} from \"./route-pattern\";\nimport { matchAPIRoute, type APIRouteParams, type APIRouteMatch } from \"./route-pattern\";\ninterface APIRouteMethodTable {\n  methods: string[];\n  endpoints: Record<string, any>;\n}\n\nexport function resolveAPIRouteEndpoint(\n  route: APIRouteMethodTable,\n  method: string,\n): any | undefined {\n  const normalizedMethod = method.toUpperCase();\n  return (\n    route.endpoints[normalizedMethod] ??\n    (normalizedMethod === \"HEAD\" ? route.endpoints.GET : undefined)\n  );\n}\n\nexport function getAllowedAPIRouteMethods(route: APIRouteMethodTable): string[] {\n  const methods = [...route.methods];\n  const getIndex = methods.indexOf(\"GET\");\n  if (getIndex >= 0 && !methods.includes(\"HEAD\")) {\n    methods.splice(getIndex + 1, 0, \"HEAD\");\n  }\n  return methods;\n}\n\n/** Match canonical routes through a configurable same-origin public API path. */\nexport function matchAPIRouteAtBasePath<T extends { path: string }>(\n  routes: Map<string, T>,\n  pathname: string,\n  serverBasePath = DEFAULT_FARM_API_BASE_PATH,\n): APIRouteMatch<T> | null {\n  const directMatch = matchAPIRoute(routes, pathname);\n  if (directMatch) return directMatch;\n\n  const canonicalPathname = resolveFarmAPICanonicalPathname(pathname, serverBasePath);\n  return canonicalPathname === pathname ? null : matchAPIRoute(routes, canonicalPathname);\n}\n\n/** Test whether a pathname belongs to the configured local API surface. */\nexport function isFarmAPIPathname(\n  pathname: string,\n  serverBasePath = DEFAULT_FARM_API_BASE_PATH,\n): boolean {\n  const basePath = normalizeFarmAPIBasePath(serverBasePath);\n  return basePath !== \"/\" && (pathname === basePath || pathname.startsWith(`${basePath}/`));\n}\n\nexport async function invokeAPIRouteEndpoint(\n  endpoint: any,\n  request: Request,\n  params: APIRouteParams = {},\n  bodySizeLimit = DEFAULT_FARM_SERVER_BODY_SIZE_LIMIT,\n): Promise<Response> {\n  try {\n    request = await bufferFarmRequestBody(request, bodySizeLimit);\n  } catch (error) {\n    const response = createFarmRequestBodyErrorResponse(error);\n    if (response) return response;\n    throw error;\n  }\n\n  const response = await _runWithCurrentRequest(request, () =>\n    invokeAPIRouteEndpointInContext(endpoint, request, params),\n  );\n\n  if (request.method.toUpperCase() !== \"HEAD\") {\n    return response;\n  }\n\n  return omitFarmResponseBody(response);\n}\n\nasync function invokeAPIRouteEndpointInContext(\n  endpoint: any,\n  request: Request,\n  params: APIRouteParams,\n): Promise<Response> {\n  const queryContentTypeError = validateQueryContentType(request);\n  if (queryContentTypeError) {\n    return queryContentTypeError;\n  }\n\n  // `createEndpoint` brands its parsed-context handler explicitly. Plain route\n  // exports always receive the Web Request regardless of their parameter name;\n  // inferring a calling convention from `Function#toString()` misclassified\n  // valid handlers named `context`, `ctx`, or using destructuring.\n  const farmHandler = endpoint.__handler || null;\n\n  if (!farmHandler) {\n    const result = await endpoint(request, {\n      params: Promise.resolve(params),\n    });\n    return normalizeRouteResponse(result);\n  }\n\n  const url = new URL(request.url);\n  // Repeated keys collect into arrays, the same representation the rest of the\n  // framework hands to routes, and the same helper this path already uses for\n  // urlencoded and multipart bodies. Spread back onto a normal object so an\n  // endpoint without a query schema still receives the object shape it did\n  // before; `entriesToObject` has already dropped the prototype-poisoning keys.\n  const query: Record<string, string | string[]> = {\n    ...searchParamsToObject(url.searchParams),\n  };\n\n  let body: any = undefined;\n  if (request.method.toUpperCase() !== \"GET\" && request.method.toUpperCase() !== \"HEAD\") {\n    const parsedBody = await readRequestBody(request);\n    if (parsedBody.error) return parsedBody.error;\n    body = parsedBody.body;\n  }\n\n  const headers = Object.fromEntries(request.headers.entries());\n  const types = endpoint.__types || {};\n\n  const queryValidation = await validateInput(types.query, query, \"Invalid query parameters\");\n  if (queryValidation instanceof Response) {\n    return queryValidation;\n  }\n\n  const bodyValidation = await validateInput(types.body, body, \"Invalid request body\");\n  if (bodyValidation instanceof Response) {\n    return bodyValidation;\n  }\n\n  const headersValidation = await validateInput(types.headers, headers, \"Invalid request headers\");\n  if (headersValidation instanceof Response) {\n    return headersValidation;\n  }\n\n  const paramsValidation = await validateInput(types.params, params, \"Invalid route parameters\");\n  if (paramsValidation instanceof Response) return paramsValidation;\n\n  const handlerContext = {\n    query: queryValidation,\n    body: bodyValidation,\n    headers: headersValidation,\n    request,\n    context: {},\n    params: paramsValidation,\n  };\n  let execution: {\n    result: unknown;\n    context: unknown;\n    handlerExecuted: boolean;\n    invalidations: readonly string[];\n  };\n  try {\n    execution =\n      typeof endpoint.__farmInvoke === \"function\"\n        ? await endpoint.__farmInvoke(handlerContext)\n        : {\n            result: await farmHandler(handlerContext),\n            context: handlerContext.context,\n            handlerExecuted: true,\n            invalidations: [],\n          };\n  } catch (error) {\n    if (isEndpointFailure(error)) {\n      return createEndpointFailureResponse(error);\n    }\n    throw error;\n  }\n\n  if (execution.handlerExecuted && endpoint.__output && !isWebResponse(execution.result)) {\n    try {\n      execution.result = await parseRouteSchema(endpoint.__output, execution.result);\n    } catch {\n      throw new Error(\"API route returned a value that does not match its output schema.\");\n    }\n  }\n  const response = normalizeRouteResponse(execution.result);\n  return attachEndpointInvalidations(response, execution.invalidations);\n}\n\nfunction validateQueryContentType(request: Request): Response | null {\n  if (request.method.toUpperCase() !== \"QUERY\" || request.headers.has(\"content-type\")) {\n    return null;\n  }\n\n  return new Response(\n    JSON.stringify({\n      error: \"Invalid QUERY request\",\n      message: \"QUERY requests must include a Content-Type header.\",\n    }),\n    {\n      status: 400,\n      headers: { \"Content-Type\": \"application/json\" },\n    },\n  );\n}\n\nexport function normalizeRouteResponse(result: unknown): Response {\n  if (isWebResponse(result)) {\n    return result;\n  }\n\n  if (result === undefined) {\n    return new Response(null, { status: 204 });\n  }\n\n  return new Response(JSON.stringify(result), {\n    status: 200,\n    headers: { \"Content-Type\": \"application/json\" },\n  });\n}\n\nexport function isWebResponse(value: unknown): value is Response {\n  return (\n    value instanceof Response ||\n    (typeof value === \"object\" &&\n      value !== null &&\n      \"headers\" in value &&\n      \"status\" in value &&\n      typeof (value as Response).arrayBuffer === \"function\")\n  );\n}\n\nfunction attachEndpointInvalidations(response: Response, keys: readonly string[]): Response {\n  const existing = decodeFarmCacheInvalidations(\n    response.headers.get(FARM_CACHE_INVALIDATION_HEADER),\n  );\n  const encoded = encodeFarmCacheInvalidations([...existing, ...keys]);\n  if (!encoded) return response;\n\n  const headers = new Headers(response.headers);\n  headers.set(FARM_CACHE_INVALIDATION_HEADER, encoded);\n  return new Response(response.body, {\n    status: response.status,\n    statusText: response.statusText,\n    headers,\n  });\n}\n\nexport function createEndpointFailureResponse(failure: EndpointFailure<string, unknown>): Response {\n  return new Response(\n    JSON.stringify({\n      error: {\n        code: failure.code,\n        message: failure.message,\n        data: failure.data,\n      },\n    }),\n    {\n      status: failure.status,\n      headers: {\n        \"cache-control\": \"no-store\",\n        \"content-type\": \"application/json\",\n      },\n    },\n  );\n}\n\ninterface RequestBodyParseResult {\n  body?: unknown;\n  error?: Response;\n}\n\nasync function readRequestBody(request: Request): Promise<RequestBodyParseResult> {\n  const contentType = request.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim().toLowerCase();\n\n  try {\n    if (contentType === \"multipart/form-data\") {\n      return { body: formDataToObject(await request.clone().formData()) };\n    }\n\n    const text = await request.clone().text();\n    if (!text) return { body: undefined };\n    if (contentType === \"application/x-www-form-urlencoded\") {\n      return { body: searchParamsToObject(new URLSearchParams(text)) };\n    }\n    if (contentType === \"application/json\" || contentType?.endsWith(\"+json\")) {\n      return { body: JSON.parse(text) };\n    }\n\n    // A body is only parsed as JSON when the request says it is JSON, or when it\n    // declares no type at all (the permissive path kept for non-browser callers\n    // that omit the header).\n    //\n    // Parsing a *declared* non-JSON type as JSON removed the barrier that keeps\n    // browsers from reaching this surface cross-origin: `text/plain`,\n    // `application/x-www-form-urlencoded`, and `multipart/form-data` are the\n    // CORS \"simple\" types that a cross-site page may send with credentials and\n    // without a preflight. Honouring the declared type means such a request no\n    // longer arrives as a parsed JSON object.\n    if (contentType === undefined) {\n      return { body: JSON.parse(text) };\n    }\n\n    return { body: undefined };\n  } catch {\n    if (contentType === \"application/json\" || contentType?.endsWith(\"+json\")) {\n      return {\n        error: new Response(\n          JSON.stringify({\n            error: \"Invalid request body\",\n            message: \"The request body is not valid JSON.\",\n          }),\n          {\n            status: 400,\n            headers: { \"Content-Type\": \"application/json\" },\n          },\n        ),\n      };\n    }\n    // The body format is unsupported or malformed. Schema validation below\n    // will turn the missing value into a typed 400 response when applicable.\n  }\n\n  return { body: undefined };\n}\n\nfunction formDataToObject(\n  formData: FormData,\n): Record<string, FormDataEntryValue | FormDataEntryValue[]> {\n  return entriesToObject(formData.entries());\n}\n\nfunction searchParamsToObject(searchParams: URLSearchParams): Record<string, string | string[]> {\n  return entriesToObject(searchParams.entries());\n}\n\nfunction entriesToObject<TValue>(\n  entries: IterableIterator<[string, TValue]>,\n): Record<string, TValue | TValue[]> {\n  const output: Record<string, TValue | TValue[]> = Object.create(null);\n  for (const [key, value] of entries) {\n    if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") continue;\n    const current = output[key];\n    if (current === undefined) {\n      output[key] = value;\n    } else if (Array.isArray(current)) {\n      current.push(value);\n    } else {\n      output[key] = [current, value];\n    }\n  }\n  return output;\n}\n\nasync function validateInput(\n  schema: any,\n  value: unknown,\n  error: string,\n): Promise<unknown | Response> {\n  if (!schema) return value;\n  try {\n    return await parseRouteSchema(schema, value);\n  } catch (validationError: any) {\n    return Response.json(\n      {\n        error,\n        details: (validationError.issues || validationError.errors || []).map((issue: any) => ({\n          path: issue.path,\n          message: issue.message,\n          code: issue.code,\n        })),\n      },\n      { status: 400 },\n    );\n  }\n}\n"],"mappings":"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","names":["result","response"]}