@nestjs-redisx/cache 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.
Files changed (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -0
  3. package/dist/cache/api/decorators/cached.decorator.d.ts +152 -0
  4. package/dist/cache/api/decorators/cached.decorator.d.ts.map +1 -0
  5. package/dist/cache/api/decorators/invalidate-tags.decorator.d.ts +44 -0
  6. package/dist/cache/api/decorators/invalidate-tags.decorator.d.ts.map +1 -0
  7. package/dist/cache/application/ports/cache-service.port.d.ts +120 -0
  8. package/dist/cache/application/ports/cache-service.port.d.ts.map +1 -0
  9. package/dist/cache/application/ports/l1-cache-store.port.d.ts +56 -0
  10. package/dist/cache/application/ports/l1-cache-store.port.d.ts.map +1 -0
  11. package/dist/cache/application/ports/l2-cache-store.port.d.ts +98 -0
  12. package/dist/cache/application/ports/l2-cache-store.port.d.ts.map +1 -0
  13. package/dist/cache/application/services/cache-decorator-initializer.service.d.ts +25 -0
  14. package/dist/cache/application/services/cache-decorator-initializer.service.d.ts.map +1 -0
  15. package/dist/cache/application/services/cache.service.d.ts +106 -0
  16. package/dist/cache/application/services/cache.service.d.ts.map +1 -0
  17. package/dist/cache/application/services/warmup.service.d.ts +25 -0
  18. package/dist/cache/application/services/warmup.service.d.ts.map +1 -0
  19. package/dist/cache/domain/services/serializer.service.d.ts +29 -0
  20. package/dist/cache/domain/services/serializer.service.d.ts.map +1 -0
  21. package/dist/cache/domain/value-objects/cache-entry.vo.d.ts +69 -0
  22. package/dist/cache/domain/value-objects/cache-entry.vo.d.ts.map +1 -0
  23. package/dist/cache/domain/value-objects/cache-key.vo.d.ts +45 -0
  24. package/dist/cache/domain/value-objects/cache-key.vo.d.ts.map +1 -0
  25. package/dist/cache/domain/value-objects/tag.vo.d.ts +36 -0
  26. package/dist/cache/domain/value-objects/tag.vo.d.ts.map +1 -0
  27. package/dist/cache/domain/value-objects/tags.vo.d.ts +57 -0
  28. package/dist/cache/domain/value-objects/tags.vo.d.ts.map +1 -0
  29. package/dist/cache/domain/value-objects/ttl.vo.d.ts +58 -0
  30. package/dist/cache/domain/value-objects/ttl.vo.d.ts.map +1 -0
  31. package/dist/cache/infrastructure/adapters/l1-memory-store.adapter.d.ts +36 -0
  32. package/dist/cache/infrastructure/adapters/l1-memory-store.adapter.d.ts.map +1 -0
  33. package/dist/cache/infrastructure/adapters/l2-redis-store.adapter.d.ts +41 -0
  34. package/dist/cache/infrastructure/adapters/l2-redis-store.adapter.d.ts.map +1 -0
  35. package/dist/cache.plugin.d.ts +17 -0
  36. package/dist/cache.plugin.d.ts.map +1 -0
  37. package/dist/cache.service.d.ts +234 -0
  38. package/dist/cache.service.d.ts.map +1 -0
  39. package/dist/decorators/cache-evict.decorator.d.ts +97 -0
  40. package/dist/decorators/cache-evict.decorator.d.ts.map +1 -0
  41. package/dist/decorators/cache-put.decorator.d.ts +95 -0
  42. package/dist/decorators/cache-put.decorator.d.ts.map +1 -0
  43. package/dist/decorators/cache.interceptor.d.ts +63 -0
  44. package/dist/decorators/cache.interceptor.d.ts.map +1 -0
  45. package/dist/decorators/cacheable.decorator.d.ts +88 -0
  46. package/dist/decorators/cacheable.decorator.d.ts.map +1 -0
  47. package/dist/decorators/key-generator.util.d.ts +69 -0
  48. package/dist/decorators/key-generator.util.d.ts.map +1 -0
  49. package/dist/index.d.ts +39 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +4199 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/index.mjs +4152 -0
  54. package/dist/index.mjs.map +1 -0
  55. package/dist/invalidation/application/ports/event-invalidation.port.d.ts +28 -0
  56. package/dist/invalidation/application/ports/event-invalidation.port.d.ts.map +1 -0
  57. package/dist/invalidation/application/ports/invalidation-registry.port.d.ts +36 -0
  58. package/dist/invalidation/application/ports/invalidation-registry.port.d.ts.map +1 -0
  59. package/dist/invalidation/application/services/event-invalidation.service.d.ts +30 -0
  60. package/dist/invalidation/application/services/event-invalidation.service.d.ts.map +1 -0
  61. package/dist/invalidation/application/services/invalidation-registry.service.d.ts +17 -0
  62. package/dist/invalidation/application/services/invalidation-registry.service.d.ts.map +1 -0
  63. package/dist/invalidation/domain/entities/invalidation-rule.entity.d.ts +60 -0
  64. package/dist/invalidation/domain/entities/invalidation-rule.entity.d.ts.map +1 -0
  65. package/dist/invalidation/domain/value-objects/event-pattern.vo.d.ts +27 -0
  66. package/dist/invalidation/domain/value-objects/event-pattern.vo.d.ts.map +1 -0
  67. package/dist/invalidation/domain/value-objects/tag-template.vo.d.ts +34 -0
  68. package/dist/invalidation/domain/value-objects/tag-template.vo.d.ts.map +1 -0
  69. package/dist/invalidation/infrastructure/adapters/amqp-event-source.adapter.d.ts +51 -0
  70. package/dist/invalidation/infrastructure/adapters/amqp-event-source.adapter.d.ts.map +1 -0
  71. package/dist/invalidation/infrastructure/decorators/invalidate-on.decorator.d.ts +69 -0
  72. package/dist/invalidation/infrastructure/decorators/invalidate-on.decorator.d.ts.map +1 -0
  73. package/dist/key-builder.d.ts +199 -0
  74. package/dist/key-builder.d.ts.map +1 -0
  75. package/dist/serializers/index.d.ts +19 -0
  76. package/dist/serializers/index.d.ts.map +1 -0
  77. package/dist/serializers/json.serializer.d.ts +51 -0
  78. package/dist/serializers/json.serializer.d.ts.map +1 -0
  79. package/dist/serializers/msgpack.serializer.d.ts +67 -0
  80. package/dist/serializers/msgpack.serializer.d.ts.map +1 -0
  81. package/dist/serializers/serializer.interface.d.ts +36 -0
  82. package/dist/serializers/serializer.interface.d.ts.map +1 -0
  83. package/dist/shared/constants/index.d.ts +73 -0
  84. package/dist/shared/constants/index.d.ts.map +1 -0
  85. package/dist/shared/errors/index.d.ts +46 -0
  86. package/dist/shared/errors/index.d.ts.map +1 -0
  87. package/dist/shared/types/context-provider.interface.d.ts +58 -0
  88. package/dist/shared/types/context-provider.interface.d.ts.map +1 -0
  89. package/dist/shared/types/index.d.ts +259 -0
  90. package/dist/shared/types/index.d.ts.map +1 -0
  91. package/dist/stampede/application/ports/stampede-protection.port.d.ts +33 -0
  92. package/dist/stampede/application/ports/stampede-protection.port.d.ts.map +1 -0
  93. package/dist/stampede/infrastructure/stampede-protection.service.d.ts +30 -0
  94. package/dist/stampede/infrastructure/stampede-protection.service.d.ts.map +1 -0
  95. package/dist/strategies/eviction-strategy.interface.d.ts +39 -0
  96. package/dist/strategies/eviction-strategy.interface.d.ts.map +1 -0
  97. package/dist/strategies/fifo.strategy.d.ts +86 -0
  98. package/dist/strategies/fifo.strategy.d.ts.map +1 -0
  99. package/dist/strategies/index.d.ts +19 -0
  100. package/dist/strategies/index.d.ts.map +1 -0
  101. package/dist/strategies/lfu.strategy.d.ts +87 -0
  102. package/dist/strategies/lfu.strategy.d.ts.map +1 -0
  103. package/dist/strategies/lru.strategy.d.ts +78 -0
  104. package/dist/strategies/lru.strategy.d.ts.map +1 -0
  105. package/dist/swr/application/ports/swr-manager.port.d.ts +83 -0
  106. package/dist/swr/application/ports/swr-manager.port.d.ts.map +1 -0
  107. package/dist/swr/infrastructure/swr-manager.service.d.ts +30 -0
  108. package/dist/swr/infrastructure/swr-manager.service.d.ts.map +1 -0
  109. package/dist/tags/application/ports/tag-index.port.d.ts +55 -0
  110. package/dist/tags/application/ports/tag-index.port.d.ts.map +1 -0
  111. package/dist/tags/infrastructure/repositories/tag-index.repository.d.ts +37 -0
  112. package/dist/tags/infrastructure/repositories/tag-index.repository.d.ts.map +1 -0
  113. package/dist/tags/infrastructure/scripts/lua-scripts.d.ts +25 -0
  114. package/dist/tags/infrastructure/scripts/lua-scripts.d.ts.map +1 -0
  115. package/dist/tags/infrastructure/services/lua-script-loader.service.d.ts +44 -0
  116. package/dist/tags/infrastructure/services/lua-script-loader.service.d.ts.map +1 -0
  117. package/package.json +79 -0
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Event invalidation service port.
3
+ */
4
+ export interface IInvalidationResult {
5
+ event: string;
6
+ tagsInvalidated: string[];
7
+ keysInvalidated: string[];
8
+ totalKeysDeleted: number;
9
+ duration: number;
10
+ skipped: boolean;
11
+ skipReason?: string;
12
+ }
13
+ export type InvalidationHandler = (event: string, payload: unknown, result: IInvalidationResult) => void | Promise<void>;
14
+ export interface IEventInvalidationService {
15
+ /**
16
+ * Process invalidation event.
17
+ */
18
+ processEvent(event: string, payload: unknown): Promise<IInvalidationResult>;
19
+ /**
20
+ * Emit invalidation event (for internal source).
21
+ */
22
+ emit(event: string, payload: unknown): Promise<void>;
23
+ /**
24
+ * Subscribe to invalidation events.
25
+ */
26
+ subscribe(handler: InvalidationHandler): () => void;
27
+ }
28
+ //# sourceMappingURL=event-invalidation.port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-invalidation.port.d.ts","sourceRoot":"","sources":["../../../../src/invalidation/application/ports/event-invalidation.port.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAE5E;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,IAAI,CAAC;CACrD"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Invalidation registry port.
3
+ */
4
+ import { InvalidationRule } from '../../domain/entities/invalidation-rule.entity';
5
+ export interface IResolvedInvalidation {
6
+ tags: string[];
7
+ keys: string[];
8
+ matchedRules: InvalidationRule[];
9
+ }
10
+ export interface IInvalidationRegistry {
11
+ /**
12
+ * Register invalidation rule.
13
+ */
14
+ register(rule: InvalidationRule): void;
15
+ /**
16
+ * Register multiple rules.
17
+ */
18
+ registerMany(rules: InvalidationRule[]): void;
19
+ /**
20
+ * Unregister rule by event pattern.
21
+ */
22
+ unregister(event: string): void;
23
+ /**
24
+ * Find matching rules for event.
25
+ */
26
+ findRules(event: string): InvalidationRule[];
27
+ /**
28
+ * Resolve tags/keys for event with payload.
29
+ */
30
+ resolve(event: string, payload: unknown): IResolvedInvalidation;
31
+ /**
32
+ * Get all registered rules.
33
+ */
34
+ getRules(): InvalidationRule[];
35
+ }
36
+ //# sourceMappingURL=invalidation-registry.port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalidation-registry.port.d.ts","sourceRoot":"","sources":["../../../../src/invalidation/application/ports/invalidation-registry.port.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAElF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAEvC;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;IAE9C;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAE7C;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,qBAAqB,CAAC;IAEhE;;OAEG;IACH,QAAQ,IAAI,gBAAgB,EAAE,CAAC;CAChC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Event invalidation service.
3
+ * Processes invalidation events and coordinates cache invalidation.
4
+ */
5
+ import { OnModuleInit } from '@nestjs/common';
6
+ import { IRedisDriver } from '@nestjs-redisx/core';
7
+ import { ICacheService } from '../../../cache/application/ports/cache-service.port';
8
+ import { ICachePluginOptions } from '../../../shared/types';
9
+ import { IEventInvalidationService, InvalidationHandler, IInvalidationResult } from '../ports/event-invalidation.port';
10
+ import { IInvalidationRegistry } from '../ports/invalidation-registry.port';
11
+ export declare class EventInvalidationService implements IEventInvalidationService, OnModuleInit {
12
+ private readonly registry;
13
+ private readonly cacheService;
14
+ private readonly driver;
15
+ private readonly config;
16
+ private readonly logger;
17
+ private readonly handlers;
18
+ private readonly eventEmitter;
19
+ constructor(registry: IInvalidationRegistry, cacheService: ICacheService, driver: IRedisDriver, config: ICachePluginOptions);
20
+ onModuleInit(): Promise<void>;
21
+ processEvent(event: string, payload: unknown): Promise<IInvalidationResult>;
22
+ emit(event: string, payload: unknown): Promise<void>;
23
+ subscribe(handler: InvalidationHandler): () => void;
24
+ private setupInternalSource;
25
+ private checkDuplicate;
26
+ private markProcessed;
27
+ private generateEventId;
28
+ private notifyHandlers;
29
+ }
30
+ //# sourceMappingURL=event-invalidation.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-invalidation.service.d.ts","sourceRoot":"","sources":["../../../../src/invalidation/application/services/event-invalidation.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAA8B,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAgB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,qDAAqD,CAAC;AAEpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,qBACa,wBAAyB,YAAW,yBAAyB,EAAE,YAAY;IAOpF,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACF,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACf,OAAO,CAAC,QAAQ,CAAC,MAAM;IATvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;gBAIhC,QAAQ,EAAE,qBAAqB,EACR,YAAY,EAAE,aAAa,EAC5B,MAAM,EAAE,YAAY,EACZ,MAAM,EAAE,mBAAmB;IAItE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAW7B,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA2E3E,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,SAAS,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAKnD,OAAO,CAAC,mBAAmB;YAWb,cAAc;YAWd,aAAa;IAW3B,OAAO,CAAC,eAAe;YAST,cAAc;CAU7B"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Invalidation registry service.
3
+ * Manages invalidation rules and resolves what to invalidate for events.
4
+ */
5
+ import { InvalidationRule } from '../../domain/entities/invalidation-rule.entity';
6
+ import { IInvalidationRegistry, IResolvedInvalidation } from '../ports/invalidation-registry.port';
7
+ export declare class InvalidationRegistryService implements IInvalidationRegistry {
8
+ private readonly logger;
9
+ private rules;
10
+ register(rule: InvalidationRule): void;
11
+ registerMany(rules: InvalidationRule[]): void;
12
+ unregister(event: string): void;
13
+ findRules(event: string): InvalidationRule[];
14
+ resolve(event: string, payload: unknown): IResolvedInvalidation;
15
+ getRules(): InvalidationRule[];
16
+ }
17
+ //# sourceMappingURL=invalidation-registry.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalidation-registry.service.d.ts","sourceRoot":"","sources":["../../../../src/invalidation/application/services/invalidation-registry.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAEnG,qBACa,2BAA4B,YAAW,qBAAqB;IACvE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgD;IACvE,OAAO,CAAC,KAAK,CAA0B;IAEvC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAQtC,YAAY,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAM7C,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAU/B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAI5C,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,qBAAqB;IAiD/D,QAAQ,IAAI,gBAAgB,EAAE;CAG/B"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Invalidation rule entity.
3
+ * Defines what to invalidate when an event occurs.
4
+ */
5
+ export interface IInvalidationRuleProps {
6
+ event: string;
7
+ tags?: string[];
8
+ keys?: string[];
9
+ condition?: (payload: unknown) => boolean;
10
+ priority?: number;
11
+ }
12
+ export declare class InvalidationRule {
13
+ private readonly eventPattern;
14
+ private readonly tagTemplates;
15
+ private readonly keyTemplates;
16
+ private readonly condition?;
17
+ private readonly priority;
18
+ private constructor();
19
+ /**
20
+ * Creates InvalidationRule from props.
21
+ */
22
+ static create(props: IInvalidationRuleProps): InvalidationRule;
23
+ /**
24
+ * Tests if this rule matches the given event.
25
+ */
26
+ matches(event: string): boolean;
27
+ /**
28
+ * Tests if condition passes for the given payload.
29
+ */
30
+ testCondition(payload: unknown): boolean;
31
+ /**
32
+ * Resolves tags for the given payload.
33
+ */
34
+ resolveTags(payload: unknown): string[];
35
+ /**
36
+ * Resolves keys for the given payload.
37
+ */
38
+ resolveKeys(payload: unknown): string[];
39
+ /**
40
+ * Gets rule priority (higher = processed first).
41
+ */
42
+ getPriority(): number;
43
+ /**
44
+ * Gets the event pattern string.
45
+ */
46
+ getEventPattern(): string;
47
+ /**
48
+ * Checks if rule has any tags.
49
+ */
50
+ hasTags(): boolean;
51
+ /**
52
+ * Checks if rule has any keys.
53
+ */
54
+ hasKeys(): boolean;
55
+ /**
56
+ * Checks if rule has a condition.
57
+ */
58
+ hasCondition(): boolean;
59
+ }
60
+ //# sourceMappingURL=invalidation-rule.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalidation-rule.entity.d.ts","sourceRoot":"","sources":["../../../../src/invalidation/domain/entities/invalidation-rule.entity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAgC;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC,OAAO;IAQP;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,sBAAsB,GAAG,gBAAgB;IAY9D;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI/B;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAaxC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE;IAIvC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE;IAIvC;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,YAAY,IAAI,OAAO;CAGxB"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Event pattern value object.
3
+ * Supports AMQP-style wildcards: '*' for one word, '#' for zero or more words.
4
+ */
5
+ export declare class EventPattern {
6
+ private readonly pattern;
7
+ private readonly regex;
8
+ private constructor();
9
+ /**
10
+ * Creates EventPattern from string pattern.
11
+ * @param pattern - AMQP-style pattern (e.g., 'user.*', 'order.#', 'product.updated')
12
+ */
13
+ static create(pattern: string): EventPattern;
14
+ /**
15
+ * Tests if this pattern matches the given event.
16
+ */
17
+ matches(event: string): boolean;
18
+ /**
19
+ * Returns the raw pattern string.
20
+ */
21
+ toString(): string;
22
+ /**
23
+ * Checks equality with another pattern.
24
+ */
25
+ equals(other: EventPattern): boolean;
26
+ }
27
+ //# sourceMappingURL=event-pattern.vo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-pattern.vo.d.ts","sourceRoot":"","sources":["../../../../src/invalidation/domain/value-objects/event-pattern.vo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,OAAO;IAKP;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY;IA4B5C;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI/B;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO;CAGrC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Tag template value object.
3
+ * Supports placeholders like 'user:{userId}' or 'tenant:{payload.tenantId}'.
4
+ */
5
+ export declare class TagTemplate {
6
+ private readonly template;
7
+ private readonly placeholders;
8
+ private constructor();
9
+ /**
10
+ * Creates TagTemplate from template string.
11
+ * @param template - Template string with placeholders (e.g., 'user:{userId}')
12
+ */
13
+ static create(template: string): TagTemplate;
14
+ /**
15
+ * Resolves template with given payload.
16
+ * @param payload - Data object to resolve placeholders from
17
+ * @returns Resolved tag string
18
+ */
19
+ resolve(payload: unknown): string;
20
+ /**
21
+ * Returns the raw template string.
22
+ */
23
+ toString(): string;
24
+ /**
25
+ * Returns all placeholders in the template.
26
+ */
27
+ getPlaceholders(): string[];
28
+ /**
29
+ * Checks if template has any placeholders.
30
+ */
31
+ hasPlaceholders(): boolean;
32
+ private getNestedValue;
33
+ }
34
+ //# sourceMappingURL=tag-template.vo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag-template.vo.d.ts","sourceRoot":"","sources":["../../../../src/invalidation/domain/value-objects/tag-template.vo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;IAExC,OAAO;IAKP;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IAmB5C;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAWjC;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B,OAAO,CAAC,cAAc;CAsBvB"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * AMQP event source adapter.
3
+ * Integrates with RabbitMQ using @golevelup/nestjs-rabbitmq.
4
+ * This is an optional adapter that requires @golevelup/nestjs-rabbitmq to be installed.
5
+ */
6
+ import { OnModuleInit } from '@nestjs/common';
7
+ import { ICachePluginOptions } from '../../../shared/types';
8
+ import { IEventInvalidationService } from '../../application/ports/event-invalidation.port';
9
+ interface IInvalidationMessage {
10
+ payload: unknown;
11
+ timestamp?: number;
12
+ source?: string;
13
+ }
14
+ /**
15
+ * AMQP connection interface (from @golevelup/nestjs-rabbitmq).
16
+ * Using minimal interface to avoid tight coupling with the external library.
17
+ */
18
+ interface IAMQPConnection {
19
+ createSubscriber(handler: (msg: IInvalidationMessage, rawMsg: IRawMessage) => Promise<void>, options: {
20
+ exchange: string;
21
+ queue: string;
22
+ routingKey: string[];
23
+ queueOptions: {
24
+ durable: boolean;
25
+ };
26
+ }): Promise<void>;
27
+ }
28
+ /**
29
+ * Raw AMQP message interface.
30
+ */
31
+ interface IRawMessage {
32
+ fields: {
33
+ routingKey: string;
34
+ };
35
+ }
36
+ /**
37
+ * AMQP Event Source Adapter.
38
+ * Note: This adapter requires @golevelup/nestjs-rabbitmq to be installed.
39
+ * If not available, the adapter will log a warning and do nothing.
40
+ */
41
+ export declare class AMQPEventSourceAdapter implements OnModuleInit {
42
+ private readonly invalidationService;
43
+ private readonly config;
44
+ private readonly logger;
45
+ private amqpConnection;
46
+ constructor(invalidationService: IEventInvalidationService, config: ICachePluginOptions, amqpConnection?: IAMQPConnection);
47
+ onModuleInit(): Promise<void>;
48
+ private getServiceName;
49
+ }
50
+ export {};
51
+ //# sourceMappingURL=amqp-event-source.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amqp-event-source.adapter.d.ts","sourceRoot":"","sources":["../../../../src/invalidation/infrastructure/adapters/amqp-event-source.adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAsB,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AAGpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAE5F,UAAU,oBAAoB;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,UAAU,eAAe;IACvB,gBAAgB,CACd,OAAO,EAAE,CAAC,GAAG,EAAE,oBAAoB,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,EAC1E,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,YAAY,EAAE;YAAE,OAAO,EAAE,OAAO,CAAA;SAAE,CAAC;KACpC,GACA,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,WAAW;IACnB,MAAM,EAAE;QACN,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;;;GAIG;AACH,qBACa,sBAAuB,YAAW,YAAY;IAMvD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACN,OAAO,CAAC,QAAQ,CAAC,MAAM;IANvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;IAClE,OAAO,CAAC,cAAc,CAA8B;gBAIjC,mBAAmB,EAAE,yBAAyB,EAChB,MAAM,EAAE,mBAAmB,EACrC,cAAc,CAAC,EAAE,eAAe;IAKjE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA+CnC,OAAO,CAAC,cAAc;CAGvB"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @InvalidateOn decorator.
3
+ * Automatically invalidates cache after method execution based on events.
4
+ *
5
+ * Uses immediate proxy-based wrapping (not deferred to interceptor).
6
+ * Works on ANY Injectable class methods (services, repositories, etc).
7
+ */
8
+ import 'reflect-metadata';
9
+ export declare const INVALIDATE_ON_OPTIONS: unique symbol;
10
+ /**
11
+ * Event invalidation service interface for decorator use.
12
+ */
13
+ interface IDecoratorEventInvalidationService {
14
+ emit(event: string, payload: unknown): Promise<void>;
15
+ }
16
+ /**
17
+ * Register event invalidation service getter for lazy injection.
18
+ * Called by CacheDecoratorInitializerService during initialization.
19
+ */
20
+ export declare function registerEventInvalidationServiceGetter(getter: () => IDecoratorEventInvalidationService): void;
21
+ /**
22
+ * Get the registered event invalidation service.
23
+ */
24
+ export declare function getEventInvalidationService(): IDecoratorEventInvalidationService | null;
25
+ export interface IInvalidateOnOptions {
26
+ /** Events that trigger invalidation */
27
+ events: string[];
28
+ /** Tags to invalidate */
29
+ tags?: string[] | ((result: unknown, args: unknown[]) => string[]);
30
+ /** Keys to invalidate */
31
+ keys?: string[] | ((result: unknown, args: unknown[]) => string[]);
32
+ /** Condition - only invalidate if returns true */
33
+ condition?: (result: unknown, args: unknown[]) => boolean;
34
+ /** Publish event after method execution (for distributed invalidation) */
35
+ publish?: boolean;
36
+ }
37
+ /**
38
+ * Decorator that invalidates cache after method execution.
39
+ *
40
+ * Works on any Injectable class method, not just controllers.
41
+ *
42
+ * @param options - Invalidation options
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * @Injectable()
47
+ * class UserService {
48
+ * @InvalidateOn({
49
+ * events: ['user.updated'],
50
+ * tags: (result, [userId]) => [`user:${userId}`, 'users'],
51
+ * })
52
+ * async updateUser(userId: string, data: UpdateUserDto): Promise<User> {
53
+ * return this.userRepo.update(userId, data);
54
+ * }
55
+ *
56
+ * @InvalidateOn({
57
+ * events: ['user.deleted'],
58
+ * keys: (result, [userId]) => [`user:${userId}`],
59
+ * tags: ['users'],
60
+ * })
61
+ * async deleteUser(userId: string): Promise<void> {
62
+ * await this.userRepo.delete(userId);
63
+ * }
64
+ * }
65
+ * ```
66
+ */
67
+ export declare function InvalidateOn(options: IInvalidateOnOptions): MethodDecorator;
68
+ export {};
69
+ //# sourceMappingURL=invalidate-on.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalidate-on.decorator.d.ts","sourceRoot":"","sources":["../../../../src/invalidation/infrastructure/decorators/invalidate-on.decorator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,kBAAkB,CAAC;AAG1B,eAAO,MAAM,qBAAqB,eAAsC,CAAC;AAEzE;;GAEG;AACH,UAAU,kCAAkC;IAC1C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAKD;;;GAGG;AACH,wBAAgB,sCAAsC,CAAC,MAAM,EAAE,MAAM,kCAAkC,GAAG,IAAI,CAE7G;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,kCAAkC,GAAG,IAAI,CAEvF;AAED,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC;IAEnE,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC;IAEnE,kDAAkD;IAClD,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IAE1D,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,eAAe,CAuE3E"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Fluent key builder for cache keys.
3
+ *
4
+ * Provides a convenient API for building cache keys with proper formatting,
5
+ * validation, and separation.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // Simple key
10
+ * const key = KeyBuilder.create()
11
+ * .prefix('app')
12
+ * .segment('user')
13
+ * .segment('123')
14
+ * .build();
15
+ * // 'app:user:123'
16
+ *
17
+ * // With namespace
18
+ * const key = KeyBuilder.create()
19
+ * .namespace('tenant-5')
20
+ * .prefix('cache')
21
+ * .segment('product')
22
+ * .segment('456')
23
+ * .build();
24
+ * // 'tenant-5:cache:product:456'
25
+ *
26
+ * // From template
27
+ * const key = KeyBuilder.fromTemplate('user:{userId}:post:{postId}', {
28
+ * userId: '123',
29
+ * postId: '456',
30
+ * });
31
+ * // 'user:123:post:456'
32
+ *
33
+ * // With versioning
34
+ * const key = KeyBuilder.create()
35
+ * .prefix('cache')
36
+ * .version('v2')
37
+ * .segment('user')
38
+ * .segment('123')
39
+ * .build();
40
+ * // 'cache:v2:user:123'
41
+ * ```
42
+ */
43
+ export interface IKeyBuilderOptions {
44
+ /**
45
+ * Separator between segments (default: ':')
46
+ */
47
+ separator?: string;
48
+ /**
49
+ * Maximum key length (default: 512)
50
+ */
51
+ maxLength?: number;
52
+ /**
53
+ * Whether to validate segments for invalid characters (default: true)
54
+ */
55
+ validate?: boolean;
56
+ /**
57
+ * Whether to convert segments to lowercase (default: false)
58
+ */
59
+ lowercase?: boolean;
60
+ }
61
+ export declare class KeyBuilder {
62
+ private keySegments;
63
+ private options;
64
+ private constructor();
65
+ /**
66
+ * Creates a new KeyBuilder instance.
67
+ *
68
+ * @param options - Builder options
69
+ * @returns New KeyBuilder
70
+ */
71
+ static create(options?: IKeyBuilderOptions): KeyBuilder;
72
+ /**
73
+ * Creates a key from a template string with placeholders.
74
+ *
75
+ * @param template - Template string (e.g., 'user:{id}:post:{postId}')
76
+ * @param params - Parameter values
77
+ * @param options - Builder options
78
+ * @returns Generated key
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * KeyBuilder.fromTemplate('user:{id}', { id: '123' })
83
+ * // 'user:123'
84
+ *
85
+ * KeyBuilder.fromTemplate('user:{userId}:post:{postId}', {
86
+ * userId: '123',
87
+ * postId: '456',
88
+ * })
89
+ * // 'user:123:post:456'
90
+ * ```
91
+ */
92
+ static fromTemplate(template: string, params: Record<string, string | number>, options?: IKeyBuilderOptions): string;
93
+ /**
94
+ * Creates a key from an array of segments.
95
+ *
96
+ * @param segments - Array of key segments
97
+ * @param options - Builder options
98
+ * @returns Generated key
99
+ */
100
+ static fromSegments(segments: string[], options?: IKeyBuilderOptions): string;
101
+ /**
102
+ * Adds a namespace segment (first segment).
103
+ *
104
+ * @param ns - Namespace value
105
+ * @returns This builder for chaining
106
+ */
107
+ namespace(ns: string): this;
108
+ /**
109
+ * Adds a prefix segment.
110
+ *
111
+ * @param prefix - Prefix value
112
+ * @returns This builder for chaining
113
+ */
114
+ prefix(prefix: string): this;
115
+ /**
116
+ * Adds a version segment.
117
+ *
118
+ * @param version - Version value (e.g., 'v1', 'v2')
119
+ * @returns This builder for chaining
120
+ */
121
+ version(version: string): this;
122
+ /**
123
+ * Adds a segment to the key.
124
+ *
125
+ * @param value - Segment value
126
+ * @returns This builder for chaining
127
+ */
128
+ segment(value: string | number): this;
129
+ /**
130
+ * Adds multiple segments at once.
131
+ *
132
+ * @param values - Array of segment values
133
+ * @returns This builder for chaining
134
+ */
135
+ segments(...values: Array<string | number>): this;
136
+ /**
137
+ * Adds a tag segment (useful for grouping).
138
+ *
139
+ * @param tag - Tag value
140
+ * @returns This builder for chaining
141
+ */
142
+ tag(tag: string): this;
143
+ /**
144
+ * Adds timestamp segment.
145
+ *
146
+ * @param timestamp - Unix timestamp (default: now)
147
+ * @returns This builder for chaining
148
+ */
149
+ timestamp(timestamp?: number): this;
150
+ /**
151
+ * Adds a hash segment from an object.
152
+ * Useful for cache keys based on complex objects.
153
+ *
154
+ * @param obj - Object to hash
155
+ * @returns This builder for chaining
156
+ */
157
+ hash(obj: unknown): this;
158
+ /**
159
+ * Builds and returns the final key.
160
+ *
161
+ * @returns Generated cache key
162
+ * @throws CacheKeyError if key is invalid
163
+ */
164
+ build(): string;
165
+ /**
166
+ * Resets the builder to initial state.
167
+ *
168
+ * @returns This builder for chaining
169
+ */
170
+ reset(): this;
171
+ /**
172
+ * Gets current segments.
173
+ *
174
+ * @returns Array of segments
175
+ */
176
+ getSegments(): string[];
177
+ /**
178
+ * Normalizes a segment value.
179
+ *
180
+ * @param value - Segment value
181
+ * @returns Normalized value
182
+ */
183
+ private normalizeSegment;
184
+ /**
185
+ * Validates a complete key.
186
+ *
187
+ * @param key - Key to validate
188
+ * @throws CacheKeyError if key is invalid
189
+ */
190
+ private validateKey;
191
+ /**
192
+ * Simple hash function for objects.
193
+ *
194
+ * @param str - String to hash
195
+ * @returns Hash string
196
+ */
197
+ private simpleHash;
198
+ }
199
+ //# sourceMappingURL=key-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-builder.d.ts","sourceRoot":"","sources":["../src/key-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAIH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,OAAO,CAA+B;IAE9C,OAAO;IASP;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,UAAU;IAIvD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,MAAM;IAiCpH;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,MAAM;IAM7E;;;;;OAKG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK3B;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B;;;;;OAKG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKrC;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI;IAKjD;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMtB;;;;;OAKG;IACH,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAInC;;;;;;OAMG;IACH,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAKxB;;;;;OAKG;IACH,KAAK,IAAI,MAAM;IAWf;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAKb;;;;OAIG;IACH,WAAW,IAAI,MAAM,EAAE;IAIvB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAyBnB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;CASnB"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Cache serializers for different data formats.
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { JsonSerializer, MsgpackSerializer } from '@nestjs-redisx/cache';
7
+ *
8
+ * const jsonSerializer = new JsonSerializer();
9
+ * const serialized = jsonSerializer.serialize({ id: 1, name: 'John' });
10
+ *
11
+ * // For better performance and smaller size, use MessagePack
12
+ * const msgpackSerializer = new MsgpackSerializer();
13
+ * const binary = msgpackSerializer.serialize(largeData);
14
+ * ```
15
+ */
16
+ export type { ISerializer } from './serializer.interface';
17
+ export { JsonSerializer } from './json.serializer';
18
+ export { MsgpackSerializer } from './msgpack.serializer';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/serializers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}