@knaus94/prisma-extension-cache-manager 1.0.16 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@ function generateComposedKey(options) {
7
7
  const hash = (0, crypto_1.createHash)("md5")
8
8
  .update(JSON.stringify(options?.queryArgs))
9
9
  .digest("hex");
10
- return `prisma-${options.model}@${hash}`;
10
+ return `Prisma@${options.model}@${hash}`;
11
11
  }
12
12
  exports.default = ({ cache }) => {
13
13
  return extension_1.Prisma.defineExtension({
@@ -21,25 +21,39 @@ exports.default = ({ cache }) => {
21
21
  query: {
22
22
  $allModels: {
23
23
  async $allOperations({ model, operation, args, query }) {
24
- const isOperationSupported = types_1.CACHE_OPERATIONS.includes(operation);
25
- const { cache: cacheArg, uncache: uncacheArg, ...queryArgs } = args;
26
- const useUncache = typeof uncacheArg === "object" &&
27
- uncacheArg !== null &&
28
- isOperationSupported;
29
- const useCache = ["boolean", "object"].includes(typeof cacheArg) &&
30
- cacheArg !== null &&
31
- isOperationSupported;
24
+ if (!types_1.CACHE_OPERATIONS.includes(operation))
25
+ return query(args);
26
+ const { cache: cacheOption, uncache: uncacheOption, ...queryArgs } = args;
27
+ function processUncache(result) {
28
+ const option = uncacheOption;
29
+ let keysToDelete = [];
30
+ if (typeof option === "function") {
31
+ const keys = option(result);
32
+ keysToDelete = Array.isArray(keys) ? keys : [keys];
33
+ }
34
+ else if (typeof option === "string") {
35
+ keysToDelete = [option];
36
+ }
37
+ else if (Array.isArray(option)) {
38
+ keysToDelete = option;
39
+ }
40
+ if (!keysToDelete.length)
41
+ return;
42
+ return Promise.all(keysToDelete.map((key) => cache.del(key).catch(() => Promise.resolve(true))));
43
+ }
44
+ const useCache = cacheOption !== undefined &&
45
+ ["boolean", "object"].includes(typeof cacheOption);
46
+ const useUncache = uncacheOption !== undefined &&
47
+ (typeof uncacheOption === "function" ||
48
+ typeof uncacheOption === "string" ||
49
+ Array.isArray(uncacheOption));
32
50
  if (!useCache) {
33
51
  const result = await query(queryArgs);
34
- if (useUncache) {
35
- const keys = uncacheArg(result);
36
- if (keys?.length > 0) {
37
- await Promise.all(keys.map((key) => cache.del(key).catch(() => Promise.resolve(true))));
38
- }
39
- }
52
+ if (useUncache)
53
+ processUncache(result);
40
54
  return result;
41
55
  }
42
- if (typeof cacheArg === "boolean") {
56
+ if (typeof cacheOption === "boolean") {
43
57
  const cacheKey = generateComposedKey({
44
58
  model,
45
59
  queryArgs,
@@ -49,16 +63,26 @@ exports.default = ({ cache }) => {
49
63
  return typeof cached === "string" ? JSON.parse(cached) : cached;
50
64
  }
51
65
  const result = await query(queryArgs);
52
- if (useUncache) {
53
- const keys = uncacheArg(result);
54
- if (keys?.length > 0) {
55
- await Promise.all(keys.map((key) => cache.del(key).catch(() => Promise.resolve(true))));
56
- }
57
- }
66
+ if (useUncache)
67
+ processUncache(result);
58
68
  await cache.set(cacheKey, JSON.stringify(result));
59
69
  return result;
60
70
  }
61
- const { key, ttl } = cacheArg;
71
+ const { key, ttl } = cacheOption;
72
+ if (typeof key === "function") {
73
+ const result = await query(queryArgs);
74
+ if (useUncache)
75
+ processUncache(result);
76
+ const customCacheKey = key(result);
77
+ const value = JSON.stringify(result);
78
+ if (ttl) {
79
+ await cache.set(customCacheKey, value, ttl);
80
+ }
81
+ else {
82
+ await cache.set(customCacheKey, value);
83
+ }
84
+ return result;
85
+ }
62
86
  const customCacheKey = key ||
63
87
  generateComposedKey({
64
88
  model,
@@ -69,12 +93,8 @@ exports.default = ({ cache }) => {
69
93
  return typeof cached === "string" ? JSON.parse(cached) : cached;
70
94
  }
71
95
  const result = await query(queryArgs);
72
- if (useUncache) {
73
- const keys = uncacheArg(result);
74
- if (keys?.length > 0) {
75
- await Promise.all(keys.map((key) => cache.del(key).catch(() => Promise.resolve(true))));
76
- }
77
- }
96
+ if (useUncache)
97
+ processUncache(result);
78
98
  const value = JSON.stringify(result);
79
99
  if (ttl) {
80
100
  await cache.set(customCacheKey, value, ttl);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -12,19 +12,19 @@ export type ModelExtension = {
12
12
  } & {
13
13
  [O2 in OptionalArgsOperation]: OptionalArgsFunction<O2>;
14
14
  };
15
- export interface CacheOptions {
15
+ export interface CacheOptions<T, A, O extends RequiredArgsOperation | OptionalArgsOperation> {
16
16
  /**
17
17
  * Cache key
18
18
  */
19
- key: string;
19
+ key: ((result: Prisma.Result<T, A, O>) => string) | string;
20
20
  /**
21
21
  * Time to live
22
22
  */
23
23
  ttl?: number;
24
24
  }
25
25
  export interface PrismaCacheArgs<T, A, O extends RequiredArgsOperation | OptionalArgsOperation> {
26
- cache?: boolean | CacheOptions;
27
- uncache?: (result: Prisma.Result<T, A, O>) => string[];
26
+ cache?: boolean | CacheOptions<T, A, O>;
27
+ uncache?: ((result: Prisma.Result<T, A, O>) => string[] | string) | string | string[];
28
28
  }
29
29
  export interface PrismaRedisCacheConfig {
30
30
  cache: Cache;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knaus94/prisma-extension-cache-manager",
3
- "version": "1.0.16",
3
+ "version": "1.1.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/knaus94/prisma-extension-cache-manager.git"