{"version":3,"sources":["../src/treaty.ts","../src/utils/noop.ts","../src/links/internal/observable.ts","../src/links/internal/operation.ts","../src/links/internal/create-chain.ts","../src/links/internal/operators.ts","../src/client.ts","../src/http.ts","../src/constants.ts","../src/errors.ts","../src/links/internal/transformer.ts","../src/utils/file.ts","../src/utils/http.ts","../src/utils/parse.ts","../src/ws.ts","../src/resolve.ts","../src/links/internal/universal-requester.ts","../src/links/http-link.ts","../src/path.ts","../src/path-params.ts"],"sourcesContent":["import type { AnyElysia, RouteSchema } from 'elysia'\n\nimport { EdenClient } from './client'\nimport type { TypeError } from './errors'\nimport { type HttpMutationMethod, type HttpQueryMethod, type HttpSubscriptionMethod } from './http'\nimport type { InferRouteBody, InferRouteOptions, InferRouteResponse } from './infer'\nimport { httpLink, type HTTPLinkOptions } from './links'\nimport { parsePathsAndMethod } from './path'\nimport {\n  type ExtractEdenTreatyRouteParams,\n  type ExtractEdenTreatyRouteParamsInput,\n  getPathParam,\n} from './path-params'\nimport type { EdenRequestOptions } from './request'\nimport type { EdenRequestParams } from './resolve'\nimport type { EmptyToVoid } from './utils/empty-to-void'\nimport { isGetOrHeadMethod, isHttpMethod } from './utils/http'\nimport type { Optional } from './utils/optional'\nimport type { EdenWS } from './ws'\n\n/**\n * RPC proxy derived from {@link AnyElysia._routes} for accessing an Elysia.js API.\n */\nexport type EdenTreatyClient<T extends AnyElysia> = T extends {\n  _routes: infer TSchema extends Record<string, any>\n}\n  ? EdenTreatyHooksProxy<TSchema>\n  : TypeError<'Please install Elysia before using Eden'>\n\n/**\n * Recursively iterate over all keys in {@link AnyElyisa._routes}, processing path parameters\n * and regular path segments separately.\n *\n * Regular path parameters will be mapped to a nested object, and then intersected\n * with anything generated by dynamic path parameters.\n *\n * @template TSchema The current level of {@link AnyElysia._routes} being processed.\n * @template TPath The current path segments up to this point (excluding dynamic path parameters).\n * @template TRouteParams Keys that are considered path parameters instead of regular path segments.\n */\nexport type EdenTreatyHooksProxy<\n  TSchema extends Record<string, any>,\n  TPath extends any[] = [],\n  TRouteParams = ExtractEdenTreatyRouteParams<TSchema>,\n> = EdenTreatyPathHooks<TSchema, TPath, TRouteParams> &\n  EdenTreatyHooksPathParameterHook<TSchema, TPath, TRouteParams>\n\n/**\n * Recursively handle regular path segments (i.e. NOT path parameters).\n *\n * If the value is a {@link RouteSchema}, then it's a \"leaf\" that does not need to be\n * recursively processed. The result should be the key, an HTTP method, mapped to a\n * strongly-typed function.\n *\n * @template TSchema The current level of {@link AnyElysia._routes} being processed.\n * @template TPath The current path segments up to this point (excluding dynamic path parameters).\n * @template TRouteParams Keys that are considered path parameters instead of regular path segments.\n */\ntype EdenTreatyPathHooks<\n  TSchema extends Record<string, any>,\n  TPath extends any[] = [],\n  TRouteParams = ExtractEdenTreatyRouteParams<TSchema>,\n> = {\n  [K in Exclude<keyof TSchema, keyof TRouteParams>]: TSchema[K] extends RouteSchema\n    ? EdenTreatyQueryRouteLeaf<TSchema[K], K>\n    : EdenTreatyHooksProxy<TSchema[K], [...TPath, K]>\n}\n\n/**\n * {@link EdenTreatyHooksProxy} intersects the object created by {@link EdenTreatyPathHooks}\n * for regular path parameters with anything created by this type for dynamic path parameters.\n *\n * If there are no dynamic path parameters, then return an empty object.\n * Intersecting with empty object does nothing.\n *\n * Otherwise, return a function that returns the next level of the proxy, omitting\n * the current dynamic path parameter.\n *\n * @template TSchema The current level of {@link AnyElysia._routes} being processed.\n * @template TPath The current path segments up to this point (excluding dynamic path parameters).\n * @template TRouteParams Keys that are considered path parameters instead of regular path segments.\n */\ntype EdenTreatyHooksPathParameterHook<\n  TSchema extends Record<string, any>,\n  TPath extends any[] = [],\n  TRouteParams = {},\n> = {} extends TRouteParams\n  ? {}\n  : (\n      params: ExtractEdenTreatyRouteParamsInput<TRouteParams>,\n    ) => EdenTreatyHooksProxy<TSchema[Extract<keyof TRouteParams, keyof TSchema>], TPath>\n\n/**\n * When a {@link RouteSchema} is found, map it to leaves and stop recursive processing.\n * Leaves are function calls that abstract the native {@link fetch} API.\n *\n * Based on the HTTP request \"category\", e.g. \"query\", \"mutation\", \"subscription\", or \"unknown\",\n * return the corresponding leaf.\n *\n * @template TRoute The {@link RouteSchema} that was found.\n * @template TMethod The most recent key that was mapped to the {@link TRoute}. e.g. \"get\", \"post\", etc.\n */\nexport type EdenTreatyQueryRouteLeaf<\n  TRoute extends RouteSchema,\n  TMethod,\n> = TMethod extends HttpQueryMethod\n  ? EdenTreatyQueryLeaf<TRoute>\n  : TMethod extends HttpMutationMethod\n    ? EdenTreatyMutationLeaf<TRoute>\n    : TMethod extends HttpSubscriptionMethod\n      ? EdenTreatySubscriptionLeaf<TRoute>\n      : EdenTreatyUnknownLeaf<TRoute>\n\n/**\n * Strongly-typed function for queries (i.e. \"GET\" requests).\n */\nexport type EdenTreatyQueryLeaf<TRoute extends RouteSchema> = (\n  options: EmptyToVoid<Optional<InferRouteOptions<TRoute>, 'params'>>,\n) => Promise<InferRouteResponse<TRoute>>\n\n/**\n * Strongly-typed function for mutations (i.e. \"POST\", \"PATCH\", etc. requests).\n */\nexport type EdenTreatyMutationLeaf<TRoute extends RouteSchema> = (\n  body: EmptyToVoid<InferRouteBody<TRoute>>,\n  options: EmptyToVoid<Optional<InferRouteOptions, 'params'>>,\n) => Promise<InferRouteResponse<TRoute>>\n\n/**\n * Strongly-typed function for subscriptions (i.e. \"CONNECT\", \"SUBSCRIBE\", etc. requests).\n *\n * @TODO: Available hooks assuming that the route supports `createSubscription`.\n */\nexport type EdenTreatySubscriptionLeaf<TRoute extends RouteSchema> = (\n  options: EmptyToVoid<Optional<InferRouteOptions<TRoute>, 'params'>>,\n) => EdenWS<TRoute>\n\n/**\n * Strongly-typed function for unknown request.\n *\n * @todo What should it actually be...\n */\nexport type EdenTreatyUnknownLeaf<TRoute extends RouteSchema> = EdenTreatyQueryLeaf<TRoute> &\n  EdenTreatyQueryLeaf<TRoute> &\n  EdenTreatyMutationLeaf<TRoute> &\n  EdenTreatySubscriptionLeaf<TRoute>\n\n/**\n * @param client\n *\n * @param config\n *\n * @param [paths=[]] Path parameter strings including the current path parameter as a placeholder.\n * @example [ 'products', ':id', ':cursor' ]\n *\n * @param [pathParams=[]] An array of objects representing path parameter replacements.\n * @example [ { id: 123 }, { cursor: '456' } ]\n */\nexport function createEdenTreatyProxy<T extends AnyElysia>(\n  client: EdenClient<T>,\n  config?: EdenRequestOptions<T>,\n  paths: string[] = [],\n  pathParams: Record<string, any>[] = [],\n) {\n  const edenTreatyProxy = new Proxy(() => {}, {\n    get: (_target, path: string, _receiver): any => {\n      // Copy the paths so that it will not be mutated in a nested proxy.\n      // Only add the current path if is not \"index\".\n      const nextPaths = path === 'index' ? [...paths] : [...paths, path]\n\n      //  Return a nested proxy that has the new paths.\n      return createEdenTreatyProxy(client, config, nextPaths, pathParams)\n    },\n    apply: (_target, _thisArg, args) => {\n      // Parse the information from the paths array up to this point.\n      const { path, method } = parsePathsAndMethod(paths)\n\n      // Determine if the current args could be specifying dynamic path parameters.\n      const pathParam = getPathParam(args)\n\n      // If it is a valid path parameter argument and the HTTP method is not recognized,\n      // then return a nested proxy that includes the path parameter replacement.\n      if (pathParam?.key != null && !isHttpMethod(method)) {\n        const allPathParams = [...pathParams, pathParam.param]\n        const pathsWithParams = [...paths, `:${pathParam.key}`]\n        return createEdenTreatyProxy(client, config, pathsWithParams, allPathParams)\n      }\n\n      // Otherwise, assume that this is intended to be a request and handle it.\n\n      let options: any = undefined\n      let body: any = undefined\n\n      if (isGetOrHeadMethod(method)) {\n        options = args[0]\n      } else {\n        body = args[0]\n        options = args[1]\n      }\n\n      const params: EdenRequestParams<T> = {\n        body,\n        options,\n        path,\n        method,\n        ...config,\n      }\n\n      return client.query(params)\n    },\n  })\n\n  return edenTreatyProxy\n}\n\n/**\n * @param clientOrHttpLinkOptions Either an untyped {@link EdenClient} or options for an httpLink to initialize a default client.\n * @param options Request options.\n */\nexport function createEdenTreaty<T extends AnyElysia>(\n  clientOrHttpLinkOptions?: EdenClient<T> | HTTPLinkOptions<T>,\n  options?: EdenRequestOptions<T>,\n): EdenTreatyClient<T> {\n  if (clientOrHttpLinkOptions instanceof EdenClient) {\n    const proxy = createEdenTreatyProxy(clientOrHttpLinkOptions, options)\n    return proxy as any\n  }\n\n  const defaultClient = new EdenClient({ links: [httpLink(clientOrHttpLinkOptions)] })\n\n  const proxy = createEdenTreatyProxy(defaultClient, options)\n  return proxy as any\n}\n","export function noop() {\n  /* noop */\n}\n\nexport async function asyncNoop() {\n  /* noop */\n}\n\nexport function constNoop<T>(value: T): () => T {\n  return () => value\n}\n\nexport function asyncConstNoop<T>(value: T): () => Promise<T> {\n  return async () => value\n}\n\nexport type Noop = typeof noop\n"," \n\nimport { type Noop, noop } from '../../utils/noop'\n\nexport type TeardownLogic = Unsubscribable | Noop | void\n\nexport type UnaryFunction<TSource = any, TReturn = any> = (source: TSource) => TReturn\n\nexport type MonoTypeOperatorFunction<TValue, TError> = OperatorFunction<\n  TValue,\n  TError,\n  TValue,\n  TError\n>\n\nexport type OperatorFunction<\n  TValueBefore = any,\n  TErrorBefore = any,\n  TValueAfter = any,\n  TErrorAfter = any,\n> = UnaryFunction<Subscribable<TValueBefore, TErrorBefore>, Subscribable<TValueAfter, TErrorAfter>>\n\nexport type Observer<TValue = any, TError = any> = {\n  next: (value: TValue) => void\n  error: (err: TError) => void\n  complete: () => void\n}\n\nexport type Unsubscribable = {\n  unsubscribe(): void\n}\n\nexport type InferObservableValue<TObservable> =\n  TObservable extends Observable<infer TValue, unknown> ? TValue : never\n\nexport function isObservable(x: unknown): x is Observable<unknown, unknown> {\n  return typeof x === 'object' && x !== null && 'subscribe' in x\n}\n\nexport function pipeReducer(previousValue: any, next: UnaryFunction) {\n  return next(previousValue)\n}\n\nexport function promisifyObservable<T>(observable: Observable<T>) {\n  let abort = noop\n\n  const promise = new Promise<T>((resolve, reject) => {\n    let isDone = false\n\n    const onDone = () => {\n      if (isDone) return\n      isDone = true\n      reject(new ObservableAbortError('This operation was aborted.'))\n      obs$.unsubscribe()\n    }\n\n    const obs$ = observable.subscribe({\n      next: (data) => {\n        isDone = true\n        resolve(data)\n        onDone()\n      },\n      error: (data) => {\n        isDone = true\n        reject(data)\n        onDone()\n      },\n      complete: () => {\n        isDone = true\n        onDone()\n      },\n    })\n\n    abort = onDone\n  })\n\n  return { promise, abort }\n}\n\nexport class ObservableAbortError extends Error {\n  constructor(message?: string) {\n    super(message)\n    this.name = 'ObservableAbortError'\n    Object.setPrototypeOf(this, ObservableAbortError.prototype)\n  }\n}\n\nexport class Subscribable<TValue = any, TError = any> {\n  constructor(public onSubscribe: (observer: Observer<TValue, TError>) => TeardownLogic) {}\n\n  subscribe(observer?: Partial<Observer<TValue, TError>>): Unsubscribable {\n    let teardownRef: TeardownLogic | null = null\n    let isDone = false\n    let unsubscribed = false\n    let teardownImmediately = false\n\n    const unsubscribe = () => {\n      if (unsubscribed) return\n\n      if (teardownRef === null) {\n        teardownImmediately = true\n        return\n      }\n\n      unsubscribed = true\n\n      if (typeof teardownRef === 'function') {\n        teardownRef()\n      } else if (teardownRef) {\n        teardownRef.unsubscribe()\n      }\n    }\n\n    teardownRef = this.onSubscribe({\n      next: (value) => {\n        if (isDone) return\n        observer?.next?.(value)\n      },\n      error: (err) => {\n        if (isDone) return\n        isDone = true\n        observer?.error?.(err)\n        unsubscribe()\n      },\n      complete: () => {\n        if (isDone) return\n        isDone = true\n        observer?.complete?.()\n        unsubscribe()\n      },\n    })\n\n    if (teardownImmediately) {\n      unsubscribe()\n    }\n\n    return {\n      unsubscribe,\n    }\n  }\n}\n\nexport class Observable<TValue = any, TError = any> extends Subscribable<TValue, TError> {\n  constructor(onSubscribe: (observer: Observer<TValue, TError>) => TeardownLogic) {\n    super(onSubscribe)\n  }\n\n  pipe(): Observable<TValue, TError>\n\n  pipe<TValue1, TError1>(\n    op1: OperatorFunction<TValue, TError, TValue1, TError1>,\n  ): Observable<TValue1, TError1>\n\n  pipe<TValue1, TError1, TValue2, TError2>(\n    op1: OperatorFunction<TValue, TError, TValue1, TError1>,\n    op2: OperatorFunction<TValue1, TError1, TValue2, TError2>,\n  ): Observable<TValue2, TError2>\n\n  pipe<TValue1, TError1, TValue2, TError2, TValue3, TError3>(\n    op1: OperatorFunction<TValue, TError, TValue1, TError1>,\n    op2: OperatorFunction<TValue1, TError1, TValue2, TError2>,\n    op3: OperatorFunction<TValue2, TError2, TValue3, TError3>,\n  ): Observable<TValue3, TError3>\n\n  pipe<TValue1, TError1, TValue2, TError2, TValue3, TError3, TValue4, TError4>(\n    op1: OperatorFunction<TValue, TError, TValue1, TError1>,\n    op2: OperatorFunction<TValue1, TError1, TValue2, TError2>,\n    op3: OperatorFunction<TValue2, TError2, TValue3, TError3>,\n    op4: OperatorFunction<TValue3, TError3, TValue4, TError4>,\n  ): Observable<TValue4, TError4>\n\n  pipe<TValue1, TError1, TValue2, TError2, TValue3, TError3, TValue4, TError4, TValue5, TError5>(\n    op1: OperatorFunction<TValue, TError, TValue1, TError1>,\n    op2: OperatorFunction<TValue1, TError1, TValue2, TError2>,\n    op3: OperatorFunction<TValue2, TError2, TValue3, TError3>,\n    op4: OperatorFunction<TValue3, TError3, TValue4, TError4>,\n    op5: OperatorFunction<TValue4, TError4, TValue5, TError5>,\n  ): Observable<TValue5, TError5>\n\n  pipe(...operations: OperatorFunction[]): Observable {\n    return operations.reduce(pipeReducer, this)\n  }\n}\n","import type { AnyElysia } from 'elysia'\n\nimport type { EdenFetchError } from '../../errors'\nimport type { EdenRequestParams } from '../../resolve'\nimport type { Observable, Observer } from './observable'\n\nexport type OperationType = 'query' | 'mutation' | 'subscription'\n\nexport interface OperationContext extends Record<string, unknown> {}\n\nexport type Operation<T extends AnyElysia = any> = {\n  id: number\n  type: OperationType\n  params: EdenRequestParams<T>\n  context: OperationContext\n}\n\nexport type OperationLink<\n  TElysia extends AnyElysia = AnyElysia,\n  TInput = unknown,\n  TOutput = unknown,\n> = (\n  options: OperationLinkOptions<TElysia, TInput, TOutput>,\n) => OperationResultObservable<TElysia, TOutput>\n\nexport type OperationLinkOptions<\n  TElysia extends AnyElysia = AnyElysia,\n  _TInput = unknown,\n  TOutput = unknown,\n> = {\n  operation: Operation<TElysia>\n  next: (operation: Operation<TElysia>) => OperationResultObservable<TElysia, TOutput>\n}\n\nexport type OperationResultObservable<TElysia extends AnyElysia, TOutput> = Observable<\n  OperationResultEnvelope<TOutput>,\n  EdenClientError<TElysia>\n>\n\nexport type OperationResultObserver<TRoute extends AnyElysia, TOutput> = Observer<\n  OperationResultEnvelope<TOutput>,\n  EdenClientError<TRoute>\n>\n\nexport type OperationResultEnvelope<T = any> = (EdenResultMessage<T> | EdenSuccessResponse<T>) & {\n  context?: OperationContext\n}\n\nexport type EdenResultMessage<T> =\n  | { type: 'started'; data?: never }\n  | { type: 'stopped'; data?: never }\n  | { data: T; type: 'data' }\n\nexport type EdenSuccessResponse<T> = { data: T; type?: 'data' }\n\nexport type EdenLink<T extends AnyElysia = any, TMeta = {}> = ((\n  opts: EdenClientRuntime,\n) => OperationLink<T>) &\n  TMeta\n\nexport type EdenClientRuntime = {}\n\nexport type EdenClientOptions<T extends AnyElysia> = {\n  links: EdenLink<T>[]\n}\n\n/**\n * Type representing errors that can occur during Eden client operations.\n * This is the union of all possible error types from the Elysia route schema.\n *\n * @template _T - The Elysia app type (reserved for future use with route-specific error types)\n */\nexport type EdenClientError<_T extends AnyElysia = AnyElysia> = EdenFetchError<number, unknown> | Error\n\nexport class OperationError extends Error {\n  constructor(message?: string) {\n    super(message)\n  }\n}\n","import type { AnyElysia } from 'elysia'\n\nimport { Observable } from './observable'\nimport {\n  type Operation,\n  OperationError,\n  type OperationLink,\n  type OperationResultObservable,\n} from './operation'\n\nexport type ChainOptions<TElysia extends AnyElysia, TInput = unknown, TOutput = unknown> = {\n  links: OperationLink<TElysia, TInput, TOutput>[]\n  operation: Operation<TElysia>\n}\n\nexport function createChain<TElysia extends AnyElysia, TInput = unknown, TOutput = unknown>(\n  options: ChainOptions<TElysia, TInput, TOutput>,\n): OperationResultObservable<TElysia, TOutput> {\n  const observable = new Observable((observer) => {\n    const execute = (index = 0, operation = options.operation) => {\n      const next = options.links[index]\n\n      if (next == null) {\n        throw new OperationError('No more links to execute - did you forget to add an ending link?')\n      }\n\n      const subscription = next({\n        operation,\n        next: (nextOp) => {\n          const nextObserver = execute(index + 1, nextOp)\n          return nextObserver\n        },\n      })\n\n      return subscription\n    }\n\n    const rootObservable = execute()\n\n    const $rootObservable = rootObservable.subscribe(observer)\n\n    return $rootObservable\n  })\n\n  return observable\n}\n","import type {\n  MonoTypeOperatorFunction,\n  Observer,\n  OperatorFunction,\n  Unsubscribable,\n} from './observable'\nimport { Observable } from './observable'\n\nexport function map<TValueBefore, TError, TValueAfter>(\n  project: (value: TValueBefore, index: number) => TValueAfter,\n): OperatorFunction<TValueBefore, TError, TValueAfter, TError> {\n  return (source) => {\n    const observable = new Observable((subscriber) => {\n      let index = 0\n\n      const subscription = source.subscribe({\n        next: (value) => {\n          subscriber.next(project(value, index++))\n        },\n        error: (error) => {\n          subscriber.error(error)\n        },\n        complete: () => {\n          subscriber.complete()\n        },\n      })\n      return subscription\n    })\n    return observable\n  }\n}\n\ninterface ShareOptions {}\n\nexport function share<TValue, TError>(\n  _options?: ShareOptions,\n): MonoTypeOperatorFunction<TValue, TError> {\n  return (source) => {\n    let refCount = 0\n\n    let subscription: Unsubscribable | null = null\n\n    const observers: Partial<Observer<TValue, TError>>[] = []\n\n    const startIfNeeded = () => {\n      if (subscription != null) return\n\n      // Make shallow copy of observers in case they unsubscribe during the loop.\n\n      subscription = source.subscribe({\n        next: (value) => {\n          for (const observer of [...observers]) {\n            observer.next?.(value)\n          }\n        },\n        error: (error) => {\n          for (const observer of [...observers]) {\n            observer.error?.(error)\n          }\n        },\n        complete: () => {\n          for (const observer of [...observers]) {\n            observer.complete?.()\n          }\n        },\n      })\n    }\n\n    const resetIfNeeded = () => {\n      if (refCount === 0 && subscription != null) {\n        const _sub = subscription\n        subscription = null\n        _sub.unsubscribe()\n      }\n    }\n\n    return new Observable((observer) => {\n      refCount++\n\n      observers.push(observer)\n\n      startIfNeeded()\n\n      return {\n        unsubscribe: () => {\n          refCount--\n\n          resetIfNeeded()\n\n          const index = observers.findIndex((observer) => observer === observer)\n\n          if (index >= 0) {\n            observers.splice(index, 1)\n          }\n        },\n      }\n    })\n  }\n}\n\nexport function tap<TValue, TError>(\n  observer: Partial<Observer<TValue, TError>>,\n): MonoTypeOperatorFunction<TValue, TError> {\n  return (source) => {\n    return new Observable((subscriber) => {\n      const subscription = source.subscribe({\n        next: (value) => {\n          observer.next?.(value)\n          subscriber.next(value)\n        },\n        error: (error) => {\n          observer.error?.(error)\n          subscriber.error(error)\n        },\n        complete: () => {\n          observer.complete?.()\n          subscriber.complete()\n        },\n      })\n      return subscription\n    })\n  }\n}\n","import type { AnyElysia } from 'elysia'\n\nimport { createChain } from './links/internal/create-chain'\nimport { promisifyObservable, type Unsubscribable } from './links/internal/observable'\nimport type {\n  EdenClientError,\n  EdenClientOptions,\n  EdenClientRuntime,\n  OperationContext,\n  OperationLink,\n  OperationType,\n} from './links/internal/operation'\nimport { share } from './links/internal/operators'\nimport type { EdenResponse } from './request'\nimport type { EdenRequestParams } from './resolve'\n\nexport type EdenSubscriptionObserver<TValue, TError> = {\n  onStarted: () => void\n  onData: (value: TValue) => void\n  onError: (err: TError) => void\n  onStopped: () => void\n  onComplete: () => void\n}\n\nexport type EdenCreateClient<T extends AnyElysia = AnyElysia> = (\n  options: EdenClientOptions<T>,\n) => EdenClient<T>\n\nexport type EdenClientInternalRequestOptions<T extends AnyElysia = AnyElysia> = {\n  type: OperationType\n  context?: OperationContext\n  params: EdenRequestParams<T>\n}\n\nexport type EdenClientPromisifyRequestOptions<T extends AnyElysia = AnyElysia> = EdenClientInternalRequestOptions<T> & {\n  signal?: AbortSignal\n}\n\nexport type EdenClientRequestOptions = {\n  context?: OperationContext\n  signal?: AbortSignal\n}\n\nexport class EdenClient<TElysia extends AnyElysia = AnyElysia> {\n  private readonly links: OperationLink<TElysia>[]\n\n  public readonly runtime: EdenClientRuntime\n\n  private requestId: number\n\n  constructor(options: EdenClientOptions<TElysia>) {\n    this.requestId = 0\n\n    this.runtime = {}\n\n    this.links = options.links.map((link) => link(this.runtime))\n  }\n\n  private $request<TInput = unknown, TOutput = unknown>(\n    options: EdenClientInternalRequestOptions<TElysia>,\n  ) {\n    const chain$ = createChain<TElysia, TInput, TOutput>({\n      links: this.links as OperationLink<TElysia, TInput, TOutput>[],\n      operation: {\n        id: ++this.requestId,\n        ...options,\n        context: options.context ?? {},\n      },\n    })\n    return chain$.pipe(share())\n  }\n\n  private promisifyRequest<TInput = unknown, TOutput = unknown>(\n    options: EdenClientPromisifyRequestOptions<TElysia>,\n  ): Promise<TOutput> {\n    // Forward the signal\n    if (options.signal != null) {\n      options.params.fetch ??= {}\n      options.params.fetch.signal = options.signal\n    }\n\n    const signal = options.params.fetch?.signal\n\n    const req$ = this.$request<TInput, TOutput>(options)\n\n    const { promise, abort } = promisifyObservable<TOutput>(req$ as any)\n\n    const abortablePromise = new Promise<TOutput>((resolve, reject) => {\n      signal?.addEventListener('abort', abort)\n      promise.then(resolve).catch(reject)\n    })\n\n    return abortablePromise\n  }\n\n  public query(params: EdenRequestParams<TElysia>, options?: EdenClientRequestOptions) {\n    return this.promisifyRequest<any, EdenResponse>({\n      type: 'query',\n      params,\n      context: options?.context,\n      signal: options?.signal,\n    })\n  }\n\n  public mutation(params: EdenRequestParams<TElysia>, options?: EdenClientRequestOptions) {\n    return this.promisifyRequest({\n      type: 'mutation',\n      params,\n      context: options?.context,\n      signal: options?.signal,\n    })\n  }\n\n  public subscription(\n    params: EdenRequestParams<TElysia>,\n    options?: Partial<EdenSubscriptionObserver<unknown, EdenClientError<TElysia>>> &\n      EdenClientRequestOptions,\n  ): Unsubscribable {\n    const observable = this.$request({\n      type: 'subscription',\n      params,\n      context: options?.context,\n    })\n\n    const $observable = observable.subscribe({\n      next: (envelope) => {\n        if (envelope.type === 'started') {\n          options?.onStarted?.()\n        } else if (envelope.type === 'stopped') {\n          options?.onStopped?.()\n        } else {\n          options?.onData?.(envelope.data)\n        }\n      },\n      error: (err) => {\n        options?.onError?.(err)\n      },\n      complete: () => {\n        options?.onComplete?.()\n      },\n    })\n\n    return $observable\n  }\n}\n","import type { Nullish } from './utils/null'\n\nexport interface HeadersInitEsque {\n  [Symbol.iterator](): IterableIterator<[string, string]>\n}\n\nexport type HTTPHeaders = HeadersInitEsque | Record<string, string[] | string | undefined>\n\nexport type AbortControllerEsque = new () => AbortControllerInstanceEsque\n\n/**\n * Allows you to abort one or more requests.\n */\nexport interface AbortControllerInstanceEsque {\n  /**\n   * The AbortSignal object associated with this object.\n   */\n  readonly signal: AbortSignal\n\n  /**\n   * Sets this object's AbortSignal's aborted flag and signals to\n   * any observers that the associated activity is to be aborted.\n   */\n  abort(): void\n}\n\nexport type HTTPLinkBaseOptions = {\n  /**\n   * Define AbortController implementation.\n   */\n  AbortController?: AbortControllerEsque | null\n\n  /**\n   * Send all requests `as POST`s requests regardless of the procedure type.\n   * The HTTP handler must separately allow overriding the method.\n   *\n   * @see https://trpc.io/docs/rpc\n   */\n  methodOverride?: 'POST'\n}\n\nexport function getAbortController(\n  abortControllerPolyfill?: AbortControllerEsque | Nullish,\n): AbortControllerEsque | null {\n  if (abortControllerPolyfill) {\n    return abortControllerPolyfill\n  }\n\n  if (typeof window !== 'undefined' && window.AbortController) {\n    return window.AbortController\n  }\n\n  if (typeof globalThis !== 'undefined' && globalThis.AbortController) {\n    return globalThis.AbortController\n  }\n\n  return null\n}\n\nexport const httpQueryMethods = ['get', 'options', 'head'] as const\n\nexport const httpMutationMethods = ['post', 'put', 'patch', 'delete'] as const\n\nexport const httpSubscriptionMethods = ['connect', 'subscribe'] as const\n\nexport const httpMethods = [\n  ...httpQueryMethods,\n  ...httpMutationMethods,\n  ...httpSubscriptionMethods,\n] as const\n\n/**\n * Recognized HTTP methods for queries.\n */\nexport type HttpQueryMethod = (typeof httpQueryMethods)[number]\n\n/**\n * Recognized HTTP methods for mutations.\n */\nexport type HttpMutationMethod = (typeof httpMutationMethods)[number]\n\n/**\n * Recognized HTTP methods for subscriptions.\n */\nexport type HttpSubscriptionMethod = (typeof httpSubscriptionMethods)[number]\n\n/**\n * All recognized HTTP methods.\n */\nexport type HttMethod = (typeof httpMethods)[number]\n","export const GET_OR_HEAD_HTTP_METHODS = ['get', 'head', 'subscribe'] as const\n\nexport const HTTP_METHODS = [\n  ...GET_OR_HEAD_HTTP_METHODS,\n  'post',\n  'put',\n  'delete',\n  'patch',\n  'options',\n  'connect',\n] as const\n\nexport const LOOPBACK_ADDRESSES = ['localhost', '127.0.0.1', '0.0.0.0']\n\nexport const IS_SERVER = typeof FileList === 'undefined'\n\nexport const CLIENT_WARNING =\n  'Elysia instance server found on client side, this is not recommended for security reason. Use generic type instead.'\n\nexport const DEMO_DOMAIN = 'http://e.ly'\n\nexport const ISO8601_REGEX =\n  /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/\n\nexport const FORMAL_DATE_REGEX =\n  /(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s\\d{2}\\s\\d{4}\\s\\d{2}:\\d{2}:\\d{2}\\sGMT(?:\\+|-)\\d{4}\\s\\([^)]+\\)/\n\nexport const SHORTENED_DATE_REGEX =\n  /^(?:(?:(?:(?:0?[1-9]|[12][0-9]|3[01])[/\\s-](?:0?[1-9]|1[0-2])[/\\s-](?:19|20)\\d{2})|(?:(?:19|20)\\d{2}[/\\s-](?:0?[1-9]|1[0-2])[/\\s-](?:0?[1-9]|[12][0-9]|3[01]))))(?:\\s(?:1[012]|0?[1-9]):[0-5][0-9](?::[0-5][0-9])?(?:\\s[AP]M)?)?$/\n\nexport const BATCH_ENDPOINT = '/batch'\n","import type { AnyElysia } from 'elysia'\n\nimport type { Range } from './utils/types'\n\nexport class EdenFetchError<Status extends number = number, Value = unknown> extends Error {\n  constructor(\n    public status: Status,\n    public value: Value,\n  ) {\n    super(value + '')\n  }\n}\n\nexport class EdenFatalError extends Error {\n  static throw() {\n    return new EdenFatalError()\n  }\n\n  constructor() {\n    super(\n      'Something went wrong. Please submit an issue at https://github.com/aydee-app/eden-query/issues/new',\n    )\n  }\n}\n\nexport type MapError<T extends Record<number, unknown>> = [\n  {\n    [K in keyof T]-?: K extends ErrorRange ? K : never\n  }[keyof T],\n] extends [infer A extends number]\n  ? {\n      [K in A]: EdenFetchError<K, T[K]>\n    }[A]\n  : false\n\nexport type ErrorRange = Range<300, 599>\n\n/**\n * Type representing any error-like object that can be thrown by Eden client operations.\n * This includes EdenFetchError instances with any status code and value.\n *\n * @template _T - The Elysia app type (reserved for future use with route-specific error types)\n */\nexport type EdenClientErrorLike<_T extends AnyElysia = AnyElysia> = EdenFetchError<number, unknown> | Error\n\nexport const ERROR_SYMBOL = Symbol('TypeError')\n\nexport type TypeError<TMessage extends string> = TMessage & {\n  _: typeof ERROR_SYMBOL\n}\n","/**\n * @see https://github.com/trpc/trpc/blob/next/packages/server/src/unstable-core-do-not-import/transformer.ts\n */\n\n/**\n * Data-transformers share the same interface, but have different semantics depending\n * on where they are executed during a request.\n */\nexport type DataTransformer = {\n  /**\n   * Convert a raw value from the program into a JSON-serializable value.\n   *\n   * The raw JSON value needs to be a valid input into {@link JSON.stringify}.\n   */\n  serialize: (object: any) => any\n\n  /**\n   * Take a raw JSON value and convert it into the desired value to be used in the program.\n   *\n   * The raw JSON value can be anything returned from {@link JSON.parse}.\n   */\n  deserialize: (object: any) => any\n}\n\ninterface InputDataTransformer extends DataTransformer {\n  /**\n   * This function runs **on the client** before sending the data to the server.\n   *\n   * This should return a JSON-serializable value, e.g. a string.\n   */\n  serialize: (object: any) => any\n\n  /**\n   * This function runs **on the server** to transform the data before it is passed to the resolver\n   */\n  deserialize: (object: any) => any\n}\n\ninterface OutputDataTransformer extends DataTransformer {\n  /**\n   * This function runs **on the server** before sending the data to the client.\n   *\n   * This should return a JSON-serializable value, e.g. a string.\n   */\n  serialize: (object: any) => any\n\n  /**\n   * This function runs **only on the client** to transform the data sent from the server.\n   */\n  deserialize: (object: any) => any\n}\n\nexport interface CombinedDataTransformer {\n  /**\n   * Specify how the data sent from the client to the server should be transformed.\n   */\n  input: InputDataTransformer\n  /**\n   * Specify how the data sent from the server to the client should be transformed.\n   */\n  output: OutputDataTransformer\n}\n\nexport type DataTransformerOptions = CombinedDataTransformer | DataTransformer\n\nconst defaultTransformer: DataTransformer = {\n  serialize: (value) => value,\n  deserialize: (value) => value,\n}\n\nconst defaultDataTransformer: CombinedDataTransformer = {\n  input: defaultTransformer,\n  output: defaultTransformer,\n}\n\nexport function getDataTransformer(transformer?: DataTransformerOptions): CombinedDataTransformer {\n  if (transformer == null) {\n    return defaultDataTransformer\n  }\n\n  if ('serialize' in transformer) {\n    return { input: transformer, output: transformer }\n  }\n\n  return transformer\n}\n","import { IS_SERVER } from '../constants'\n\nexport function isFile(v: any) {\n  if (IS_SERVER) return v instanceof Blob\n\n  return v instanceof FileList || v instanceof File\n}\n\nexport function hasFile(object?: Record<string, any>): boolean {\n  if (!object) {\n    return false\n  }\n\n  for (const key in object) {\n    if (isFile(object[key])) return true\n\n    if (Array.isArray(object[key]) && (object[key] as unknown[]).find(isFile)) return true\n  }\n\n  return false\n}\n","import { GET_OR_HEAD_HTTP_METHODS, HTTP_METHODS } from '../constants'\n\nexport function isHttpMethod(value: unknown): boolean {\n  return HTTP_METHODS.includes(value as any)\n}\n\nexport function isGetOrHeadMethod(value: unknown): boolean {\n  return GET_OR_HEAD_HTTP_METHODS.includes(value as any)\n}\n","import { FORMAL_DATE_REGEX, ISO8601_REGEX, SHORTENED_DATE_REGEX } from '../constants'\n\nfunction isNumericString(message: string) {\n  return message.trim().length !== 0 && !Number.isNaN(Number(message))\n}\n\nfunction isStringifiedObject(value: string): boolean {\n  const start = value.charCodeAt(0)\n  const end = value.charCodeAt(value.length - 1)\n\n  return (start === 123 && end === 125) || (start === 91 && end === 93)\n}\n\nexport function parseStringifiedDate(value: unknown): Date | null {\n  if (typeof value !== 'string') {\n    return null\n  }\n\n  // Remove quote from stringified date\n  const temp = value.replace(/\"/g, '')\n\n  if (ISO8601_REGEX.test(temp) || FORMAL_DATE_REGEX.test(temp) || SHORTENED_DATE_REGEX.test(temp)) {\n    const date = new Date(temp)\n\n    if (!Number.isNaN(date.getTime())) {\n      return date\n    }\n  }\n\n  return null\n}\n\nexport function parseStringifiedObject(data: string) {\n  return JSON.parse(data, (_, value) => {\n    const date = parseStringifiedDate(value)\n\n    if (date) {\n      return date\n    }\n\n    return value\n  })\n}\n\nexport function parseStringifiedValue(value: string) {\n  if (!value) {\n    return value\n  }\n\n  if (isNumericString(value)) {\n    return +value\n  }\n\n  if (value === 'true') {\n    return true\n  }\n\n  if (value === 'false') {\n    return false\n  }\n\n  const date = parseStringifiedDate(value)\n\n  if (date) {\n    return date\n  }\n\n  if (isStringifiedObject(value)) {\n    try {\n      return parseStringifiedObject(value)\n    } catch {\n      // noop\n    }\n  }\n\n  return value\n}\n\nexport function parseMessageEvent(event: MessageEvent) {\n  const messageString = event.data.toString()\n\n  return messageString === 'null' ? null : parseStringifiedValue(messageString)\n}\n","/**\n * Eden WS implementation.\n *\n * @see https://github.com/elysiajs/eden/blob/7b982cf6469d809cd561dd0ad59e83178ad56489/src/treaty2/ws.ts#L5\n */\nimport type { InputSchema, MaybeArray } from 'elysia'\n\nimport {\n  type CombinedDataTransformer,\n  type DataTransformerOptions,\n  getDataTransformer,\n} from './links'\nimport { parseMessageEvent } from './utils/parse'\n\n/**\n * Configuration for EdenWS.\n */\nexport type EdenWsOptions = {\n  /**\n   * Custom transformer for messages.\n   */\n  transformer?: DataTransformerOptions\n}\n\n/**\n * Strongly-typed websocket event.\n *\n * Messages will be formatted, all other events will not be transformed.\n */\nexport type WSEvent<K extends keyof WebSocketEventMap, Data = unknown> = K extends 'message'\n  ? OnMessage<Data>\n  : WebSocketEventMap[K]\n\n/**\n * Attempt to parse the message, in addition to providing the original raw value (string).\n */\nexport interface OnMessage<Data = unknown> extends MessageEvent {\n  data: Data\n  rawData: MessageEvent['data']\n}\n\n/**\n * Custom implementation of the EdenWS class.\n *\n * Some properties are auto-bound methods so you can pass them as callbacks without \"this is undefined\" errors.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#cannot_be_used_as_methods\n *\n * @example\n * ```ts\n * import { EdenWs } from '@aydee-app/eden'\n *\n * const edenWs = new EdenWS()\n *\n * ['a', 'b', 'c'].forEach(edenWs.send)\n * ```\n */\nexport class EdenWS<T extends InputSchema<any> = {}> {\n  ws: WebSocket\n\n  transformer?: CombinedDataTransformer\n\n  constructor(\n    public url: string,\n    public options?: EdenWsOptions,\n  ) {\n    this.ws = new WebSocket(url)\n    this.transformer = options?.transformer ? getDataTransformer(options?.transformer) : undefined\n  }\n\n  /**\n   * Close the websocket connection.\n   */\n  close() {\n    this.ws.close()\n    return this\n  }\n\n  /**\n   * Send (strongly-typed) message(s) over the websocket connection.\n   */\n  send = async (data: MaybeArray<T['body']>) => {\n    if (Array.isArray(data)) {\n      await this.sendMany(data)\n    } else {\n      await this.sendSingle(data)\n    }\n    return this\n  }\n\n  /**\n   * Send a single (strongly-typed) message.\n   */\n  sendMany = async (data: T['body'][]) => {\n    await Promise.allSettled(data.map(this.sendSingle))\n    return this\n  }\n\n  /**\n   * Send a single (strongly-typed) message.\n   */\n  sendSingle = async (data: T['body']) => {\n    const message = await this.transformSent(data)\n    this.ws.send(message)\n    return this\n  }\n\n  /**\n   * Register a callback function that is called when a message is received.\n   */\n  subscribe(\n    onMessage: (event: WSEvent<'message', T['response']>) => void,\n    options?: boolean | AddEventListenerOptions,\n  ) {\n    return this.on('message', onMessage, options)\n  }\n\n  /**\n   * Register a strongly typed callback function to be called on the specified websocket event.\n   *\n   * Alias for {@link addEventListener}.\n   */\n  on<K extends keyof WebSocketEventMap>(\n    type: K,\n    listener: (event: WSEvent<K, T['response']>) => void,\n    options?: boolean | AddEventListenerOptions,\n  ) {\n    return this.addEventListener(type, listener, options)\n  }\n\n  /**\n   * Remove a registered event-listener.\n   *\n   * Alias for {@link removeEventListener}.\n   */\n  off<K extends keyof WebSocketEventMap>(\n    type: K,\n    listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any,\n    options?: boolean | EventListenerOptions,\n  ) {\n    this.removeEventListener(type, listener, options)\n    return this\n  }\n\n  /**\n   * Register a strongly typed callback function to be called on the specified websocket event.\n   */\n  addEventListener<K extends keyof WebSocketEventMap>(\n    type: K,\n    listener: (event: WSEvent<K, T['response']>) => void,\n    options?: boolean | AddEventListenerOptions,\n  ) {\n    const resolvedEventListener = async (ws: WebSocketEventMap[K]) => {\n      let event: any = ws\n\n      if (type === 'message') {\n        const data = (await this.transformReceived(event)) ?? parseMessageEvent(event)\n        event = { ...ws, data }\n      }\n\n      listener(event)\n    }\n\n    this.ws.addEventListener(type, resolvedEventListener, options)\n    return this\n  }\n\n  /**\n   * Remove a registered event-listener.\n   */\n  removeEventListener<K extends keyof WebSocketEventMap>(\n    type: K,\n    listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any,\n    options?: boolean | EventListenerOptions,\n  ) {\n    this.ws.removeEventListener(type, listener, options)\n    return this\n  }\n\n  /**\n   * Transform outgoing messages sent from the client to the server.\n   *\n   * @internal\n   */\n  transformSent = async (data: T['body']) => {\n    const serialize = this.transformer?.input.serialize\n\n    let transformed: any\n\n    try {\n      transformed = await serialize?.(data)\n    } catch (_err) {\n      // noop\n    }\n\n    if (transformed == null) {\n      transformed ??= typeof data === 'object' ? JSON.stringify(data) : data.toString()\n    }\n\n    return transformed\n  }\n\n  /**\n   * Transform incoming messages received from the server.\n   *\n   * @internal\n   */\n  transformReceived = async (event: MessageEvent) => {\n    const deserialize = this.transformer?.output.deserialize\n\n    if (deserialize == null) return\n\n    try {\n      let messageString = event.data\n\n      if (typeof messageString !== 'string') {\n        messageString = event.data.toString()\n      }\n\n      const transformed = await deserialize(messageString)\n      return transformed\n    } catch (_err) {\n      return\n    }\n  }\n}\n","import type { AnyElysia } from 'elysia'\n\nimport type { EdenConfig } from './config'\nimport { DEMO_DOMAIN, IS_SERVER, LOOPBACK_ADDRESSES } from './constants'\nimport { EdenFetchError } from './errors'\nimport type { InferRouteBody, InferRouteOptions } from './infer'\nimport { getDataTransformer } from './links/internal/transformer'\nimport type { EdenRequestOptions, EdenResponse } from './request'\nimport { hasFile } from './utils/file'\nimport { isGetOrHeadMethod } from './utils/http'\nimport { parseStringifiedValue } from './utils/parse'\nimport { EdenWS } from './ws'\n\nfunction createNewFile(v: File) {\n  if (IS_SERVER) {\n    return v\n  }\n\n  return new Promise<File>((resolve) => {\n    const reader = new FileReader()\n\n    reader.onload = () => {\n      const filebits = reader.result != null ? [reader.result] : []\n      const name = v.name\n      const lastModified = v.lastModified\n      const type = v.type\n\n      const file = new File(filebits, name, { lastModified, type })\n\n      resolve(file)\n    }\n\n    reader.readAsArrayBuffer(v)\n  })\n}\n\nasync function processHeaders(\n  configHeaders: EdenConfig['headers'],\n  path: string,\n  options: RequestInit = {},\n  headers: Record<string, string> = {},\n): Promise<Record<string, string>> {\n  if (Array.isArray(configHeaders)) {\n    for (const value of configHeaders)\n      if (!Array.isArray(value)) {\n        headers = await processHeaders(value, path, options, headers)\n      } else {\n        const key = value[0]\n        if (typeof key === 'string') {\n          headers[key.toLowerCase()] = value[1] as string\n        } else {\n          for (const [k, value] of key) {\n            if (k) {\n              headers[k.toLowerCase()] = value as string\n            }\n          }\n        }\n      }\n\n    return headers\n  }\n\n  if (!configHeaders) {\n    return headers\n  }\n\n  switch (typeof configHeaders) {\n    case 'function': {\n      if (configHeaders instanceof Headers) {\n        return processHeaders(configHeaders, path, options, headers)\n      }\n\n      const customHeaders = await configHeaders(path, options)\n\n      if (customHeaders) {\n        return processHeaders(customHeaders, path, options, headers)\n      }\n\n      return headers\n    }\n\n    case 'object': {\n      if (configHeaders instanceof Headers) {\n        configHeaders.forEach((value, key) => {\n          headers[key.toLowerCase()] = value\n        })\n\n        return headers\n      }\n\n      for (const [key, value] of Object.entries(configHeaders)) {\n        headers[key.toLowerCase()] = value\n      }\n\n      return headers\n    }\n\n    default: {\n      return headers\n    }\n  }\n}\n\nexport async function* streamResponse(response: Response) {\n  const body = response.body\n\n  if (!body) return\n\n  const reader = body.getReader()\n  const decoder = new TextDecoder()\n\n  try {\n    while (true) {\n      const { done, value } = await reader.read()\n\n      if (done) break\n\n      const data = decoder.decode(value)\n\n      yield parseStringifiedValue(data)\n    }\n  } finally {\n    reader.releaseLock()\n  }\n}\n\nfunction buildQueryString(query?: any) {\n  let q = ''\n\n  if (!query) {\n    return q\n  }\n\n  for (const [key, value] of Object.entries(query)) {\n    if (Array.isArray(value)) {\n      for (const v of value) {\n        q += (q ? '&' : '?') + `${encodeURIComponent(key)}=${encodeURIComponent(v)}`\n      }\n    } else if (typeof value === 'object') {\n      const stringifiedValue = JSON.stringify(value)\n      q += (q ? '&' : '?') + `${encodeURIComponent(key)}=${encodeURIComponent(stringifiedValue)}`\n    } else if (value != null) {\n      q += (q ? '&' : '?') + `${encodeURIComponent(key)}=${encodeURIComponent(`${value}`)}`\n    }\n  }\n\n  return q\n}\n\nexport async function parseResponse<T extends AnyElysia = AnyElysia, TRaw extends boolean = false>(\n  response: Response,\n  params?: EdenRequestParams<T, TRaw>,\n) {\n  if (params?.onResponse != null) {\n    const onResponse = Array.isArray(params.onResponse) ? params.onResponse : [params.onResponse]\n\n    for (const value of onResponse) {\n      try {\n        const data = await value(response.clone())\n        if (data != null) {\n          return { data, error: null, status: response.status }\n        }\n      } catch (err) {\n        const error = err instanceof EdenFetchError ? err : new EdenFetchError(422, err)\n        return { data: null, error, status: response.status }\n      }\n    }\n  }\n\n  let data: any\n\n  switch (response.headers.get('Content-Type')?.split(';')[0]) {\n    case 'text/event-stream': {\n      data = streamResponse(response)\n      break\n    }\n\n    case 'application/json': {\n      data = await response.json()\n\n      const transformer = getDataTransformer(params?.transformer)\n\n      const deserialize = transformer?.output.deserialize\n\n      if (deserialize != null) {\n        data = deserialize(data)\n      }\n\n      break\n    }\n\n    case 'application/octet-stream': {\n      data = await response.arrayBuffer()\n      break\n    }\n\n    case 'multipart/form-data': {\n      const temp = await response.formData()\n\n      data = {}\n\n      temp.forEach((value, key) => {\n        data[key] = value\n      })\n\n      break\n    }\n\n    default: {\n      data = await response.text().then(parseStringifiedValue)\n    }\n  }\n\n  if (response.status >= 300 || response.status < 200) {\n    const error = new EdenFetchError(response.status, data)\n    return {\n      data: null,\n      error,\n      status: response.status,\n      statusText: response.statusText,\n    }\n  } else {\n    return {\n      data,\n      error: null,\n      status: response.status,\n      statusText: response.statusText,\n    }\n  }\n}\n\n/**\n * Parameters that control how an Eden request is resolved.\n */\nexport type EdenRequestParams<\n  T extends AnyElysia = AnyElysia,\n  TRaw extends boolean = false,\n> = EdenRequestOptions<T, TRaw> & {\n  /**\n   */\n  domain?: T | string\n\n  /**\n   * Fetch options for a \"query\" method, i.e. \"GET\", \"HEAD\", \"OPTIONS\".\n   */\n  options?: InferRouteOptions\n\n  /**\n   * The request body for \"POST\", \"PATCH\", etc. requests.\n   */\n  body?: InferRouteBody\n\n  /**\n   */\n  path?: string\n\n  /**\n   */\n  method?: string\n}\n\nexport async function resolveEdenRequest<\n  T extends AnyElysia = AnyElysia,\n  TRaw extends boolean = false,\n>(params: EdenRequestParams<T, TRaw>): Promise<EdenResponse<TRaw> | EdenWS> {\n  let path = params.path ?? ''\n\n  if (params.options?.params != null) {\n    Object.entries(params.options.params).forEach(([key, value]) => {\n      if (value != null) {\n        path = path.replace(`:${key}`, String(value))\n      }\n    })\n  }\n\n  const isGetOrHead = isGetOrHeadMethod(params.method)\n\n  const headers = await processHeaders(params.headers, path, params.options?.headers)\n\n  const q = buildQueryString(params.options?.query)\n\n  if (params.method === 'subscribe') {\n    const domain = typeof params.domain === 'string' ? params.domain : DEMO_DOMAIN\n\n    const protocol = domain.startsWith('https://')\n      ? 'wss://'\n      : domain.startsWith('http://')\n        ? 'ws://'\n        : LOOPBACK_ADDRESSES.find((address) => domain.includes(address))\n          ? 'ws://'\n          : 'wss://'\n\n    const origin = domain.replace(/^([^]+):\\/\\//, protocol)\n\n    const url = origin + path + q\n\n    return new EdenWS(url)\n  }\n\n  let fetchInit = {\n    method: params.method?.toUpperCase(),\n    body: params.body as any,\n    ...params.fetch,\n    headers,\n  } satisfies BunFetchRequestInit\n\n  fetchInit.headers = {\n    ...headers,\n    ...(await processHeaders(params.options?.headers, path, fetchInit)),\n  }\n\n  if (isGetOrHead) {\n    delete fetchInit.body\n  }\n\n  if (params.onRequest) {\n    const onRequest = Array.isArray(params.onRequest) ? params.onRequest : [params.onRequest]\n\n    for (const value of onRequest) {\n      const temp = await value(path, fetchInit)\n\n      if (typeof temp === 'object')\n        fetchInit = {\n          ...fetchInit,\n          ...temp,\n          headers: {\n            ...fetchInit.headers,\n            ...(await processHeaders(temp?.headers, path, fetchInit)),\n          },\n        }\n    }\n  }\n\n  // ? Duplicate because end-user might add a body in onRequest\n  if (isGetOrHead) {\n    delete fetchInit.body\n  }\n\n  // Don't handle raw FormData if given.\n  if (FormData != null && params.body instanceof FormData) {\n    // noop\n  } else if (hasFile(params.body as any)) {\n    const formData = new FormData()\n\n    // FormData is 1 level deep\n    for (const [key, field] of Object.entries(fetchInit.body)) {\n      if (IS_SERVER) {\n        formData.append(key, field as any)\n\n        continue\n      }\n\n      if (field instanceof File) {\n        formData.append(key, await createNewFile(field as any))\n\n        continue\n      }\n\n      if (field instanceof FileList) {\n        for (let i = 0; i < field.length; i++)\n          formData.append(key as any, await createNewFile((field as any)[i]))\n\n        continue\n      }\n\n      if (Array.isArray(field)) {\n        for (let i = 0; i < field.length; i++) {\n          const value = (field as any)[i]\n\n          formData.append(key as any, value instanceof File ? await createNewFile(value) : value)\n        }\n\n        continue\n      }\n\n      formData.append(key, field as string)\n    }\n\n    // We don't do this because we need to let the browser set the content type with the correct boundary\n    // fetchInit.headers['content-type'] = 'multipart/form-data'\n    fetchInit.body = formData\n  } else if (typeof params.body === 'object') {\n    fetchInit.headers['content-type'] = 'application/json'\n\n    const transformer = getDataTransformer(params.transformer)\n\n    const body = transformer ? transformer.input.serialize(params.body) : params.body\n\n    fetchInit.body = JSON.stringify(body)\n  } else if (params.body !== null) {\n    fetchInit.headers['content-type'] = 'text/plain'\n  }\n\n  if (isGetOrHead) {\n    delete fetchInit.body\n  }\n\n  if (params.onRequest) {\n    const onRequest = Array.isArray(params.onRequest) ? params.onRequest : [params.onRequest]\n\n    for (const value of onRequest) {\n      const temp = await value(path, fetchInit)\n\n      if (typeof temp === 'object')\n        fetchInit = {\n          ...fetchInit,\n          ...temp,\n          headers: {\n            ...fetchInit.headers,\n            ...(await processHeaders(temp?.headers, path, fetchInit)),\n          } as Record<string, string>,\n        }\n    }\n  }\n\n  const domain = typeof params.domain === 'string' ? params.domain : ''\n\n  const url = domain + path + q\n\n  const elysia = typeof params.domain === 'string' ? undefined : params.domain\n\n  const fetcher = params.fetcher ?? globalThis.fetch\n\n  const response = await (elysia?.handle(new Request(url, fetchInit)) ?? fetcher(url, fetchInit))\n\n  const edenResponse = await parseResponse(response, params)\n\n  if (edenResponse.data !== null) {\n    return {\n      ...edenResponse,\n      ...(params.raw && { response, headers: response.headers, statusText: response.statusText }),\n    } as EdenResponse\n  }\n\n  if (response.status >= 300 || response.status < 200) {\n    edenResponse.error = new EdenFetchError(response.status, edenResponse.data)\n    edenResponse.data = null\n  }\n\n  return {\n    ...edenResponse,\n    ...(params.raw && { response, headers: response.headers, statusText: response.statusText }),\n  } as EdenResponse\n}\n","import type { EdenConfig as EdenRequestOptions } from '../../config'\nimport type { HTTPLinkBaseOptions } from '../../http'\nimport type { EdenResponse } from '../../request'\nimport { type EdenRequestParams, resolveEdenRequest } from '../../resolve'\nimport type { Noop } from '../../utils/noop'\nimport type { Operation } from './operation'\n\nexport type Requester = (options: RequesterOptions) => PromiseAndCancel<EdenResponse>\n\nexport type RequesterOptions = Operation & HTTPLinkBaseOptions & EdenRequestOptions\n\nexport type PromiseAndCancel<T> = {\n  promise: Promise<T>\n  cancel: Noop\n}\n\n/**\n * Default eden HTTP requester normalizes operation options to params.\n */\nexport const universalRequester: Requester = (options) => {\n  const {\n    id: _id,\n    type: _type,\n    AbortController,\n    methodOverride,\n    params,\n    ...defaultParams\n  } = options\n\n  const abortController = AbortController ? new AbortController() : null\n\n  let done = false\n\n  const cancel = () => {\n    if (!done) {\n      abortController?.abort()\n    }\n  }\n\n  /**\n   * @TODO\n   *\n   * Deep merge fetch, headers, onRequest, onResponse ?\n   */\n  const resolvedParams: EdenRequestParams = { ...defaultParams, ...params }\n\n  if (options.params.fetch?.signal) {\n    options.params.fetch.signal.addEventListener('abort', cancel)\n    resolvedParams.fetch = { ...resolvedParams.fetch, signal: abortController?.signal }\n  }\n\n  if (methodOverride != null) {\n    resolvedParams.method = methodOverride\n  }\n\n  const promise = new Promise<EdenResponse>((resolve, reject) => {\n    resolveEdenRequest(resolvedParams)\n      .then((response) => {\n        done = true\n        resolve(response as EdenResponse)\n      })\n      .catch((err) => {\n        done = true\n        reject(err)\n      })\n  })\n\n  return { promise, cancel }\n}\n","import type { AnyElysia } from 'elysia'\n\nimport type { EdenQueryStoreKey } from '../constraints'\nimport { getAbortController, type HTTPHeaders, type HTTPLinkBaseOptions } from '../http'\nimport type { EdenRequestOptions } from '../request'\nimport type { NonEmptyArray } from '../utils/types'\nimport { Observable, type Observer } from './internal/observable'\nimport type { EdenLink, Operation, OperationLink } from './internal/operation'\nimport type { DataTransformerOptions } from './internal/transformer'\nimport { type Requester, universalRequester } from './internal/universal-requester'\n\nexport type HTTPLinkFactoryOptions = {\n  requester: Requester\n}\n\nexport type HTTPLinkOptions<\n  T extends AnyElysia = AnyElysia,\n  /**\n   * @todo Maybe check if T['store'][EdenQueryStoreKey] matches a certain interface?\n   */\n  TTransformer = T['store'][typeof EdenQueryStoreKey]['transformer'],\n> = HTTPLinkBaseOptions &\n  Omit<EdenRequestOptions<T>, 'headers' | 'transformer'> & {\n    /**\n     * @todo: Merge this headers type into {@link EdenRequestOptions}\n     */\n    headers?:\n      | HTTPHeaders\n      | ((operations: NonEmptyArray<Operation>) => HTTPHeaders | Promise<HTTPHeaders>)\n  } & (TTransformer extends DataTransformerOptions\n    ? { transformer: TTransformer }\n    : {\n        transformer?: DataTransformerOptions\n      })\n\nexport type HTTPLinkFactory = <T extends AnyElysia>(options?: HTTPLinkOptions<T>) => EdenLink<T>\n\nexport function httpLinkFactory(factoryOptions: HTTPLinkFactoryOptions): HTTPLinkFactory {\n  const factory: HTTPLinkFactory = (linkOptions = {} as any) => {\n    const link: EdenLink = (_runtime) => {\n      const resolveOperation = (operation: Operation, observer: Observer<any, any>) => {\n        const { fetch, domain, AbortController, methodOverride, ...defaultParams } = linkOptions\n\n        const { id, context, type, params } = operation\n\n        const options = {\n          fetch,\n          AbortController: getAbortController(AbortController),\n          methodOverride,\n          id,\n          context,\n          type,\n          params: { ...defaultParams, domain, ...params },\n        }\n\n        const { promise, cancel } = factoryOptions.requester(options)\n\n        promise\n          .then((result) => {\n            observer.next(result)\n            observer.complete()\n          })\n          .catch((cause) => {\n            observer.error(cause)\n          })\n\n        return cancel\n      }\n\n      const operationLink: OperationLink = ({ operation }) => {\n        const observable = new Observable(resolveOperation.bind(undefined, operation))\n        return observable\n      }\n\n      return operationLink\n    }\n\n    return link\n  }\n\n  return factory\n}\n\n/**\n * @see https://trpc.io/docs/v11/client/links/httpLink\n */\nexport const safeHttpLink = httpLinkFactory({ requester: universalRequester })\n\n/**\n * @see https://trpc.io/docs/v11/client/links/httpLink\n */\nexport function httpLink<T extends AnyElysia>(options?: HTTPLinkOptions<T, true>): EdenLink<T> {\n  return safeHttpLink(options as any)\n}\n","import { isHttpMethod } from './utils/http'\n\n/**\n * The result of parsing a paths array.\n */\nexport type ParsedPathAndMethod = {\n  /**\n   * Array of path segments that make up the path.\n   *\n   * @example ['api', 'hello', 'index', 'get'] -> ['api', 'hello', 'index']\n   */\n  paths: string[]\n\n  /**\n   * The (absolute) path represented as a single string.\n   *\n   * @example ['api', 'hello', 'index', 'get'] ->'/api/hello/index'\n   */\n  path: string\n\n  /**\n   * The method from the original paths array, if found.\n   *\n   * @example ['api', 'hello', 'index', 'get'] -> 'get'\n   */\n  method?: string\n}\n\n/**\n * Given an array of path segments, where the last segment is possibly a method,\n * parse it into proper labels.\n *\n * @example\n *\n * const originalPaths = ['api', 'hello', 'index', 'get']\n *\n * const path = '/api/hello/index'\n *\n * const method = 'get'\n */\nexport function parsePathsAndMethod(paths: string[] | readonly string[]): ParsedPathAndMethod {\n  /**\n   * Don't mutate the original array.\n   */\n  const pathsCopy = [...paths]\n\n  /**\n   * This may be the method, or part of a route.\n   *\n   * e.g. since invalidations can be partial and not include it.\n   *\n   * @example\n   *\n   * Let there be a GET endpoint at /api/hello/world\n   *\n   * GET request to /api/hello/world -> paths = ['api', 'hello', 'world', 'get']\n   *\n   * Invalidation request for all routes under /api/hello -> paths = ['api', 'hello']\n   *\n   * In the GET request, the last item is the method and can be safely popped.\n   * In the invalidation, the last item is actually part of the path, so it needs to be preserved.\n   */\n  const lastSegment = paths[paths.length - 1]\n\n  const lastSegmentIsHttpMethod = isHttpMethod(lastSegment)\n\n  /**\n   * If the last segment is an HTTP method, it's not part of the final path\n   * and should be removed before determining the path.\n   */\n  if (lastSegmentIsHttpMethod) {\n    pathsCopy.pop()\n  }\n\n  const path = '/' + pathsCopy.join('/')\n\n  const result: ParsedPathAndMethod = { paths: pathsCopy, path }\n\n  if (lastSegmentIsHttpMethod && typeof lastSegment === 'string') {\n    result.method = lastSegment\n  }\n\n  return result\n}\n","/**\n *\n * An eden-treaty proxy may look like these examples:\n *\n * eden.api.products.get({ limit: 5 })\n * eden.api.product({ id: 'product-id' }).details.get({ limit: 5 })\n *\n * In the first example, the proxy is called like a function at the very end, so it is trivial\n * to infer that the arguments are the query parameters for fetch request.\n *\n * In the second example, there are two function calls, and we need to heuristically determine whether\n * it is a function call to insert a path parameter, or the actual end.\n *\n * Heuristic: A path parameter function call needs exactly one object with exactly one key passed as an argument.\n */\nexport function getPathParam(args: unknown[]) {\n  if (args.length !== 1) {\n    return\n  }\n\n  const argument = args[0]\n\n  if (argument == null || typeof argument !== 'object') {\n    return\n  }\n\n  const argumentKeys = Object.keys(argument)\n\n  const pathParam = argumentKeys[0]\n\n  if (argumentKeys.length !== 1 || pathParam == null) {\n    return\n  }\n\n  return { param: argument as any, key: argumentKeys[0] }\n}\n\n/**\n * Only maps over keys that represents valid route params. i.e. path segments that begin with colon.\n */\nexport type ExtractEdenTreatyRouteParams<T> = {\n  [K in keyof T as K extends `:${string}` ? K : never]: T[K]\n}\n\n/**\n * Create an object that maps the name of the route param to possible values (string or number).\n *\n * @example\n *\n * '/products/:id'\n *\n * :id is a path parameter, and this would return { id: string | number }\n *\n * Eden will recognize this object as a path parameter.\n *\n * @see https://elysiajs.com/eden/treaty/overview.html#dynamic-path\n */\nexport type ExtractEdenTreatyRouteParamsInput<T> = {\n  [K in keyof T as K extends `:${infer TParam}` ? TParam : never]: string | number\n}\n"],"mappings":"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","names":["observer","value","data","domain","url","AbortController","AbortController","proxy"]}