UNPKG

@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
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 {};