@arikajs/cache 0.0.1
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/LICENSE +21 -0
- package/README.md +195 -0
- package/dist/CacheManager.d.ts +28 -0
- package/dist/CacheManager.d.ts.map +1 -0
- package/dist/CacheManager.js +64 -0
- package/dist/CacheManager.js.map +1 -0
- package/dist/Contracts/Store.d.ts +11 -0
- package/dist/Contracts/Store.d.ts.map +1 -0
- package/dist/Contracts/Store.js +3 -0
- package/dist/Contracts/Store.js.map +1 -0
- package/dist/Drivers/DatabaseDriver.d.ts +16 -0
- package/dist/Drivers/DatabaseDriver.d.ts.map +1 -0
- package/dist/Drivers/DatabaseDriver.js +86 -0
- package/dist/Drivers/DatabaseDriver.js.map +1 -0
- package/dist/Drivers/MemoryDriver.d.ts +18 -0
- package/dist/Drivers/MemoryDriver.d.ts.map +1 -0
- package/dist/Drivers/MemoryDriver.js +53 -0
- package/dist/Drivers/MemoryDriver.js.map +1 -0
- package/dist/Drivers/RedisDriver.d.ts +20 -0
- package/dist/Drivers/RedisDriver.d.ts.map +1 -0
- package/dist/Drivers/RedisDriver.js +78 -0
- package/dist/Drivers/RedisDriver.js.map +1 -0
- package/dist/Repository.d.ts +19 -0
- package/dist/Repository.d.ts.map +1 -0
- package/dist/Repository.js +68 -0
- package/dist/Repository.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/package.json +46 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ArikaJs
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
|
|
2
|
+
## Arika Cache
|
|
3
|
+
|
|
4
|
+
`@arikajs/cache` provides a simple, fast, and driver-based caching system for the ArikaJS framework.
|
|
5
|
+
|
|
6
|
+
It allows applications to store frequently accessed data in memory or external stores to improve performance and reduce repeated computation or database queries.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## ✨ Features
|
|
11
|
+
|
|
12
|
+
- **Unified cache API**: Consistent interface across all drivers
|
|
13
|
+
- **Multiple cache stores**: Support for various storage backends
|
|
14
|
+
- **Driver-based architecture**: Pluggable storage drivers
|
|
15
|
+
- **In-memory cache (v1)**: High-performance default storage
|
|
16
|
+
- **TTL (time-to-live) support**: Automatic expiration of cached items
|
|
17
|
+
- **Cache tagging**: Logical grouping of cache keys (planned)
|
|
18
|
+
- **TypeScript-first design**: Strong typing for keys and values
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 📦 Installation
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install @arikajs/cache
|
|
26
|
+
# or
|
|
27
|
+
yarn add @arikajs/cache
|
|
28
|
+
# or
|
|
29
|
+
pnpm add @arikajs/cache
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 🚀 Basic Usage
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
import { Cache } from '@arikajs/cache';
|
|
38
|
+
|
|
39
|
+
// Store a value for 60 seconds
|
|
40
|
+
await Cache.put('users.count', 150, 60);
|
|
41
|
+
|
|
42
|
+
// Retrieve a value
|
|
43
|
+
const count = await Cache.get('users.count');
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 🧹 Cache Helpers
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
// Get an item, or execute the callback and store the result if it doesn't exist
|
|
50
|
+
await Cache.remember('settings', 300, async () => {
|
|
51
|
+
return loadSettings();
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## ⚙️ Configuration
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
export default {
|
|
61
|
+
default: process.env.CACHE_STORE || 'database',
|
|
62
|
+
|
|
63
|
+
stores: {
|
|
64
|
+
memory: {
|
|
65
|
+
driver: 'memory',
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
database: {
|
|
69
|
+
driver: 'database',
|
|
70
|
+
table: 'cache',
|
|
71
|
+
connection: null,
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
prefix: process.env.CACHE_PREFIX || 'arika_cache',
|
|
76
|
+
};
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
| Driver | Status | Description |
|
|
82
|
+
| :--- | :--- | :--- |
|
|
83
|
+
| **Memory** | ✅ Supported | Default in-memory ephemeral storage |
|
|
84
|
+
| **Database** | ✅ Supported | Persistent cache using your database |
|
|
85
|
+
| **Redis** | ✅ Supported | High-performance distributed cache (Standalone, Sentinel, Cluster) |
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 🏎️ Redis Cache Setup
|
|
90
|
+
|
|
91
|
+
The Redis driver supports Standalone, Sentinel, and Cluster modes.
|
|
92
|
+
|
|
93
|
+
### 1. Install Redis Package
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
npm install ioredis
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 2. Configure Environment
|
|
100
|
+
|
|
101
|
+
Add Redis settings to your `.env` file:
|
|
102
|
+
|
|
103
|
+
```env
|
|
104
|
+
CACHE_STORE=redis
|
|
105
|
+
|
|
106
|
+
REDIS_HOST=127.0.0.1
|
|
107
|
+
REDIS_PASSWORD=null
|
|
108
|
+
REDIS_PORT=6379
|
|
109
|
+
REDIS_DB=0
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 3. Advanced Redis Configuration
|
|
113
|
+
|
|
114
|
+
ArikaJS supports Sentinel and Cluster modes. Configure these in `config/cache.ts`:
|
|
115
|
+
|
|
116
|
+
#### Sentinel Mode
|
|
117
|
+
```ts
|
|
118
|
+
redis: {
|
|
119
|
+
driver: 'redis',
|
|
120
|
+
connection: 'default',
|
|
121
|
+
mode: 'sentinel',
|
|
122
|
+
nodes: [
|
|
123
|
+
{ host: '127.0.0.1', port: 26379 },
|
|
124
|
+
{ host: '127.0.0.1', port: 26380 },
|
|
125
|
+
],
|
|
126
|
+
name: 'mymaster',
|
|
127
|
+
},
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
#### Cluster Mode
|
|
131
|
+
```ts
|
|
132
|
+
redis: {
|
|
133
|
+
driver: 'redis',
|
|
134
|
+
mode: 'cluster',
|
|
135
|
+
nodes: [
|
|
136
|
+
{ host: '127.0.0.1', port: 7000 },
|
|
137
|
+
{ host: '127.0.0.1', port: 7001 },
|
|
138
|
+
],
|
|
139
|
+
},
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 🛠 Database Cache Setup
|
|
145
|
+
|
|
146
|
+
To use the database driver, you need to create the `cache` table migration:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
arika cache:table
|
|
150
|
+
arika migrate
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 🔗 Integration
|
|
156
|
+
|
|
157
|
+
- **`@arikajs/http`** → response caching
|
|
158
|
+
- **`@arikajs/view`** → view fragments
|
|
159
|
+
- **`@arikajs/queue`** → cached jobs
|
|
160
|
+
- **`@arikajs/auth`** → session storage
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 🧠 Architecture (High Level)
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
cache/
|
|
168
|
+
├── src/
|
|
169
|
+
│ ├── CacheManager.ts
|
|
170
|
+
│ ├── Repository.ts
|
|
171
|
+
│ ├── Drivers/
|
|
172
|
+
│ │ ├── MemoryDriver.ts
|
|
173
|
+
│ │ ├── DatabaseDriver.ts
|
|
174
|
+
│ │ └── RedisDriver.ts
|
|
175
|
+
│ ├── Contracts/
|
|
176
|
+
│ │ └── Store.ts
|
|
177
|
+
│ └── index.ts
|
|
178
|
+
├── tests/
|
|
179
|
+
├── package.json
|
|
180
|
+
├── tsconfig.json
|
|
181
|
+
├── README.md
|
|
182
|
+
└── LICENSE
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 📄 License
|
|
188
|
+
|
|
189
|
+
`@arikajs/cache` is open-source software licensed under the **MIT License**.
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## 🧭 Philosophy
|
|
194
|
+
|
|
195
|
+
> "Fast data wins."
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Repository } from './Repository';
|
|
2
|
+
import { Store } from './Contracts/Store';
|
|
3
|
+
export declare class CacheManager {
|
|
4
|
+
protected config: any;
|
|
5
|
+
protected stores: Map<string, Repository>;
|
|
6
|
+
protected customCreators: Map<string, (config: any) => Store>;
|
|
7
|
+
protected database: any;
|
|
8
|
+
constructor(config: any, database?: any);
|
|
9
|
+
store(name?: string): Repository;
|
|
10
|
+
protected resolve(name: string): Repository;
|
|
11
|
+
protected createMemoryDriver(): Store;
|
|
12
|
+
protected createDatabaseDriver(config: any): Store;
|
|
13
|
+
protected createRedisDriver(config: any): Store;
|
|
14
|
+
extend(driver: string, callback: (config: any) => Store): this;
|
|
15
|
+
get(key: string, defaultValue?: any): Promise<any>;
|
|
16
|
+
put(key: string, value: any, seconds: number): Promise<void>;
|
|
17
|
+
has(key: string): Promise<boolean>;
|
|
18
|
+
forever(key: string, value: any): Promise<void>;
|
|
19
|
+
forget(key: string): Promise<void>;
|
|
20
|
+
flush(): Promise<void>;
|
|
21
|
+
increment(key: string, value?: number): Promise<number>;
|
|
22
|
+
decrement(key: string, value?: number): Promise<number>;
|
|
23
|
+
add(key: string, value: any, seconds: number): Promise<boolean>;
|
|
24
|
+
pull(key: string, defaultValue?: any): Promise<any>;
|
|
25
|
+
remember(key: string, seconds: number, callback: () => Promise<any>): Promise<any>;
|
|
26
|
+
rememberForever(key: string, callback: () => Promise<any>): Promise<any>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=CacheManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CacheManager.d.ts","sourceRoot":"","sources":["../src/CacheManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,qBAAa,YAAY;IAKT,SAAS,CAAC,MAAM,EAAE,GAAG;IAJjC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAa;IACtD,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,KAAK,CAAC,CAAa;IAC1E,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC;gBAEF,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG;IAI1C,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU;IAUvC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAoB3C,SAAS,CAAC,kBAAkB,IAAI,KAAK;IAIrC,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,GAAG,GAAG,KAAK;IAQlD,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,KAAK;IAOxC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,KAAK,GAAG,IAAI;IAMxD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,GAAU;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM;IAC5C,GAAG,CAAC,GAAG,EAAE,MAAM;IACf,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAC/B,MAAM,CAAC,GAAG,EAAE,MAAM;IAClB,KAAK;IACL,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU;IACxC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU;IACxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM;IAC5C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,GAAU;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC;IACnE,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC;CACzE"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CacheManager = void 0;
|
|
4
|
+
const Repository_1 = require("./Repository");
|
|
5
|
+
const MemoryDriver_1 = require("./Drivers/MemoryDriver");
|
|
6
|
+
const DatabaseDriver_1 = require("./Drivers/DatabaseDriver");
|
|
7
|
+
const RedisDriver_1 = require("./Drivers/RedisDriver");
|
|
8
|
+
class CacheManager {
|
|
9
|
+
constructor(config, database) {
|
|
10
|
+
this.config = config;
|
|
11
|
+
this.stores = new Map();
|
|
12
|
+
this.customCreators = new Map();
|
|
13
|
+
this.database = database;
|
|
14
|
+
}
|
|
15
|
+
store(name) {
|
|
16
|
+
const storeName = name || this.config.default;
|
|
17
|
+
if (!this.stores.has(storeName)) {
|
|
18
|
+
this.stores.set(storeName, this.resolve(storeName));
|
|
19
|
+
}
|
|
20
|
+
return this.stores.get(storeName);
|
|
21
|
+
}
|
|
22
|
+
resolve(name) {
|
|
23
|
+
const config = this.config.stores[name];
|
|
24
|
+
if (!config) {
|
|
25
|
+
throw new Error(`Cache store [${name}] is not defined.`);
|
|
26
|
+
}
|
|
27
|
+
if (this.customCreators.has(config.driver)) {
|
|
28
|
+
return new Repository_1.Repository(this.customCreators.get(config.driver)(config));
|
|
29
|
+
}
|
|
30
|
+
const driverMethod = `create${config.driver.charAt(0).toUpperCase() + config.driver.slice(1)}Driver`;
|
|
31
|
+
if (typeof this[driverMethod] === 'function') {
|
|
32
|
+
return new Repository_1.Repository(this[driverMethod](config));
|
|
33
|
+
}
|
|
34
|
+
throw new Error(`Driver [${config.driver}] is not supported.`);
|
|
35
|
+
}
|
|
36
|
+
createMemoryDriver() {
|
|
37
|
+
return new MemoryDriver_1.MemoryDriver();
|
|
38
|
+
}
|
|
39
|
+
createDatabaseDriver(config) {
|
|
40
|
+
return new DatabaseDriver_1.DatabaseDriver(this.database.connection(config.connection), config.table, this.config.prefix || '');
|
|
41
|
+
}
|
|
42
|
+
createRedisDriver(config) {
|
|
43
|
+
return new RedisDriver_1.RedisDriver(config, this.config.prefix || '');
|
|
44
|
+
}
|
|
45
|
+
extend(driver, callback) {
|
|
46
|
+
this.customCreators.set(driver, callback);
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
// Proxy common methods to default store
|
|
50
|
+
async get(key, defaultValue = null) { return this.store().get(key, defaultValue); }
|
|
51
|
+
async put(key, value, seconds) { return this.store().put(key, value, seconds); }
|
|
52
|
+
async has(key) { return this.store().has(key); }
|
|
53
|
+
async forever(key, value) { return this.store().forever(key, value); }
|
|
54
|
+
async forget(key) { return this.store().forget(key); }
|
|
55
|
+
async flush() { return this.store().flush(); }
|
|
56
|
+
async increment(key, value = 1) { return this.store().increment(key, value); }
|
|
57
|
+
async decrement(key, value = 1) { return this.store().decrement(key, value); }
|
|
58
|
+
async add(key, value, seconds) { return this.store().add(key, value, seconds); }
|
|
59
|
+
async pull(key, defaultValue = null) { return this.store().pull(key, defaultValue); }
|
|
60
|
+
async remember(key, seconds, callback) { return this.store().remember(key, seconds, callback); }
|
|
61
|
+
async rememberForever(key, callback) { return this.store().rememberForever(key, callback); }
|
|
62
|
+
}
|
|
63
|
+
exports.CacheManager = CacheManager;
|
|
64
|
+
//# sourceMappingURL=CacheManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CacheManager.js","sourceRoot":"","sources":["../src/CacheManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface Store {
|
|
2
|
+
get(key: string): Promise<any>;
|
|
3
|
+
put(key: string, value: any, seconds: number): Promise<void>;
|
|
4
|
+
increment(key: string, value?: number): Promise<number>;
|
|
5
|
+
decrement(key: string, value?: number): Promise<number>;
|
|
6
|
+
forever(key: string, value: any): Promise<void>;
|
|
7
|
+
forget(key: string): Promise<void>;
|
|
8
|
+
flush(): Promise<void>;
|
|
9
|
+
getPrefix(): string;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=Store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Store.d.ts","sourceRoot":"","sources":["../../src/Contracts/Store.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,KAAK;IAClB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,SAAS,IAAI,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Store.js","sourceRoot":"","sources":["../../src/Contracts/Store.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Store } from '../Contracts/Store';
|
|
2
|
+
export declare class DatabaseDriver implements Store {
|
|
3
|
+
private database;
|
|
4
|
+
private table;
|
|
5
|
+
private prefix;
|
|
6
|
+
constructor(database: any, table: string, 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
|
+
getPrefix(): string;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=DatabaseDriver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatabaseDriver.d.ts","sourceRoot":"","sources":["../../src/Drivers/DatabaseDriver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,qBAAa,cAAe,YAAW,KAAK;IAEpC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;gBAFN,QAAQ,EAAE,GAAG,EACb,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAW;IAGlB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAiB9B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB5D,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;IAsB/C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,SAAS,IAAI,MAAM;CAG7B"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DatabaseDriver = void 0;
|
|
4
|
+
class DatabaseDriver {
|
|
5
|
+
constructor(database, table, prefix = '') {
|
|
6
|
+
this.database = database;
|
|
7
|
+
this.table = table;
|
|
8
|
+
this.prefix = prefix;
|
|
9
|
+
}
|
|
10
|
+
async get(key) {
|
|
11
|
+
const cache = await this.database.table(this.table)
|
|
12
|
+
.where('key', this.prefix + key)
|
|
13
|
+
.first();
|
|
14
|
+
if (!cache) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
if (cache.expiration && cache.expiration <= Math.floor(Date.now() / 1000)) {
|
|
18
|
+
await this.forget(key);
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return JSON.parse(cache.value);
|
|
22
|
+
}
|
|
23
|
+
async put(key, value, seconds) {
|
|
24
|
+
const expiration = Math.floor(Date.now() / 1000) + seconds;
|
|
25
|
+
const jsonValue = JSON.stringify(value);
|
|
26
|
+
const prefixedKey = this.prefix + key;
|
|
27
|
+
const exists = await this.database.table(this.table).where('key', prefixedKey).exists();
|
|
28
|
+
if (exists) {
|
|
29
|
+
await this.database.table(this.table)
|
|
30
|
+
.where('key', prefixedKey)
|
|
31
|
+
.update({
|
|
32
|
+
value: jsonValue,
|
|
33
|
+
expiration: expiration
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
await this.database.table(this.table).insert({
|
|
38
|
+
key: prefixedKey,
|
|
39
|
+
value: jsonValue,
|
|
40
|
+
expiration: expiration
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async increment(key, value = 1) {
|
|
45
|
+
const current = await this.get(key) || 0;
|
|
46
|
+
const newValue = current + value;
|
|
47
|
+
await this.forever(key, newValue);
|
|
48
|
+
return newValue;
|
|
49
|
+
}
|
|
50
|
+
async decrement(key, value = 1) {
|
|
51
|
+
return this.increment(key, -value);
|
|
52
|
+
}
|
|
53
|
+
async forever(key, value) {
|
|
54
|
+
const jsonValue = JSON.stringify(value);
|
|
55
|
+
const prefixedKey = this.prefix + key;
|
|
56
|
+
const exists = await this.database.table(this.table).where('key', prefixedKey).exists();
|
|
57
|
+
if (exists) {
|
|
58
|
+
await this.database.table(this.table)
|
|
59
|
+
.where('key', prefixedKey)
|
|
60
|
+
.update({
|
|
61
|
+
value: jsonValue,
|
|
62
|
+
expiration: null
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
await this.database.table(this.table).insert({
|
|
67
|
+
key: prefixedKey,
|
|
68
|
+
value: jsonValue,
|
|
69
|
+
expiration: null
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async forget(key) {
|
|
74
|
+
await this.database.table(this.table)
|
|
75
|
+
.where('key', this.prefix + key)
|
|
76
|
+
.delete();
|
|
77
|
+
}
|
|
78
|
+
async flush() {
|
|
79
|
+
await this.database.table(this.table).delete();
|
|
80
|
+
}
|
|
81
|
+
getPrefix() {
|
|
82
|
+
return this.prefix;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.DatabaseDriver = DatabaseDriver;
|
|
86
|
+
//# 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,18 @@
|
|
|
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
|
+
getPrefix(): string;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
18
|
+
//# 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;IAI5B,SAAS,IAAI,MAAM;CAGtB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
getPrefix() {
|
|
49
|
+
return '';
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.MemoryDriver = MemoryDriver;
|
|
53
|
+
//# sourceMappingURL=MemoryDriver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryDriver.js","sourceRoot":"","sources":["../../src/Drivers/MemoryDriver.ts"],"names":[],"mappings":";;;AAQA,MAAa,YAAY;IAAzB;QACc,YAAO,GAA2B,IAAI,GAAG,EAAE,CAAC;IAyD1D,CAAC;IAvDG,KAAK,CAAC,GAAG,CAAC,GAAW;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACzD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,OAAe;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,QAAgB,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;QAEjC,6DAA6D;QAC7D,qEAAqE;QACrE,4CAA4C;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;YAClB,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;SAC1C,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,QAAgB,CAAC;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,KAAU;QACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK;QACP,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,SAAS;QACL,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AA1DD,oCA0DC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
getPrefix(): string;
|
|
15
|
+
/**
|
|
16
|
+
* Get the underlying Redis instance.
|
|
17
|
+
*/
|
|
18
|
+
getRedis(): Redis | Cluster;
|
|
19
|
+
}
|
|
20
|
+
//# 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;IAI5B,SAAS,IAAI,MAAM;IAI1B;;OAEG;IACI,QAAQ,IAAI,KAAK,GAAG,OAAO;CAGrC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
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
|
+
getPrefix() {
|
|
68
|
+
return this.prefix;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get the underlying Redis instance.
|
|
72
|
+
*/
|
|
73
|
+
getRedis() {
|
|
74
|
+
return this.redis;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.RedisDriver = RedisDriver;
|
|
78
|
+
//# 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,19 @@
|
|
|
1
|
+
import { Store } from './Contracts/Store';
|
|
2
|
+
export declare class Repository {
|
|
3
|
+
protected store: Store;
|
|
4
|
+
constructor(store: Store);
|
|
5
|
+
get(key: string, defaultValue?: any): Promise<any>;
|
|
6
|
+
has(key: string): Promise<boolean>;
|
|
7
|
+
put(key: string, value: any, seconds: number): Promise<void>;
|
|
8
|
+
add(key: string, value: any, seconds: number): Promise<boolean>;
|
|
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
|
+
remember(key: string, seconds: number, callback: () => Promise<any>): Promise<any>;
|
|
13
|
+
rememberForever(key: string, callback: () => Promise<any>): Promise<any>;
|
|
14
|
+
pull(key: string, defaultValue?: any): Promise<any>;
|
|
15
|
+
forget(key: string): Promise<void>;
|
|
16
|
+
flush(): Promise<void>;
|
|
17
|
+
getStore(): Store;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=Repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Repository.d.ts","sourceRoot":"","sources":["../src/Repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,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;IAI5B,QAAQ,IAAI,KAAK;CAGpB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Repository = void 0;
|
|
4
|
+
class Repository {
|
|
5
|
+
constructor(store) {
|
|
6
|
+
this.store = store;
|
|
7
|
+
}
|
|
8
|
+
async get(key, defaultValue = null) {
|
|
9
|
+
const value = await this.store.get(key);
|
|
10
|
+
return value !== null ? value : defaultValue;
|
|
11
|
+
}
|
|
12
|
+
async has(key) {
|
|
13
|
+
return (await this.get(key)) !== null;
|
|
14
|
+
}
|
|
15
|
+
async put(key, value, seconds) {
|
|
16
|
+
await this.store.put(key, value, seconds);
|
|
17
|
+
}
|
|
18
|
+
async add(key, value, seconds) {
|
|
19
|
+
if (await this.has(key)) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
await this.put(key, value, seconds);
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
async increment(key, value = 1) {
|
|
26
|
+
return this.store.increment(key, value);
|
|
27
|
+
}
|
|
28
|
+
async decrement(key, value = 1) {
|
|
29
|
+
return this.store.decrement(key, value);
|
|
30
|
+
}
|
|
31
|
+
async forever(key, value) {
|
|
32
|
+
await this.store.forever(key, value);
|
|
33
|
+
}
|
|
34
|
+
async remember(key, seconds, callback) {
|
|
35
|
+
let value = await this.get(key);
|
|
36
|
+
if (value !== null) {
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
value = await callback();
|
|
40
|
+
await this.put(key, value, seconds);
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
async rememberForever(key, callback) {
|
|
44
|
+
let value = await this.get(key);
|
|
45
|
+
if (value !== null) {
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
value = await callback();
|
|
49
|
+
await this.forever(key, value);
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
async pull(key, defaultValue = null) {
|
|
53
|
+
const value = await this.get(key, defaultValue);
|
|
54
|
+
await this.forget(key);
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
async forget(key) {
|
|
58
|
+
await this.store.forget(key);
|
|
59
|
+
}
|
|
60
|
+
async flush() {
|
|
61
|
+
await this.store.flush();
|
|
62
|
+
}
|
|
63
|
+
getStore() {
|
|
64
|
+
return this.store;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.Repository = Repository;
|
|
68
|
+
//# sourceMappingURL=Repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Repository.js","sourceRoot":"","sources":["../src/Repository.ts"],"names":[],"mappings":";;;AAGA,MAAa,UAAU;IACnB,YAAsB,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;IAAI,CAAC;IAEvC,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,eAAoB,IAAI;QAC3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACjB,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,OAAe;QAC9C,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,OAAe;QAC9C,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,QAAgB,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,QAAgB,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,KAAU;QACjC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW,EAAE,OAAe,EAAE,QAA4B;QACrE,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEhC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAEpC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,GAAW,EAAE,QAA4B;QAC3D,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEhC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAE/B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,eAAoB,IAAI;QAC5C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACpB,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;CACJ;AAhFD,gCAgFC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { CacheManager } from './CacheManager';
|
|
2
|
+
import { Store } from './Contracts/Store';
|
|
3
|
+
export declare class Cache {
|
|
4
|
+
static setManager(manager: CacheManager): void;
|
|
5
|
+
protected static getManager(): CacheManager;
|
|
6
|
+
static store(name?: string): import("./Repository").Repository;
|
|
7
|
+
static get(key: string, defaultValue?: any): Promise<any>;
|
|
8
|
+
static put(key: string, value: any, seconds: number): Promise<void>;
|
|
9
|
+
static has(key: string): Promise<boolean>;
|
|
10
|
+
static forever(key: string, value: any): Promise<void>;
|
|
11
|
+
static forget(key: string): Promise<void>;
|
|
12
|
+
static flush(): Promise<void>;
|
|
13
|
+
static increment(key: string, value?: number): Promise<number>;
|
|
14
|
+
static decrement(key: string, value?: number): Promise<number>;
|
|
15
|
+
static add(key: string, value: any, seconds: number): Promise<boolean>;
|
|
16
|
+
static pull(key: string, defaultValue?: any): Promise<any>;
|
|
17
|
+
static remember(key: string, seconds: number, callback: () => Promise<any>): Promise<any>;
|
|
18
|
+
static rememberForever(key: string, callback: () => Promise<any>): Promise<any>;
|
|
19
|
+
}
|
|
20
|
+
export { CacheManager, Store };
|
|
21
|
+
export { Repository } from './Repository';
|
|
22
|
+
export { MemoryDriver } from './Drivers/MemoryDriver';
|
|
23
|
+
export { DatabaseDriver } from './Drivers/DatabaseDriver';
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,qBAAa,KAAK;WACA,UAAU,CAAC,OAAO,EAAE,YAAY;IAI9C,SAAS,CAAC,MAAM,CAAC,UAAU,IAAI,YAAY;WAO7B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM;WAIb,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,GAAU;WACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM;WAC5C,GAAG,CAAC,GAAG,EAAE,MAAM;WACf,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;WAC/B,MAAM,CAAC,GAAG,EAAE,MAAM;WAClB,KAAK;WACL,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU;WACxC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU;WACxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM;WAC5C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,GAAU;WAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC;WACnE,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC;CAChF;AAED,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DatabaseDriver = exports.MemoryDriver = exports.Repository = exports.CacheManager = exports.Cache = void 0;
|
|
4
|
+
const CacheManager_1 = require("./CacheManager");
|
|
5
|
+
Object.defineProperty(exports, "CacheManager", { enumerable: true, get: function () { return CacheManager_1.CacheManager; } });
|
|
6
|
+
let cacheManager;
|
|
7
|
+
class Cache {
|
|
8
|
+
static setManager(manager) {
|
|
9
|
+
cacheManager = manager;
|
|
10
|
+
}
|
|
11
|
+
static getManager() {
|
|
12
|
+
if (!cacheManager) {
|
|
13
|
+
throw new Error('Cache system not configured. Please use Cache.setManager() to configure.');
|
|
14
|
+
}
|
|
15
|
+
return cacheManager;
|
|
16
|
+
}
|
|
17
|
+
static store(name) {
|
|
18
|
+
return this.getManager().store(name);
|
|
19
|
+
}
|
|
20
|
+
static async get(key, defaultValue = null) { return this.getManager().get(key, defaultValue); }
|
|
21
|
+
static async put(key, value, seconds) { return this.getManager().put(key, value, seconds); }
|
|
22
|
+
static async has(key) { return this.getManager().has(key); }
|
|
23
|
+
static async forever(key, value) { return this.getManager().forever(key, value); }
|
|
24
|
+
static async forget(key) { return this.getManager().forget(key); }
|
|
25
|
+
static async flush() { return this.getManager().flush(); }
|
|
26
|
+
static async increment(key, value = 1) { return this.getManager().increment(key, value); }
|
|
27
|
+
static async decrement(key, value = 1) { return this.getManager().decrement(key, value); }
|
|
28
|
+
static async add(key, value, seconds) { return this.getManager().add(key, value, seconds); }
|
|
29
|
+
static async pull(key, defaultValue = null) { return this.getManager().pull(key, defaultValue); }
|
|
30
|
+
static async remember(key, seconds, callback) { return this.getManager().remember(key, seconds, callback); }
|
|
31
|
+
static async rememberForever(key, callback) { return this.getManager().rememberForever(key, callback); }
|
|
32
|
+
}
|
|
33
|
+
exports.Cache = Cache;
|
|
34
|
+
var Repository_1 = require("./Repository");
|
|
35
|
+
Object.defineProperty(exports, "Repository", { enumerable: true, get: function () { return Repository_1.Repository; } });
|
|
36
|
+
var MemoryDriver_1 = require("./Drivers/MemoryDriver");
|
|
37
|
+
Object.defineProperty(exports, "MemoryDriver", { enumerable: true, get: function () { return MemoryDriver_1.MemoryDriver; } });
|
|
38
|
+
var DatabaseDriver_1 = require("./Drivers/DatabaseDriver");
|
|
39
|
+
Object.defineProperty(exports, "DatabaseDriver", { enumerable: true, get: function () { return DatabaseDriver_1.DatabaseDriver; } });
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@arikajs/cache",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Simple, fast, and driver-based caching system for the ArikaJS framework.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "tsc -p tsconfig.json",
|
|
10
|
+
"build:tests": "tsc -p tsconfig.test.json",
|
|
11
|
+
"clean": "rm -rf dist",
|
|
12
|
+
"prepare": "echo skip",
|
|
13
|
+
"test": "npm run build && npm run build:tests && node scripts/fix-test-imports.js && node --test 'dist/tests/**/*.test.js'",
|
|
14
|
+
"test:watch": "npm run build && npm run build:tests && node --test --watch 'dist/tests/**/*.test.js'"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"keywords": [
|
|
20
|
+
"arika",
|
|
21
|
+
"arika-js",
|
|
22
|
+
"cache",
|
|
23
|
+
"memory",
|
|
24
|
+
"redis",
|
|
25
|
+
"performance"
|
|
26
|
+
],
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=20.0.0"
|
|
29
|
+
},
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "git+https://github.com/arikajs/cache.git"
|
|
33
|
+
},
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://github.com/arikajs/cache/issues"
|
|
36
|
+
},
|
|
37
|
+
"homepage": "https://github.com/arikajs/cache#readme",
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"ioredis": "^5.9.3"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/node": "^20.11.24",
|
|
43
|
+
"typescript": "^5.3.3"
|
|
44
|
+
},
|
|
45
|
+
"author": "Prakash Tank"
|
|
46
|
+
}
|