@xbg.solutions/backend-core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/core/src/app.d.ts +28 -0
- package/lib/core/src/app.d.ts.map +1 -0
- package/lib/core/src/app.js +188 -0
- package/lib/core/src/app.js.map +1 -0
- package/lib/core/src/base/BaseController.d.ts +108 -0
- package/lib/core/src/base/BaseController.d.ts.map +1 -0
- package/lib/core/src/base/BaseController.js +307 -0
- package/lib/core/src/base/BaseController.js.map +1 -0
- package/lib/core/src/base/BaseEntity.d.ts +92 -0
- package/lib/core/src/base/BaseEntity.d.ts.map +1 -0
- package/lib/core/src/base/BaseEntity.js +143 -0
- package/lib/core/src/base/BaseEntity.js.map +1 -0
- package/lib/core/src/base/BaseRepository.d.ts +124 -0
- package/lib/core/src/base/BaseRepository.d.ts.map +1 -0
- package/lib/core/src/base/BaseRepository.js +414 -0
- package/lib/core/src/base/BaseRepository.js.map +1 -0
- package/lib/core/src/base/BaseService.d.ts +89 -0
- package/lib/core/src/base/BaseService.d.ts.map +1 -0
- package/lib/core/src/base/BaseService.js +342 -0
- package/lib/core/src/base/BaseService.js.map +1 -0
- package/lib/core/src/base/index.d.ts +8 -0
- package/lib/core/src/base/index.d.ts.map +1 -0
- package/lib/core/src/base/index.js +24 -0
- package/lib/core/src/base/index.js.map +1 -0
- package/lib/core/src/config/app.config.d.ts +70 -0
- package/lib/core/src/config/app.config.d.ts.map +1 -0
- package/lib/core/src/config/app.config.js +106 -0
- package/lib/core/src/config/app.config.js.map +1 -0
- package/lib/core/src/config/auth.config.d.ts +54 -0
- package/lib/core/src/config/auth.config.d.ts.map +1 -0
- package/lib/core/src/config/auth.config.js +88 -0
- package/lib/core/src/config/auth.config.js.map +1 -0
- package/lib/core/src/config/cache.config.d.ts +47 -0
- package/lib/core/src/config/cache.config.d.ts.map +1 -0
- package/lib/core/src/config/cache.config.js +225 -0
- package/lib/core/src/config/cache.config.js.map +1 -0
- package/lib/core/src/config/communications.config.d.ts +175 -0
- package/lib/core/src/config/communications.config.d.ts.map +1 -0
- package/lib/core/src/config/communications.config.js +219 -0
- package/lib/core/src/config/communications.config.js.map +1 -0
- package/lib/core/src/config/database.config.d.ts +68 -0
- package/lib/core/src/config/database.config.d.ts.map +1 -0
- package/lib/core/src/config/database.config.js +95 -0
- package/lib/core/src/config/database.config.js.map +1 -0
- package/lib/core/src/config/firebase-event-mapping.config.d.ts +41 -0
- package/lib/core/src/config/firebase-event-mapping.config.d.ts.map +1 -0
- package/lib/core/src/config/firebase-event-mapping.config.js +180 -0
- package/lib/core/src/config/firebase-event-mapping.config.js.map +1 -0
- package/lib/core/src/config/firestore.config.d.ts +61 -0
- package/lib/core/src/config/firestore.config.d.ts.map +1 -0
- package/lib/core/src/config/firestore.config.js +74 -0
- package/lib/core/src/config/firestore.config.js.map +1 -0
- package/lib/core/src/config/index.d.ts +15 -0
- package/lib/core/src/config/index.d.ts.map +1 -0
- package/lib/core/src/config/index.js +41 -0
- package/lib/core/src/config/index.js.map +1 -0
- package/lib/core/src/config/maps.config.d.ts +31 -0
- package/lib/core/src/config/maps.config.d.ts.map +1 -0
- package/lib/core/src/config/maps.config.js +50 -0
- package/lib/core/src/config/maps.config.js.map +1 -0
- package/lib/core/src/config/middleware.config.d.ts +57 -0
- package/lib/core/src/config/middleware.config.d.ts.map +1 -0
- package/lib/core/src/config/middleware.config.js +68 -0
- package/lib/core/src/config/middleware.config.js.map +1 -0
- package/lib/core/src/config/tokens.config.d.ts +53 -0
- package/lib/core/src/config/tokens.config.d.ts.map +1 -0
- package/lib/core/src/config/tokens.config.js +129 -0
- package/lib/core/src/config/tokens.config.js.map +1 -0
- package/lib/core/src/generator/generator.d.ts +38 -0
- package/lib/core/src/generator/generator.d.ts.map +1 -0
- package/lib/core/src/generator/generator.js +159 -0
- package/lib/core/src/generator/generator.js.map +1 -0
- package/lib/core/src/generator/index.d.ts +7 -0
- package/lib/core/src/generator/index.d.ts.map +1 -0
- package/lib/core/src/generator/index.js +23 -0
- package/lib/core/src/generator/index.js.map +1 -0
- package/lib/core/src/generator/parser.d.ts +10 -0
- package/lib/core/src/generator/parser.d.ts.map +1 -0
- package/lib/core/src/generator/parser.js +197 -0
- package/lib/core/src/generator/parser.js.map +1 -0
- package/lib/core/src/generator/types.d.ts +112 -0
- package/lib/core/src/generator/types.d.ts.map +1 -0
- package/lib/core/src/generator/types.js +7 -0
- package/lib/core/src/generator/types.js.map +1 -0
- package/lib/core/src/index.d.ts +19 -0
- package/lib/core/src/index.d.ts.map +1 -0
- package/lib/core/src/index.js +46 -0
- package/lib/core/src/index.js.map +1 -0
- package/lib/core/src/middleware/auth.middleware.d.ts +57 -0
- package/lib/core/src/middleware/auth.middleware.d.ts.map +1 -0
- package/lib/core/src/middleware/auth.middleware.js +256 -0
- package/lib/core/src/middleware/auth.middleware.js.map +1 -0
- package/lib/core/src/middleware/cors.middleware.d.ts +13 -0
- package/lib/core/src/middleware/cors.middleware.d.ts.map +1 -0
- package/lib/core/src/middleware/cors.middleware.js +50 -0
- package/lib/core/src/middleware/cors.middleware.js.map +1 -0
- package/lib/core/src/middleware/error.middleware.d.ts +46 -0
- package/lib/core/src/middleware/error.middleware.d.ts.map +1 -0
- package/lib/core/src/middleware/error.middleware.js +174 -0
- package/lib/core/src/middleware/error.middleware.js.map +1 -0
- package/lib/core/src/middleware/index.d.ts +11 -0
- package/lib/core/src/middleware/index.d.ts.map +1 -0
- package/lib/core/src/middleware/index.js +27 -0
- package/lib/core/src/middleware/index.js.map +1 -0
- package/lib/core/src/middleware/logging.middleware.d.ts +10 -0
- package/lib/core/src/middleware/logging.middleware.d.ts.map +1 -0
- package/lib/core/src/middleware/logging.middleware.js +87 -0
- package/lib/core/src/middleware/logging.middleware.js.map +1 -0
- package/lib/core/src/middleware/rateLimit.middleware.d.ts +26 -0
- package/lib/core/src/middleware/rateLimit.middleware.d.ts.map +1 -0
- package/lib/core/src/middleware/rateLimit.middleware.js +105 -0
- package/lib/core/src/middleware/rateLimit.middleware.js.map +1 -0
- package/lib/core/src/middleware/requestId.middleware.d.ts +11 -0
- package/lib/core/src/middleware/requestId.middleware.d.ts.map +1 -0
- package/lib/core/src/middleware/requestId.middleware.js +26 -0
- package/lib/core/src/middleware/requestId.middleware.js.map +1 -0
- package/lib/core/src/middleware/validation.middleware.d.ts +25 -0
- package/lib/core/src/middleware/validation.middleware.d.ts.map +1 -0
- package/lib/core/src/middleware/validation.middleware.js +133 -0
- package/lib/core/src/middleware/validation.middleware.js.map +1 -0
- package/lib/core/src/types/errors.d.ts +119 -0
- package/lib/core/src/types/errors.d.ts.map +1 -0
- package/lib/core/src/types/errors.js +210 -0
- package/lib/core/src/types/errors.js.map +1 -0
- package/lib/utils-cache-connector/src/cache-connector.d.ts +139 -0
- package/lib/utils-cache-connector/src/cache-connector.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/cache-connector.js +277 -0
- package/lib/utils-cache-connector/src/cache-connector.js.map +1 -0
- package/lib/utils-cache-connector/src/index.d.ts +52 -0
- package/lib/utils-cache-connector/src/index.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/index.js +103 -0
- package/lib/utils-cache-connector/src/index.js.map +1 -0
- package/lib/utils-cache-connector/src/providers/base-cache-provider.d.ts +95 -0
- package/lib/utils-cache-connector/src/providers/base-cache-provider.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/providers/base-cache-provider.js +120 -0
- package/lib/utils-cache-connector/src/providers/base-cache-provider.js.map +1 -0
- package/lib/utils-cache-connector/src/providers/firestore-cache-provider.d.ts +58 -0
- package/lib/utils-cache-connector/src/providers/firestore-cache-provider.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/providers/firestore-cache-provider.js +418 -0
- package/lib/utils-cache-connector/src/providers/firestore-cache-provider.js.map +1 -0
- package/lib/utils-cache-connector/src/providers/memory-cache-provider.d.ts +57 -0
- package/lib/utils-cache-connector/src/providers/memory-cache-provider.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/providers/memory-cache-provider.js +217 -0
- package/lib/utils-cache-connector/src/providers/memory-cache-provider.js.map +1 -0
- package/lib/utils-cache-connector/src/providers/noop-cache-provider.d.ts +21 -0
- package/lib/utils-cache-connector/src/providers/noop-cache-provider.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/providers/noop-cache-provider.js +42 -0
- package/lib/utils-cache-connector/src/providers/noop-cache-provider.js.map +1 -0
- package/lib/utils-cache-connector/src/providers/redis-cache-provider.d.ts +64 -0
- package/lib/utils-cache-connector/src/providers/redis-cache-provider.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/providers/redis-cache-provider.js +414 -0
- package/lib/utils-cache-connector/src/providers/redis-cache-provider.js.map +1 -0
- package/lib/utils-cache-connector/src/types.d.ts +342 -0
- package/lib/utils-cache-connector/src/types.d.ts.map +1 -0
- package/lib/utils-cache-connector/src/types.js +8 -0
- package/lib/utils-cache-connector/src/types.js.map +1 -0
- package/lib/utils-events/src/event-bus.d.ts +42 -0
- package/lib/utils-events/src/event-bus.d.ts.map +1 -0
- package/lib/utils-events/src/event-bus.js +93 -0
- package/lib/utils-events/src/event-bus.js.map +1 -0
- package/lib/utils-events/src/event-types.d.ts +146 -0
- package/lib/utils-events/src/event-types.d.ts.map +1 -0
- package/lib/utils-events/src/event-types.js +49 -0
- package/lib/utils-events/src/event-types.js.map +1 -0
- package/lib/utils-events/src/index.d.ts +7 -0
- package/lib/utils-events/src/index.d.ts.map +1 -0
- package/lib/utils-events/src/index.js +11 -0
- package/lib/utils-events/src/index.js.map +1 -0
- package/lib/utils-logger/src/index.d.ts +12 -0
- package/lib/utils-logger/src/index.d.ts.map +1 -0
- package/lib/utils-logger/src/index.js +29 -0
- package/lib/utils-logger/src/index.js.map +1 -0
- package/lib/utils-logger/src/logger-types.d.ts +32 -0
- package/lib/utils-logger/src/logger-types.d.ts.map +1 -0
- package/lib/utils-logger/src/logger-types.js +17 -0
- package/lib/utils-logger/src/logger-types.js.map +1 -0
- package/lib/utils-logger/src/logger.d.ts +42 -0
- package/lib/utils-logger/src/logger.d.ts.map +1 -0
- package/lib/utils-logger/src/logger.js +123 -0
- package/lib/utils-logger/src/logger.js.map +1 -0
- package/package.json +49 -0
- package/src/templates/controller.hbs +48 -0
- package/src/templates/entity.hbs +80 -0
- package/src/templates/repository.hbs +56 -0
- package/src/templates/service.hbs +108 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Firestore Cache Provider
|
|
3
|
+
*
|
|
4
|
+
* Firestore-based cache provider for distributed caching across function instances.
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Shared cache across all function instances
|
|
8
|
+
* - Persistent across cold starts
|
|
9
|
+
* - TTL-based expiration using Firestore timestamps
|
|
10
|
+
* - Tag-based invalidation
|
|
11
|
+
* - Automatic cleanup of expired entries
|
|
12
|
+
*
|
|
13
|
+
* Best for:
|
|
14
|
+
* - Medium-traffic repositories
|
|
15
|
+
* - Data that needs to be shared across instances
|
|
16
|
+
* - Cache data that should survive cold starts
|
|
17
|
+
*
|
|
18
|
+
* Trade-offs:
|
|
19
|
+
* - Latency: ~50-100ms (vs memory ~1-5ms)
|
|
20
|
+
* - Cost: Firestore read/write operations
|
|
21
|
+
* - Size limit: 1MB per document
|
|
22
|
+
*/
|
|
23
|
+
import { BaseCacheProvider } from './base-cache-provider';
|
|
24
|
+
import { CacheProviderType, CacheSetOptions, CacheEntry, FirestoreCacheProviderConfig } from '../types';
|
|
25
|
+
export declare class FirestoreCacheProvider extends BaseCacheProvider {
|
|
26
|
+
private config;
|
|
27
|
+
private db;
|
|
28
|
+
private cleanupInterval;
|
|
29
|
+
constructor(config: FirestoreCacheProviderConfig);
|
|
30
|
+
getType(): CacheProviderType;
|
|
31
|
+
/**
|
|
32
|
+
* Get collection reference
|
|
33
|
+
*/
|
|
34
|
+
private getCollection;
|
|
35
|
+
get<T>(key: string): Promise<T | null>;
|
|
36
|
+
getWithMetadata<T>(key: string): Promise<CacheEntry<T> | null>;
|
|
37
|
+
set<T>(key: string, value: T, options?: CacheSetOptions): Promise<void>;
|
|
38
|
+
delete(key: string): Promise<boolean>;
|
|
39
|
+
has(key: string): Promise<boolean>;
|
|
40
|
+
invalidateByTags(tags: string[]): Promise<number>;
|
|
41
|
+
invalidateByPattern(pattern: string, mode?: 'prefix' | 'suffix' | 'contains'): Promise<number>;
|
|
42
|
+
clear(): Promise<void>;
|
|
43
|
+
cleanup(): Promise<number>;
|
|
44
|
+
getStats(): Promise<any>;
|
|
45
|
+
/**
|
|
46
|
+
* Start automatic cleanup of expired entries
|
|
47
|
+
*/
|
|
48
|
+
private startCleanup;
|
|
49
|
+
/**
|
|
50
|
+
* Stop automatic cleanup
|
|
51
|
+
*/
|
|
52
|
+
stopCleanup(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Cleanup on provider destruction
|
|
55
|
+
*/
|
|
56
|
+
destroy(): void;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=firestore-cache-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firestore-cache-provider.d.ts","sourceRoot":"","sources":["../../../../../utils-cache-connector/src/providers/firestore-cache-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAclB,qBAAa,sBAAuB,SAAQ,iBAAiB;IAI/C,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,EAAE,CAA4B;IACtC,OAAO,CAAC,eAAe,CAA+B;gBAElC,MAAM,EAAE,4BAA4B;IAaxD,OAAO,IAAI,iBAAiB;IAI5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAIf,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAkDtC,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAiD9D,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B3E,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBrC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgClC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IA+BjD,mBAAmB,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,QAAQ,GAAG,QAAQ,GAAG,UAAqB,GAChD,OAAO,CAAC,MAAM,CAAC;IA6CZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBtB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAiC1B,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;IA2B9B;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,WAAW,IAAI,IAAI;IAOnB;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Firestore Cache Provider
|
|
4
|
+
*
|
|
5
|
+
* Firestore-based cache provider for distributed caching across function instances.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Shared cache across all function instances
|
|
9
|
+
* - Persistent across cold starts
|
|
10
|
+
* - TTL-based expiration using Firestore timestamps
|
|
11
|
+
* - Tag-based invalidation
|
|
12
|
+
* - Automatic cleanup of expired entries
|
|
13
|
+
*
|
|
14
|
+
* Best for:
|
|
15
|
+
* - Medium-traffic repositories
|
|
16
|
+
* - Data that needs to be shared across instances
|
|
17
|
+
* - Cache data that should survive cold starts
|
|
18
|
+
*
|
|
19
|
+
* Trade-offs:
|
|
20
|
+
* - Latency: ~50-100ms (vs memory ~1-5ms)
|
|
21
|
+
* - Cost: Firestore read/write operations
|
|
22
|
+
* - Size limit: 1MB per document
|
|
23
|
+
*/
|
|
24
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
27
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
28
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
29
|
+
}
|
|
30
|
+
Object.defineProperty(o, k2, desc);
|
|
31
|
+
}) : (function(o, m, k, k2) {
|
|
32
|
+
if (k2 === undefined) k2 = k;
|
|
33
|
+
o[k2] = m[k];
|
|
34
|
+
}));
|
|
35
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
36
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
37
|
+
}) : function(o, v) {
|
|
38
|
+
o["default"] = v;
|
|
39
|
+
});
|
|
40
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
41
|
+
var ownKeys = function(o) {
|
|
42
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
43
|
+
var ar = [];
|
|
44
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
45
|
+
return ar;
|
|
46
|
+
};
|
|
47
|
+
return ownKeys(o);
|
|
48
|
+
};
|
|
49
|
+
return function (mod) {
|
|
50
|
+
if (mod && mod.__esModule) return mod;
|
|
51
|
+
var result = {};
|
|
52
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
53
|
+
__setModuleDefault(result, mod);
|
|
54
|
+
return result;
|
|
55
|
+
};
|
|
56
|
+
})();
|
|
57
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
58
|
+
exports.FirestoreCacheProvider = void 0;
|
|
59
|
+
const admin = __importStar(require("firebase-admin"));
|
|
60
|
+
const firestore_1 = require("firebase-admin/firestore");
|
|
61
|
+
const base_cache_provider_1 = require("./base-cache-provider");
|
|
62
|
+
const utils_logger_1 = require("@xbg/utils-logger");
|
|
63
|
+
class FirestoreCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
64
|
+
constructor(config) {
|
|
65
|
+
super();
|
|
66
|
+
this.config = config;
|
|
67
|
+
this.cleanupInterval = null;
|
|
68
|
+
// Get Firestore instance
|
|
69
|
+
// We use the default app's Firestore (configured via CACHE_FIRESTORE_DATABASE)
|
|
70
|
+
this.db = admin.firestore();
|
|
71
|
+
// Start automatic cleanup if enabled
|
|
72
|
+
if (config.enableCleanup) {
|
|
73
|
+
this.startCleanup();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
getType() {
|
|
77
|
+
return 'firestore';
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get collection reference
|
|
81
|
+
*/
|
|
82
|
+
getCollection() {
|
|
83
|
+
return this.db.collection(this.config.collection);
|
|
84
|
+
}
|
|
85
|
+
async get(key) {
|
|
86
|
+
try {
|
|
87
|
+
const docRef = this.getCollection().doc(key);
|
|
88
|
+
const doc = await docRef.get();
|
|
89
|
+
if (!doc.exists) {
|
|
90
|
+
this.recordMiss();
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
const data = doc.data();
|
|
94
|
+
if (!data) {
|
|
95
|
+
this.recordMiss();
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
// Check if expired
|
|
99
|
+
const expiresAt = data.expiresAt.toDate();
|
|
100
|
+
if (this.isExpired(expiresAt)) {
|
|
101
|
+
// Delete expired entry
|
|
102
|
+
await docRef.delete();
|
|
103
|
+
this.recordExpiration();
|
|
104
|
+
this.recordMiss();
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
// Update access metadata (fire and forget)
|
|
108
|
+
docRef.update({
|
|
109
|
+
hitCount: admin.firestore.FieldValue.increment(1),
|
|
110
|
+
lastAccessedAt: firestore_1.Timestamp.now(),
|
|
111
|
+
}).catch((error) => {
|
|
112
|
+
utils_logger_1.logger.warn('Failed to update cache access metadata', {
|
|
113
|
+
operation: 'cache.get',
|
|
114
|
+
key,
|
|
115
|
+
error,
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
this.recordHit();
|
|
119
|
+
return data.value;
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
utils_logger_1.logger.error('Error getting cache entry from Firestore', error, {
|
|
123
|
+
operation: 'cache.get',
|
|
124
|
+
key,
|
|
125
|
+
});
|
|
126
|
+
this.recordMiss();
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async getWithMetadata(key) {
|
|
131
|
+
try {
|
|
132
|
+
const docRef = this.getCollection().doc(key);
|
|
133
|
+
const doc = await docRef.get();
|
|
134
|
+
if (!doc.exists) {
|
|
135
|
+
this.recordMiss();
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
const data = doc.data();
|
|
139
|
+
if (!data) {
|
|
140
|
+
this.recordMiss();
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
// Check if expired
|
|
144
|
+
const expiresAt = data.expiresAt.toDate();
|
|
145
|
+
if (this.isExpired(expiresAt)) {
|
|
146
|
+
await docRef.delete();
|
|
147
|
+
this.recordExpiration();
|
|
148
|
+
this.recordMiss();
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
this.recordHit();
|
|
152
|
+
return {
|
|
153
|
+
key,
|
|
154
|
+
value: data.value,
|
|
155
|
+
metadata: {
|
|
156
|
+
createdAt: data.createdAt.toDate(),
|
|
157
|
+
expiresAt: expiresAt,
|
|
158
|
+
hitCount: data.hitCount,
|
|
159
|
+
lastAccessedAt: data.lastAccessedAt.toDate(),
|
|
160
|
+
tags: data.tags,
|
|
161
|
+
size: data.size,
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
utils_logger_1.logger.error('Error getting cache entry with metadata from Firestore', error, {
|
|
167
|
+
operation: 'cache.getWithMetadata',
|
|
168
|
+
key,
|
|
169
|
+
});
|
|
170
|
+
this.recordMiss();
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async set(key, value, options = {}) {
|
|
175
|
+
try {
|
|
176
|
+
const ttl = options.ttl || 300; // Default 5 minutes
|
|
177
|
+
const tags = options.tags || [];
|
|
178
|
+
const size = this.estimateSize(value);
|
|
179
|
+
const now = firestore_1.Timestamp.now();
|
|
180
|
+
const expiresAt = firestore_1.Timestamp.fromDate(this.calculateExpiresAt(ttl));
|
|
181
|
+
const cacheDoc = {
|
|
182
|
+
key,
|
|
183
|
+
value,
|
|
184
|
+
createdAt: now,
|
|
185
|
+
expiresAt,
|
|
186
|
+
hitCount: 0,
|
|
187
|
+
lastAccessedAt: now,
|
|
188
|
+
tags,
|
|
189
|
+
size,
|
|
190
|
+
};
|
|
191
|
+
await this.getCollection().doc(key).set(cacheDoc);
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
utils_logger_1.logger.error('Error setting cache entry in Firestore', error, {
|
|
195
|
+
operation: 'cache.set',
|
|
196
|
+
key,
|
|
197
|
+
ttl: options.ttl,
|
|
198
|
+
});
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
async delete(key) {
|
|
203
|
+
try {
|
|
204
|
+
const docRef = this.getCollection().doc(key);
|
|
205
|
+
const doc = await docRef.get();
|
|
206
|
+
if (!doc.exists) {
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
await docRef.delete();
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
utils_logger_1.logger.error('Error deleting cache entry from Firestore', error, {
|
|
214
|
+
operation: 'cache.delete',
|
|
215
|
+
key,
|
|
216
|
+
});
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
async has(key) {
|
|
221
|
+
try {
|
|
222
|
+
const docRef = this.getCollection().doc(key);
|
|
223
|
+
const doc = await docRef.get();
|
|
224
|
+
if (!doc.exists) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
const data = doc.data();
|
|
228
|
+
if (!data) {
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
// Check if expired
|
|
232
|
+
const expiresAt = data.expiresAt.toDate();
|
|
233
|
+
if (this.isExpired(expiresAt)) {
|
|
234
|
+
await docRef.delete();
|
|
235
|
+
this.recordExpiration();
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
utils_logger_1.logger.error('Error checking cache entry in Firestore', error, {
|
|
242
|
+
operation: 'cache.has',
|
|
243
|
+
key,
|
|
244
|
+
});
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
async invalidateByTags(tags) {
|
|
249
|
+
try {
|
|
250
|
+
let count = 0;
|
|
251
|
+
// Query for documents with any of the specified tags
|
|
252
|
+
for (const tag of tags) {
|
|
253
|
+
const query = this.getCollection().where('tags', 'array-contains', tag);
|
|
254
|
+
const snapshot = await query.get();
|
|
255
|
+
// Delete matching documents in batch
|
|
256
|
+
const batch = this.db.batch();
|
|
257
|
+
snapshot.docs.forEach((doc) => {
|
|
258
|
+
batch.delete(doc.ref);
|
|
259
|
+
count++;
|
|
260
|
+
});
|
|
261
|
+
if (!snapshot.empty) {
|
|
262
|
+
await batch.commit();
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return count;
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
utils_logger_1.logger.error('Error invalidating cache by tags in Firestore', error, {
|
|
269
|
+
operation: 'cache.invalidateByTags',
|
|
270
|
+
tags,
|
|
271
|
+
});
|
|
272
|
+
return 0;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
async invalidateByPattern(pattern, mode = 'prefix') {
|
|
276
|
+
try {
|
|
277
|
+
let query;
|
|
278
|
+
if (mode === 'prefix') {
|
|
279
|
+
// Use Firestore range query for prefix matching
|
|
280
|
+
const endPattern = pattern.slice(0, -1) + String.fromCharCode(pattern.charCodeAt(pattern.length - 1) + 1);
|
|
281
|
+
query = this.getCollection()
|
|
282
|
+
.where('key', '>=', pattern)
|
|
283
|
+
.where('key', '<', endPattern);
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
// For suffix and contains, we need to get all documents and filter
|
|
287
|
+
// This is inefficient but Firestore doesn't support these natively
|
|
288
|
+
query = this.getCollection();
|
|
289
|
+
}
|
|
290
|
+
const snapshot = await query.get();
|
|
291
|
+
let count = 0;
|
|
292
|
+
const batch = this.db.batch();
|
|
293
|
+
snapshot.docs.forEach((doc) => {
|
|
294
|
+
const key = doc.data().key;
|
|
295
|
+
// Apply pattern matching
|
|
296
|
+
if (mode === 'prefix' || this.matchPattern(key, pattern, mode)) {
|
|
297
|
+
batch.delete(doc.ref);
|
|
298
|
+
count++;
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
if (count > 0) {
|
|
302
|
+
await batch.commit();
|
|
303
|
+
}
|
|
304
|
+
return count;
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
utils_logger_1.logger.error('Error invalidating cache by pattern in Firestore', error, {
|
|
308
|
+
operation: 'cache.invalidateByPattern',
|
|
309
|
+
pattern,
|
|
310
|
+
mode,
|
|
311
|
+
});
|
|
312
|
+
return 0;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
async clear() {
|
|
316
|
+
try {
|
|
317
|
+
// Delete all documents in batches
|
|
318
|
+
const batchSize = 500;
|
|
319
|
+
let snapshot = await this.getCollection().limit(batchSize).get();
|
|
320
|
+
while (!snapshot.empty) {
|
|
321
|
+
const batch = this.db.batch();
|
|
322
|
+
snapshot.docs.forEach((doc) => {
|
|
323
|
+
batch.delete(doc.ref);
|
|
324
|
+
});
|
|
325
|
+
await batch.commit();
|
|
326
|
+
// Get next batch
|
|
327
|
+
snapshot = await this.getCollection().limit(batchSize).get();
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
catch (error) {
|
|
331
|
+
utils_logger_1.logger.error('Error clearing cache in Firestore', error, {
|
|
332
|
+
operation: 'cache.clear',
|
|
333
|
+
});
|
|
334
|
+
throw error;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
async cleanup() {
|
|
338
|
+
try {
|
|
339
|
+
const now = firestore_1.Timestamp.now();
|
|
340
|
+
const query = this.getCollection().where('expiresAt', '<', now);
|
|
341
|
+
const snapshot = await query.get();
|
|
342
|
+
if (snapshot.empty) {
|
|
343
|
+
return 0;
|
|
344
|
+
}
|
|
345
|
+
// Delete expired documents in batches
|
|
346
|
+
const batch = this.db.batch();
|
|
347
|
+
snapshot.docs.forEach((doc) => {
|
|
348
|
+
batch.delete(doc.ref);
|
|
349
|
+
this.recordExpiration();
|
|
350
|
+
});
|
|
351
|
+
await batch.commit();
|
|
352
|
+
utils_logger_1.logger.debug(`Cleaned up ${snapshot.size} expired cache entries`, {
|
|
353
|
+
operation: 'cache.cleanup',
|
|
354
|
+
count: snapshot.size,
|
|
355
|
+
});
|
|
356
|
+
return snapshot.size;
|
|
357
|
+
}
|
|
358
|
+
catch (error) {
|
|
359
|
+
utils_logger_1.logger.error('Error cleaning up expired cache entries in Firestore', error, {
|
|
360
|
+
operation: 'cache.cleanup',
|
|
361
|
+
});
|
|
362
|
+
return 0;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
async getStats() {
|
|
366
|
+
try {
|
|
367
|
+
const snapshot = await this.getCollection().get();
|
|
368
|
+
let totalSize = 0;
|
|
369
|
+
let expiredCount = 0;
|
|
370
|
+
snapshot.docs.forEach((doc) => {
|
|
371
|
+
const data = doc.data();
|
|
372
|
+
totalSize += data.size || 0;
|
|
373
|
+
if (this.isExpired(data.expiresAt.toDate())) {
|
|
374
|
+
expiredCount++;
|
|
375
|
+
}
|
|
376
|
+
});
|
|
377
|
+
this.updateEntryCount(snapshot.size - expiredCount);
|
|
378
|
+
this.updateSize(totalSize);
|
|
379
|
+
return super.getStats();
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
utils_logger_1.logger.error('Error getting cache stats from Firestore', error, {
|
|
383
|
+
operation: 'cache.getStats',
|
|
384
|
+
});
|
|
385
|
+
return super.getStats();
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Start automatic cleanup of expired entries
|
|
390
|
+
*/
|
|
391
|
+
startCleanup() {
|
|
392
|
+
if (this.cleanupInterval) {
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
this.cleanupInterval = setInterval(async () => {
|
|
396
|
+
await this.cleanup();
|
|
397
|
+
}, this.config.cleanupInterval * 1000);
|
|
398
|
+
// Don't prevent Node.js from exiting
|
|
399
|
+
this.cleanupInterval.unref();
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Stop automatic cleanup
|
|
403
|
+
*/
|
|
404
|
+
stopCleanup() {
|
|
405
|
+
if (this.cleanupInterval) {
|
|
406
|
+
clearInterval(this.cleanupInterval);
|
|
407
|
+
this.cleanupInterval = null;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Cleanup on provider destruction
|
|
412
|
+
*/
|
|
413
|
+
destroy() {
|
|
414
|
+
this.stopCleanup();
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
exports.FirestoreCacheProvider = FirestoreCacheProvider;
|
|
418
|
+
//# sourceMappingURL=firestore-cache-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firestore-cache-provider.js","sourceRoot":"","sources":["../../../../../utils-cache-connector/src/providers/firestore-cache-provider.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,sDAAwC;AACxC,wDAAqD;AACrD,+DAA0D;AAO1D,oDAA2C;AAa3C,MAAa,sBAAuB,SAAQ,uCAAiB;IAI3D,YAAoB,MAAoC;QACtD,KAAK,EAAE,CAAC;QADU,WAAM,GAAN,MAAM,CAA8B;QAFhD,oBAAe,GAA0B,IAAI,CAAC;QAKpD,yBAAyB;QACzB,+EAA+E;QAC/E,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAE5B,qCAAqC;QACrC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAgE,CAAC;IACnH,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;YAE/B,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,mBAAmB;YACnB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,uBAAuB;gBACvB,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;gBACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,2CAA2C;YAC3C,MAAM,CAAC,MAAM,CAAC;gBACZ,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;gBACjD,cAAc,EAAE,qBAAS,CAAC,GAAG,EAAE;aAChC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACjB,qBAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE;oBACpD,SAAS,EAAE,WAAW;oBACtB,GAAG;oBACH,KAAK;iBACN,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,KAAU,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAc,EAAE;gBACvE,SAAS,EAAE,WAAW;gBACtB,GAAG;aACJ,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAI,GAAW;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;YAE/B,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,mBAAmB;YACnB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;gBACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,CAAC,SAAS,EAAE,CAAC;YAEjB,OAAO;gBACL,GAAG;gBACH,KAAK,EAAE,IAAI,CAAC,KAAU;gBACtB,QAAQ,EAAE;oBACR,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;oBAClC,SAAS,EAAE,SAAS;oBACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;oBAC5C,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;iBAChB;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAM,CAAC,KAAK,CAAC,wDAAwD,EAAE,KAAc,EAAE;gBACrF,SAAS,EAAE,uBAAuB;gBAClC,GAAG;aACJ,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,UAA2B,EAAE;QAC/D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,oBAAoB;YACpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAEtC,MAAM,GAAG,GAAG,qBAAS,CAAC,GAAG,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,qBAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;YAEnE,MAAM,QAAQ,GAA2B;gBACvC,GAAG;gBACH,KAAK;gBACL,SAAS,EAAE,GAAG;gBACd,SAAS;gBACT,QAAQ,EAAE,CAAC;gBACX,cAAc,EAAE,GAAG;gBACnB,IAAI;gBACJ,IAAI;aACL,CAAC;YAEF,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAc,EAAE;gBACrE,SAAS,EAAE,WAAW;gBACtB,GAAG;gBACH,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;YAE/B,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAc,EAAE;gBACxE,SAAS,EAAE,cAAc;gBACzB,GAAG;aACJ,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;YAE/B,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC;YACf,CAAC;YAED,mBAAmB;YACnB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;gBACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAc,EAAE;gBACtE,SAAS,EAAE,WAAW;gBACtB,GAAG;aACJ,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAAc;QACnC,IAAI,CAAC;YACH,IAAI,KAAK,GAAG,CAAC,CAAC;YAEd,qDAAqD;YACrD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;gBACxE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;gBAEnC,qCAAqC;gBACrC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC5B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACtB,KAAK,EAAE,CAAC;gBACV,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACpB,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAM,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAc,EAAE;gBAC5E,SAAS,EAAE,wBAAwB;gBACnC,IAAI;aACL,CAAC,CAAC;YACH,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,OAAe,EACf,OAAyC,QAAQ;QAEjD,IAAI,CAAC;YACH,IAAI,KAAoD,CAAC;YAEzD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,gDAAgD;gBAChD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1G,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;qBACzB,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC;qBAC3B,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,mEAAmE;gBACnE,mEAAmE;gBACnE,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAC/B,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;YACnC,IAAI,KAAK,GAAG,CAAC,CAAC;YAEd,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC;gBAE3B,yBAAyB;gBACzB,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;oBAC/D,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACtB,KAAK,EAAE,CAAC;gBACV,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;YACvB,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAM,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAc,EAAE;gBAC/E,SAAS,EAAE,2BAA2B;gBACtC,OAAO;gBACP,IAAI;aACL,CAAC,CAAC;YACH,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,kCAAkC;YAClC,MAAM,SAAS,GAAG,GAAG,CAAC;YACtB,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC;YAEjE,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC5B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC,CAAC,CAAC;gBACH,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;gBAErB,iBAAiB;gBACjB,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC;YAC/D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAc,EAAE;gBAChE,SAAS,EAAE,aAAa;aACzB,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,qBAAS,CAAC,GAAG,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAChE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;YAEnC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,CAAC,CAAC;YACX,CAAC;YAED,sCAAsC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC5B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;YAEH,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;YAErB,qBAAM,CAAC,KAAK,CAAC,cAAc,QAAQ,CAAC,IAAI,wBAAwB,EAAE;gBAChE,SAAS,EAAE,eAAe;gBAC1B,KAAK,EAAE,QAAQ,CAAC,IAAI;aACrB,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAM,CAAC,KAAK,CAAC,sDAAsD,EAAE,KAAc,EAAE;gBACnF,SAAS,EAAE,eAAe;aAC3B,CAAC,CAAC;YACH,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC;YAClD,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,YAAY,GAAG,CAAC,CAAC;YAErB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;gBACxB,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;gBAE5B,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;oBAC5C,YAAY,EAAE,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC;YACpD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAE3B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAc,EAAE;gBACvE,SAAS,EAAE,gBAAgB;aAC5B,CAAC,CAAC;YACH,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YAC5C,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;QAEvC,qCAAqC;QACrC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;CACF;AArZD,wDAqZC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Cache Provider
|
|
3
|
+
*
|
|
4
|
+
* In-memory cache provider using Map data structure.
|
|
5
|
+
* Features:
|
|
6
|
+
* - TTL-based expiration
|
|
7
|
+
* - LRU eviction when max size is reached
|
|
8
|
+
* - Automatic cleanup of expired entries
|
|
9
|
+
* - Tag-based invalidation
|
|
10
|
+
*
|
|
11
|
+
* Best for:
|
|
12
|
+
* - Request-scoped caching
|
|
13
|
+
* - Hot data within a single function instance
|
|
14
|
+
* - Auth/permissions data
|
|
15
|
+
* - Configuration values
|
|
16
|
+
*
|
|
17
|
+
* Limitations:
|
|
18
|
+
* - Not shared across function instances
|
|
19
|
+
* - Lost on cold starts
|
|
20
|
+
* - Limited by instance memory
|
|
21
|
+
*/
|
|
22
|
+
import { BaseCacheProvider } from './base-cache-provider';
|
|
23
|
+
import { CacheProviderType, CacheSetOptions, CacheEntry, MemoryCacheProviderConfig } from '../types';
|
|
24
|
+
export declare class MemoryCacheProvider extends BaseCacheProvider {
|
|
25
|
+
private config;
|
|
26
|
+
private cache;
|
|
27
|
+
private cleanupInterval;
|
|
28
|
+
private currentSize;
|
|
29
|
+
constructor(config: MemoryCacheProviderConfig);
|
|
30
|
+
getType(): CacheProviderType;
|
|
31
|
+
get<T>(key: string): Promise<T | null>;
|
|
32
|
+
getWithMetadata<T>(key: string): Promise<CacheEntry<T> | null>;
|
|
33
|
+
set<T>(key: string, value: T, options?: CacheSetOptions): Promise<void>;
|
|
34
|
+
delete(key: string): Promise<boolean>;
|
|
35
|
+
has(key: string): Promise<boolean>;
|
|
36
|
+
invalidateByTags(tags: string[]): Promise<number>;
|
|
37
|
+
invalidateByPattern(pattern: string, mode?: 'prefix' | 'suffix' | 'contains'): Promise<number>;
|
|
38
|
+
clear(): Promise<void>;
|
|
39
|
+
cleanup(): Promise<number>;
|
|
40
|
+
/**
|
|
41
|
+
* Evict least recently used entries to make space
|
|
42
|
+
*/
|
|
43
|
+
private evictLRU;
|
|
44
|
+
/**
|
|
45
|
+
* Start automatic cleanup of expired entries
|
|
46
|
+
*/
|
|
47
|
+
private startCleanup;
|
|
48
|
+
/**
|
|
49
|
+
* Stop automatic cleanup
|
|
50
|
+
*/
|
|
51
|
+
stopCleanup(): void;
|
|
52
|
+
/**
|
|
53
|
+
* Cleanup on provider destruction
|
|
54
|
+
*/
|
|
55
|
+
destroy(): void;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=memory-cache-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-cache-provider.d.ts","sourceRoot":"","sources":["../../../../../utils-cache-connector/src/providers/memory-cache-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,UAAU,EAEV,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAOlB,qBAAa,mBAAoB,SAAQ,iBAAiB;IAK5C,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,WAAW,CAAa;gBAEZ,MAAM,EAAE,yBAAyB;IAQrD,OAAO,IAAI,iBAAiB;IAItB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA8BtC,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAgB9D,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B3E,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAerC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBlC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBjD,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,QAAQ,GAAG,QAAQ,GAAG,UAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBxG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBhC;;OAEG;YACW,QAAQ;IAwBtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,WAAW,IAAI,IAAI;IAOnB;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}
|