UNPKG

prisma-extension-cache-manager

Version:
62 lines (61 loc) 2.73 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.defaultKeyGenerator = void 0; const extension_1 = require("@prisma/client/extension"); const object_code_1 = require("object-code"); const types_1 = require("./types"); const defaultKeyGenerator = (args) => (0, object_code_1.hash)(args).toString(); exports.defaultKeyGenerator = defaultKeyGenerator; const _parseConfig = (config) => { let options = {}; if (typeof config === 'object') { options = config; } else if (typeof config === 'number') { options.ttl = config; } return options; }; exports.default = (config) => { var _a; const { cache } = config; const keyGenerator = (_a = config.keyGenerator) !== null && _a !== void 0 ? _a : exports.defaultKeyGenerator; return extension_1.Prisma.defineExtension({ name: 'cache', client: { $cache: cache, }, model: { $allModels: {}, }, query: { $allModels: { $allOperations(_a) { return __awaiter(this, arguments, void 0, function* ({ model, operation, args, query }) { var _b; const useCache = !!(['number', 'boolean', 'object'].includes(typeof args.cache) && args.cache !== null && types_1.CACHE_OPERATIONS.includes(operation)); if (!useCache) { return query(args); } const queryArgs = Object.assign({}, args); delete queryArgs.cache; const options = _parseConfig(args.cache); const key = (_b = options.key) !== null && _b !== void 0 ? _b : (yield keyGenerator({ model, operation, args: queryArgs })); return cache.wrap(key, () => query(queryArgs), options.ttl); }); }, }, }, }); };