@warlock.js/cache 1.0.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.
Files changed (90) hide show
  1. package/README.md +527 -0
  2. package/cjs/cache-manager.d.ts +90 -0
  3. package/cjs/cache-manager.d.ts.map +1 -0
  4. package/cjs/cache-manager.js +148 -0
  5. package/cjs/cache-manager.js.map +1 -0
  6. package/cjs/drivers/base-cache-driver.d.ts +81 -0
  7. package/cjs/drivers/base-cache-driver.d.ts.map +1 -0
  8. package/cjs/drivers/base-cache-driver.js +123 -0
  9. package/cjs/drivers/base-cache-driver.js.map +1 -0
  10. package/cjs/drivers/file-cache-driver.d.ts +42 -0
  11. package/cjs/drivers/file-cache-driver.d.ts.map +1 -0
  12. package/cjs/drivers/file-cache-driver.js +106 -0
  13. package/cjs/drivers/file-cache-driver.js.map +1 -0
  14. package/cjs/drivers/index.d.ts +8 -0
  15. package/cjs/drivers/index.d.ts.map +1 -0
  16. package/cjs/drivers/lru-memory-cache-driver.d.ts +84 -0
  17. package/cjs/drivers/lru-memory-cache-driver.d.ts.map +1 -0
  18. package/cjs/drivers/lru-memory-cache-driver.js +151 -0
  19. package/cjs/drivers/lru-memory-cache-driver.js.map +1 -0
  20. package/cjs/drivers/memory-cache-driver.d.ts +53 -0
  21. package/cjs/drivers/memory-cache-driver.d.ts.map +1 -0
  22. package/cjs/drivers/memory-cache-driver.js +107 -0
  23. package/cjs/drivers/memory-cache-driver.js.map +1 -0
  24. package/cjs/drivers/memory-extended-cache-driver.d.ts +14 -0
  25. package/cjs/drivers/memory-extended-cache-driver.d.ts.map +1 -0
  26. package/cjs/drivers/memory-extended-cache-driver.js +25 -0
  27. package/cjs/drivers/memory-extended-cache-driver.js.map +1 -0
  28. package/cjs/drivers/null-cache-driver.d.ts +58 -0
  29. package/cjs/drivers/null-cache-driver.d.ts.map +1 -0
  30. package/cjs/drivers/null-cache-driver.js +84 -0
  31. package/cjs/drivers/null-cache-driver.js.map +1 -0
  32. package/cjs/drivers/redis-cache-driver.d.ts +39 -0
  33. package/cjs/drivers/redis-cache-driver.d.ts.map +1 -0
  34. package/cjs/drivers/redis-cache-driver.js +113 -0
  35. package/cjs/drivers/redis-cache-driver.js.map +1 -0
  36. package/cjs/index.d.ts +5 -0
  37. package/cjs/index.d.ts.map +1 -0
  38. package/cjs/index.js +1 -0
  39. package/cjs/index.js.map +1 -0
  40. package/cjs/types.d.ts +193 -0
  41. package/cjs/types.d.ts.map +1 -0
  42. package/cjs/utils.d.ts +20 -0
  43. package/cjs/utils.d.ts.map +1 -0
  44. package/cjs/utils.js +27 -0
  45. package/cjs/utils.js.map +1 -0
  46. package/esm/cache-manager.d.ts +90 -0
  47. package/esm/cache-manager.d.ts.map +1 -0
  48. package/esm/cache-manager.js +148 -0
  49. package/esm/cache-manager.js.map +1 -0
  50. package/esm/drivers/base-cache-driver.d.ts +81 -0
  51. package/esm/drivers/base-cache-driver.d.ts.map +1 -0
  52. package/esm/drivers/base-cache-driver.js +123 -0
  53. package/esm/drivers/base-cache-driver.js.map +1 -0
  54. package/esm/drivers/file-cache-driver.d.ts +42 -0
  55. package/esm/drivers/file-cache-driver.d.ts.map +1 -0
  56. package/esm/drivers/file-cache-driver.js +106 -0
  57. package/esm/drivers/file-cache-driver.js.map +1 -0
  58. package/esm/drivers/index.d.ts +8 -0
  59. package/esm/drivers/index.d.ts.map +1 -0
  60. package/esm/drivers/lru-memory-cache-driver.d.ts +84 -0
  61. package/esm/drivers/lru-memory-cache-driver.d.ts.map +1 -0
  62. package/esm/drivers/lru-memory-cache-driver.js +151 -0
  63. package/esm/drivers/lru-memory-cache-driver.js.map +1 -0
  64. package/esm/drivers/memory-cache-driver.d.ts +53 -0
  65. package/esm/drivers/memory-cache-driver.d.ts.map +1 -0
  66. package/esm/drivers/memory-cache-driver.js +107 -0
  67. package/esm/drivers/memory-cache-driver.js.map +1 -0
  68. package/esm/drivers/memory-extended-cache-driver.d.ts +14 -0
  69. package/esm/drivers/memory-extended-cache-driver.d.ts.map +1 -0
  70. package/esm/drivers/memory-extended-cache-driver.js +25 -0
  71. package/esm/drivers/memory-extended-cache-driver.js.map +1 -0
  72. package/esm/drivers/null-cache-driver.d.ts +58 -0
  73. package/esm/drivers/null-cache-driver.d.ts.map +1 -0
  74. package/esm/drivers/null-cache-driver.js +84 -0
  75. package/esm/drivers/null-cache-driver.js.map +1 -0
  76. package/esm/drivers/redis-cache-driver.d.ts +39 -0
  77. package/esm/drivers/redis-cache-driver.d.ts.map +1 -0
  78. package/esm/drivers/redis-cache-driver.js +113 -0
  79. package/esm/drivers/redis-cache-driver.js.map +1 -0
  80. package/esm/index.d.ts +5 -0
  81. package/esm/index.d.ts.map +1 -0
  82. package/esm/index.js +1 -0
  83. package/esm/index.js.map +1 -0
  84. package/esm/types.d.ts +193 -0
  85. package/esm/types.d.ts.map +1 -0
  86. package/esm/utils.d.ts +20 -0
  87. package/esm/utils.d.ts.map +1 -0
  88. package/esm/utils.js +27 -0
  89. package/esm/utils.js.map +1 -0
  90. package/package.json +39 -0
