@paulwer/prisma-extension-cache-manager
Version:
A caching extension for [Prisma](https://www.prisma.io/), fully compatible with [cache-manager](https://www.npmjs.com/package/cache-manager), predefined uncaching strategies and custom handlers for key generation and uncaching.
93 lines (92 loc) • 3.95 kB
TypeScript
import { Cache } from "cache-manager";
import { Prisma, PrismaPromise } from "@prisma/client";
export declare const CACHE_OPERATIONS: readonly ["findMany", "findFirst", "findFirstOrThrow", "findUnique", "findUniqueOrThrow", "count", "aggregate", "groupBy", "create", "createMany", "createManyAndReturn", "updateMany", "update", "upsert", "delete", "deleteMany"];
export declare const READ_OPERATIONS: readonly ["findMany", "findFirst", "findFirstOrThrow", "findUnique", "findUniqueOrThrow", "count", "aggregate", "groupBy"];
export declare const WRITE_OPERATIONS: readonly ["create", "createMany", "createManyAndReturn", "updateMany", "upsert", "update", "delete", "deleteMany"];
export declare const REQUIRED_ARGS_OPERATIONS: readonly ["findUnique", "findUniqueOrThrow", "aggregate", "groupBy", "create", "createMany", "createManyAndReturn", "updateMany", "update", "upsert", "delete"];
export declare const OPTIONAL_ARGS_OPERATIONS: readonly ["findMany", "findFirst", "findFirstOrThrow", "count", "deleteMany"];
type RequiredArgsOperation = (typeof REQUIRED_ARGS_OPERATIONS)[number];
type OptionalArgsOperation = (typeof OPTIONAL_ARGS_OPERATIONS)[number];
type RequiredArgsFunction<O extends RequiredArgsOperation> = <T, A>(this: T, args: Prisma.Exact<A, Prisma.Args<T, O> & PrismaCacheArgs<T, A, O>>) => PrismaPromise<Prisma.Result<T, A, O>>;
type OptionalArgsFunction<O extends OptionalArgsOperation> = <T, A>(this: T, args?: Prisma.Exact<A, Prisma.Args<T, O> & PrismaCacheArgs<T, A, O>>) => PrismaPromise<Prisma.Result<T, A, O>>;
export type ModelExtension = {
[O1 in RequiredArgsOperation]: RequiredArgsFunction<O1>;
} & {
[O2 in OptionalArgsOperation]: OptionalArgsFunction<O2>;
};
export interface CacheOptions<T, A, O extends RequiredArgsOperation | OptionalArgsOperation> {
/**
* Cache key
*/
key?: ((result: Prisma.Result<T, A, O>) => string) | string;
/**
* Cache namespace
*/
namespace?: string;
/**
* Time to live
*/
ttl?: number;
}
export interface PrismaCacheArgs<T, A, O extends RequiredArgsOperation | OptionalArgsOperation> {
cache?: boolean | number | string | CacheOptions<T, A, O>;
uncache?: ((result: Prisma.Result<T, A, O>) => string[] | string) | string | string[] | {
key: string;
namespace?: string;
}[];
}
export interface PrismaQueryCacheArgs {
cache?: number | string | {
/**
* Cache key
*/
key?: ((result: any) => string) | string;
/**
* Cache namespace
*/
namespace?: string;
/**
* Time to live
*/
ttl?: number;
};
uncache?: ((result: any) => string[] | string) | string | string[] | {
key: string;
namespace?: string;
}[];
}
export type PrismaExtensionCacheConfig = {
cache: Cache;
defaultTTL?: number;
/**
* when active a map of pending promisses will be kept on your local server to deduplicate similar requests
*/
useDeduplication?: boolean;
/**
* when active the cache extension will automaticly uncache cache values from storage when a write operation has happend.
*
* **ImportantNote:** If you are using a custom client please provide the prisma typings with property *prisma*.
*/
useAutoUncache?: boolean;
/**
* If you are using a custom client please provide the prisma typings from the defined output of the generator other than *@prisma/client*.
*
* import { Prisma } from "@prisma/client";
*/
prisma?: {
defineExtension: any;
};
/**
* prefixes for custom cache rewrites. you can customize those prefixes for cases where you experience overlaps
*/
typePrefixes?: {
Decimal?: string;
BigInt?: string;
Date?: string;
Buffer?: string;
Uint8Array?: string;
Uint16Array?: string;
Uint32Array?: string;
};
};
export {};