/
githubmirror
/
trpc
Обзор
Документация
Войти
/
githubmirror
/
trpc
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/next/src/app-dir/client.ts
68 строк
2 KB
Alex / KATT
feat(client): allow any procedure name (#6484)
19 фев 2025, 12:51
Не верифицирован
19 фев 2025, 12:51
394b0f5
Код
Авторство
О чём код?
import type { TRPCClient } from '@trpc/client'; import { clientCallTypeToProcedureType, createTRPCUntypedClient, } from '@trpc/client'; import type { AnyRouter } from '@trpc/server/unstable-core-do-not-import'; import { createRecursiveProxy } from '@trpc/server/unstable-core-do-not-import'; import type { CreateTRPCNextAppRouterOptions } from './shared'; export { // ts-prune-ignore-next experimental_createActionHook, // ts-prune-ignore-next experimental_serverActionLink, // ts-prune-ignore-next type UseTRPCActionResult, } from './create-action-hook'; type QueryResult = { data?: unknown; error?: unknown; promise?: Promise<unknown>; }; // ts-prune-ignore-next export function experimental_createTRPCNextAppDirClient< TRouter extends AnyRouter, >(opts: CreateTRPCNextAppRouterOptions<TRouter>) { const client = createTRPCUntypedClient<TRouter>(opts.config()); // const useProxy = createUseProxy<TRouter>(client); const cache = new Map<string, QueryResult>(); return createRecursiveProxy<TRPCClient<TRouter>>(({ path, args }) => { // const pathCopy = [key, ...path]; const pathCopy = [...path]; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const procedureType = clientCallTypeToProcedureType(pathCopy.pop()!); if (procedureType === 'query') { const queryCacheKey = JSON.stringify([path, args[0]]); const cached = cache.get(queryCacheKey); if (cached?.promise) { return cached.promise; } } const fullPath = pathCopy.join('.'); const promise: Promise<unknown> = (client as any)[procedureType]( fullPath, ...args, ); if (procedureType !== 'query') { return promise; } const queryCacheKey = JSON.stringify([path, args[0]]); cache.set(queryCacheKey, { promise, }); return promise; }); // }); }