@@ -0,0 +1,81 @@
1
+ import { GenericObject } from "@mongez/reinforcements";
2
+ import { CacheData, CacheDriver, CacheOperationType } from "../types";
3
+ export declare abstract class BaseCacheDriver<ClientType, Options extends GenericObject> implements CacheDriver<ClientType, Options> {
4
+ /**
5
+ * CLient driver
6
+ */
7
+ protected clientDriver: ClientType;
8
+ /**
9
+ * {@inheritdoc}
10
+ */
11
+ get client(): ClientType;
12
+ /**
13
+ * Set client driver
14
+ */
15
+ set client(client: ClientType);
16
+ /**
17
+ * Get the cache driver name
18
+ */
19
+ abstract name: string;
20
+ /**
21
+ * Options list
22
+ */
23
+ options: Options;
24
+ /**
25
+ * {@inheritdoc}
26
+ */
27
+ parseKey(key: string | GenericObject): Promise<string>;
28
+ /**
29
+ * {@inheritdoc}
30
+ */
31
+ setOptions(options: Options): this;
32
+ /**
33
+ * {@inheritdoc}
34
+ */
35
+ abstract removeNamespace(namespace: string): Promise<any>;
36
+ /**
37
+ * {@inheritdoc}
38
+ */
39
+ abstract set(key: string | GenericObject, value: any): Promise<any>;
40
+ /**
41
+ * {@inheritdoc}
42
+ */
43
+ abstract get(key: string | GenericObject): Promise<any>;
44
+ /**
45
+ * {@inheritdoc}
46
+ */
47
+ abstract remove(key: string | GenericObject): Promise<void>;
48
+ /**
49
+ * {@inheritdoc}
50
+ */
51
+ abstract flush(): Promise<void>;
52
+ /**
53
+ * Log the operation
54
+ */
55
+ protected log(operation: CacheOperationType, key?: string): any;
56
+ /**
57
+ * Get time to live value
58
+ */
59
+ get ttl(): any;
60
+ /**
61
+ * Get time to live value in milliseconds
62
+ */
63
+ getTtl(ttl?: number): number;
64
+ /**
65
+ * Prepare data for storage
66
+ */
67
+ protected prepareDataForStorage(data: any, ttl?: number): CacheData;
68
+ /**
69
+ * Parse fetched data from cache
70
+ */
71
+ protected parseCachedData(key: string, data: CacheData): Promise<any>;
72
+ /**
73
+ * {@inheritdoc}
74
+ */
75
+ connect(): Promise<void>;
76
+ /**
77
+ * {@inheritdoc}
78
+ */
79
+ disconnect(): Promise<void>;
80
+ }
81
+ //# sourceMappingURL=base-cache-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-cache-driver.d.ts","sourceRoot":"","sources":["../../src/drivers/base-cache-driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAuBtE,8BAAsB,eAAe,CAAC,UAAU,EAAE,OAAO,SAAS,aAAa,CAC7E,YAAW,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC;IAE3C;;OAEG;IACH,SAAS,CAAC,YAAY,EAAG,UAAU,CAAC;IAEpC;;OAEG;IACH,IAAW,MAAM,IAOS,UAAU,CALnC;IAED;;OAEG;IACH,IAAW,MAAM,CAAC,MAAM,EAAE,UAAU,EAEnC;IAED;;OAEG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACI,OAAO,EAAE,OAAO,CAAa;IAEpC;;OAEG;IACU,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa;IAIjD;;OAEG;IACI,UAAU,CAAC,OAAO,EAAE,OAAO;IAKlC;;OAEG;aACa,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAEhE;;OAEG;aACa,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAE1E;;OAEG;aACa,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC;IAE9D;;OAEG;aACa,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAElE;;OAEG;aACa,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAEtC;;OAEG;IACH,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,CAAC,EAAE,MAAM;IA8BzD;;OAEG;IACH,IAAW,GAAG,QAEb;IAED;;OAEG;IACI,MAAM,CAAC,GAAG,GAAE,MAAiB;IAMpC;;OAEG;IACH,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM;IAavD;;OAEG;cACa,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAa5D;;OAEG;IACU,OAAO;IAKpB;;OAEG;IACU,UAAU;CAGxB"}
@@ -0,0 +1,123 @@
1
+ import {log}from'@warlock.js/logger';import {parseCacheKey}from'../utils.js';const messages = {
2
+ clearing: "Clearing namespace",
3
+ cleared: "Namespace cleared",
4
+ fetching: "Fetching key",
5
+ fetched: "Key fetched",
6
+ caching: "Caching key",
7
+ cached: "Key cached",
8
+ flushing: "Flushing cache",
9
+ flushed: "Cache flushed",
10
+ removing: "Removing key",
11
+ removed: "Key removed",
12
+ expired: "Key expired",
13
+ notFound: "Key not found",
14
+ connecting: "Connecting to the cache engine.",
15
+ connected: "Connected to the cache engine.",
16
+ disconnecting: "Disconnecting from the cache engine.",
17
+ disconnected: "Disconnected from the cache engine.",
18
+ error: "Error occurred",
19
+ };
20
+ class BaseCacheDriver {
21
+ /**
22
+ * CLient driver
23
+ */
24
+ clientDriver;
25
+ /**
26
+ * {@inheritdoc}
27
+ */
28
+ get client() {
29
+ return (this.clientDriver || this);
30
+ }
31
+ /**
32
+ * Set client driver
33
+ */
34
+ set client(client) {
35
+ this.clientDriver = client;
36
+ }
37
+ /**
38
+ * Options list
39
+ */
40
+ options = {};
41
+ /**
42
+ * {@inheritdoc}
43
+ */
44
+ async parseKey(key) {
45
+ return await parseCacheKey(key, this.options);
46
+ }
47
+ /**
48
+ * {@inheritdoc}
49
+ */
50
+ setOptions(options) {
51
+ this.options = options || {};
52
+ return this;
53
+ }
54
+ /**
55
+ * Log the operation
56
+ */
57
+ log(operation, key) {
58
+ if (key) {
59
+ // this will be likely used with file cache driver as it will convert the dot to slash
60
+ // to make it consistent and not to confuse developers we will output the key by making sure it's a dot
61
+ key = key.replaceAll("/", ".");
62
+ }
63
+ if (operation == "notFound" || operation == "expired") {
64
+ return log.error("cache:" + this.name, operation, (key ? key + " " : "") + messages[operation]);
65
+ }
66
+ if (operation.endsWith("ed")) {
67
+ return log.success("cache:" + this.name, operation, (key ? key + " " : "") + messages[operation]);
68
+ }
69
+ log.info("cache:" + this.name, operation, (key ? key + " " : "") + messages[operation]);
70
+ }
71
+ /**
72
+ * Get time to live value
73
+ */
74
+ get ttl() {
75
+ return this.options.ttl !== undefined ? this.options.ttl : Infinity;
76
+ }
77
+ /**
78
+ * Get time to live value in milliseconds
79
+ */
80
+ getTtl(ttl = this.ttl) {
81
+ if (ttl) {
82
+ return new Date().getTime() + ttl * 1000;
83
+ }
84
+ }
85
+ /**
86
+ * Prepare data for storage
87
+ */
88
+ prepareDataForStorage(data, ttl) {
89
+ const preparedData = {
90
+ data,
91
+ };
92
+ if (ttl) {
93
+ preparedData.ttl = ttl;
94
+ preparedData.expiresAt = this.getTtl(ttl);
95
+ }
96
+ return preparedData;
97
+ }
98
+ /**
99
+ * Parse fetched data from cache
100
+ */
101
+ async parseCachedData(key, data) {
102
+ this.log("fetched", key);
103
+ if (data.expiresAt && data.expiresAt < Date.now()) {
104
+ console.log("Expired key", key);
105
+ this.remove(key);
106
+ return null;
107
+ }
108
+ return data.data || null;
109
+ }
110
+ /**
111
+ * {@inheritdoc}
112
+ */
113
+ async connect() {
114
+ this.log("connecting");
115
+ this.log("connected");
116
+ }
117
+ /**
118
+ * {@inheritdoc}
119
+ */
120
+ async disconnect() {
121
+ this.log("disconnected");
122
+ }
123
+ }export{BaseCacheDriver};//# sourceMappingURL=base-cache-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-cache-driver.js","sources":["../../src/drivers/base-cache-driver.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { GenericObject } from "@mongez/reinforcements";
2
+ import { CacheDriver, FileCacheOptions } from "../types";
3
+ import { BaseCacheDriver } from "./base-cache-driver";
4
+ export declare class FileCacheDriver extends BaseCacheDriver<FileCacheDriver, FileCacheOptions> implements CacheDriver<FileCacheDriver, FileCacheOptions> {
5
+ /**
6
+ * {@inheritdoc}
7
+ */
8
+ name: string;
9
+ /**
10
+ * Get the cache directory
11
+ */
12
+ get directory(): string;
13
+ /**
14
+ * Get file name
15
+ */
16
+ get fileName(): string;
17
+ /**
18
+ * {@inheritdoc}
19
+ */
20
+ removeNamespace(namespace: string): Promise<this>;
21
+ /**
22
+ * {@inheritdoc}
23
+ */
24
+ set(key: string | GenericObject, value: any, ttl?: number): Promise<this>;
25
+ /**
26
+ * {@inheritdoc}
27
+ */
28
+ get(key: string | GenericObject): Promise<any>;
29
+ /**
30
+ * {@inheritdoc}
31
+ */
32
+ remove(key: string | GenericObject): Promise<void>;
33
+ /**
34
+ * {@inheritdoc}
35
+ */
36
+ flush(): Promise<void>;
37
+ /**
38
+ * {@inheritdoc}
39
+ */
40
+ connect(): Promise<void>;
41
+ }
42
+ //# sourceMappingURL=file-cache-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-cache-driver.d.ts","sourceRoot":"","sources":["../../src/drivers/file-cache-driver.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,qBAAa,eACX,SAAQ,eAAe,CAAC,eAAe,EAAE,gBAAgB,CACzD,YAAW,WAAW,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAEzD;;OAEG;IACI,IAAI,SAAU;IAErB;;OAEG;IACH,IAAW,SAAS,WAUnB;IAED;;OAEG;IACH,IAAW,QAAQ,WAQlB;IAED;;OAEG;IACU,eAAe,CAAC,SAAS,EAAE,MAAM;IAc9C;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM;IAkBtE;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa;IAoB5C;;OAEG;IACU,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa;IAe/C;;OAEG;IACU,KAAK;IAYlB;;OAEG;IACU,OAAO;CAKrB"}
@@ -0,0 +1,106 @@
1
+ import {removeDirectoryAsync,ensureDirectoryAsync,putJsonFileAsync,getJsonFileAsync}from'@mongez/fs';import path from'path';import {BaseCacheDriver}from'./base-cache-driver.js';class FileCacheDriver extends BaseCacheDriver {
2
+ /**
3
+ * {@inheritdoc}
4
+ */
5
+ name = "file";
6
+ /**
7
+ * Get the cache directory
8
+ */
9
+ get directory() {
10
+ const directory = this.options.directory;
11
+ if (typeof directory === "function") {
12
+ return directory();
13
+ }
14
+ throw new Error("Cache directory is not defined, please define it in the file driver options");
15
+ }
16
+ /**
17
+ * Get file name
18
+ */
19
+ get fileName() {
20
+ const fileName = this.options.fileName;
21
+ if (typeof fileName === "function") {
22
+ return fileName();
23
+ }
24
+ return "cache.json";
25
+ }
26
+ /**
27
+ * {@inheritdoc}
28
+ */
29
+ async removeNamespace(namespace) {
30
+ this.log("cleared", namespace);
31
+ try {
32
+ await removeDirectoryAsync(path.resolve(this.directory, namespace));
33
+ this.log("cleared", namespace);
34
+ }
35
+ catch (error) {
36
+ //
37
+ }
38
+ return this;
39
+ }
40
+ /**
41
+ * {@inheritdoc}
42
+ */
43
+ async set(key, value, ttl) {
44
+ key = await this.parseKey(key);
45
+ this.log("caching", key);
46
+ const data = this.prepareDataForStorage(value, ttl);
47
+ const fileDirectory = path.resolve(this.directory, key);
48
+ await ensureDirectoryAsync(fileDirectory);
49
+ await putJsonFileAsync(path.resolve(fileDirectory, this.fileName), data);
50
+ this.log("cached", key);
51
+ return this;
52
+ }
53
+ /**
54
+ * {@inheritdoc}
55
+ */
56
+ async get(key) {
57
+ const parsedKey = await this.parseKey(key);
58
+ this.log("fetching", parsedKey);
59
+ const fileDirectory = path.resolve(this.directory, parsedKey);
60
+ try {
61
+ const value = await getJsonFileAsync(path.resolve(fileDirectory, this.fileName));
62
+ return this.parseCachedData(parsedKey, value);
63
+ }
64
+ catch (error) {
65
+ this.log("notFound", parsedKey);
66
+ this.remove(key);
67
+ return null;
68
+ }
69
+ }
70
+ /**
71
+ * {@inheritdoc}
72
+ */
73
+ async remove(key) {
74
+ const parsedKey = await this.parseKey(key);
75
+ this.log("removing", parsedKey);
76
+ const fileDirectory = path.resolve(this.directory, parsedKey);
77
+ try {
78
+ await removeDirectoryAsync(fileDirectory);
79
+ this.log("removed", parsedKey);
80
+ }
81
+ catch (error) {
82
+ //
83
+ }
84
+ }
85
+ /**
86
+ * {@inheritdoc}
87
+ */
88
+ async flush() {
89
+ this.log("flushing");
90
+ if (this.options.globalPrefix) {
91
+ await this.removeNamespace("");
92
+ }
93
+ else {
94
+ await removeDirectoryAsync(this.directory);
95
+ }
96
+ this.log("flushed");
97
+ }
98
+ /**
99
+ * {@inheritdoc}
100
+ */
101
+ async connect() {
102
+ this.log("connecting");
103
+ await ensureDirectoryAsync(this.directory);
104
+ this.log("connected");
105
+ }
106
+ }export{FileCacheDriver};//# sourceMappingURL=file-cache-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-cache-driver.js","sources":["../../src/drivers/file-cache-driver.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from "./base-cache-driver";
2
+ export * from "./file-cache-driver";
3
+ export * from "./lru-memory-cache-driver";
4
+ export * from "./memory-cache-driver";
5
+ export * from "./memory-extended-cache-driver";
6
+ export * from "./null-cache-driver";
7
+ export * from "./redis-cache-driver";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drivers/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,84 @@
1
+ import { GenericObject } from "@mongez/reinforcements";
2
+ import { CacheDriver, LRUMemoryCacheOptions } from "../types";
3
+ import { BaseCacheDriver } from "./base-cache-driver";
4
+ declare class CacheNode {
5
+ key: string;
6
+ value: any;
7
+ next: CacheNode | null;
8
+ prev: CacheNode | null;
9
+ constructor(key: string, value: any);
10
+ }
11
+ /**
12
+ * LRU Memory Cache Driver
13
+ * The concept of LRU is to remove the least recently used data
14
+ * whenever the cache is full
15
+ * The question that resides here is how to tell the cache is full?
16
+ */
17
+ export declare class LRUMemoryCacheDriver extends BaseCacheDriver<LRUMemoryCacheDriver, LRUMemoryCacheOptions> implements CacheDriver<LRUMemoryCacheDriver, LRUMemoryCacheOptions> {
18
+ /**
19
+ * {@inheritdoc}
20
+ */
21
+ name: string;
22
+ /**
23
+ * Cache map
24
+ */
25
+ protected cache: Map<string, CacheNode>;
26
+ /**
27
+ * Head of the cache
28
+ */
29
+ protected head: CacheNode;
30
+ /**
31
+ * Tail of the cache
32
+ */
33
+ protected tail: CacheNode;
34
+ /**
35
+ * {@inheritdoc}
36
+ */
37
+ constructor();
38
+ /**
39
+ * Initialize the cache
40
+ */
41
+ init(): void;
42
+ /**
43
+ * {@inheritdoc}
44
+ */
45
+ removeNamespace(_namespace: string): Promise<void>;
46
+ /**
47
+ * {@inheritdoc}
48
+ */
49
+ set(key: string | GenericObject, value: any, _ttl?: number): Promise<this>;
50
+ /**
51
+ * Move the node to the head
52
+ */
53
+ protected moveHead(node: CacheNode): void;
54
+ /**
55
+ * Remove the node from the cache
56
+ */
57
+ protected removeNode(node: CacheNode): void;
58
+ /**
59
+ * Add the node to the head
60
+ */
61
+ protected addNode(node: CacheNode): void;
62
+ /**
63
+ * Remove the tail node
64
+ */
65
+ protected removeTail(): void;
66
+ /**
67
+ * {@inheritdoc}
68
+ */
69
+ get(key: string | GenericObject): Promise<any>;
70
+ /**
71
+ * {@inheritdoc}
72
+ */
73
+ remove(key: string | GenericObject): Promise<void>;
74
+ /**
75
+ * {@inheritdoc}
76
+ */
77
+ flush(): Promise<void>;
78
+ /**
79
+ * Get lru capacity
80
+ */
81
+ get capacity(): number;
82
+ }
83
+ export {};
84
+ //# sourceMappingURL=lru-memory-cache-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lru-memory-cache-driver.d.ts","sourceRoot":"","sources":["../../src/drivers/lru-memory-cache-driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,cAAM,SAAS;IAIJ,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,GAAG;IAJZ,IAAI,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC9B,IAAI,EAAE,SAAS,GAAG,IAAI,CAAQ;gBAE5B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,GAAG;CAIpB;AAED;;;;;GAKG;AACH,qBAAa,oBACX,SAAQ,eAAe,CAAC,oBAAoB,EAAE,qBAAqB,CACnE,YAAW,WAAW,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;IAEnE;;OAEG;IACI,IAAI,SAAS;IAEpB;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAa;IAEpD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,SAAS,CAA2B;IAEpD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,SAAS,CAA2B;IAEpD;;OAEG;;IAOH;;OAEG;IACI,IAAI;IAKX;;OAEG;IACU,eAAe,CAAC,UAAU,EAAE,MAAM;IAI/C;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM;IA2BvE;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS;IAKlC;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS;IAKpC;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS;IAOjC;;OAEG;IACH,SAAS,CAAC,UAAU;IAQpB;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa;IAmB5C;;OAEG;IACU,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa;IAe/C;;OAEG;IACU,KAAK;IAUlB;;OAEG;IACH,IAAW,QAAQ,WAElB;CACF"}
@@ -0,0 +1,151 @@
1
+ import {BaseCacheDriver}from'./base-cache-driver.js';class CacheNode {
2
+ key;
3
+ value;
4
+ next = null;
5
+ prev = null;
6
+ constructor(key, value) {
7
+ this.key = key;
8
+ this.value = value;
9
+ //
10
+ }
11
+ }
12
+ /**
13
+ * LRU Memory Cache Driver
14
+ * The concept of LRU is to remove the least recently used data
15
+ * whenever the cache is full
16
+ * The question that resides here is how to tell the cache is full?
17
+ */
18
+ class LRUMemoryCacheDriver extends BaseCacheDriver {
19
+ /**
20
+ * {@inheritdoc}
21
+ */
22
+ name = "lru";
23
+ /**
24
+ * Cache map
25
+ */
26
+ cache = new Map();
27
+ /**
28
+ * Head of the cache
29
+ */
30
+ head = new CacheNode("", null);
31
+ /**
32
+ * Tail of the cache
33
+ */
34
+ tail = new CacheNode("", null);
35
+ /**
36
+ * {@inheritdoc}
37
+ */
38
+ constructor() {
39
+ super();
40
+ this.init();
41
+ }
42
+ /**
43
+ * Initialize the cache
44
+ */
45
+ init() {
46
+ this.head.next = this.tail;
47
+ this.tail.prev = this.head;
48
+ }
49
+ /**
50
+ * {@inheritdoc}
51
+ */
52
+ async removeNamespace(_namespace) {
53
+ throw new Error("Namespace is not supported in LRU cache driver.");
54
+ }
55
+ /**
56
+ * {@inheritdoc}
57
+ */
58
+ async set(key, value, _ttl) {
59
+ key = await this.parseKey(key);
60
+ this.log("caching", key);
61
+ const node = this.cache.get(key);
62
+ if (node) {
63
+ node.value = value;
64
+ this.moveHead(node);
65
+ }
66
+ else {
67
+ const node = new CacheNode(key, value);
68
+ this.cache.set(key, node);
69
+ this.addNode(node);
70
+ if (this.cache.size > this.capacity) {
71
+ this.removeTail();
72
+ }
73
+ }
74
+ this.log("cached", key);
75
+ return this;
76
+ }
77
+ /**
78
+ * Move the node to the head
79
+ */
80
+ moveHead(node) {
81
+ this.removeNode(node);
82
+ this.addNode(node);
83
+ }
84
+ /**
85
+ * Remove the node from the cache
86
+ */
87
+ removeNode(node) {
88
+ node.prev.next = node.next;
89
+ node.next.prev = node.prev;
90
+ }
91
+ /**
92
+ * Add the node to the head
93
+ */
94
+ addNode(node) {
95
+ node.next = this.head.next;
96
+ node.prev = this.head;
97
+ this.head.next.prev = node;
98
+ this.head.next = node;
99
+ }
100
+ /**
101
+ * Remove the tail node
102
+ */
103
+ removeTail() {
104
+ const node = this.tail.prev;
105
+ this.removeNode(node);
106
+ this.cache.delete(node.key);
107
+ }
108
+ /**
109
+ * {@inheritdoc}
110
+ */
111
+ async get(key) {
112
+ const parsedKey = await this.parseKey(key);
113
+ this.log("fetching", parsedKey);
114
+ const node = this.cache.get(parsedKey);
115
+ if (!node) {
116
+ this.log("notFound", parsedKey);
117
+ return null;
118
+ }
119
+ this.moveHead(node);
120
+ this.log("fetched", parsedKey);
121
+ return node.value;
122
+ }
123
+ /**
124
+ * {@inheritdoc}
125
+ */
126
+ async remove(key) {
127
+ const parsedKey = await this.parseKey(key);
128
+ this.log("removing", parsedKey);
129
+ const node = this.cache.get(parsedKey);
130
+ if (node) {
131
+ this.removeNode(node);
132
+ this.cache.delete(parsedKey);
133
+ }
134
+ this.log("removed", parsedKey);
135
+ }
136
+ /**
137
+ * {@inheritdoc}
138
+ */
139
+ async flush() {
140
+ this.log("flushing");
141
+ this.cache.clear();
142
+ this.init();
143
+ this.log("flushed");
144
+ }
145
+ /**
146
+ * Get lru capacity
147
+ */
148
+ get capacity() {
149
+ return this.options.capacity || 1000;
150
+ }
151
+ }export{LRUMemoryCacheDriver};//# sourceMappingURL=lru-memory-cache-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lru-memory-cache-driver.js","sources":["../../src/drivers/lru-memory-cache-driver.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}