@arikajs/cache 0.0.3 → 0.0.5

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 (92) hide show
  1. package/README.md +62 -118
  2. package/dist/CacheLock.d.ts +38 -0
  3. package/dist/CacheLock.d.ts.map +1 -0
  4. package/dist/CacheLock.js +100 -0
  5. package/dist/CacheLock.js.map +1 -0
  6. package/dist/CacheManager.d.ts +8 -1
  7. package/dist/CacheManager.d.ts.map +1 -1
  8. package/dist/CacheManager.js +17 -2
  9. package/dist/CacheManager.js.map +1 -1
  10. package/dist/Contracts/Store.d.ts +4 -0
  11. package/dist/Contracts/Store.d.ts.map +1 -1
  12. package/dist/Drivers/DatabaseDriver.d.ts +6 -1
  13. package/dist/Drivers/DatabaseDriver.d.ts.map +1 -1
  14. package/dist/Drivers/DatabaseDriver.js +70 -10
  15. package/dist/Drivers/DatabaseDriver.js.map +1 -1
  16. package/dist/Drivers/FileDriver.d.ts +19 -0
  17. package/dist/Drivers/FileDriver.d.ts.map +1 -0
  18. package/dist/Drivers/FileDriver.js +111 -0
  19. package/dist/Drivers/FileDriver.js.map +1 -0
  20. package/dist/Drivers/MemoryDriver.d.ts +4 -0
  21. package/dist/Drivers/MemoryDriver.d.ts.map +1 -1
  22. package/dist/Drivers/MemoryDriver.js +25 -0
  23. package/dist/Drivers/MemoryDriver.js.map +1 -1
  24. package/dist/Drivers/RedisDriver.d.ts +4 -0
  25. package/dist/Drivers/RedisDriver.d.ts.map +1 -1
  26. package/dist/Drivers/RedisDriver.js +46 -0
  27. package/dist/Drivers/RedisDriver.js.map +1 -1
  28. package/dist/Repository.d.ts +6 -0
  29. package/dist/Repository.d.ts.map +1 -1
  30. package/dist/Repository.js +42 -0
  31. package/dist/Repository.js.map +1 -1
  32. package/dist/TagSet.d.ts +24 -0
  33. package/dist/TagSet.d.ts.map +1 -0
  34. package/dist/TagSet.js +46 -0
  35. package/dist/TagSet.js.map +1 -0
  36. package/dist/TaggedStore.d.ts +21 -0
  37. package/dist/TaggedStore.d.ts.map +1 -0
  38. package/dist/TaggedStore.js +100 -0
  39. package/dist/TaggedStore.js.map +1 -0
  40. package/dist/index.d.ts +5 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +6 -0
  43. package/dist/index.js.map +1 -1
  44. package/dist/src/CacheLock.d.ts +38 -0
  45. package/dist/src/CacheLock.d.ts.map +1 -0
  46. package/dist/src/CacheLock.js +100 -0
  47. package/dist/src/CacheLock.js.map +1 -0
  48. package/dist/src/CacheManager.d.ts +35 -0
  49. package/dist/src/CacheManager.d.ts.map +1 -0
  50. package/dist/src/CacheManager.js +79 -0
  51. package/dist/src/CacheManager.js.map +1 -0
  52. package/dist/src/Contracts/Store.d.ts +15 -0
  53. package/dist/src/Contracts/Store.d.ts.map +1 -0
  54. package/dist/src/Contracts/Store.js +3 -0
  55. package/dist/src/Contracts/Store.js.map +1 -0
  56. package/dist/src/Drivers/DatabaseDriver.d.ts +21 -0
  57. package/dist/src/Drivers/DatabaseDriver.d.ts.map +1 -0
  58. package/dist/src/Drivers/DatabaseDriver.js +146 -0
  59. package/dist/src/Drivers/DatabaseDriver.js.map +1 -0
  60. package/dist/src/Drivers/FileDriver.d.ts +19 -0
  61. package/dist/src/Drivers/FileDriver.d.ts.map +1 -0
  62. package/dist/src/Drivers/FileDriver.js +111 -0
  63. package/dist/src/Drivers/FileDriver.js.map +1 -0
  64. package/dist/src/Drivers/MemoryDriver.d.ts +22 -0
  65. package/dist/src/Drivers/MemoryDriver.d.ts.map +1 -0
  66. package/dist/src/Drivers/MemoryDriver.js +78 -0
  67. package/dist/src/Drivers/MemoryDriver.js.map +1 -0
  68. package/dist/src/Drivers/RedisDriver.d.ts +24 -0
  69. package/dist/src/Drivers/RedisDriver.d.ts.map +1 -0
  70. package/dist/src/Drivers/RedisDriver.js +124 -0
  71. package/dist/src/Drivers/RedisDriver.js.map +1 -0
  72. package/dist/src/Repository.d.ts +25 -0
  73. package/dist/src/Repository.d.ts.map +1 -0
  74. package/dist/src/Repository.js +110 -0
  75. package/dist/src/Repository.js.map +1 -0
  76. package/dist/src/TagSet.d.ts +24 -0
  77. package/dist/src/TagSet.d.ts.map +1 -0
  78. package/dist/src/TagSet.js +46 -0
  79. package/dist/src/TagSet.js.map +1 -0
  80. package/dist/src/TaggedStore.d.ts +21 -0
  81. package/dist/src/TaggedStore.d.ts.map +1 -0
  82. package/dist/src/TaggedStore.js +100 -0
  83. package/dist/src/TaggedStore.js.map +1 -0
  84. package/dist/src/index.d.ts +29 -0
  85. package/dist/src/index.d.ts.map +1 -0
  86. package/dist/src/index.js +46 -0
  87. package/dist/src/index.js.map +1 -0
  88. package/dist/tests/Cache.test.d.ts +2 -0
  89. package/dist/tests/Cache.test.d.ts.map +1 -0
  90. package/dist/tests/Cache.test.js +126 -0
  91. package/dist/tests/Cache.test.js.map +1 -0
  92. package/package.json +7 -5
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DatabaseDriver = void 0;
4
+ class DatabaseDriver {
5
+ constructor(database, table, prefix = '', connection) {
6
+ this.database = database;
7
+ this.table = table;
8
+ this.prefix = prefix;
9
+ this.connection = connection;
10
+ }
11
+ async get(key) {
12
+ const cache = await this.database.table(this.table, this.connection)
13
+ .where('key', this.prefix + key)
14
+ .first();
15
+ if (!cache) {
16
+ return null;
17
+ }
18
+ if (cache.expiration && cache.expiration <= Math.floor(Date.now() / 1000)) {
19
+ await this.forget(key);
20
+ return null;
21
+ }
22
+ return JSON.parse(cache.value);
23
+ }
24
+ async put(key, value, seconds) {
25
+ const expiration = Math.floor(Date.now() / 1000) + seconds;
26
+ const jsonValue = JSON.stringify(value);
27
+ const prefixedKey = this.prefix + key;
28
+ const exists = await this.database.table(this.table, this.connection).where('key', prefixedKey).exists();
29
+ if (exists) {
30
+ await this.database.table(this.table, this.connection)
31
+ .where('key', prefixedKey)
32
+ .update({
33
+ value: jsonValue,
34
+ expiration: expiration
35
+ });
36
+ }
37
+ else {
38
+ await this.database.table(this.table, this.connection).insert({
39
+ key: prefixedKey,
40
+ value: jsonValue,
41
+ expiration: expiration
42
+ });
43
+ }
44
+ }
45
+ async increment(key, value = 1) {
46
+ const current = await this.get(key) || 0;
47
+ const newValue = current + value;
48
+ await this.forever(key, newValue);
49
+ return newValue;
50
+ }
51
+ async decrement(key, value = 1) {
52
+ return this.increment(key, -value);
53
+ }
54
+ async forever(key, value) {
55
+ const jsonValue = JSON.stringify(value);
56
+ const prefixedKey = this.prefix + key;
57
+ const exists = await this.database.table(this.table, this.connection).where('key', prefixedKey).exists();
58
+ if (exists) {
59
+ await this.database.table(this.table, this.connection)
60
+ .where('key', prefixedKey)
61
+ .update({
62
+ value: jsonValue,
63
+ expiration: null
64
+ });
65
+ }
66
+ else {
67
+ await this.database.table(this.table, this.connection).insert({
68
+ key: prefixedKey,
69
+ value: jsonValue,
70
+ expiration: null
71
+ });
72
+ }
73
+ }
74
+ async forget(key) {
75
+ await this.database.table(this.table, this.connection)
76
+ .where('key', this.prefix + key)
77
+ .delete();
78
+ }
79
+ async flush() {
80
+ await this.database.table(this.table, this.connection).delete();
81
+ }
82
+ async add(key, value, seconds) {
83
+ const prefixedKey = this.prefix + key;
84
+ const jsonValue = JSON.stringify(value);
85
+ const expiration = Math.floor(Date.now() / 1000) + seconds;
86
+ // Try updating an already expired key first
87
+ const updated = await this.database.table(this.table, this.connection)
88
+ .where('key', prefixedKey)
89
+ .where('expiration', '<=', Math.floor(Date.now() / 1000))
90
+ .update({
91
+ value: jsonValue,
92
+ expiration: expiration
93
+ });
94
+ if (updated > 0)
95
+ return true;
96
+ try {
97
+ await this.database.table(this.table, this.connection).insert({
98
+ key: prefixedKey,
99
+ value: jsonValue,
100
+ expiration: expiration
101
+ });
102
+ return true;
103
+ }
104
+ catch (e) {
105
+ return false;
106
+ }
107
+ }
108
+ async getMultiple(keys) {
109
+ const results = {};
110
+ for (const k of keys)
111
+ results[k] = null;
112
+ if (keys.length === 0)
113
+ return results;
114
+ const prefixedKeys = keys.map(k => this.prefix + k);
115
+ const rows = await this.database.table(this.table, this.connection).whereIn('key', prefixedKeys);
116
+ const now = Math.floor(Date.now() / 1000);
117
+ const expiredKeys = [];
118
+ for (const row of rows) {
119
+ const originalKey = row.key.substring(this.prefix.length);
120
+ if (row.expiration && row.expiration <= now) {
121
+ expiredKeys.push(originalKey);
122
+ }
123
+ else {
124
+ results[originalKey] = JSON.parse(row.value);
125
+ }
126
+ }
127
+ if (expiredKeys.length > 0) {
128
+ await this.forgetMultiple(expiredKeys);
129
+ }
130
+ return results;
131
+ }
132
+ async putMultiple(values, seconds) {
133
+ await Promise.all(Object.entries(values).map(([key, value]) => this.put(key, value, seconds)));
134
+ }
135
+ async forgetMultiple(keys) {
136
+ if (keys.length === 0)
137
+ return;
138
+ const prefixedKeys = keys.map(k => this.prefix + k);
139
+ await this.database.table(this.table, this.connection).whereIn('key', prefixedKeys).delete();
140
+ }
141
+ getPrefix() {
142
+ return this.prefix;
143
+ }
144
+ }
145
+ exports.DatabaseDriver = DatabaseDriver;
146
+ //# sourceMappingURL=DatabaseDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabaseDriver.js","sourceRoot":"","sources":["../../../src/Drivers/DatabaseDriver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { Store } from '../Contracts/Store';
2
+ export declare class FileDriver implements Store {
3
+ protected prefix: string;
4
+ protected directory: string;
5
+ constructor(directory: string, prefix?: string);
6
+ get(key: string): Promise<any>;
7
+ put(key: string, value: any, seconds: number): Promise<void>;
8
+ increment(key: string, value?: number): Promise<number>;
9
+ decrement(key: string, value?: number): Promise<number>;
10
+ forever(key: string, value: any): Promise<void>;
11
+ forget(key: string): Promise<void>;
12
+ flush(): Promise<void>;
13
+ getPrefix(): string;
14
+ protected getPath(key: string): string;
15
+ protected ensureDirectoryExists(filePath?: string): void;
16
+ protected deleteFolderRecursive(dir: string): void;
17
+ protected sha1(str: string): string;
18
+ }
19
+ //# sourceMappingURL=FileDriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileDriver.d.ts","sourceRoot":"","sources":["../../../src/Drivers/FileDriver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,qBAAa,UAAW,YAAW,KAAK;IAGL,SAAS,CAAC,MAAM,EAAE,MAAM;IAFvD,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEhB,SAAS,EAAE,MAAM,EAAY,MAAM,GAAE,MAAW;IAK/C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAsB9B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB5D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAO1D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,SAAS,IAAI,MAAM;IAI1B,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAStC,SAAS,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM;IAOjD,SAAS,CAAC,qBAAqB,CAAC,GAAG,EAAE,MAAM;IAiB3C,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAItC"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FileDriver = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ class FileDriver {
10
+ constructor(directory, prefix = '') {
11
+ this.prefix = prefix;
12
+ this.directory = directory;
13
+ this.ensureDirectoryExists();
14
+ }
15
+ async get(key) {
16
+ const path = this.getPath(key);
17
+ if (!fs_1.default.existsSync(path)) {
18
+ return null;
19
+ }
20
+ try {
21
+ const content = fs_1.default.readFileSync(path, 'utf8');
22
+ const data = JSON.parse(content);
23
+ if (data.expiration && Date.now() / 1000 > data.expiration) {
24
+ await this.forget(key);
25
+ return null;
26
+ }
27
+ return data.value;
28
+ }
29
+ catch (e) {
30
+ return null;
31
+ }
32
+ }
33
+ async put(key, value, seconds) {
34
+ const path = this.getPath(key);
35
+ const expiration = seconds > 0 ? (Date.now() / 1000) + seconds : 0;
36
+ const data = {
37
+ value,
38
+ expiration
39
+ };
40
+ try {
41
+ this.ensureDirectoryExists(path);
42
+ fs_1.default.writeFileSync(path, JSON.stringify(data), 'utf8');
43
+ }
44
+ catch (e) {
45
+ // Silently fail or log
46
+ }
47
+ }
48
+ async increment(key, value = 1) {
49
+ const current = await this.get(key);
50
+ const newValue = (typeof current === 'number' ? current : 0) + value;
51
+ await this.put(key, newValue, 0);
52
+ return newValue;
53
+ }
54
+ async decrement(key, value = 1) {
55
+ return this.increment(key, -value);
56
+ }
57
+ async forever(key, value) {
58
+ await this.put(key, value, 0);
59
+ }
60
+ async forget(key) {
61
+ const path = this.getPath(key);
62
+ if (fs_1.default.existsSync(path)) {
63
+ fs_1.default.unlinkSync(path);
64
+ }
65
+ }
66
+ async flush() {
67
+ if (fs_1.default.existsSync(this.directory)) {
68
+ this.deleteFolderRecursive(this.directory);
69
+ this.ensureDirectoryExists();
70
+ }
71
+ }
72
+ getPrefix() {
73
+ return this.prefix;
74
+ }
75
+ getPath(key) {
76
+ // Simple hash-based partitioning like Laravel: 2 levels deep
77
+ const hash = this.sha1(this.prefix + key);
78
+ const folder1 = hash.substring(0, 2);
79
+ const folder2 = hash.substring(2, 4);
80
+ return path_1.default.join(this.directory, folder1, folder2, hash);
81
+ }
82
+ ensureDirectoryExists(filePath) {
83
+ const dir = filePath ? path_1.default.dirname(filePath) : this.directory;
84
+ if (!fs_1.default.existsSync(dir)) {
85
+ fs_1.default.mkdirSync(dir, { recursive: true });
86
+ }
87
+ }
88
+ deleteFolderRecursive(dir) {
89
+ if (fs_1.default.existsSync(dir)) {
90
+ fs_1.default.readdirSync(dir).forEach((file) => {
91
+ const curPath = path_1.default.join(dir, file);
92
+ if (fs_1.default.lstatSync(curPath).isDirectory()) {
93
+ this.deleteFolderRecursive(curPath);
94
+ }
95
+ else {
96
+ fs_1.default.unlinkSync(curPath);
97
+ }
98
+ });
99
+ // Don't delete the root directory itself if it's the cache root
100
+ if (dir !== this.directory) {
101
+ fs_1.default.rmdirSync(dir);
102
+ }
103
+ }
104
+ }
105
+ sha1(str) {
106
+ const crypto = require('crypto');
107
+ return crypto.createHash('sha1').update(str).digest('hex');
108
+ }
109
+ }
110
+ exports.FileDriver = FileDriver;
111
+ //# sourceMappingURL=FileDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileDriver.js","sourceRoot":"","sources":["../../../src/Drivers/FileDriver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { Store } from '../Contracts/Store';
2
+ interface CacheItem {
3
+ value: any;
4
+ expiresAt: number | null;
5
+ }
6
+ export declare class MemoryDriver implements Store {
7
+ protected storage: Map<string, CacheItem>;
8
+ get(key: string): Promise<any>;
9
+ put(key: string, value: any, seconds: number): Promise<void>;
10
+ increment(key: string, value?: number): Promise<number>;
11
+ decrement(key: string, value?: number): Promise<number>;
12
+ forever(key: string, value: any): Promise<void>;
13
+ forget(key: string): Promise<void>;
14
+ flush(): Promise<void>;
15
+ add(key: string, value: any, seconds: number): Promise<boolean>;
16
+ getMultiple(keys: string[]): Promise<Record<string, any>>;
17
+ putMultiple(values: Record<string, any>, seconds: number): Promise<void>;
18
+ forgetMultiple(keys: string[]): Promise<void>;
19
+ getPrefix(): string;
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=MemoryDriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryDriver.d.ts","sourceRoot":"","sources":["../../../src/Drivers/MemoryDriver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,UAAU,SAAS;IACf,KAAK,EAAE,GAAG,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,qBAAa,YAAa,YAAW,KAAK;IACtC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAa;IAEhD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAe9B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB1D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS/D,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAQzD,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxE,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD,SAAS,IAAI,MAAM;CAGtB"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MemoryDriver = void 0;
4
+ class MemoryDriver {
5
+ constructor() {
6
+ this.storage = new Map();
7
+ }
8
+ async get(key) {
9
+ const item = this.storage.get(key);
10
+ if (!item) {
11
+ return null;
12
+ }
13
+ if (item.expiresAt !== null && item.expiresAt < Date.now()) {
14
+ this.forget(key);
15
+ return null;
16
+ }
17
+ return item.value;
18
+ }
19
+ async put(key, value, seconds) {
20
+ const expiresAt = Date.now() + (seconds * 1000);
21
+ this.storage.set(key, { value, expiresAt });
22
+ }
23
+ async increment(key, value = 1) {
24
+ const current = await this.get(key) || 0;
25
+ const newValue = current + value;
26
+ // We set it forever if it was already existing or start now.
27
+ // Usually increment doesn't change TTL if exists, or sets a default.
28
+ // For simplicity, we just update the value.
29
+ const item = this.storage.get(key);
30
+ this.storage.set(key, {
31
+ value: newValue,
32
+ expiresAt: item ? item.expiresAt : null
33
+ });
34
+ return newValue;
35
+ }
36
+ async decrement(key, value = 1) {
37
+ return this.increment(key, -value);
38
+ }
39
+ async forever(key, value) {
40
+ this.storage.set(key, { value, expiresAt: null });
41
+ }
42
+ async forget(key) {
43
+ this.storage.delete(key);
44
+ }
45
+ async flush() {
46
+ this.storage.clear();
47
+ }
48
+ async add(key, value, seconds) {
49
+ const item = this.storage.get(key);
50
+ if (item && (item.expiresAt === null || item.expiresAt > Date.now())) {
51
+ return false;
52
+ }
53
+ await this.put(key, value, seconds);
54
+ return true;
55
+ }
56
+ async getMultiple(keys) {
57
+ const results = {};
58
+ for (const key of keys) {
59
+ results[key] = await this.get(key);
60
+ }
61
+ return results;
62
+ }
63
+ async putMultiple(values, seconds) {
64
+ for (const [key, value] of Object.entries(values)) {
65
+ await this.put(key, value, seconds);
66
+ }
67
+ }
68
+ async forgetMultiple(keys) {
69
+ for (const key of keys) {
70
+ this.storage.delete(key);
71
+ }
72
+ }
73
+ getPrefix() {
74
+ return '';
75
+ }
76
+ }
77
+ exports.MemoryDriver = MemoryDriver;
78
+ //# sourceMappingURL=MemoryDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryDriver.js","sourceRoot":"","sources":["../../../src/Drivers/MemoryDriver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { Store } from '../Contracts/Store';
2
+ import Redis, { Cluster } from 'ioredis';
3
+ export declare class RedisDriver implements Store {
4
+ protected prefix: string;
5
+ protected redis: Redis | Cluster;
6
+ constructor(config: any, prefix?: string);
7
+ get(key: string): Promise<any>;
8
+ put(key: string, value: any, seconds: number): Promise<void>;
9
+ increment(key: string, value?: number): Promise<number>;
10
+ decrement(key: string, value?: number): Promise<number>;
11
+ forever(key: string, value: any): Promise<void>;
12
+ forget(key: string): Promise<void>;
13
+ flush(): Promise<void>;
14
+ add(key: string, value: any, seconds: number): Promise<boolean>;
15
+ getMultiple(keys: string[]): Promise<Record<string, any>>;
16
+ putMultiple(values: Record<string, any>, seconds: number): Promise<void>;
17
+ forgetMultiple(keys: string[]): Promise<void>;
18
+ getPrefix(): string;
19
+ /**
20
+ * Get the underlying Redis instance.
21
+ */
22
+ getRedis(): Redis | Cluster;
23
+ }
24
+ //# sourceMappingURL=RedisDriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedisDriver.d.ts","sourceRoot":"","sources":["../../../src/Drivers/RedisDriver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,EAAE,EAAE,OAAO,EAAgB,MAAM,SAAS,CAAC;AAEvD,qBAAa,WAAY,YAAW,KAAK;IAGZ,SAAS,CAAC,MAAM,EAAE,MAAM;IAFjD,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;gBAErB,MAAM,EAAE,GAAG,EAAY,MAAM,GAAE,MAAW;IA6BzC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAK9B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW/D,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAYzD,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBxE,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD,SAAS,IAAI,MAAM;IAI1B;;OAEG;IACI,QAAQ,IAAI,KAAK,GAAG,OAAO;CAGrC"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RedisDriver = void 0;
7
+ const ioredis_1 = __importDefault(require("ioredis"));
8
+ class RedisDriver {
9
+ constructor(config, prefix = '') {
10
+ this.prefix = prefix;
11
+ const mode = config.mode || 'standalone';
12
+ if (mode === 'cluster') {
13
+ this.redis = new ioredis_1.default.Cluster(config.nodes, {
14
+ redisOptions: {
15
+ password: config.password,
16
+ ...config.options
17
+ }
18
+ });
19
+ }
20
+ else if (mode === 'sentinel') {
21
+ this.redis = new ioredis_1.default({
22
+ sentinels: config.nodes,
23
+ name: config.name,
24
+ password: config.password,
25
+ db: config.database,
26
+ ...config.options
27
+ });
28
+ }
29
+ else {
30
+ this.redis = new ioredis_1.default({
31
+ host: config.host,
32
+ port: config.port,
33
+ password: config.password,
34
+ db: config.database,
35
+ ...config.options
36
+ });
37
+ }
38
+ }
39
+ async get(key) {
40
+ const value = await this.redis.get(this.prefix + key);
41
+ return value ? JSON.parse(value) : null;
42
+ }
43
+ async put(key, value, seconds) {
44
+ const serializedValue = JSON.stringify(value);
45
+ if (seconds > 0) {
46
+ await this.redis.set(this.prefix + key, serializedValue, 'EX', seconds);
47
+ }
48
+ else {
49
+ await this.forever(key, value);
50
+ }
51
+ }
52
+ async increment(key, value = 1) {
53
+ return await this.redis.incrby(this.prefix + key, value);
54
+ }
55
+ async decrement(key, value = 1) {
56
+ return await this.redis.decrby(this.prefix + key, value);
57
+ }
58
+ async forever(key, value) {
59
+ await this.redis.set(this.prefix + key, JSON.stringify(value));
60
+ }
61
+ async forget(key) {
62
+ await this.redis.del(this.prefix + key);
63
+ }
64
+ async flush() {
65
+ await this.redis.flushdb();
66
+ }
67
+ async add(key, value, seconds) {
68
+ const serializedValue = JSON.stringify(value);
69
+ let result;
70
+ if (seconds > 0) {
71
+ result = await this.redis.set(this.prefix + key, serializedValue, 'EX', seconds, 'NX');
72
+ }
73
+ else {
74
+ result = await this.redis.set(this.prefix + key, serializedValue, 'NX');
75
+ }
76
+ return result === 'OK';
77
+ }
78
+ async getMultiple(keys) {
79
+ if (keys.length === 0)
80
+ return {};
81
+ const prefixedKeys = keys.map(k => this.prefix + k);
82
+ const values = await this.redis.mget(...prefixedKeys);
83
+ const result = {};
84
+ for (let i = 0; i < keys.length; i++) {
85
+ result[keys[i]] = values[i] ? JSON.parse(values[i]) : null;
86
+ }
87
+ return result;
88
+ }
89
+ async putMultiple(values, seconds) {
90
+ if (Object.keys(values).length === 0)
91
+ return;
92
+ if (seconds > 0) {
93
+ const pipeline = this.redis.pipeline();
94
+ for (const [key, value] of Object.entries(values)) {
95
+ pipeline.set(this.prefix + key, JSON.stringify(value), 'EX', seconds);
96
+ }
97
+ await pipeline.exec();
98
+ }
99
+ else {
100
+ const multiValues = {};
101
+ for (const [key, value] of Object.entries(values)) {
102
+ multiValues[this.prefix + key] = JSON.stringify(value);
103
+ }
104
+ await this.redis.mset(multiValues);
105
+ }
106
+ }
107
+ async forgetMultiple(keys) {
108
+ if (keys.length === 0)
109
+ return;
110
+ const prefixedKeys = keys.map(k => this.prefix + k);
111
+ await this.redis.del(...prefixedKeys);
112
+ }
113
+ getPrefix() {
114
+ return this.prefix;
115
+ }
116
+ /**
117
+ * Get the underlying Redis instance.
118
+ */
119
+ getRedis() {
120
+ return this.redis;
121
+ }
122
+ }
123
+ exports.RedisDriver = RedisDriver;
124
+ //# sourceMappingURL=RedisDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedisDriver.js","sourceRoot":"","sources":["../../../src/Drivers/RedisDriver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { Store } from './Contracts/Store';
2
+ import { CacheLock } from './CacheLock';
3
+ export declare class Repository {
4
+ protected store: Store;
5
+ constructor(store: Store);
6
+ get(key: string, defaultValue?: any): Promise<any>;
7
+ has(key: string): Promise<boolean>;
8
+ put(key: string, value: any, seconds: number): Promise<void>;
9
+ add(key: string, value: any, seconds: number): Promise<boolean>;
10
+ increment(key: string, value?: number): Promise<number>;
11
+ decrement(key: string, value?: number): Promise<number>;
12
+ forever(key: string, value: any): Promise<void>;
13
+ remember(key: string, seconds: number, callback: () => Promise<any>): Promise<any>;
14
+ rememberForever(key: string, callback: () => Promise<any>): Promise<any>;
15
+ pull(key: string, defaultValue?: any): Promise<any>;
16
+ forget(key: string): Promise<void>;
17
+ flush(): Promise<void>;
18
+ getMultiple(keys: string[]): Promise<Record<string, any>>;
19
+ putMultiple(values: Record<string, any>, seconds: number): Promise<void>;
20
+ forgetMultiple(keys: string[]): Promise<void>;
21
+ lock(name: string, seconds?: number, owner?: string | null): CacheLock;
22
+ tags(names: string | string[]): Repository;
23
+ getStore(): Store;
24
+ }
25
+ //# sourceMappingURL=Repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Repository.d.ts","sourceRoot":"","sources":["../../src/Repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC,qBAAa,UAAU;IACP,SAAS,CAAC,KAAK,EAAE,KAAK;gBAAZ,KAAK,EAAE,KAAK;IAE5B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,GAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IAKxD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS/D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAalF,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAaxE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,GAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IAMzD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAazD,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxE,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWnD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAU,EAAE,KAAK,GAAE,MAAM,GAAG,IAAW,GAAG,SAAS;IAI/E,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU;IAK1C,QAAQ,IAAI,KAAK;CAGpB"}