@nest-omni/core 4.1.3-1 → 4.1.3-11
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/audit/audit.module.d.ts +10 -0
- package/audit/audit.module.js +39 -1
- package/audit/controllers/audit.controller.d.ts +24 -0
- package/audit/controllers/audit.controller.js +24 -0
- package/audit/decorators/audit-controller.decorator.d.ts +9 -1
- package/audit/decorators/audit-controller.decorator.js +11 -2
- package/audit/decorators/audit-operation.decorator.d.ts +45 -0
- package/audit/decorators/audit-operation.decorator.js +49 -0
- package/audit/decorators/entity-audit.decorator.d.ts +76 -1
- package/audit/decorators/entity-audit.decorator.js +135 -3
- package/audit/decorators/index.d.ts +1 -0
- package/audit/decorators/index.js +1 -0
- package/audit/dto/audit-log-query.dto.d.ts +3 -0
- package/audit/dto/audit-log-query.dto.js +3 -0
- package/audit/dto/begin-transaction.dto.d.ts +3 -0
- package/audit/dto/begin-transaction.dto.js +3 -0
- package/audit/dto/compare-entities.dto.d.ts +3 -0
- package/audit/dto/compare-entities.dto.js +3 -0
- package/audit/dto/pre-check-restore.dto.d.ts +3 -0
- package/audit/dto/pre-check-restore.dto.js +3 -0
- package/audit/dto/restore-entity.dto.d.ts +3 -0
- package/audit/dto/restore-entity.dto.js +3 -0
- package/audit/entities/entity-audit-log.entity.d.ts +8 -0
- package/audit/entities/entity-audit-log.entity.js +33 -1
- package/audit/entities/entity-transaction.entity.d.ts +10 -0
- package/audit/entities/entity-transaction.entity.js +33 -1
- package/audit/entities/index.d.ts +2 -0
- package/audit/entities/index.js +2 -0
- package/audit/entities/manual-operation-log.entity.d.ts +4 -0
- package/audit/entities/manual-operation-log.entity.js +4 -0
- package/audit/entities/operation-template.entity.d.ts +4 -0
- package/audit/entities/operation-template.entity.js +4 -0
- package/audit/enums/audit.enums.d.ts +45 -5
- package/audit/enums/audit.enums.js +47 -4
- package/audit/index.d.ts +3 -1
- package/audit/index.js +30 -1
- package/audit/interceptors/audit.interceptor.d.ts +15 -0
- package/audit/interceptors/audit.interceptor.js +23 -1
- package/audit/interfaces/audit.interfaces.d.ts +182 -2
- package/audit/services/audit-context.service.d.ts +15 -0
- package/audit/services/audit-context.service.js +15 -0
- package/audit/services/audit-strategy.service.d.ts +6 -0
- package/audit/services/audit-strategy.service.js +13 -0
- package/audit/services/entity-audit.service.d.ts +129 -3
- package/audit/services/entity-audit.service.js +301 -6
- package/audit/services/index.d.ts +2 -0
- package/audit/services/index.js +2 -0
- package/audit/services/manual-audit-log.service.d.ts +124 -0
- package/audit/services/manual-audit-log.service.js +138 -0
- package/audit/services/multi-database.service.d.ts +12 -0
- package/audit/services/multi-database.service.js +12 -0
- package/audit/services/operation-description.service.d.ts +59 -0
- package/audit/services/operation-description.service.js +76 -2
- package/audit/services/transaction-audit.service.d.ts +30 -0
- package/audit/services/transaction-audit.service.js +47 -0
- package/audit/subscribers/entity-audit.subscriber.d.ts +15 -0
- package/audit/subscribers/entity-audit.subscriber.js +29 -1
- package/cache/cache-metrics.service.d.ts +67 -0
- package/cache/cache-metrics.service.js +68 -4
- package/cache/cache-serialization.service.d.ts +31 -0
- package/cache/cache-serialization.service.js +25 -0
- package/cache/cache.constants.d.ts +9 -0
- package/cache/cache.constants.js +9 -0
- package/cache/cache.health.d.ts +26 -0
- package/cache/cache.health.js +30 -0
- package/cache/cache.module.d.ts +86 -0
- package/cache/cache.module.js +71 -0
- package/cache/cache.service.d.ts +140 -0
- package/cache/cache.service.js +157 -0
- package/cache/cache.warmup.service.d.ts +39 -0
- package/cache/cache.warmup.service.js +32 -0
- package/cache/decorators/cache-evict.decorator.d.ts +47 -0
- package/cache/decorators/cache-evict.decorator.js +56 -0
- package/cache/decorators/cache-put.decorator.d.ts +34 -0
- package/cache/decorators/cache-put.decorator.js +39 -0
- package/cache/decorators/cacheable.decorator.d.ts +40 -0
- package/cache/decorators/cacheable.decorator.js +55 -0
- package/cache/dependencies/callback.dependency.d.ts +33 -0
- package/cache/dependencies/callback.dependency.js +39 -1
- package/cache/dependencies/chain.dependency.d.ts +28 -0
- package/cache/dependencies/chain.dependency.js +34 -0
- package/cache/dependencies/db.dependency.d.ts +45 -0
- package/cache/dependencies/db.dependency.js +48 -1
- package/cache/dependencies/file.dependency.d.ts +32 -0
- package/cache/dependencies/file.dependency.js +34 -0
- package/cache/dependencies/tag.dependency.d.ts +36 -0
- package/cache/dependencies/tag.dependency.js +36 -0
- package/cache/dependencies/time.dependency.d.ts +43 -0
- package/cache/dependencies/time.dependency.js +43 -0
- package/cache/examples/basic-usage.d.ts +15 -0
- package/cache/examples/basic-usage.js +62 -8
- package/cache/index.js +9 -0
- package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
- package/cache/interfaces/cache-options.interface.d.ts +81 -0
- package/cache/interfaces/cache-options.interface.js +6 -0
- package/cache/interfaces/cache-provider.interface.d.ts +78 -0
- package/cache/providers/base-cache.provider.d.ts +14 -0
- package/cache/providers/base-cache.provider.js +16 -0
- package/cache/providers/cls-cache.provider.d.ts +20 -0
- package/cache/providers/cls-cache.provider.js +28 -0
- package/cache/providers/memory-cache.provider.d.ts +23 -0
- package/cache/providers/memory-cache.provider.js +26 -0
- package/cache/providers/redis-cache.provider.d.ts +26 -0
- package/cache/providers/redis-cache.provider.js +29 -0
- package/cache/utils/dependency-manager.util.d.ts +52 -0
- package/cache/utils/dependency-manager.util.js +59 -0
- package/cache/utils/key-generator.util.d.ts +42 -0
- package/cache/utils/key-generator.util.js +53 -1
- package/common/abstract.entity.d.ts +14 -0
- package/common/abstract.entity.js +14 -0
- package/common/boilerplate.polyfill.d.ts +142 -4
- package/common/boilerplate.polyfill.js +24 -100
- package/common/dto/dto-container.d.ts +16 -0
- package/common/dto/dto-container.js +20 -0
- package/common/dto/dto-decorators.d.ts +18 -0
- package/common/dto/dto-decorators.js +14 -0
- package/common/dto/dto-extensions.d.ts +11 -0
- package/common/dto/dto-extensions.js +9 -0
- package/common/dto/dto-service-accessor.d.ts +17 -0
- package/common/dto/dto-service-accessor.js +18 -0
- package/common/dto/dto-transformer.d.ts +12 -0
- package/common/dto/dto-transformer.js +9 -0
- package/common/dto/index.js +2 -0
- package/common/examples/paginate-and-map.example.d.ts +6 -0
- package/common/examples/paginate-and-map.example.js +26 -0
- package/common/utils.d.ts +15 -0
- package/common/utils.js +15 -0
- package/constants/language-code.js +1 -0
- package/decorators/field.decorators.js +8 -1
- package/decorators/property.decorators.js +1 -0
- package/decorators/public-route.decorator.js +1 -0
- package/decorators/transform.decorators.d.ts +27 -0
- package/decorators/transform.decorators.js +29 -0
- package/decorators/translate.decorator.js +1 -0
- package/decorators/user.decorator.js +1 -0
- package/decorators/validator.decorators.d.ts +8 -18
- package/decorators/validator.decorators.js +22 -190
- package/filters/constraint-errors.js +1 -0
- package/helpers/common.helper.d.ts +13 -0
- package/helpers/common.helper.js +13 -0
- package/http-client/config/http-client.config.d.ts +15 -0
- package/http-client/config/http-client.config.js +25 -9
- package/http-client/decorators/http-client.decorators.d.ts +63 -0
- package/http-client/decorators/http-client.decorators.js +71 -3
- package/http-client/entities/http-log.entity.d.ts +229 -0
- package/http-client/entities/http-log.entity.js +6 -1
- package/http-client/errors/http-client.errors.d.ts +57 -0
- package/http-client/errors/http-client.errors.js +58 -0
- package/http-client/examples/advanced-usage.example.d.ts +41 -0
- package/http-client/examples/advanced-usage.example.js +68 -24
- package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
- package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
- package/http-client/examples/basic-usage.example.d.ts +60 -0
- package/http-client/examples/basic-usage.example.js +60 -0
- package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
- package/http-client/examples/multi-api-configuration.example.js +76 -5
- package/http-client/http-client.module.d.ts +13 -0
- package/http-client/http-client.module.js +20 -5
- package/http-client/index.js +8 -0
- package/http-client/interfaces/api-client-config.interface.d.ts +125 -0
- package/http-client/interfaces/api-client-config.interface.js +3 -0
- package/http-client/interfaces/http-client-config.interface.d.ts +60 -0
- package/http-client/services/api-client-registry.service.d.ts +57 -0
- package/http-client/services/api-client-registry.service.js +84 -1
- package/http-client/services/cache.service.d.ts +52 -0
- package/http-client/services/cache.service.js +72 -3
- package/http-client/services/circuit-breaker.service.d.ts +46 -0
- package/http-client/services/circuit-breaker.service.js +52 -0
- package/http-client/services/http-client.service.d.ts +67 -0
- package/http-client/services/http-client.service.js +105 -4
- package/http-client/services/http-log-query.service.d.ts +83 -0
- package/http-client/services/http-log-query.service.js +122 -1
- package/http-client/services/http-replay.service.d.ts +101 -0
- package/http-client/services/http-replay.service.js +86 -0
- package/http-client/services/log-cleanup.service.d.ts +63 -0
- package/http-client/services/log-cleanup.service.js +54 -2
- package/http-client/services/logging.service.d.ts +40 -0
- package/http-client/services/logging.service.js +53 -0
- package/http-client/utils/call-stack-extractor.util.d.ts +37 -0
- package/http-client/utils/call-stack-extractor.util.js +48 -0
- package/http-client/utils/context-extractor.util.d.ts +49 -0
- package/http-client/utils/context-extractor.util.js +52 -0
- package/http-client/utils/curl-generator.util.d.ts +21 -0
- package/http-client/utils/curl-generator.util.js +44 -3
- package/http-client/utils/request-id.util.d.ts +18 -0
- package/http-client/utils/request-id.util.js +20 -0
- package/http-client/utils/retry-recorder.util.d.ts +42 -0
- package/http-client/utils/retry-recorder.util.js +44 -0
- package/i18n/en_US/validation.json +2 -1
- package/i18n/zh_CN/validation.json +2 -1
- package/index.js +8 -0
- package/interceptors/translation-interceptor.service.js +5 -0
- package/package.json +1 -1
- package/providers/context.provider.js +2 -0
- package/providers/generator.provider.d.ts +4 -0
- package/providers/generator.provider.js +4 -0
- package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
- package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
- package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
- package/redis-lock/examples/lock-strategy.examples.js +130 -15
- package/redis-lock/index.d.ts +2 -0
- package/redis-lock/index.js +8 -1
- package/redis-lock/lock-heartbeat.service.d.ts +78 -0
- package/redis-lock/lock-heartbeat.service.js +222 -0
- package/redis-lock/redis-lock.decorator.d.ts +101 -0
- package/redis-lock/redis-lock.decorator.js +120 -0
- package/redis-lock/redis-lock.module.d.ts +66 -0
- package/redis-lock/redis-lock.module.js +175 -70
- package/redis-lock/redis-lock.service.d.ts +278 -0
- package/redis-lock/redis-lock.service.js +282 -12
- package/setup/bootstrap.setup.js +20 -0
- package/setup/mode.setup.d.ts +44 -0
- package/setup/mode.setup.js +44 -0
- package/setup/schedule.decorator.d.ts +227 -0
- package/setup/schedule.decorator.js +235 -12
- package/setup/worker.decorator.d.ts +86 -0
- package/setup/worker.decorator.js +88 -0
- package/shared/serviceRegistryModule.js +27 -14
- package/shared/services/api-config.service.d.ts +3 -0
- package/shared/services/api-config.service.js +20 -9
- package/validator-json/decorators.d.ts +17 -0
- package/validator-json/decorators.js +17 -2
- package/validator-json/default.d.ts +6 -0
- package/validator-json/default.js +30 -2
- package/validator-json/defaultConverters.js +1 -0
- package/validator-json/options.d.ts +23 -0
- package/validators/common-validators.d.ts +143 -0
- package/validators/common-validators.js +249 -0
- package/validators/custom-validate.examples.d.ts +96 -0
- package/validators/custom-validate.examples.js +400 -0
- package/validators/custom-validate.validator.d.ts +134 -0
- package/validators/custom-validate.validator.js +214 -0
- package/validators/index.d.ts +2 -0
- package/validators/index.js +2 -0
- package/validators/is-exists.validator.d.ts +18 -4
- package/validators/is-exists.validator.js +67 -6
- package/validators/is-unique.validator.d.ts +32 -5
- package/validators/is-unique.validator.js +99 -17
- package/validators/skip-empty.validator.d.ts +5 -0
- package/validators/skip-empty.validator.js +5 -0
- package/vault/interfaces/vault-options.interface.d.ts +9 -0
- package/vault/vault-config.loader.d.ts +30 -0
- package/vault/vault-config.loader.js +48 -1
- package/vault/vault-config.service.d.ts +53 -0
- package/vault/vault-config.service.js +57 -0
- package/vault/vault.module.d.ts +4 -0
- package/vault/vault.module.js +4 -0
- package/decorators/examples/validation-decorators.example.d.ts +0 -69
- package/decorators/examples/validation-decorators.example.js +0 -331
package/cache/cache.module.d.ts
CHANGED
|
@@ -2,20 +2,106 @@ import { DynamicModule, OnModuleInit } from '@nestjs/common';
|
|
|
2
2
|
import type { DataSource } from 'typeorm';
|
|
3
3
|
import type { Redis } from 'ioredis';
|
|
4
4
|
import { CacheService } from './cache.service';
|
|
5
|
+
/**
|
|
6
|
+
* Injection token for CacheService
|
|
7
|
+
*/
|
|
5
8
|
export declare const CACHE_SERVICE: unique symbol;
|
|
9
|
+
/**
|
|
10
|
+
* Cache module configuration options
|
|
11
|
+
*/
|
|
6
12
|
export interface CacheModuleOptions {
|
|
13
|
+
/**
|
|
14
|
+
* Whether to make the module global
|
|
15
|
+
* @default true
|
|
16
|
+
*/
|
|
7
17
|
isGlobal?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Redis client instance (optional)
|
|
20
|
+
* If not provided, Redis caching will be disabled
|
|
21
|
+
*/
|
|
8
22
|
redisClient?: Redis;
|
|
23
|
+
/**
|
|
24
|
+
* TypeORM DataSource for DbDependency
|
|
25
|
+
* If not provided, DbDependency will throw error when used
|
|
26
|
+
*/
|
|
9
27
|
dataSource?: DataSource;
|
|
28
|
+
/**
|
|
29
|
+
* Default TTL for memory cache in milliseconds
|
|
30
|
+
*/
|
|
10
31
|
memoryTtl?: number;
|
|
32
|
+
/**
|
|
33
|
+
* Namespace for memory cache
|
|
34
|
+
*/
|
|
11
35
|
memoryNamespace?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Enable compression for cache values
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
12
40
|
enableCompression?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Compression threshold in bytes
|
|
43
|
+
* @default 1024
|
|
44
|
+
*/
|
|
13
45
|
compressionThreshold?: number;
|
|
14
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Unified cache module with three-tier architecture
|
|
49
|
+
*
|
|
50
|
+
* Provides CacheService and cache decorators (@Cacheable, @CacheEvict, @CachePut)
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* // Basic usage (without Redis)
|
|
55
|
+
* @Module({
|
|
56
|
+
* imports: [
|
|
57
|
+
* CacheModule.forRoot()
|
|
58
|
+
* ]
|
|
59
|
+
* })
|
|
60
|
+
* export class AppModule {}
|
|
61
|
+
*
|
|
62
|
+
* // With Redis
|
|
63
|
+
* import { RedisModule } from '@songkeys/nestjs-redis';
|
|
64
|
+
*
|
|
65
|
+
* @Module({
|
|
66
|
+
* imports: [
|
|
67
|
+
* RedisModule.forRoot({ ... }),
|
|
68
|
+
* CacheModule.forRootAsync({
|
|
69
|
+
* imports: [RedisModule],
|
|
70
|
+
* inject: [RedisService],
|
|
71
|
+
* useFactory: (redisService: RedisService) => ({
|
|
72
|
+
* redisClient: redisService.getClient()
|
|
73
|
+
* })
|
|
74
|
+
* })
|
|
75
|
+
* ]
|
|
76
|
+
* })
|
|
77
|
+
* export class AppModule {}
|
|
78
|
+
*
|
|
79
|
+
* // With TypeORM DataSource for DbDependency
|
|
80
|
+
* @Module({
|
|
81
|
+
* imports: [
|
|
82
|
+
* TypeOrmModule.forRoot({ ... }),
|
|
83
|
+
* CacheModule.forRootAsync({
|
|
84
|
+
* imports: [TypeOrmModule],
|
|
85
|
+
* inject: [DataSource],
|
|
86
|
+
* useFactory: (dataSource: DataSource) => ({
|
|
87
|
+
* dataSource
|
|
88
|
+
* })
|
|
89
|
+
* })
|
|
90
|
+
* ]
|
|
91
|
+
* })
|
|
92
|
+
* export class AppModule {}
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
15
95
|
export declare class CacheModule implements OnModuleInit {
|
|
16
96
|
private readonly cacheService;
|
|
17
97
|
constructor(cacheService: CacheService);
|
|
98
|
+
/**
|
|
99
|
+
* Register cache module with options
|
|
100
|
+
*/
|
|
18
101
|
static forRoot(options?: CacheModuleOptions): DynamicModule;
|
|
102
|
+
/**
|
|
103
|
+
* Register cache module asynchronously
|
|
104
|
+
*/
|
|
19
105
|
static forRootAsync(options: {
|
|
20
106
|
imports?: any[];
|
|
21
107
|
inject?: any[];
|
package/cache/cache.module.js
CHANGED
|
@@ -20,13 +20,68 @@ const dependencies_1 = require("./dependencies");
|
|
|
20
20
|
const decorators_1 = require("./decorators");
|
|
21
21
|
const providers_1 = require("./providers");
|
|
22
22
|
const cache_constants_1 = require("./cache.constants");
|
|
23
|
+
/**
|
|
24
|
+
* Injection token for CacheService
|
|
25
|
+
*/
|
|
23
26
|
exports.CACHE_SERVICE = Symbol('CACHE_SERVICE');
|
|
27
|
+
/**
|
|
28
|
+
* Unified cache module with three-tier architecture
|
|
29
|
+
*
|
|
30
|
+
* Provides CacheService and cache decorators (@Cacheable, @CacheEvict, @CachePut)
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* // Basic usage (without Redis)
|
|
35
|
+
* @Module({
|
|
36
|
+
* imports: [
|
|
37
|
+
* CacheModule.forRoot()
|
|
38
|
+
* ]
|
|
39
|
+
* })
|
|
40
|
+
* export class AppModule {}
|
|
41
|
+
*
|
|
42
|
+
* // With Redis
|
|
43
|
+
* import { RedisModule } from '@songkeys/nestjs-redis';
|
|
44
|
+
*
|
|
45
|
+
* @Module({
|
|
46
|
+
* imports: [
|
|
47
|
+
* RedisModule.forRoot({ ... }),
|
|
48
|
+
* CacheModule.forRootAsync({
|
|
49
|
+
* imports: [RedisModule],
|
|
50
|
+
* inject: [RedisService],
|
|
51
|
+
* useFactory: (redisService: RedisService) => ({
|
|
52
|
+
* redisClient: redisService.getClient()
|
|
53
|
+
* })
|
|
54
|
+
* })
|
|
55
|
+
* ]
|
|
56
|
+
* })
|
|
57
|
+
* export class AppModule {}
|
|
58
|
+
*
|
|
59
|
+
* // With TypeORM DataSource for DbDependency
|
|
60
|
+
* @Module({
|
|
61
|
+
* imports: [
|
|
62
|
+
* TypeOrmModule.forRoot({ ... }),
|
|
63
|
+
* CacheModule.forRootAsync({
|
|
64
|
+
* imports: [TypeOrmModule],
|
|
65
|
+
* inject: [DataSource],
|
|
66
|
+
* useFactory: (dataSource: DataSource) => ({
|
|
67
|
+
* dataSource
|
|
68
|
+
* })
|
|
69
|
+
* })
|
|
70
|
+
* ]
|
|
71
|
+
* })
|
|
72
|
+
* export class AppModule {}
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
24
75
|
let CacheModule = CacheModule_1 = class CacheModule {
|
|
25
76
|
constructor(cacheService) {
|
|
26
77
|
this.cacheService = cacheService;
|
|
27
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Register cache module with options
|
|
81
|
+
*/
|
|
28
82
|
static forRoot(options = {}) {
|
|
29
83
|
const { isGlobal = true, redisClient, dataSource, memoryTtl, memoryNamespace, enableCompression = false, compressionThreshold = 1024, } = options;
|
|
84
|
+
// Set DataSource for DbDependency if provided
|
|
30
85
|
if (dataSource) {
|
|
31
86
|
dependencies_1.DbDependency.setDataSource(dataSource);
|
|
32
87
|
}
|
|
@@ -34,6 +89,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
34
89
|
module: CacheModule_1,
|
|
35
90
|
global: isGlobal,
|
|
36
91
|
providers: [
|
|
92
|
+
// Providers
|
|
37
93
|
providers_1.ClsCacheProvider,
|
|
38
94
|
{
|
|
39
95
|
provide: providers_1.MemoryCacheProvider,
|
|
@@ -42,6 +98,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
42
98
|
namespace: memoryNamespace,
|
|
43
99
|
}),
|
|
44
100
|
},
|
|
101
|
+
// Redis client provider (optional)
|
|
45
102
|
...(redisClient
|
|
46
103
|
? [
|
|
47
104
|
{
|
|
@@ -51,6 +108,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
51
108
|
]
|
|
52
109
|
: []),
|
|
53
110
|
providers_1.RedisCacheProvider,
|
|
111
|
+
// Compression configuration providers
|
|
54
112
|
{
|
|
55
113
|
provide: cache_constants_1.CACHE_COMPRESSION_ENABLED,
|
|
56
114
|
useValue: enableCompression,
|
|
@@ -59,12 +117,14 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
59
117
|
provide: cache_constants_1.CACHE_COMPRESSION_THRESHOLD,
|
|
60
118
|
useValue: compressionThreshold,
|
|
61
119
|
},
|
|
120
|
+
// Additional services
|
|
62
121
|
cache_warmup_service_1.CacheWarmupService,
|
|
63
122
|
cache_metrics_service_1.CacheMetricsService,
|
|
64
123
|
{
|
|
65
124
|
provide: cache_serialization_service_1.CacheSerializationService,
|
|
66
125
|
useFactory: () => new cache_serialization_service_1.CacheSerializationService(),
|
|
67
126
|
},
|
|
127
|
+
// CacheService
|
|
68
128
|
{
|
|
69
129
|
provide: exports.CACHE_SERVICE,
|
|
70
130
|
useClass: cache_service_1.CacheService,
|
|
@@ -80,6 +140,9 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
80
140
|
],
|
|
81
141
|
};
|
|
82
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Register cache module asynchronously
|
|
145
|
+
*/
|
|
83
146
|
static forRootAsync(options) {
|
|
84
147
|
var _a;
|
|
85
148
|
return {
|
|
@@ -87,15 +150,18 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
87
150
|
global: (_a = options.isGlobal) !== null && _a !== void 0 ? _a : true,
|
|
88
151
|
imports: options.imports || [],
|
|
89
152
|
providers: [
|
|
153
|
+
// Async options provider
|
|
90
154
|
{
|
|
91
155
|
provide: 'CACHE_MODULE_OPTIONS',
|
|
92
156
|
useFactory: options.useFactory,
|
|
93
157
|
inject: options.inject || [],
|
|
94
158
|
},
|
|
159
|
+
// Providers
|
|
95
160
|
providers_1.ClsCacheProvider,
|
|
96
161
|
{
|
|
97
162
|
provide: providers_1.MemoryCacheProvider,
|
|
98
163
|
useFactory: (moduleOptions) => {
|
|
164
|
+
// Set DataSource for DbDependency if provided
|
|
99
165
|
if (moduleOptions.dataSource) {
|
|
100
166
|
dependencies_1.DbDependency.setDataSource(moduleOptions.dataSource);
|
|
101
167
|
}
|
|
@@ -106,18 +172,21 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
106
172
|
},
|
|
107
173
|
inject: ['CACHE_MODULE_OPTIONS'],
|
|
108
174
|
},
|
|
175
|
+
// Redis client provider (optional)
|
|
109
176
|
{
|
|
110
177
|
provide: providers_1.REDIS_CLIENT,
|
|
111
178
|
useFactory: (moduleOptions) => moduleOptions.redisClient,
|
|
112
179
|
inject: ['CACHE_MODULE_OPTIONS'],
|
|
113
180
|
},
|
|
114
181
|
providers_1.RedisCacheProvider,
|
|
182
|
+
// Additional services
|
|
115
183
|
cache_warmup_service_1.CacheWarmupService,
|
|
116
184
|
cache_metrics_service_1.CacheMetricsService,
|
|
117
185
|
{
|
|
118
186
|
provide: cache_serialization_service_1.CacheSerializationService,
|
|
119
187
|
useFactory: () => new cache_serialization_service_1.CacheSerializationService(),
|
|
120
188
|
},
|
|
189
|
+
// Compression configuration providers
|
|
121
190
|
{
|
|
122
191
|
provide: cache_constants_1.CACHE_COMPRESSION_ENABLED,
|
|
123
192
|
useFactory: (moduleOptions) => moduleOptions.enableCompression || false,
|
|
@@ -128,6 +197,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
128
197
|
useFactory: (moduleOptions) => moduleOptions.compressionThreshold || 1024,
|
|
129
198
|
inject: ['CACHE_MODULE_OPTIONS'],
|
|
130
199
|
},
|
|
200
|
+
// CacheService
|
|
131
201
|
{
|
|
132
202
|
provide: exports.CACHE_SERVICE,
|
|
133
203
|
useClass: cache_service_1.CacheService,
|
|
@@ -144,6 +214,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
144
214
|
};
|
|
145
215
|
}
|
|
146
216
|
onModuleInit() {
|
|
217
|
+
// Set global cache service for decorators
|
|
147
218
|
(0, decorators_1.setCacheService)(this.cacheService);
|
|
148
219
|
}
|
|
149
220
|
};
|
package/cache/cache.service.d.ts
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import type { CacheOptions, CacheStats } from './interfaces';
|
|
2
2
|
import { CacheLayer } from './interfaces';
|
|
3
3
|
import { ClsCacheProvider, MemoryCacheProvider, RedisCacheProvider } from './providers';
|
|
4
|
+
/**
|
|
5
|
+
* Unified cache service with three-tier architecture
|
|
6
|
+
*
|
|
7
|
+
* L1: CLS (request-level)
|
|
8
|
+
* L2: Memory (process-level)
|
|
9
|
+
* L3: Redis (distributed)
|
|
10
|
+
*
|
|
11
|
+
* Supports automatic fallback, backfill, and dependency-based invalidation.
|
|
12
|
+
*/
|
|
4
13
|
export declare class CacheService {
|
|
5
14
|
private readonly clsProvider;
|
|
6
15
|
private readonly memoryProvider;
|
|
@@ -11,27 +20,158 @@ export declare class CacheService {
|
|
|
11
20
|
private readonly providers;
|
|
12
21
|
private readonly stats;
|
|
13
22
|
constructor(clsProvider: ClsCacheProvider, memoryProvider: MemoryCacheProvider, redisProvider: RedisCacheProvider, enableCompression?: boolean, compressionThreshold?: number);
|
|
23
|
+
/**
|
|
24
|
+
* Get or set cache value with factory function
|
|
25
|
+
*
|
|
26
|
+
* @param key - Cache key
|
|
27
|
+
* @param factory - Function to generate value if not cached
|
|
28
|
+
* @param options - Cache options
|
|
29
|
+
* @returns Cached or generated value
|
|
30
|
+
*/
|
|
14
31
|
getOrSet<T>(key: string, factory: () => Promise<T>, options?: CacheOptions): Promise<T>;
|
|
32
|
+
/**
|
|
33
|
+
* Get value from cache with optional layer specification
|
|
34
|
+
*
|
|
35
|
+
* @param key - Cache key
|
|
36
|
+
* @param options - Cache options including layer preference
|
|
37
|
+
* @returns Cached value or null
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* // Try memory only
|
|
42
|
+
* const data = await this.cacheService.get('user:123', {
|
|
43
|
+
* layers: [CacheLayer.MEMORY]
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* // Try all layers in order (CLS -> MEMORY -> REDIS)
|
|
47
|
+
* const data = await this.cacheService.get('config:app', {
|
|
48
|
+
* layers: [CacheLayer.CLS, CacheLayer.MEMORY, CacheLayer.REDIS]
|
|
49
|
+
* });
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
15
52
|
get<T>(key: string, options?: CacheOptions): Promise<T | null>;
|
|
53
|
+
/**
|
|
54
|
+
* Set value in cache with optional layer specification
|
|
55
|
+
*
|
|
56
|
+
* Supports both new API (CacheOptions) and legacy API (TTL number) for backward compatibility.
|
|
57
|
+
*
|
|
58
|
+
* @param key - Cache key
|
|
59
|
+
* @param value - Value to cache
|
|
60
|
+
* @param options - Cache options including layer selection OR TTL (number) for legacy compatibility
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* // New API - Cache in memory only
|
|
65
|
+
* await this.cacheService.set('user:123', userData, {
|
|
66
|
+
* layers: [CacheLayer.MEMORY],
|
|
67
|
+
* ttl: 300000
|
|
68
|
+
* });
|
|
69
|
+
*
|
|
70
|
+
* // Legacy API - TTL as third parameter (still works for backward compatibility)
|
|
71
|
+
* await this.cacheService.set('user:123', userData, 300000);
|
|
72
|
+
*
|
|
73
|
+
* // Cache in all layers (default behavior)
|
|
74
|
+
* await this.cacheService.set('config:app', configData, {
|
|
75
|
+
* layers: [CacheLayer.CLS, CacheLayer.MEMORY, CacheLayer.REDIS],
|
|
76
|
+
* ttl: 3600000
|
|
77
|
+
* });
|
|
78
|
+
*
|
|
79
|
+
* // Cache in Redis only (distributed)
|
|
80
|
+
* await this.cacheService.set('global:settings', settings, {
|
|
81
|
+
* layers: [CacheLayer.REDIS],
|
|
82
|
+
* ttl: 86400000
|
|
83
|
+
* });
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
16
86
|
set<T>(key: string, value: T, options?: CacheOptions | number): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Delete value from cache
|
|
89
|
+
*
|
|
90
|
+
* @param key - Cache key or array of keys
|
|
91
|
+
* @param layers - Specific layers to delete from (default: all)
|
|
92
|
+
*/
|
|
17
93
|
del(key: string | string[], layers?: CacheLayer[]): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Delete keys matching pattern
|
|
96
|
+
*
|
|
97
|
+
* @param pattern - Pattern to match (e.g., 'user:*')
|
|
98
|
+
* @param layers - Specific layers to delete from (default: Memory and Redis only)
|
|
99
|
+
*/
|
|
18
100
|
deletePattern(pattern: string, layers?: CacheLayer[]): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Clear all cache
|
|
103
|
+
*
|
|
104
|
+
* @param layers - Specific layers to clear (default: all)
|
|
105
|
+
*/
|
|
19
106
|
clear(layers?: CacheLayer[]): Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Invalidate tags (for TagDependency)
|
|
109
|
+
*
|
|
110
|
+
* @param tags - Tags to invalidate
|
|
111
|
+
*/
|
|
20
112
|
invalidateTags(tags: string[]): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* Get multiple values
|
|
115
|
+
*
|
|
116
|
+
* @param keys - Array of cache keys
|
|
117
|
+
* @param options - Cache options
|
|
118
|
+
* @returns Array of values (null for missing keys)
|
|
119
|
+
*/
|
|
21
120
|
mget<T>(keys: string[], options?: CacheOptions): Promise<(T | null)[]>;
|
|
121
|
+
/**
|
|
122
|
+
* Set multiple values
|
|
123
|
+
*
|
|
124
|
+
* @param items - Array of key-value pairs
|
|
125
|
+
* @param options - Cache options
|
|
126
|
+
*/
|
|
22
127
|
mset(items: Array<{
|
|
23
128
|
key: string;
|
|
24
129
|
value: any;
|
|
25
130
|
}>, options?: CacheOptions): Promise<void>;
|
|
131
|
+
/**
|
|
132
|
+
* Get cache statistics
|
|
133
|
+
*
|
|
134
|
+
* @returns Cache statistics
|
|
135
|
+
*/
|
|
26
136
|
getStats(): CacheStats;
|
|
137
|
+
/**
|
|
138
|
+
* Reset statistics
|
|
139
|
+
*/
|
|
27
140
|
resetStats(): void;
|
|
141
|
+
/**
|
|
142
|
+
* Internal method to set cache value with options
|
|
143
|
+
*/
|
|
28
144
|
private setWithOptions;
|
|
145
|
+
/**
|
|
146
|
+
* Resolve cache layers from options
|
|
147
|
+
*/
|
|
29
148
|
private resolveLayers;
|
|
149
|
+
/**
|
|
150
|
+
* Get default cache layers
|
|
151
|
+
*/
|
|
30
152
|
private getDefaultLayers;
|
|
153
|
+
/**
|
|
154
|
+
* Build full cache key with namespace
|
|
155
|
+
*/
|
|
31
156
|
private buildKey;
|
|
157
|
+
/**
|
|
158
|
+
* Backfill upper cache layers
|
|
159
|
+
*/
|
|
32
160
|
private backfillUpperLayers;
|
|
161
|
+
/**
|
|
162
|
+
* Record cache hit
|
|
163
|
+
*/
|
|
33
164
|
private recordHit;
|
|
165
|
+
/**
|
|
166
|
+
* Record cache miss
|
|
167
|
+
*/
|
|
34
168
|
private recordMiss;
|
|
169
|
+
/**
|
|
170
|
+
* Update hit rate for a layer
|
|
171
|
+
*/
|
|
35
172
|
private updateLayerHitRate;
|
|
173
|
+
/**
|
|
174
|
+
* Initialize statistics for all layers
|
|
175
|
+
*/
|
|
36
176
|
private initializeStats;
|
|
37
177
|
}
|