@trpc/next
Version:
60 lines (56 loc) • 1.47 kB
text/typescript
import type { Resolver } from '@trpc/client';
import type {
AnyProcedure,
AnyRootTypes,
inferProcedureInput,
inferTransformedProcedureOutput,
ProcedureType,
RouterRecord,
} from '@trpc/server/unstable-core-do-not-import';
type ResolverDef = {
input: any;
output: any;
transformer: boolean;
errorShape: any;
};
export type DecorateProcedureServer<
TType extends ProcedureType,
TDef extends ResolverDef,
> = TType extends 'query'
? {
query: Resolver<TDef>;
revalidate: (
input?: TDef['input'],
) => Promise<
{ revalidated: false; error: string } | { revalidated: true }
>;
}
: TType extends 'mutation'
? {
mutate: Resolver<TDef>;
}
: TType extends 'subscription'
? {
subscribe: Resolver<TDef>;
}
: never;
export type NextAppDirDecorateRouterRecord<
TRoot extends AnyRootTypes,
TRecord extends RouterRecord,
> = {
[TKey in keyof TRecord]: TRecord[TKey] extends infer $Value
? $Value extends AnyProcedure
? DecorateProcedureServer<
$Value['_def']['type'],
{
input: inferProcedureInput<$Value>;
output: inferTransformedProcedureOutput<TRoot, $Value>;
errorShape: TRoot['errorShape'];
transformer: TRoot['transformer'];
}
>
: $Value extends RouterRecord
? NextAppDirDecorateRouterRecord<TRoot, $Value>
: never
: never;
};