@vritti/api-sdk 0.3.3 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth.cjs +942 -0
- package/dist/auth.cjs.map +1 -0
- package/dist/auth.d.cts +95 -0
- package/dist/auth.d.ts +95 -0
- package/dist/auth.js +884 -0
- package/dist/auth.js.map +1 -0
- package/dist/cache.cjs +182 -14
- package/dist/cache.cjs.map +1 -1
- package/dist/cache.d.cts +48 -4
- package/dist/cache.d.ts +48 -4
- package/dist/cache.js +177 -12
- package/dist/cache.js.map +1 -1
- package/dist/catalog-resolver.cjs +337 -140
- package/dist/catalog-resolver.cjs.map +1 -1
- package/dist/catalog-resolver.d.cts +70 -45
- package/dist/catalog-resolver.d.ts +70 -45
- package/dist/catalog-resolver.js +322 -135
- package/dist/catalog-resolver.js.map +1 -1
- package/dist/code-pattern-BP4zkNtT.d.cts +12 -0
- package/dist/code-pattern-BP4zkNtT.d.ts +12 -0
- package/dist/context.cjs +93 -0
- package/dist/context.cjs.map +1 -0
- package/dist/context.d.cts +19 -0
- package/dist/context.d.ts +19 -0
- package/dist/context.js +64 -0
- package/dist/context.js.map +1 -0
- package/dist/countries.cjs +1559 -0
- package/dist/countries.cjs.map +1 -0
- package/dist/countries.d.cts +13 -0
- package/dist/countries.d.ts +13 -0
- package/dist/countries.js +1532 -0
- package/dist/countries.js.map +1 -0
- package/dist/data-table.cjs +1280 -0
- package/dist/data-table.cjs.map +1 -0
- package/dist/data-table.d.cts +123 -0
- package/dist/data-table.d.ts +123 -0
- package/dist/data-table.js +1260 -0
- package/dist/data-table.js.map +1 -0
- package/dist/database.cjs +1510 -0
- package/dist/database.cjs.map +1 -0
- package/dist/database.d.cts +287 -0
- package/dist/database.d.ts +287 -0
- package/dist/database.js +1469 -0
- package/dist/database.js.map +1 -0
- package/dist/decimal.d.cts +0 -1
- package/dist/decimal.d.ts +0 -1
- package/dist/decorators.cjs +1817 -0
- package/dist/decorators.cjs.map +1 -0
- package/dist/decorators.d.cts +24 -0
- package/dist/decorators.d.ts +24 -0
- package/dist/decorators.js +1780 -0
- package/dist/decorators.js.map +1 -0
- package/dist/drizzle-pg-core.cjs +25 -0
- package/dist/drizzle-pg-core.cjs.map +1 -1
- package/dist/drizzle-pg-core.d.cts +7 -0
- package/dist/drizzle-pg-core.d.ts +7 -0
- package/dist/drizzle-pg-core.js +22 -0
- package/dist/drizzle-pg-core.js.map +1 -1
- package/dist/exceptions.cjs +301 -0
- package/dist/exceptions.cjs.map +1 -0
- package/dist/exceptions.d.cts +90 -0
- package/dist/exceptions.d.ts +90 -0
- package/dist/exceptions.js +257 -0
- package/dist/exceptions.js.map +1 -0
- package/dist/filter.types-PuARU9XD.d.cts +50 -0
- package/dist/filter.types-PuARU9XD.d.ts +50 -0
- package/dist/filters.cjs +407 -0
- package/dist/filters.cjs.map +1 -0
- package/dist/filters.d.cts +55 -0
- package/dist/filters.d.ts +55 -0
- package/dist/filters.js +377 -0
- package/dist/filters.js.map +1 -0
- package/dist/index.cjs +0 -5423
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +93 -854
- package/dist/index.d.ts +93 -854
- package/dist/index.js +0 -5301
- package/dist/index.js.map +1 -1
- package/dist/is-country.decorator-CcNwSSr5.d.cts +5 -0
- package/dist/is-country.decorator-CcNwSSr5.d.ts +5 -0
- package/dist/license.d.cts +1 -1
- package/dist/license.d.ts +1 -1
- package/dist/lodash.cjs.map +1 -1
- package/dist/lodash.js.map +1 -1
- package/dist/logger.cjs +862 -0
- package/dist/logger.cjs.map +1 -0
- package/dist/logger.d.cts +118 -0
- package/dist/logger.d.ts +118 -0
- package/dist/logger.js +816 -0
- package/dist/logger.js.map +1 -0
- package/dist/migrate.cjs +2 -2
- package/dist/migrate.cjs.map +1 -1
- package/dist/migrate.d.cts +2 -0
- package/dist/migrate.d.ts +2 -0
- package/dist/migrate.js +2 -2
- package/dist/migrate.js.map +1 -1
- package/dist/money.cjs +18 -3
- package/dist/money.cjs.map +1 -1
- package/dist/money.d.cts +13 -13
- package/dist/money.d.ts +13 -13
- package/dist/money.js +18 -3
- package/dist/money.js.map +1 -1
- package/dist/nats.cjs +34 -35
- package/dist/nats.cjs.map +1 -1
- package/dist/nats.d.cts +14 -14
- package/dist/nats.d.ts +14 -14
- package/dist/nats.js +32 -33
- package/dist/nats.js.map +1 -1
- package/dist/root.cjs +225 -0
- package/dist/root.cjs.map +1 -0
- package/dist/root.d.cts +4 -0
- package/dist/root.d.ts +4 -0
- package/dist/root.js +200 -0
- package/dist/root.js.map +1 -0
- package/dist/{types-DQRwj5rr.d.cts → types-BBK6MG-U.d.cts} +37 -6
- package/dist/{types-DQRwj5rr.d.ts → types-BBK6MG-U.d.ts} +37 -6
- package/dist/types.cjs +19 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +17 -0
- package/dist/types.d.ts +17 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.cjs +273 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.cts +8 -0
- package/dist/utils.d.ts +8 -0
- package/dist/utils.js +245 -0
- package/dist/utils.js.map +1 -0
- package/package.json +122 -1
- package/dist/cache.service-_SuJIcNA.d.cts +0 -20
- package/dist/cache.service-_SuJIcNA.d.ts +0 -20
- package/dist/fastify-augmentation-CQPBNS5a.d.cts +0 -105
- package/dist/fastify-augmentation-CQPBNS5a.d.ts +0 -105
package/dist/cache.js
CHANGED
|
@@ -10,6 +10,9 @@ import { Inject, Injectable, Logger } from "@nestjs/common";
|
|
|
10
10
|
|
|
11
11
|
// src/cache/constants.ts
|
|
12
12
|
var CACHE_PROVIDER = Symbol("CACHE_PROVIDER");
|
|
13
|
+
var LRU_CACHE_OPTIONS = Symbol("LRU_CACHE_OPTIONS");
|
|
14
|
+
var CACHE_MODULE_OPTIONS = Symbol("CACHE_MODULE_OPTIONS");
|
|
15
|
+
var DEFAULT_LRU_MAX = 1e4;
|
|
13
16
|
|
|
14
17
|
// src/cache/cache.service.ts
|
|
15
18
|
function _ts_decorate(decorators, target, key, desc) {
|
|
@@ -91,10 +94,9 @@ CacheService = _ts_decorate([
|
|
|
91
94
|
])
|
|
92
95
|
], CacheService);
|
|
93
96
|
|
|
94
|
-
// src/cache/providers/
|
|
95
|
-
import {
|
|
96
|
-
import {
|
|
97
|
-
import Redis from "ioredis";
|
|
97
|
+
// src/cache/providers/lru.provider.ts
|
|
98
|
+
import { Inject as Inject2, Injectable as Injectable2, Optional } from "@nestjs/common";
|
|
99
|
+
import { LRUCache } from "lru-cache";
|
|
98
100
|
function _ts_decorate2(decorators, target, key, desc) {
|
|
99
101
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
100
102
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -106,6 +108,81 @@ function _ts_metadata2(k, v) {
|
|
|
106
108
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
107
109
|
}
|
|
108
110
|
__name(_ts_metadata2, "_ts_metadata");
|
|
111
|
+
function _ts_param2(paramIndex, decorator) {
|
|
112
|
+
return function(target, key) {
|
|
113
|
+
decorator(target, key, paramIndex);
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
__name(_ts_param2, "_ts_param");
|
|
117
|
+
function globToRegExp(pattern) {
|
|
118
|
+
const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*").replace(/\?/g, ".");
|
|
119
|
+
return new RegExp(`^${escaped}$`);
|
|
120
|
+
}
|
|
121
|
+
__name(globToRegExp, "globToRegExp");
|
|
122
|
+
var LruCacheProvider = class {
|
|
123
|
+
static {
|
|
124
|
+
__name(this, "LruCacheProvider");
|
|
125
|
+
}
|
|
126
|
+
cache;
|
|
127
|
+
constructor(options) {
|
|
128
|
+
this.cache = new LRUCache({
|
|
129
|
+
max: options?.max ?? DEFAULT_LRU_MAX
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
// Stores a value with a per-key TTL (wrapped so primitives survive lru-cache's object value type)
|
|
133
|
+
async set(key, value, ttlSeconds) {
|
|
134
|
+
this.cache.set(key, {
|
|
135
|
+
value
|
|
136
|
+
}, {
|
|
137
|
+
ttl: ttlSeconds * 1e3
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
// Returns the stored value, or null on miss or expiry
|
|
141
|
+
async get(key) {
|
|
142
|
+
const entry = this.cache.get(key);
|
|
143
|
+
return entry ? entry.value : null;
|
|
144
|
+
}
|
|
145
|
+
// Deletes one or more keys
|
|
146
|
+
async del(...keys) {
|
|
147
|
+
for (const key of keys) this.cache.delete(key);
|
|
148
|
+
}
|
|
149
|
+
// Returns all live keys matching a Redis-style glob pattern
|
|
150
|
+
async scanKeys(pattern) {
|
|
151
|
+
const regex = globToRegExp(pattern);
|
|
152
|
+
return [
|
|
153
|
+
...this.cache.keys()
|
|
154
|
+
].filter((key) => regex.test(key));
|
|
155
|
+
}
|
|
156
|
+
// Reports entry count for monitoring utilities
|
|
157
|
+
async getMemoryInfo() {
|
|
158
|
+
return `entries:${this.cache.size} max:${this.cache.max}`;
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
LruCacheProvider = _ts_decorate2([
|
|
162
|
+
Injectable2(),
|
|
163
|
+
_ts_param2(0, Optional()),
|
|
164
|
+
_ts_param2(0, Inject2(LRU_CACHE_OPTIONS)),
|
|
165
|
+
_ts_metadata2("design:type", Function),
|
|
166
|
+
_ts_metadata2("design:paramtypes", [
|
|
167
|
+
typeof LruCacheOptions === "undefined" ? Object : LruCacheOptions
|
|
168
|
+
])
|
|
169
|
+
], LruCacheProvider);
|
|
170
|
+
|
|
171
|
+
// src/cache/providers/redis.provider.ts
|
|
172
|
+
import { Injectable as Injectable3, Logger as Logger2 } from "@nestjs/common";
|
|
173
|
+
import { ConfigService } from "@nestjs/config";
|
|
174
|
+
import Redis from "ioredis";
|
|
175
|
+
function _ts_decorate3(decorators, target, key, desc) {
|
|
176
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
177
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
178
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
179
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
180
|
+
}
|
|
181
|
+
__name(_ts_decorate3, "_ts_decorate");
|
|
182
|
+
function _ts_metadata3(k, v) {
|
|
183
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
184
|
+
}
|
|
185
|
+
__name(_ts_metadata3, "_ts_metadata");
|
|
109
186
|
var RedisCacheProvider = class _RedisCacheProvider {
|
|
110
187
|
static {
|
|
111
188
|
__name(this, "RedisCacheProvider");
|
|
@@ -164,28 +241,113 @@ var RedisCacheProvider = class _RedisCacheProvider {
|
|
|
164
241
|
return this.client.info("memory");
|
|
165
242
|
}
|
|
166
243
|
};
|
|
167
|
-
RedisCacheProvider =
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
244
|
+
RedisCacheProvider = _ts_decorate3([
|
|
245
|
+
Injectable3(),
|
|
246
|
+
_ts_metadata3("design:type", Function),
|
|
247
|
+
_ts_metadata3("design:paramtypes", [
|
|
171
248
|
typeof ConfigService === "undefined" ? Object : ConfigService
|
|
172
249
|
])
|
|
173
250
|
], RedisCacheProvider);
|
|
174
251
|
|
|
175
252
|
// src/cache/cache.module.ts
|
|
176
|
-
function
|
|
253
|
+
function _ts_decorate4(decorators, target, key, desc) {
|
|
177
254
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
178
255
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
179
256
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
180
257
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
181
258
|
}
|
|
182
|
-
__name(
|
|
183
|
-
var CacheModule = class {
|
|
259
|
+
__name(_ts_decorate4, "_ts_decorate");
|
|
260
|
+
var CacheModule = class _CacheModule {
|
|
184
261
|
static {
|
|
185
262
|
__name(this, "CacheModule");
|
|
186
263
|
}
|
|
264
|
+
// Selects the backing provider; each import gets its own CacheService bound to the chosen driver
|
|
265
|
+
static forRoot(options = {}) {
|
|
266
|
+
if (options.driver === "lru") {
|
|
267
|
+
return {
|
|
268
|
+
module: _CacheModule,
|
|
269
|
+
providers: [
|
|
270
|
+
{
|
|
271
|
+
provide: LRU_CACHE_OPTIONS,
|
|
272
|
+
useValue: options.lru ?? {}
|
|
273
|
+
},
|
|
274
|
+
LruCacheProvider,
|
|
275
|
+
{
|
|
276
|
+
provide: CACHE_PROVIDER,
|
|
277
|
+
useExisting: LruCacheProvider
|
|
278
|
+
},
|
|
279
|
+
CacheService
|
|
280
|
+
],
|
|
281
|
+
exports: [
|
|
282
|
+
LruCacheProvider,
|
|
283
|
+
CACHE_PROVIDER,
|
|
284
|
+
CacheService
|
|
285
|
+
]
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
return {
|
|
289
|
+
module: _CacheModule,
|
|
290
|
+
imports: [
|
|
291
|
+
ConfigModule
|
|
292
|
+
],
|
|
293
|
+
providers: [
|
|
294
|
+
RedisCacheProvider,
|
|
295
|
+
{
|
|
296
|
+
provide: CACHE_PROVIDER,
|
|
297
|
+
useExisting: RedisCacheProvider
|
|
298
|
+
},
|
|
299
|
+
CacheService
|
|
300
|
+
],
|
|
301
|
+
exports: [
|
|
302
|
+
RedisCacheProvider,
|
|
303
|
+
CACHE_PROVIDER,
|
|
304
|
+
CacheService
|
|
305
|
+
]
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
// Same driver selection as forRoot, but options (and the driver) resolve via a factory
|
|
309
|
+
static forRootAsync(options) {
|
|
310
|
+
const optionsProvider = {
|
|
311
|
+
provide: CACHE_MODULE_OPTIONS,
|
|
312
|
+
useFactory: options.useFactory,
|
|
313
|
+
inject: options.inject ?? []
|
|
314
|
+
};
|
|
315
|
+
return {
|
|
316
|
+
module: _CacheModule,
|
|
317
|
+
imports: [
|
|
318
|
+
ConfigModule,
|
|
319
|
+
...options.imports ?? []
|
|
320
|
+
],
|
|
321
|
+
providers: [
|
|
322
|
+
optionsProvider,
|
|
323
|
+
{
|
|
324
|
+
provide: LRU_CACHE_OPTIONS,
|
|
325
|
+
useFactory: /* @__PURE__ */ __name((opts) => opts.lru ?? {}, "useFactory"),
|
|
326
|
+
inject: [
|
|
327
|
+
CACHE_MODULE_OPTIONS
|
|
328
|
+
]
|
|
329
|
+
},
|
|
330
|
+
LruCacheProvider,
|
|
331
|
+
RedisCacheProvider,
|
|
332
|
+
{
|
|
333
|
+
provide: CACHE_PROVIDER,
|
|
334
|
+
useFactory: /* @__PURE__ */ __name((opts, lru, redis) => opts.driver === "redis" ? redis : lru, "useFactory"),
|
|
335
|
+
inject: [
|
|
336
|
+
CACHE_MODULE_OPTIONS,
|
|
337
|
+
LruCacheProvider,
|
|
338
|
+
RedisCacheProvider
|
|
339
|
+
]
|
|
340
|
+
},
|
|
341
|
+
CacheService
|
|
342
|
+
],
|
|
343
|
+
exports: [
|
|
344
|
+
CACHE_PROVIDER,
|
|
345
|
+
CacheService
|
|
346
|
+
]
|
|
347
|
+
};
|
|
348
|
+
}
|
|
187
349
|
};
|
|
188
|
-
CacheModule =
|
|
350
|
+
CacheModule = _ts_decorate4([
|
|
189
351
|
Module({
|
|
190
352
|
imports: [
|
|
191
353
|
ConfigModule
|
|
@@ -209,6 +371,9 @@ export {
|
|
|
209
371
|
CACHE_PROVIDER,
|
|
210
372
|
CacheModule,
|
|
211
373
|
CacheService,
|
|
374
|
+
DEFAULT_LRU_MAX,
|
|
375
|
+
LRU_CACHE_OPTIONS,
|
|
376
|
+
LruCacheProvider,
|
|
212
377
|
RedisCacheProvider
|
|
213
378
|
};
|
|
214
379
|
//# sourceMappingURL=cache.js.map
|
package/dist/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cache/cache.module.ts","../src/cache/cache.service.ts","../src/cache/constants.ts","../src/cache/providers/redis.provider.ts"],"sourcesContent":["import { Module } from '@nestjs/common';\nimport { ConfigModule } from '@nestjs/config';\nimport { CacheService } from './cache.service';\nimport { CACHE_PROVIDER } from './constants';\nimport { RedisCacheProvider } from './providers/redis.provider';\n\n// To add a new provider in the future:\n// 1. Create providers/memcached.provider.ts implementing ICacheProvider\n// 2. Replace RedisCacheProvider with the new class in useExisting below\n\n@Module({\n imports: [ConfigModule],\n providers: [\n RedisCacheProvider,\n {\n provide: CACHE_PROVIDER,\n useExisting: RedisCacheProvider,\n },\n CacheService,\n ],\n exports: [RedisCacheProvider, CACHE_PROVIDER, CacheService],\n})\nexport class CacheModule {}\n","import { Inject, Injectable, Logger } from '@nestjs/common';\nimport { CACHE_PROVIDER } from './constants';\nimport type { ICacheProvider } from './interfaces/cache-provider.interface';\n\n@Injectable()\nexport class CacheService {\n private readonly logger = new Logger(CacheService.name);\n\n constructor(@Inject(CACHE_PROVIDER) private readonly provider: ICacheProvider) {}\n\n // Stores a value with mandatory TTL — errors are logged and swallowed so DB writes still succeed\n async set<T>(key: string, value: T, ttlSeconds: number): Promise<void> {\n try {\n await this.provider.set(key, value, ttlSeconds);\n } catch (err) {\n this.logger.error(`Cache set failed for key \"${key}\"`, err);\n }\n }\n\n // Returns cached value or null on miss or any Redis error — callers fall back to DB\n async get<T>(key: string): Promise<T | null> {\n try {\n return await this.provider.get<T>(key);\n } catch (err) {\n this.logger.error(`Cache get failed for key \"${key}\"`, err);\n return null;\n }\n }\n\n // Deletes one or more keys — errors are logged and swallowed\n async del(...keys: string[]): Promise<void> {\n try {\n await this.provider.del(...keys);\n } catch (err) {\n this.logger.error(`Cache del failed for keys \"${keys.join(', ')}\"`, err);\n }\n }\n\n // Returns all keys matching a glob pattern — returns empty array on error\n async scanKeys(pattern: string): Promise<string[]> {\n try {\n return await this.provider.scanKeys(pattern);\n } catch (err) {\n this.logger.error(`Cache scanKeys failed for pattern \"${pattern}\"`, err);\n return [];\n }\n }\n\n // Returns raw memory info from the provider — returns empty string on error\n async getMemoryInfo(): Promise<string> {\n try {\n return await this.provider.getMemoryInfo();\n } catch (err) {\n this.logger.error('Cache getMemoryInfo failed', err);\n return '';\n }\n }\n}\n","// Injection token for the active cache provider — use this to inject ICacheProvider\nexport const CACHE_PROVIDER = Symbol('CACHE_PROVIDER');\n","import { Injectable, Logger, OnModuleDestroy, OnModuleInit } from '@nestjs/common';\nimport { ConfigService } from '@nestjs/config';\nimport Redis from 'ioredis';\nimport type { ICacheProvider } from '../interfaces/cache-provider.interface';\n\n@Injectable()\nexport class RedisCacheProvider implements ICacheProvider, OnModuleInit, OnModuleDestroy {\n private readonly logger = new Logger(RedisCacheProvider.name);\n private client: Redis;\n\n constructor(private readonly configService: ConfigService) {}\n\n // Creates the ioredis client and attaches connection/error listeners\n onModuleInit(): void {\n const url = this.configService.getOrThrow<string>('REDIS_URL');\n this.client = new Redis(url, {\n lazyConnect: true,\n maxRetriesPerRequest: 3,\n });\n this.client.on('connect', () => this.logger.log('Redis connected'));\n this.client.on('error', (err) => this.logger.error('Redis error', err));\n }\n\n // Gracefully closes the ioredis connection on app shutdown\n async onModuleDestroy(): Promise<void> {\n await this.client.quit();\n this.logger.log('Redis disconnected');\n }\n\n // Serializes value to JSON and stores with a mandatory TTL\n async set<T>(key: string, value: T, ttlSeconds: number): Promise<void> {\n const json = JSON.stringify(value);\n await this.client.setex(key, ttlSeconds, json);\n }\n\n // Reads the stored JSON string and parses back to the original type\n async get<T>(key: string): Promise<T | null> {\n const json = await this.client.get(key);\n if (!json) return null;\n return JSON.parse(json) as T;\n }\n\n // Deletes one or more keys in a single command\n async del(...keys: string[]): Promise<void> {\n if (keys.length > 0) {\n await this.client.del(...keys);\n }\n }\n\n // Cursor-iterates all keys matching a glob pattern — never uses KEYS command\n async scanKeys(pattern: string): Promise<string[]> {\n const keys: string[] = [];\n let cursor = '0';\n do {\n const [nextCursor, batch] = await this.client.scan(cursor, 'MATCH', pattern, 'COUNT', 100);\n cursor = nextCursor;\n keys.push(...batch);\n } while (cursor !== '0');\n return keys;\n }\n\n // Returns raw INFO memory output for memory monitoring\n async getMemoryInfo(): Promise<string> {\n return this.client.info('memory');\n }\n}\n"],"mappings":"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","names":["Module","ConfigModule","Inject","Injectable","Logger","CACHE_PROVIDER","Symbol","CacheService","logger","Logger","name","provider","set","key","value","ttlSeconds","err","error","get","del","keys","join","scanKeys","pattern","getMemoryInfo","Injectable","Logger","ConfigService","Redis","RedisCacheProvider","logger","Logger","name","client","configService","onModuleInit","url","getOrThrow","Redis","lazyConnect","maxRetriesPerRequest","on","log","err","error","onModuleDestroy","quit","set","key","value","ttlSeconds","json","JSON","stringify","setex","get","parse","del","keys","length","scanKeys","pattern","cursor","nextCursor","batch","scan","push","getMemoryInfo","info","CacheModule","imports","ConfigModule","providers","RedisCacheProvider","provide","CACHE_PROVIDER","useExisting","CacheService","exports"]}
|
|
1
|
+
{"version":3,"sources":["../src/cache/cache.module.ts","../src/cache/cache.service.ts","../src/cache/constants.ts","../src/cache/providers/lru.provider.ts","../src/cache/providers/redis.provider.ts"],"sourcesContent":["import { type DynamicModule, Module, type Provider } from '@nestjs/common';\nimport { ConfigModule } from '@nestjs/config';\nimport { CacheService } from './cache.service';\nimport { CACHE_MODULE_OPTIONS, CACHE_PROVIDER, LRU_CACHE_OPTIONS } from './constants';\nimport { type LruCacheOptions, LruCacheProvider } from './providers/lru.provider';\nimport { RedisCacheProvider } from './providers/redis.provider';\n\nexport interface CacheModuleOptions {\n driver?: 'redis' | 'lru';\n lru?: LruCacheOptions;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: NestJS async factory injects/imports are heterogeneous\ntype AnyList = any[];\n\nexport interface CacheModuleAsyncOptions {\n imports?: AnyList;\n inject?: AnyList;\n useFactory: (...args: AnyList) => CacheModuleOptions | Promise<CacheModuleOptions>;\n}\n\n@Module({\n imports: [ConfigModule],\n providers: [\n RedisCacheProvider,\n {\n provide: CACHE_PROVIDER,\n useExisting: RedisCacheProvider,\n },\n CacheService,\n ],\n exports: [RedisCacheProvider, CACHE_PROVIDER, CacheService],\n})\nexport class CacheModule {\n // Selects the backing provider; each import gets its own CacheService bound to the chosen driver\n static forRoot(options: CacheModuleOptions = {}): DynamicModule {\n if (options.driver === 'lru') {\n return {\n module: CacheModule,\n providers: [\n { provide: LRU_CACHE_OPTIONS, useValue: options.lru ?? {} },\n LruCacheProvider,\n { provide: CACHE_PROVIDER, useExisting: LruCacheProvider },\n CacheService,\n ],\n exports: [LruCacheProvider, CACHE_PROVIDER, CacheService],\n };\n }\n return {\n module: CacheModule,\n imports: [ConfigModule],\n providers: [RedisCacheProvider, { provide: CACHE_PROVIDER, useExisting: RedisCacheProvider }, CacheService],\n exports: [RedisCacheProvider, CACHE_PROVIDER, CacheService],\n };\n }\n\n // Same driver selection as forRoot, but options (and the driver) resolve via a factory\n static forRootAsync(options: CacheModuleAsyncOptions): DynamicModule {\n const optionsProvider: Provider = {\n provide: CACHE_MODULE_OPTIONS,\n useFactory: options.useFactory,\n inject: options.inject ?? [],\n };\n return {\n module: CacheModule,\n imports: [ConfigModule, ...(options.imports ?? [])],\n providers: [\n optionsProvider,\n {\n provide: LRU_CACHE_OPTIONS,\n useFactory: (opts: CacheModuleOptions) => opts.lru ?? {},\n inject: [CACHE_MODULE_OPTIONS],\n },\n LruCacheProvider,\n RedisCacheProvider,\n {\n provide: CACHE_PROVIDER,\n useFactory: (opts: CacheModuleOptions, lru: LruCacheProvider, redis: RedisCacheProvider) =>\n opts.driver === 'redis' ? redis : lru,\n inject: [CACHE_MODULE_OPTIONS, LruCacheProvider, RedisCacheProvider],\n },\n CacheService,\n ],\n exports: [CACHE_PROVIDER, CacheService],\n };\n }\n}\n","import { Inject, Injectable, Logger } from '@nestjs/common';\nimport { CACHE_PROVIDER } from './constants';\nimport type { ICacheProvider } from './interfaces/cache-provider.interface';\n\n@Injectable()\nexport class CacheService {\n private readonly logger = new Logger(CacheService.name);\n\n constructor(@Inject(CACHE_PROVIDER) private readonly provider: ICacheProvider) {}\n\n // Stores a value with mandatory TTL — errors are logged and swallowed so DB writes still succeed\n async set<T>(key: string, value: T, ttlSeconds: number): Promise<void> {\n try {\n await this.provider.set(key, value, ttlSeconds);\n } catch (err) {\n this.logger.error(`Cache set failed for key \"${key}\"`, err);\n }\n }\n\n // Returns cached value or null on miss or any Redis error — callers fall back to DB\n async get<T>(key: string): Promise<T | null> {\n try {\n return await this.provider.get<T>(key);\n } catch (err) {\n this.logger.error(`Cache get failed for key \"${key}\"`, err);\n return null;\n }\n }\n\n // Deletes one or more keys — errors are logged and swallowed\n async del(...keys: string[]): Promise<void> {\n try {\n await this.provider.del(...keys);\n } catch (err) {\n this.logger.error(`Cache del failed for keys \"${keys.join(', ')}\"`, err);\n }\n }\n\n // Returns all keys matching a glob pattern — returns empty array on error\n async scanKeys(pattern: string): Promise<string[]> {\n try {\n return await this.provider.scanKeys(pattern);\n } catch (err) {\n this.logger.error(`Cache scanKeys failed for pattern \"${pattern}\"`, err);\n return [];\n }\n }\n\n // Returns raw memory info from the provider — returns empty string on error\n async getMemoryInfo(): Promise<string> {\n try {\n return await this.provider.getMemoryInfo();\n } catch (err) {\n this.logger.error('Cache getMemoryInfo failed', err);\n return '';\n }\n }\n}\n","// Injection token for the active cache provider — use this to inject ICacheProvider\nexport const CACHE_PROVIDER = Symbol('CACHE_PROVIDER');\n\n// Injection token for LruCacheProvider construction options\nexport const LRU_CACHE_OPTIONS = Symbol('LRU_CACHE_OPTIONS');\n\n// Injection token for the resolved CacheModuleOptions (used by forRootAsync)\nexport const CACHE_MODULE_OPTIONS = Symbol('CACHE_MODULE_OPTIONS');\n\n// Default entry cap for the in-memory LRU provider when no max is configured\nexport const DEFAULT_LRU_MAX = 10000;\n","import { Inject, Injectable, Optional } from '@nestjs/common';\nimport { LRUCache } from 'lru-cache';\nimport { DEFAULT_LRU_MAX, LRU_CACHE_OPTIONS } from '../constants';\nimport type { ICacheProvider } from '../interfaces/cache-provider.interface';\n\nexport interface LruCacheOptions {\n max?: number;\n}\n\n// Escapes a Redis-style glob (only * and ? are special) into an anchored RegExp for key scanning\nfunction globToRegExp(pattern: string): RegExp {\n const escaped = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/\\?/g, '.');\n return new RegExp(`^${escaped}$`);\n}\n\n@Injectable()\nexport class LruCacheProvider implements ICacheProvider {\n private readonly cache: LRUCache<string, object>;\n\n constructor(@Optional() @Inject(LRU_CACHE_OPTIONS) options?: LruCacheOptions) {\n this.cache = new LRUCache<string, object>({ max: options?.max ?? DEFAULT_LRU_MAX });\n }\n\n // Stores a value with a per-key TTL (wrapped so primitives survive lru-cache's object value type)\n async set<T>(key: string, value: T, ttlSeconds: number): Promise<void> {\n this.cache.set(key, { value } as object, { ttl: ttlSeconds * 1000 });\n }\n\n // Returns the stored value, or null on miss or expiry\n async get<T>(key: string): Promise<T | null> {\n const entry = this.cache.get(key) as { value: T } | undefined;\n return entry ? entry.value : null;\n }\n\n // Deletes one or more keys\n async del(...keys: string[]): Promise<void> {\n for (const key of keys) this.cache.delete(key);\n }\n\n // Returns all live keys matching a Redis-style glob pattern\n async scanKeys(pattern: string): Promise<string[]> {\n const regex = globToRegExp(pattern);\n return [...this.cache.keys()].filter((key) => regex.test(key));\n }\n\n // Reports entry count for monitoring utilities\n async getMemoryInfo(): Promise<string> {\n return `entries:${this.cache.size} max:${this.cache.max}`;\n }\n}\n","import { Injectable, Logger, OnModuleDestroy, OnModuleInit } from '@nestjs/common';\nimport { ConfigService } from '@nestjs/config';\nimport Redis from 'ioredis';\nimport type { ICacheProvider } from '../interfaces/cache-provider.interface';\n\n@Injectable()\nexport class RedisCacheProvider implements ICacheProvider, OnModuleInit, OnModuleDestroy {\n private readonly logger = new Logger(RedisCacheProvider.name);\n private client: Redis;\n\n constructor(private readonly configService: ConfigService) {}\n\n // Creates the ioredis client and attaches connection/error listeners\n onModuleInit(): void {\n const url = this.configService.getOrThrow<string>('REDIS_URL');\n this.client = new Redis(url, {\n lazyConnect: true,\n maxRetriesPerRequest: 3,\n });\n this.client.on('connect', () => this.logger.log('Redis connected'));\n this.client.on('error', (err) => this.logger.error('Redis error', err));\n }\n\n // Gracefully closes the ioredis connection on app shutdown\n async onModuleDestroy(): Promise<void> {\n await this.client.quit();\n this.logger.log('Redis disconnected');\n }\n\n // Serializes value to JSON and stores with a mandatory TTL\n async set<T>(key: string, value: T, ttlSeconds: number): Promise<void> {\n const json = JSON.stringify(value);\n await this.client.setex(key, ttlSeconds, json);\n }\n\n // Reads the stored JSON string and parses back to the original type\n async get<T>(key: string): Promise<T | null> {\n const json = await this.client.get(key);\n if (!json) return null;\n return JSON.parse(json) as T;\n }\n\n // Deletes one or more keys in a single command\n async del(...keys: string[]): Promise<void> {\n if (keys.length > 0) {\n await this.client.del(...keys);\n }\n }\n\n // Cursor-iterates all keys matching a glob pattern — never uses KEYS command\n async scanKeys(pattern: string): Promise<string[]> {\n const keys: string[] = [];\n let cursor = '0';\n do {\n const [nextCursor, batch] = await this.client.scan(cursor, 'MATCH', pattern, 'COUNT', 100);\n cursor = nextCursor;\n keys.push(...batch);\n } while (cursor !== '0');\n return keys;\n }\n\n // Returns raw INFO memory output for memory monitoring\n async getMemoryInfo(): Promise<string> {\n return this.client.info('memory');\n }\n}\n"],"mappings":";;;;AAAA,SAA6BA,cAA6B;AAC1D,SAASC,oBAAoB;;;ACD7B,SAASC,QAAQC,YAAYC,cAAc;;;ACCpC,IAAMC,iBAAiBC,OAAO,gBAAA;AAG9B,IAAMC,oBAAoBD,OAAO,mBAAA;AAGjC,IAAME,uBAAuBF,OAAO,sBAAA;AAGpC,IAAMG,kBAAkB;;;;;;;;;;;;;;;;;;;;ADLxB,IAAMC,eAAN,MAAMA,cAAAA;SAAAA;;;;EACMC,SAAS,IAAIC,OAAOF,cAAaG,IAAI;EAEtD,YAAqDC,UAA0B;SAA1BA,WAAAA;EAA2B;;EAGhF,MAAMC,IAAOC,KAAaC,OAAUC,YAAmC;AACrE,QAAI;AACF,YAAM,KAAKJ,SAASC,IAAIC,KAAKC,OAAOC,UAAAA;IACtC,SAASC,KAAK;AACZ,WAAKR,OAAOS,MAAM,6BAA6BJ,GAAAA,KAAQG,GAAAA;IACzD;EACF;;EAGA,MAAME,IAAOL,KAAgC;AAC3C,QAAI;AACF,aAAO,MAAM,KAAKF,SAASO,IAAOL,GAAAA;IACpC,SAASG,KAAK;AACZ,WAAKR,OAAOS,MAAM,6BAA6BJ,GAAAA,KAAQG,GAAAA;AACvD,aAAO;IACT;EACF;;EAGA,MAAMG,OAAOC,MAA+B;AAC1C,QAAI;AACF,YAAM,KAAKT,SAASQ,IAAG,GAAIC,IAAAA;IAC7B,SAASJ,KAAK;AACZ,WAAKR,OAAOS,MAAM,8BAA8BG,KAAKC,KAAK,IAAA,CAAA,KAAUL,GAAAA;IACtE;EACF;;EAGA,MAAMM,SAASC,SAAoC;AACjD,QAAI;AACF,aAAO,MAAM,KAAKZ,SAASW,SAASC,OAAAA;IACtC,SAASP,KAAK;AACZ,WAAKR,OAAOS,MAAM,sCAAsCM,OAAAA,KAAYP,GAAAA;AACpE,aAAO,CAAA;IACT;EACF;;EAGA,MAAMQ,gBAAiC;AACrC,QAAI;AACF,aAAO,MAAM,KAAKb,SAASa,cAAa;IAC1C,SAASR,KAAK;AACZ,WAAKR,OAAOS,MAAM,8BAA8BD,GAAAA;AAChD,aAAO;IACT;EACF;AACF;;;;;;;;;;;AEzDA,SAASS,UAAAA,SAAQC,cAAAA,aAAYC,gBAAgB;AAC7C,SAASC,gBAAgB;;;;;;;;;;;;;;;;;;AASzB,SAASC,aAAaC,SAAe;AACnC,QAAMC,UAAUD,QACbE,QAAQ,qBAAqB,MAAA,EAC7BA,QAAQ,OAAO,IAAA,EACfA,QAAQ,OAAO,GAAA;AAClB,SAAO,IAAIC,OAAO,IAAIF,OAAAA,GAAU;AAClC;AANSF;AASF,IAAMK,mBAAN,MAAMA;SAAAA;;;EACMC;EAEjB,YAAmDC,SAA2B;AAC5E,SAAKD,QAAQ,IAAIE,SAAyB;MAAEC,KAAKF,SAASE,OAAOC;IAAgB,CAAA;EACnF;;EAGA,MAAMC,IAAOC,KAAaC,OAAUC,YAAmC;AACrE,SAAKR,MAAMK,IAAIC,KAAK;MAAEC;IAAM,GAAa;MAAEE,KAAKD,aAAa;IAAK,CAAA;EACpE;;EAGA,MAAME,IAAOJ,KAAgC;AAC3C,UAAMK,QAAQ,KAAKX,MAAMU,IAAIJ,GAAAA;AAC7B,WAAOK,QAAQA,MAAMJ,QAAQ;EAC/B;;EAGA,MAAMK,OAAOC,MAA+B;AAC1C,eAAWP,OAAOO,KAAM,MAAKb,MAAMc,OAAOR,GAAAA;EAC5C;;EAGA,MAAMS,SAASpB,SAAoC;AACjD,UAAMqB,QAAQtB,aAAaC,OAAAA;AAC3B,WAAO;SAAI,KAAKK,MAAMa,KAAI;MAAII,OAAO,CAACX,QAAQU,MAAME,KAAKZ,GAAAA,CAAAA;EAC3D;;EAGA,MAAMa,gBAAiC;AACrC,WAAO,WAAW,KAAKnB,MAAMoB,IAAI,QAAQ,KAAKpB,MAAMG,GAAG;EACzD;AACF;;;;;;;;;;;;ACpDA,SAASkB,cAAAA,aAAYC,UAAAA,eAA6C;AAClE,SAASC,qBAAqB;AAC9B,OAAOC,WAAW;;;;;;;;;;;;AAIX,IAAMC,qBAAN,MAAMA,oBAAAA;SAAAA;;;;EACMC,SAAS,IAAIC,QAAOF,oBAAmBG,IAAI;EACpDC;EAER,YAA6BC,eAA8B;SAA9BA,gBAAAA;EAA+B;;EAG5DC,eAAqB;AACnB,UAAMC,MAAM,KAAKF,cAAcG,WAAmB,WAAA;AAClD,SAAKJ,SAAS,IAAIK,MAAMF,KAAK;MAC3BG,aAAa;MACbC,sBAAsB;IACxB,CAAA;AACA,SAAKP,OAAOQ,GAAG,WAAW,MAAM,KAAKX,OAAOY,IAAI,iBAAA,CAAA;AAChD,SAAKT,OAAOQ,GAAG,SAAS,CAACE,QAAQ,KAAKb,OAAOc,MAAM,eAAeD,GAAAA,CAAAA;EACpE;;EAGA,MAAME,kBAAiC;AACrC,UAAM,KAAKZ,OAAOa,KAAI;AACtB,SAAKhB,OAAOY,IAAI,oBAAA;EAClB;;EAGA,MAAMK,IAAOC,KAAaC,OAAUC,YAAmC;AACrE,UAAMC,OAAOC,KAAKC,UAAUJ,KAAAA;AAC5B,UAAM,KAAKhB,OAAOqB,MAAMN,KAAKE,YAAYC,IAAAA;EAC3C;;EAGA,MAAMI,IAAOP,KAAgC;AAC3C,UAAMG,OAAO,MAAM,KAAKlB,OAAOsB,IAAIP,GAAAA;AACnC,QAAI,CAACG,KAAM,QAAO;AAClB,WAAOC,KAAKI,MAAML,IAAAA;EACpB;;EAGA,MAAMM,OAAOC,MAA+B;AAC1C,QAAIA,KAAKC,SAAS,GAAG;AACnB,YAAM,KAAK1B,OAAOwB,IAAG,GAAIC,IAAAA;IAC3B;EACF;;EAGA,MAAME,SAASC,SAAoC;AACjD,UAAMH,OAAiB,CAAA;AACvB,QAAII,SAAS;AACb,OAAG;AACD,YAAM,CAACC,YAAYC,KAAAA,IAAS,MAAM,KAAK/B,OAAOgC,KAAKH,QAAQ,SAASD,SAAS,SAAS,GAAA;AACtFC,eAASC;AACTL,WAAKQ,KAAI,GAAIF,KAAAA;IACf,SAASF,WAAW;AACpB,WAAOJ;EACT;;EAGA,MAAMS,gBAAiC;AACrC,WAAO,KAAKlC,OAAOmC,KAAK,QAAA;EAC1B;AACF;;;;;;;;;;;;;;;;;AJhCO,IAAMC,cAAN,MAAMA,aAAAA;SAAAA;;;;EAEX,OAAOC,QAAQC,UAA8B,CAAC,GAAkB;AAC9D,QAAIA,QAAQC,WAAW,OAAO;AAC5B,aAAO;QACLC,QAAQJ;QACRK,WAAW;UACT;YAAEC,SAASC;YAAmBC,UAAUN,QAAQO,OAAO,CAAC;UAAE;UAC1DC;UACA;YAAEJ,SAASK;YAAgBC,aAAaF;UAAiB;UACzDG;;QAEFC,SAAS;UAACJ;UAAkBC;UAAgBE;;MAC9C;IACF;AACA,WAAO;MACLT,QAAQJ;MACRe,SAAS;QAACC;;MACVX,WAAW;QAACY;QAAoB;UAAEX,SAASK;UAAgBC,aAAaK;QAAmB;QAAGJ;;MAC9FC,SAAS;QAACG;QAAoBN;QAAgBE;;IAChD;EACF;;EAGA,OAAOK,aAAahB,SAAiD;AACnE,UAAMiB,kBAA4B;MAChCb,SAASc;MACTC,YAAYnB,QAAQmB;MACpBC,QAAQpB,QAAQoB,UAAU,CAAA;IAC5B;AACA,WAAO;MACLlB,QAAQJ;MACRe,SAAS;QAACC;WAAkBd,QAAQa,WAAW,CAAA;;MAC/CV,WAAW;QACTc;QACA;UACEb,SAASC;UACTc,YAAY,wBAACE,SAA6BA,KAAKd,OAAO,CAAC,GAA3C;UACZa,QAAQ;YAACF;;QACX;QACAV;QACAO;QACA;UACEX,SAASK;UACTU,YAAY,wBAACE,MAA0Bd,KAAuBe,UAC5DD,KAAKpB,WAAW,UAAUqB,QAAQf,KADxB;UAEZa,QAAQ;YAACF;YAAsBV;YAAkBO;;QACnD;QACAJ;;MAEFC,SAAS;QAACH;QAAgBE;;IAC5B;EACF;AACF;;;IAhEEE,SAAS;MAACC;;IACVX,WAAW;MACTY;MACA;QACEX,SAASK;QACTC,aAAaK;MACf;MACAJ;;IAEFC,SAAS;MAACG;MAAoBN;MAAgBE;;;;","names":["Module","ConfigModule","Inject","Injectable","Logger","CACHE_PROVIDER","Symbol","LRU_CACHE_OPTIONS","CACHE_MODULE_OPTIONS","DEFAULT_LRU_MAX","CacheService","logger","Logger","name","provider","set","key","value","ttlSeconds","err","error","get","del","keys","join","scanKeys","pattern","getMemoryInfo","Inject","Injectable","Optional","LRUCache","globToRegExp","pattern","escaped","replace","RegExp","LruCacheProvider","cache","options","LRUCache","max","DEFAULT_LRU_MAX","set","key","value","ttlSeconds","ttl","get","entry","del","keys","delete","scanKeys","regex","filter","test","getMemoryInfo","size","Injectable","Logger","ConfigService","Redis","RedisCacheProvider","logger","Logger","name","client","configService","onModuleInit","url","getOrThrow","Redis","lazyConnect","maxRetriesPerRequest","on","log","err","error","onModuleDestroy","quit","set","key","value","ttlSeconds","json","JSON","stringify","setex","get","parse","del","keys","length","scanKeys","pattern","cursor","nextCursor","batch","scan","push","getMemoryInfo","info","CacheModule","forRoot","options","driver","module","providers","provide","LRU_CACHE_OPTIONS","useValue","lru","LruCacheProvider","CACHE_PROVIDER","useExisting","CacheService","exports","imports","ConfigModule","RedisCacheProvider","forRootAsync","optionsProvider","CACHE_MODULE_OPTIONS","useFactory","inject","opts","redis"]}
|