{"version":3,"file":"analogjs-trpc.mjs","sources":["../../../../packages/trpc/src/lib/client/cache-state.ts","../../../../packages/trpc/src/lib/client/links/transfer-state-link.ts","../../../../packages/trpc/src/lib/client/shared-internal.ts","../../../../packages/trpc/src/lib/client/trpc-rxjs-proxy.ts","../../../../packages/trpc/src/lib/client/client.ts","../../../../packages/trpc/src/lib/utils/wait-for.ts","../../../../packages/trpc/src/analogjs-trpc.ts"],"sourcesContent":["import { BehaviorSubject, first } from 'rxjs';\nimport {\n  APP_BOOTSTRAP_LISTENER,\n  ApplicationRef,\n  inject,\n  InjectionToken,\n} from '@angular/core';\n\nexport const tRPC_CACHE_STATE = new InjectionToken<{\n  isCacheActive: BehaviorSubject<boolean>;\n}>('TRPC_HTTP_TRANSFER_STATE_CACHE_STATE');\n\nexport const provideTrpcCacheState = () => ({\n  provide: tRPC_CACHE_STATE,\n  useValue: { isCacheActive: new BehaviorSubject(true) },\n});\n\nexport const provideTrpcCacheStateStatusManager = () => ({\n  provide: APP_BOOTSTRAP_LISTENER,\n  multi: true,\n  useFactory: () => {\n    const appRef = inject(ApplicationRef);\n    const cacheState = inject(tRPC_CACHE_STATE);\n\n    return () =>\n      appRef.isStable\n        .pipe(first((isStable) => isStable))\n        .subscribe(() => cacheState.isCacheActive.next(false));\n  },\n  deps: [ApplicationRef, tRPC_CACHE_STATE],\n});\n","import { Operation, TRPCLink } from '@trpc/client';\nimport { observable } from '@trpc/server/observable';\nimport { inject, makeStateKey, StateKey, TransferState } from '@angular/core';\nimport { AnyRouter } from '@trpc/server';\nimport { tRPC_CACHE_STATE } from '../cache-state';\nimport superjson from 'superjson';\n\nfunction makeCacheKey(request: Operation<unknown>): StateKey<string> {\n  const { type, path, input } = request;\n  const encodedParams = Object.entries(input ?? {}).reduce(\n    (prev, [key, value]) => prev + `${key}=${JSON.stringify(value)}`,\n    '',\n  );\n  const key = type + '.' + path + '?' + encodedParams;\n  const hash = generateHash(key);\n  return makeStateKey(hash);\n}\n\n/**\n * A method that returns a hash representation of a string using a variant of DJB2 hash\n * algorithm.\n *\n * This is the same hashing logic that is used to generate component ids.\n */\nfunction generateHash(value: string): string {\n  let hash = 0;\n\n  for (const char of value) {\n    hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n  }\n\n  // Force positive number hash.\n  // 2147483647 = equivalent of Integer.MAX_VALUE.\n  hash += 2147483647 + 1;\n\n  return hash.toString();\n}\n\nexport const transferStateLink =\n  <AppRouter extends AnyRouter>(): TRPCLink<AppRouter> =>\n  () => {\n    const { isCacheActive } = inject(tRPC_CACHE_STATE);\n    const transferState = inject(TransferState);\n    const isBrowser = typeof window === 'object';\n    // here we just got initialized in the app - this happens once per app\n    // useful for storing cache for instance\n    return ({ next, op }) => {\n      const shouldUseCache =\n        (op.type === 'query' && !isBrowser) || // always fetch new values on the server\n        isCacheActive.getValue(); // or when initializing the client app --> same behavior as HttpClient\n\n      if (!shouldUseCache) {\n        return next(op);\n      }\n\n      const storeKey = makeCacheKey(op);\n      const storeValue = transferState.get(storeKey, null);\n\n      if (storeValue && isBrowser) {\n        // on the server we don't care about the value we will always fetch a new one\n        // use superjson to parse our superjson string and retrieve our\n        // data return it instead of calling next trpc link\n        return observable((observer) =>\n          observer.next(superjson.parse(storeValue)),\n        );\n      }\n\n      return observable((observer) => {\n        return next(op).subscribe({\n          next(value) {\n            // store returned value from trpc call stringified with superjson in TransferState\n            transferState.set(storeKey, superjson.stringify(value));\n            observer.next(value);\n          },\n          error(err) {\n            transferState.remove(storeKey);\n            observer.error(err);\n          },\n          complete() {\n            observer.complete();\n          },\n        });\n      });\n    };\n  };\n","import {\n  AnyRouter,\n  ClientDataTransformerOptions,\n  CombinedDataTransformer,\n  DataTransformerOptions,\n  DefaultDataTransformer,\n} from '@trpc/server';\nimport {\n  Operation,\n  TRPCLink,\n  OperationContext,\n  OperationLink,\n  OperationResultObservable,\n} from '@trpc/client';\nimport { observable } from '@trpc/server/observable';\n\n// Removed subscription\nexport type TRPCType = 'query' | 'mutation';\n\n// Removed subscription and requestAsPromise\nexport type UntypedClientProperties =\n  | 'links'\n  | 'runtime'\n  | 'requestId'\n  | '$request'\n  | 'query'\n  | 'mutation';\n\n/*\n * One to one copy of the trpc client internal code\n * Nothing was changed, but we can not import these methods because\n * they are not exported\n */\nexport type IntersectionError<TKey extends string> =\n  `The property '${TKey}' in your router collides with a built-in method, rename this router or procedure on your backend.`;\n\nexport interface TRPCRequestOptions {\n  /**\n   * Pass additional context to links\n   */\n  context?: OperationContext;\n}\n\nexport function createChain<\n  TRouter extends AnyRouter,\n  TInput = unknown,\n  TOutput = unknown,\n>(opts: {\n  links: OperationLink<TRouter, TInput, TOutput>[];\n  op: Operation<TInput>;\n}): OperationResultObservable<TRouter, TOutput> {\n  return observable((observer) => {\n    function execute(index = 0, op = opts.op) {\n      const next = opts.links[index];\n      if (!next) {\n        throw new Error(\n          'No more links to execute - did you forget to add an ending link?',\n        );\n      }\n      const subscription = next({\n        op,\n        next(nextOp) {\n          const nextObserver = execute(index + 1, nextOp);\n\n          return nextObserver;\n        },\n      });\n      return subscription;\n    }\n\n    const obs$ = execute();\n    return obs$.subscribe(observer);\n  });\n}\n\nexport type CreateTRPCClientOptions<TRouter extends AnyRouter> =\n  CreateTRPCClientBaseOptions<TRouter> & {\n    links: TRPCLink<TRouter>[];\n  };\n\nexport type CreateTRPCClientBaseOptions<TRouter extends AnyRouter> =\n  TRouter['_def']['_config']['transformer'] extends DefaultDataTransformer\n    ? {\n        /**\n         * Data transformer\n         *\n         * You must use the same transformer on the backend and frontend\n         * @link https://trpc.io/docs/data-transformers\n         **/\n        transformer?: 'You must set a transformer on the backend router';\n      }\n    : TRouter['_def']['_config']['transformer'] extends DataTransformerOptions\n      ? {\n          /**\n           * Data transformer\n           *\n           * You must use the same transformer on the backend and frontend\n           * @link https://trpc.io/docs/data-transformers\n           **/\n          transformer: TRouter['_def']['_config']['transformer'] extends CombinedDataTransformer\n            ? DataTransformerOptions\n            : TRouter['_def']['_config']['transformer'];\n        }\n      : {\n          /**\n           * Data transformer\n           *\n           * You must use the same transformer on the backend and frontend\n           * @link https://trpc.io/docs/data-transformers\n           **/\n          transformer?:\n            | /** @deprecated **/ ClientDataTransformerOptions\n            | CombinedDataTransformer;\n        };\n","import type {\n  AnyMutationProcedure,\n  AnyProcedure,\n  AnyQueryProcedure,\n  AnyRouter,\n  CombinedDataTransformer,\n  DataTransformerOptions,\n  inferProcedureInput,\n  inferProcedureOutput,\n  IntersectionError,\n  ProcedureArgs,\n  ProcedureRouterRecord,\n  ProcedureType,\n} from '@trpc/server';\nimport {\n  createFlatProxy,\n  createRecursiveProxy,\n  inferTransformedProcedureOutput,\n} from '@trpc/server/shared';\nimport {\n  inferObservableValue,\n  share,\n  Observable as TrpcObservable,\n} from '@trpc/server/observable';\nimport { Observable as RxJSObservable } from 'rxjs';\nimport {\n  TRPCClientError,\n  OperationContext,\n  OperationLink,\n  TRPCClientRuntime,\n} from '@trpc/client';\nimport {\n  createChain,\n  CreateTRPCClientOptions,\n  TRPCRequestOptions,\n  TRPCType,\n} from './shared-internal';\n\n// Changed to rxjs observable\ntype Resolver<TProcedure extends AnyProcedure> = (\n  ...args: ProcedureArgs<TProcedure['_def']>\n) => RxJSObservable<inferTransformedProcedureOutput<TProcedure>>;\n\n// Removed subscription and using new type\ntype DecorateProcedure<\n  TProcedure extends AnyProcedure,\n  TRouter extends AnyRouter,\n> = TProcedure extends AnyQueryProcedure\n  ? {\n      query: Resolver<TProcedure>;\n    }\n  : TProcedure extends AnyMutationProcedure\n    ? {\n        mutate: Resolver<TProcedure>;\n      }\n    : never;\n\n// Removed subscription and using new type\ntype DecoratedProcedureRecord<\n  TProcedures extends ProcedureRouterRecord,\n  TRouter extends AnyRouter,\n> = {\n  [TKey in keyof TProcedures]: TProcedures[TKey] extends AnyRouter\n    ? DecoratedProcedureRecord<\n        TProcedures[TKey]['_def']['record'],\n        TProcedures[TKey]\n      >\n    : TProcedures[TKey] extends AnyProcedure\n      ? DecorateProcedure<TProcedures[TKey], TRouter>\n      : never;\n};\n\n// Removed subscription and using new type\nconst clientCallTypeMap: Record<\n  keyof DecorateProcedure<any, any>,\n  ProcedureType\n> = {\n  query: 'query',\n  mutate: 'mutation',\n};\n\n// Removed subscription and requestAsPromise\ntype UntypedClientProperties =\n  | 'links'\n  | 'runtime'\n  | 'requestId'\n  | '$request'\n  | 'query'\n  | 'mutation';\n\n// Nothing changed, only using new types\nexport type CreateTrpcProxyClient<TRouter extends AnyRouter> =\n  DecoratedProcedureRecord<\n    TRouter['_def']['record'],\n    TRouter\n  > extends infer TProcedureRecord\n    ? UntypedClientProperties & keyof TProcedureRecord extends never\n      ? TProcedureRecord\n      : IntersectionError<UntypedClientProperties & keyof TProcedureRecord>\n    : never;\n\n// Nothing changed, only using new types\nfunction createTRPCRxJSClientProxy<TRouter extends AnyRouter>(\n  client: TRPCClient<TRouter>,\n) {\n  return createFlatProxy<CreateTrpcProxyClient<TRouter>>((key) => {\n    // eslint-disable-next-line no-prototype-builtins\n    if (client.hasOwnProperty(key)) {\n      return (client as any)[key as any];\n    }\n    return createRecursiveProxy(({ path, args }) => {\n      const pathCopy = [key, ...path];\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      const clientCallType = pathCopy.pop()! as keyof DecorateProcedure<\n        any,\n        any\n      >;\n\n      const procedureType = clientCallTypeMap[clientCallType];\n\n      const fullPath = pathCopy.join('.');\n\n      return (client as any)[procedureType](fullPath, ...args);\n    });\n  });\n}\n\nexport function createTRPCRxJSProxyClient<TRouter extends AnyRouter>(\n  opts: CreateTRPCClientOptions<TRouter>,\n) {\n  const client = new TRPCClient<TRouter>(opts);\n  const proxy = createTRPCRxJSClientProxy(client as TRPCClient<TRouter>);\n  return proxy;\n}\n\n/**\n * Removed subscription method;\n * Remove converting trpc observables to promises and therefore also the AbortController\n * Add converting to rxjs observable\n */\nclass TRPCClient<TRouter extends AnyRouter> {\n  private readonly links: OperationLink<TRouter>[];\n  public readonly runtime: TRPCClientRuntime;\n  private requestId: number;\n\n  constructor(opts: CreateTRPCClientOptions<TRouter>) {\n    this.requestId = 0;\n\n    const combinedTransformer: CombinedDataTransformer = (() => {\n      const transformer = opts.transformer as\n        | DataTransformerOptions\n        | undefined;\n\n      if (!transformer) {\n        return {\n          input: {\n            serialize: (data) => data,\n            deserialize: (data) => data,\n          },\n          output: {\n            serialize: (data) => data,\n            deserialize: (data) => data,\n          },\n        };\n      }\n      if ('input' in transformer) {\n        return opts.transformer as CombinedDataTransformer;\n      }\n      return {\n        input: transformer,\n        output: transformer,\n      };\n    })();\n\n    this.runtime = {\n      transformer: {\n        serialize: (data) => combinedTransformer.input.serialize(data),\n        deserialize: (data) => combinedTransformer.output.deserialize(data),\n      },\n      combinedTransformer,\n    };\n\n    // Initialize the links\n    this.links = opts.links.map((link) => link(this.runtime));\n  }\n\n  private $request<TInput = unknown, TOutput = unknown>({\n    type,\n    input,\n    path,\n    context = {},\n  }: {\n    type: TRPCType;\n    input: TInput;\n    path: string;\n    context?: OperationContext;\n  }) {\n    const chain$ = createChain<AnyRouter, TInput, TOutput>({\n      links: this.links as OperationLink<any, any, any>[],\n      op: {\n        id: ++this.requestId,\n        type,\n        path,\n        input,\n        context,\n      },\n    });\n    type TValue = inferObservableValue<typeof chain$>;\n    return trpcObservableToRxJsObservable<TValue>(chain$.pipe(share()));\n  }\n\n  public query<\n    TQueries extends TRouter['_def']['queries'],\n    TPath extends string & keyof TQueries,\n    TInput extends inferProcedureInput<TQueries[TPath]>,\n  >(path: TPath, input?: TInput, opts?: TRPCRequestOptions) {\n    type TOutput = inferProcedureOutput<TQueries[TPath]>;\n    return this.$request<TInput, TOutput>({\n      type: 'query',\n      path,\n      input: input as TInput,\n      context: opts?.context,\n    });\n  }\n\n  public mutation<\n    TMutations extends TRouter['_def']['mutations'],\n    TPath extends string & keyof TMutations,\n    TInput extends inferProcedureInput<TMutations[TPath]>,\n  >(path: TPath, input?: TInput, opts?: TRPCRequestOptions) {\n    type TOutput = inferTransformedProcedureOutput<TMutations[TPath]>;\n    return this.$request<TInput, TOutput>({\n      type: 'mutation',\n      path,\n      input: input as TInput,\n      context: opts?.context,\n    });\n  }\n}\n\nfunction trpcObservableToRxJsObservable<TValue>(\n  observable: TrpcObservable<TValue, unknown>,\n) {\n  return new RxJSObservable<TValue>((subscriber) => {\n    const sub = observable.subscribe({\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      next: (value) => subscriber.next((value.result as any).data),\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      error: (err) => subscriber.error(TRPCClientError.from(err)),\n      complete: () => subscriber.complete(),\n    });\n    return () => {\n      sub.unsubscribe();\n    };\n  });\n}\n","import { InjectionToken, Provider, signal, TransferState } from '@angular/core';\nimport 'isomorphic-fetch';\nimport {\n  httpBatchLink,\n  HttpBatchLinkOptions,\n  CreateTRPCClientOptions,\n  HTTPHeaders,\n} from '@trpc/client';\nimport { AnyRouter } from '@trpc/server';\nimport { transferStateLink } from './links/transfer-state-link';\nimport {\n  provideTrpcCacheState,\n  provideTrpcCacheStateStatusManager,\n  tRPC_CACHE_STATE,\n} from './cache-state';\nimport { createTRPCRxJSProxyClient } from './trpc-rxjs-proxy';\n// @ts-ignore\nimport { FetchEsque } from '@trpc/client/dist/internals/types';\n\nexport type TrpcOptions<T extends AnyRouter> = {\n  url: string;\n  options?: Partial<CreateTRPCClientOptions<T>>;\n  batchLinkOptions?: Omit<HttpBatchLinkOptions, 'url' | 'headers'>;\n};\n\nexport type TrpcClient<AppRouter extends AnyRouter> = ReturnType<\n  typeof createTRPCRxJSProxyClient<AppRouter>\n>;\nconst tRPC_INJECTION_TOKEN = new InjectionToken<unknown>(\n  '@analogjs/trpc proxy client',\n);\n\nfunction customFetch(\n  input: RequestInfo | URL,\n  init?: RequestInit & { method: 'GET' },\n) {\n  if ((globalThis as any).$fetch) {\n    return (globalThis as any).$fetch\n      .raw(input.toString(), init)\n      .catch((e: any) => {\n        throw e;\n      })\n      .then((response: any) => ({\n        ...response,\n        headers: response.headers,\n        json: () => Promise.resolve(response._data),\n      }));\n  }\n\n  // dev server trpc for analog & nitro\n  if (typeof window === 'undefined') {\n    const host =\n      process.env['NITRO_HOST'] ?? process.env['ANALOG_HOST'] ?? 'localhost';\n    const port =\n      process.env['NITRO_PORT'] ?? process.env['ANALOG_PORT'] ?? 4205;\n    const base = `http://${host}:${port}`;\n    if (input instanceof Request) {\n      input = new Request(base, input);\n    } else {\n      input = new URL(input, base);\n    }\n  }\n\n  return fetch(input, init);\n}\n\nexport const createTrpcClient = <AppRouter extends AnyRouter>({\n  url,\n  options,\n  batchLinkOptions,\n}: TrpcOptions<AppRouter>) => {\n  const TrpcHeaders = signal<HTTPHeaders>({});\n  const provideTrpcClient = (): Provider[] => [\n    provideTrpcCacheState(),\n    provideTrpcCacheStateStatusManager(),\n    {\n      provide: tRPC_INJECTION_TOKEN,\n      useFactory: () => {\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore TODO: figure out why TS is complaining\n        return createTRPCRxJSProxyClient<AppRouter>({\n          transformer: options?.transformer,\n          links: [\n            ...(options?.links ?? []),\n            transferStateLink(),\n            httpBatchLink({\n              ...(batchLinkOptions ?? {}),\n              headers() {\n                return TrpcHeaders();\n              },\n              fetch: customFetch as FetchEsque,\n              url: url ?? '',\n            }),\n          ],\n        });\n      },\n      deps: [tRPC_CACHE_STATE, TransferState],\n    },\n  ];\n  const TrpcClient = tRPC_INJECTION_TOKEN as InjectionToken<\n    TrpcClient<AppRouter>\n  >;\n  return {\n    TrpcClient,\n    provideTrpcClient,\n    TrpcHeaders,\n    /** @deprecated use TrpcClient instead */\n    tRPCClient: TrpcClient,\n    /** @deprecated use provideTrpcClient instead */\n    provideTRPCClient: provideTrpcClient,\n    /** @deprecated use TrpcHeaders instead */\n    tRPCHeaders: TrpcHeaders,\n  };\n};\n","import { firstValueFrom, isObservable, Observable } from 'rxjs';\n\ndeclare const Zone: any;\n\nexport async function waitFor<T>(prom: Promise<T> | Observable<T>): Promise<T> {\n  if (isObservable(prom)) {\n    prom = firstValueFrom(prom);\n  }\n\n  if (typeof Zone === 'undefined') {\n    return prom;\n  }\n\n  const macroTask = Zone.current.scheduleMacroTask(\n    `AnalogContentResolve-${Math.random()}`,\n    () => {},\n    {},\n    () => {},\n  );\n  return prom.then((p: T) => {\n    macroTask.invoke();\n    return p;\n  });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["RxJSObservable"],"mappings":"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"}