{"version":3,"sources":["../src/client.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"],"sourcesContent":["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","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"],"mappings":"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","names":["observer"]}