{"version":3,"file":"nextHttp.mjs","names":[],"sources":["../../../src/app-dir/links/nextHttp.ts"],"sourcesContent":["import type {\n  HTTPBatchLinkOptions,\n  HTTPLinkOptions,\n  TRPCLink,\n} from '@trpc/client';\nimport { httpBatchLink, httpLink } from '@trpc/client';\nimport type {\n  AnyRootTypes,\n  AnyRouter,\n} from '@trpc/server/unstable-core-do-not-import';\nimport { generateCacheTags } from '../shared';\n\ninterface NextLinkBaseOptions {\n  /**\n   * How many seconds Next.js caches a response. `false` caches it until it is\n   * revalidated. A call can override this with `context.revalidate`.\n   * @default false\n   */\n  revalidate?: number | false;\n  /**\n   * Send each call with `httpBatchLink` instead of `httpLink`. Each call\n   * gets its own link, so calls aren't combined into one request.\n   */\n  batch?: boolean;\n}\n\ntype NextLinkSingleOptions<TRoot extends AnyRootTypes> = NextLinkBaseOptions &\n  Omit<HTTPLinkOptions<TRoot>, 'fetch'> & {\n    batch?: false;\n  };\n\ntype NextLinkBatchOptions<TRoot extends AnyRootTypes> = NextLinkBaseOptions &\n  Omit<HTTPBatchLinkOptions<TRoot>, 'fetch'> & {\n    batch: true;\n  };\n\n/**\n * A terminating link that sends calls over HTTP with Next.js cache tags, so\n * they can be revalidated.\n *\n * @see https://trpc.io/docs/client/nextjs/app-router-setup\n */\n// ts-prune-ignore-next\nexport function experimental_nextHttpLink<TRouter extends AnyRouter>(\n  opts:\n    | NextLinkSingleOptions<TRouter['_def']['_config']['$types']>\n    | NextLinkBatchOptions<TRouter['_def']['_config']['$types']>,\n): TRPCLink<TRouter> {\n  return (runtime) => {\n    return (ctx) => {\n      const { path, input, context } = ctx.op;\n      const cacheTags = generateCacheTags(path, input);\n\n      // Let per-request revalidate override global revalidate\n      const requestRevalidate =\n        typeof context['revalidate'] === 'number' ||\n        context['revalidate'] === false\n          ? context['revalidate']\n          : undefined;\n\n      const revalidate = requestRevalidate ?? opts.revalidate ?? false;\n\n      const _fetch: NonNullable<HTTPLinkOptions<AnyRootTypes>['fetch']> = (\n        url,\n        fetchOpts,\n      ) => {\n        return fetch(url, {\n          ...fetchOpts,\n          // cache: 'no-cache',\n          next: {\n            revalidate,\n            tags: cacheTags,\n          },\n        });\n      };\n      const link = opts.batch\n        ? httpBatchLink({\n            ...(opts as any),\n            fetch: _fetch,\n          })\n        : httpLink({\n            ...(opts as any),\n            fetch: _fetch,\n          });\n\n      return link(runtime)(ctx);\n    };\n  };\n}\n"],"mappings":";;;;;;;;;;AA2CA,SAAgB,0BACd,MAGmB;CACnB,QAAQ,YAAY;EAClB,QAAQ,QAAQ;;GACd,MAAM,EAAE,MAAM,OAAO,YAAY,IAAI;GACrC,MAAM,YAAY,kBAAkB,MAAM,KAAK;GAG/C,MAAM,oBACJ,OAAO,QAAQ,kBAAkB,YACjC,QAAQ,kBAAkB,QACtB,QAAQ,gBACR,KAAA;GAEN,MAAM,cAAA,OAAa,sBAAA,QAAA,sBAAA,KAAA,IAAA,oBAAqB,KAAK,gBAAA,QAAA,SAAA,KAAA,IAAA,OAAc;GAE3D,MAAM,UACJ,KACA,cACG;IACH,OAAO,MAAM,KAAA,eAAA,eAAA,CAAA,GACR,SAAA,GAAA,CAAA,GAAA,EAEH,MAAM;KACJ;KACA,MAAM;IACR,EAAA,CACF,CAAC;GACH;GAWA,QAVa,KAAK,QACd,cAAA,eAAA,eAAA,CAAA,GACM,IAAA,GAAA,CAAA,GAAA,EACJ,OAAO,OAAA,CACT,CAAC,IACD,SAAA,eAAA,eAAA,CAAA,GACM,IAAA,GAAA,CAAA,GAAA,EACJ,OAAO,OAAA,CACT,CAAC,EAAA,CAEO,OAAO,CAAC,CAAC,GAAG;EAC1B;CACF;AACF"}