prisma-extension-cache-manager
Version:
Prisma client extension for caching model queries
41 lines (40 loc) • 1.78 kB
TypeScript
import { Prisma } from '@prisma/client/extension';
import type { Cache } from 'cache-manager';
export declare const REQUIRED_ARGS_OPERATIONS: readonly ["findUnique", "findUniqueOrThrow", "groupBy", "aggregate"];
export declare const OPTIONAL_ARGS_OPERATIONS: readonly ["findMany", "findFirst", "findFirstOrThrow", "count"];
export declare const CACHE_OPERATIONS: readonly ["findUnique", "findUniqueOrThrow", "groupBy", "aggregate", "findMany", "findFirst", "findFirstOrThrow", "count"];
type RequiredArgsOperation = (typeof REQUIRED_ARGS_OPERATIONS)[number];
type OptionalArgsOperation = (typeof OPTIONAL_ARGS_OPERATIONS)[number];
export type CacheOperation = RequiredArgsOperation | OptionalArgsOperation;
type RequiredArgsFunction<O extends RequiredArgsOperation> = <T, A>(this: T, args: Prisma.Exact<A, Prisma.Args<T, O> & PrismaCacheArgs>) => Promise<Prisma.Result<T, A, O>>;
type OptionalArgsFunction<O extends OptionalArgsOperation> = <T, A>(this: T, args?: Prisma.Exact<A, Prisma.Args<T, O> & PrismaCacheArgs>) => Promise<Prisma.Result<T, A, O>>;
export type ModelExtension = {
[O1 in RequiredArgsOperation]: RequiredArgsFunction<O1>;
} & {
[O2 in OptionalArgsOperation]: OptionalArgsFunction<O2>;
};
export interface CacheOptions {
/**
* Time-to-live in milliseconds
*/
ttl?: number;
/**
* Cache key
*/
key?: string;
}
export type CacheConfig = true | number | CacheOptions;
export interface PrismaCacheArgs {
cache?: CacheConfig;
}
export type KeyGeneratorArgs = {
model: string;
operation: string;
args: unknown;
};
export type KeyGenerator = (args: KeyGeneratorArgs) => string | Promise<string>;
export interface PrismaCacheExtensionConfig {
cache: Cache;
keyGenerator?: KeyGenerator;
}
export {};