@bloomneo/appkit 1.2.9

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 (262) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +902 -0
  3. package/bin/appkit.js +71 -0
  4. package/bin/commands/generate.js +1050 -0
  5. package/bin/templates/backend/README.md.template +39 -0
  6. package/bin/templates/backend/api.http.template +0 -0
  7. package/bin/templates/backend/docs/APPKIT_CLI.md +507 -0
  8. package/bin/templates/backend/docs/APPKIT_COMMENTS_GUIDELINES.md +61 -0
  9. package/bin/templates/backend/docs/APPKIT_LLM_GUIDE.md +2539 -0
  10. package/bin/templates/backend/package.json.template +34 -0
  11. package/bin/templates/backend/src/api/features/welcome/welcome.http.template +29 -0
  12. package/bin/templates/backend/src/api/features/welcome/welcome.route.ts.template +36 -0
  13. package/bin/templates/backend/src/api/features/welcome/welcome.service.ts.template +88 -0
  14. package/bin/templates/backend/src/api/features/welcome/welcome.types.ts.template +18 -0
  15. package/bin/templates/backend/src/api/lib/api-router.ts.template +84 -0
  16. package/bin/templates/backend/src/api/server.ts.template +188 -0
  17. package/bin/templates/backend/tsconfig.api.json.template +24 -0
  18. package/bin/templates/backend/tsconfig.json.template +40 -0
  19. package/bin/templates/feature/feature.http.template +63 -0
  20. package/bin/templates/feature/feature.route.ts.template +36 -0
  21. package/bin/templates/feature/feature.service.ts.template +81 -0
  22. package/bin/templates/feature/feature.types.ts.template +23 -0
  23. package/bin/templates/feature-db/feature.http.template +63 -0
  24. package/bin/templates/feature-db/feature.model.ts.template +74 -0
  25. package/bin/templates/feature-db/feature.route.ts.template +58 -0
  26. package/bin/templates/feature-db/feature.service.ts.template +231 -0
  27. package/bin/templates/feature-db/feature.types.ts.template +25 -0
  28. package/bin/templates/feature-db/schema-addition.prisma.template +9 -0
  29. package/bin/templates/feature-db/seeding/README.md.template +57 -0
  30. package/bin/templates/feature-db/seeding/feature.seed.js.template +67 -0
  31. package/bin/templates/feature-user/schema-addition.prisma.template +19 -0
  32. package/bin/templates/feature-user/user.http.template +157 -0
  33. package/bin/templates/feature-user/user.model.ts.template +244 -0
  34. package/bin/templates/feature-user/user.route.ts.template +379 -0
  35. package/bin/templates/feature-user/user.seed.js.template +182 -0
  36. package/bin/templates/feature-user/user.service.ts.template +426 -0
  37. package/bin/templates/feature-user/user.types.ts.template +127 -0
  38. package/dist/auth/auth.d.ts +182 -0
  39. package/dist/auth/auth.d.ts.map +1 -0
  40. package/dist/auth/auth.js +477 -0
  41. package/dist/auth/auth.js.map +1 -0
  42. package/dist/auth/defaults.d.ts +104 -0
  43. package/dist/auth/defaults.d.ts.map +1 -0
  44. package/dist/auth/defaults.js +374 -0
  45. package/dist/auth/defaults.js.map +1 -0
  46. package/dist/auth/index.d.ts +70 -0
  47. package/dist/auth/index.d.ts.map +1 -0
  48. package/dist/auth/index.js +94 -0
  49. package/dist/auth/index.js.map +1 -0
  50. package/dist/cache/cache.d.ts +118 -0
  51. package/dist/cache/cache.d.ts.map +1 -0
  52. package/dist/cache/cache.js +249 -0
  53. package/dist/cache/cache.js.map +1 -0
  54. package/dist/cache/defaults.d.ts +63 -0
  55. package/dist/cache/defaults.d.ts.map +1 -0
  56. package/dist/cache/defaults.js +193 -0
  57. package/dist/cache/defaults.js.map +1 -0
  58. package/dist/cache/index.d.ts +101 -0
  59. package/dist/cache/index.d.ts.map +1 -0
  60. package/dist/cache/index.js +203 -0
  61. package/dist/cache/index.js.map +1 -0
  62. package/dist/cache/strategies/memory.d.ts +138 -0
  63. package/dist/cache/strategies/memory.d.ts.map +1 -0
  64. package/dist/cache/strategies/memory.js +348 -0
  65. package/dist/cache/strategies/memory.js.map +1 -0
  66. package/dist/cache/strategies/redis.d.ts +105 -0
  67. package/dist/cache/strategies/redis.d.ts.map +1 -0
  68. package/dist/cache/strategies/redis.js +318 -0
  69. package/dist/cache/strategies/redis.js.map +1 -0
  70. package/dist/config/config.d.ts +62 -0
  71. package/dist/config/config.d.ts.map +1 -0
  72. package/dist/config/config.js +107 -0
  73. package/dist/config/config.js.map +1 -0
  74. package/dist/config/defaults.d.ts +44 -0
  75. package/dist/config/defaults.d.ts.map +1 -0
  76. package/dist/config/defaults.js +217 -0
  77. package/dist/config/defaults.js.map +1 -0
  78. package/dist/config/index.d.ts +105 -0
  79. package/dist/config/index.d.ts.map +1 -0
  80. package/dist/config/index.js +163 -0
  81. package/dist/config/index.js.map +1 -0
  82. package/dist/database/adapters/mongoose.d.ts +106 -0
  83. package/dist/database/adapters/mongoose.d.ts.map +1 -0
  84. package/dist/database/adapters/mongoose.js +480 -0
  85. package/dist/database/adapters/mongoose.js.map +1 -0
  86. package/dist/database/adapters/prisma.d.ts +106 -0
  87. package/dist/database/adapters/prisma.d.ts.map +1 -0
  88. package/dist/database/adapters/prisma.js +494 -0
  89. package/dist/database/adapters/prisma.js.map +1 -0
  90. package/dist/database/defaults.d.ts +87 -0
  91. package/dist/database/defaults.d.ts.map +1 -0
  92. package/dist/database/defaults.js +271 -0
  93. package/dist/database/defaults.js.map +1 -0
  94. package/dist/database/index.d.ts +137 -0
  95. package/dist/database/index.d.ts.map +1 -0
  96. package/dist/database/index.js +490 -0
  97. package/dist/database/index.js.map +1 -0
  98. package/dist/email/defaults.d.ts +100 -0
  99. package/dist/email/defaults.d.ts.map +1 -0
  100. package/dist/email/defaults.js +400 -0
  101. package/dist/email/defaults.js.map +1 -0
  102. package/dist/email/email.d.ts +139 -0
  103. package/dist/email/email.d.ts.map +1 -0
  104. package/dist/email/email.js +316 -0
  105. package/dist/email/email.js.map +1 -0
  106. package/dist/email/index.d.ts +176 -0
  107. package/dist/email/index.d.ts.map +1 -0
  108. package/dist/email/index.js +251 -0
  109. package/dist/email/index.js.map +1 -0
  110. package/dist/email/strategies/console.d.ts +90 -0
  111. package/dist/email/strategies/console.d.ts.map +1 -0
  112. package/dist/email/strategies/console.js +268 -0
  113. package/dist/email/strategies/console.js.map +1 -0
  114. package/dist/email/strategies/resend.d.ts +84 -0
  115. package/dist/email/strategies/resend.d.ts.map +1 -0
  116. package/dist/email/strategies/resend.js +266 -0
  117. package/dist/email/strategies/resend.js.map +1 -0
  118. package/dist/email/strategies/smtp.d.ts +77 -0
  119. package/dist/email/strategies/smtp.d.ts.map +1 -0
  120. package/dist/email/strategies/smtp.js +286 -0
  121. package/dist/email/strategies/smtp.js.map +1 -0
  122. package/dist/error/defaults.d.ts +40 -0
  123. package/dist/error/defaults.d.ts.map +1 -0
  124. package/dist/error/defaults.js +75 -0
  125. package/dist/error/defaults.js.map +1 -0
  126. package/dist/error/error.d.ts +140 -0
  127. package/dist/error/error.d.ts.map +1 -0
  128. package/dist/error/error.js +200 -0
  129. package/dist/error/error.js.map +1 -0
  130. package/dist/error/index.d.ts +145 -0
  131. package/dist/error/index.d.ts.map +1 -0
  132. package/dist/error/index.js +145 -0
  133. package/dist/error/index.js.map +1 -0
  134. package/dist/event/defaults.d.ts +111 -0
  135. package/dist/event/defaults.d.ts.map +1 -0
  136. package/dist/event/defaults.js +378 -0
  137. package/dist/event/defaults.js.map +1 -0
  138. package/dist/event/event.d.ts +171 -0
  139. package/dist/event/event.d.ts.map +1 -0
  140. package/dist/event/event.js +391 -0
  141. package/dist/event/event.js.map +1 -0
  142. package/dist/event/index.d.ts +173 -0
  143. package/dist/event/index.d.ts.map +1 -0
  144. package/dist/event/index.js +302 -0
  145. package/dist/event/index.js.map +1 -0
  146. package/dist/event/strategies/memory.d.ts +122 -0
  147. package/dist/event/strategies/memory.d.ts.map +1 -0
  148. package/dist/event/strategies/memory.js +331 -0
  149. package/dist/event/strategies/memory.js.map +1 -0
  150. package/dist/event/strategies/redis.d.ts +115 -0
  151. package/dist/event/strategies/redis.d.ts.map +1 -0
  152. package/dist/event/strategies/redis.js +434 -0
  153. package/dist/event/strategies/redis.js.map +1 -0
  154. package/dist/index.d.ts +58 -0
  155. package/dist/index.d.ts.map +1 -0
  156. package/dist/index.js +72 -0
  157. package/dist/index.js.map +1 -0
  158. package/dist/logger/defaults.d.ts +67 -0
  159. package/dist/logger/defaults.d.ts.map +1 -0
  160. package/dist/logger/defaults.js +213 -0
  161. package/dist/logger/defaults.js.map +1 -0
  162. package/dist/logger/index.d.ts +84 -0
  163. package/dist/logger/index.d.ts.map +1 -0
  164. package/dist/logger/index.js +101 -0
  165. package/dist/logger/index.js.map +1 -0
  166. package/dist/logger/logger.d.ts +165 -0
  167. package/dist/logger/logger.d.ts.map +1 -0
  168. package/dist/logger/logger.js +843 -0
  169. package/dist/logger/logger.js.map +1 -0
  170. package/dist/logger/transports/console.d.ts +102 -0
  171. package/dist/logger/transports/console.d.ts.map +1 -0
  172. package/dist/logger/transports/console.js +276 -0
  173. package/dist/logger/transports/console.js.map +1 -0
  174. package/dist/logger/transports/database.d.ts +153 -0
  175. package/dist/logger/transports/database.d.ts.map +1 -0
  176. package/dist/logger/transports/database.js +539 -0
  177. package/dist/logger/transports/database.js.map +1 -0
  178. package/dist/logger/transports/file.d.ts +146 -0
  179. package/dist/logger/transports/file.d.ts.map +1 -0
  180. package/dist/logger/transports/file.js +464 -0
  181. package/dist/logger/transports/file.js.map +1 -0
  182. package/dist/logger/transports/http.d.ts +128 -0
  183. package/dist/logger/transports/http.d.ts.map +1 -0
  184. package/dist/logger/transports/http.js +401 -0
  185. package/dist/logger/transports/http.js.map +1 -0
  186. package/dist/logger/transports/webhook.d.ts +152 -0
  187. package/dist/logger/transports/webhook.d.ts.map +1 -0
  188. package/dist/logger/transports/webhook.js +485 -0
  189. package/dist/logger/transports/webhook.js.map +1 -0
  190. package/dist/queue/defaults.d.ts +66 -0
  191. package/dist/queue/defaults.d.ts.map +1 -0
  192. package/dist/queue/defaults.js +205 -0
  193. package/dist/queue/defaults.js.map +1 -0
  194. package/dist/queue/index.d.ts +124 -0
  195. package/dist/queue/index.d.ts.map +1 -0
  196. package/dist/queue/index.js +116 -0
  197. package/dist/queue/index.js.map +1 -0
  198. package/dist/queue/queue.d.ts +156 -0
  199. package/dist/queue/queue.d.ts.map +1 -0
  200. package/dist/queue/queue.js +387 -0
  201. package/dist/queue/queue.js.map +1 -0
  202. package/dist/queue/transports/database.d.ts +165 -0
  203. package/dist/queue/transports/database.d.ts.map +1 -0
  204. package/dist/queue/transports/database.js +595 -0
  205. package/dist/queue/transports/database.js.map +1 -0
  206. package/dist/queue/transports/memory.d.ts +143 -0
  207. package/dist/queue/transports/memory.d.ts.map +1 -0
  208. package/dist/queue/transports/memory.js +415 -0
  209. package/dist/queue/transports/memory.js.map +1 -0
  210. package/dist/queue/transports/redis.d.ts +203 -0
  211. package/dist/queue/transports/redis.d.ts.map +1 -0
  212. package/dist/queue/transports/redis.js +744 -0
  213. package/dist/queue/transports/redis.js.map +1 -0
  214. package/dist/security/defaults.d.ts +64 -0
  215. package/dist/security/defaults.d.ts.map +1 -0
  216. package/dist/security/defaults.js +159 -0
  217. package/dist/security/defaults.js.map +1 -0
  218. package/dist/security/index.d.ts +110 -0
  219. package/dist/security/index.d.ts.map +1 -0
  220. package/dist/security/index.js +160 -0
  221. package/dist/security/index.js.map +1 -0
  222. package/dist/security/security.d.ts +138 -0
  223. package/dist/security/security.d.ts.map +1 -0
  224. package/dist/security/security.js +419 -0
  225. package/dist/security/security.js.map +1 -0
  226. package/dist/storage/defaults.d.ts +79 -0
  227. package/dist/storage/defaults.d.ts.map +1 -0
  228. package/dist/storage/defaults.js +358 -0
  229. package/dist/storage/defaults.js.map +1 -0
  230. package/dist/storage/index.d.ts +153 -0
  231. package/dist/storage/index.d.ts.map +1 -0
  232. package/dist/storage/index.js +242 -0
  233. package/dist/storage/index.js.map +1 -0
  234. package/dist/storage/storage.d.ts +151 -0
  235. package/dist/storage/storage.d.ts.map +1 -0
  236. package/dist/storage/storage.js +439 -0
  237. package/dist/storage/storage.js.map +1 -0
  238. package/dist/storage/strategies/local.d.ts +117 -0
  239. package/dist/storage/strategies/local.d.ts.map +1 -0
  240. package/dist/storage/strategies/local.js +368 -0
  241. package/dist/storage/strategies/local.js.map +1 -0
  242. package/dist/storage/strategies/r2.d.ts +130 -0
  243. package/dist/storage/strategies/r2.d.ts.map +1 -0
  244. package/dist/storage/strategies/r2.js +470 -0
  245. package/dist/storage/strategies/r2.js.map +1 -0
  246. package/dist/storage/strategies/s3.d.ts +121 -0
  247. package/dist/storage/strategies/s3.d.ts.map +1 -0
  248. package/dist/storage/strategies/s3.js +461 -0
  249. package/dist/storage/strategies/s3.js.map +1 -0
  250. package/dist/util/defaults.d.ts +77 -0
  251. package/dist/util/defaults.d.ts.map +1 -0
  252. package/dist/util/defaults.js +193 -0
  253. package/dist/util/defaults.js.map +1 -0
  254. package/dist/util/index.d.ts +97 -0
  255. package/dist/util/index.d.ts.map +1 -0
  256. package/dist/util/index.js +165 -0
  257. package/dist/util/index.js.map +1 -0
  258. package/dist/util/util.d.ts +145 -0
  259. package/dist/util/util.d.ts.map +1 -0
  260. package/dist/util/util.js +481 -0
  261. package/dist/util/util.js.map +1 -0
  262. package/package.json +234 -0
@@ -0,0 +1,348 @@
1
+ /**
2
+ * Memory cache strategy with LRU eviction and TTL expiration
3
+ * @module @bloomneo/appkit/cache
4
+ * @file src/cache/strategies/memory.ts
5
+ *
6
+ * @llm-rule WHEN: No REDIS_URL environment variable - perfect for development and testing
7
+ * @llm-rule AVOID: Production use without Redis - memory cache doesn't persist across restarts
8
+ * @llm-rule NOTE: LRU eviction, TTL cleanup, memory limits, thread-safe operations
9
+ */
10
+ /**
11
+ * Memory cache strategy with intelligent eviction and cleanup
12
+ */
13
+ export class MemoryStrategy {
14
+ config;
15
+ cache = new Map();
16
+ totalSize = 0;
17
+ cleanupInterval = null;
18
+ connected = false;
19
+ /**
20
+ * Creates memory strategy with direct environment access (like auth pattern)
21
+ * @llm-rule WHEN: Cache initialization without Redis URL - automatic fallback
22
+ * @llm-rule AVOID: Manual memory configuration - environment detection handles this
23
+ */
24
+ constructor(config) {
25
+ this.config = config;
26
+ }
27
+ /**
28
+ * Connects memory cache (starts cleanup intervals)
29
+ * @llm-rule WHEN: Cache initialization - sets up automatic TTL cleanup
30
+ * @llm-rule AVOID: Manual memory management - this handles TTL and size limits automatically
31
+ */
32
+ async connect() {
33
+ if (this.connected)
34
+ return;
35
+ // Start cleanup interval for TTL expiration
36
+ this.startCleanupInterval();
37
+ this.connected = true;
38
+ if (this.config.environment.isDevelopment) {
39
+ console.log(`✅ [AppKit] Memory cache initialized (max: ${this.formatBytes(this.config.memory.maxSizeBytes)}, items: ${this.config.memory.maxItems})`);
40
+ }
41
+ }
42
+ /**
43
+ * Disconnects memory cache (stops cleanup intervals)
44
+ * @llm-rule WHEN: App shutdown or cache cleanup
45
+ * @llm-rule AVOID: Memory leaks - always stop intervals on shutdown
46
+ */
47
+ async disconnect() {
48
+ if (!this.connected)
49
+ return;
50
+ this.stopCleanupInterval();
51
+ this.cache.clear();
52
+ this.totalSize = 0;
53
+ this.connected = false;
54
+ if (this.config.environment.isDevelopment) {
55
+ console.log(`👋 [AppKit] Memory cache disconnected`);
56
+ }
57
+ }
58
+ /**
59
+ * Gets value from memory cache with TTL checking
60
+ * @llm-rule WHEN: Retrieving cached data from in-memory storage
61
+ * @llm-rule AVOID: Manual TTL checking - this handles expiration automatically
62
+ */
63
+ async get(key) {
64
+ const item = this.cache.get(key);
65
+ if (!item) {
66
+ return null; // Key not found
67
+ }
68
+ // Check TTL expiration
69
+ if (this.isExpired(item)) {
70
+ this.deleteItem(key);
71
+ return null;
72
+ }
73
+ // Update access time for LRU
74
+ item.accessTime = Date.now();
75
+ return this.deepClone(item.value);
76
+ }
77
+ /**
78
+ * Sets value in memory cache with TTL and automatic eviction
79
+ * @llm-rule WHEN: Storing data in memory cache with size and TTL management
80
+ * @llm-rule AVOID: Manual memory management - this handles LRU eviction automatically
81
+ */
82
+ async set(key, value, ttl) {
83
+ try {
84
+ // Clone value to prevent external mutations
85
+ const clonedValue = this.deepClone(value);
86
+ const size = this.calculateSize(clonedValue);
87
+ const now = Date.now();
88
+ const item = {
89
+ value: clonedValue,
90
+ ttl: now + (ttl * 1000), // Convert seconds to milliseconds
91
+ size,
92
+ accessTime: now,
93
+ createTime: now,
94
+ };
95
+ // Remove existing item if present
96
+ if (this.cache.has(key)) {
97
+ this.deleteItem(key);
98
+ }
99
+ // Check if single item exceeds max size
100
+ if (size > this.config.memory.maxSizeBytes) {
101
+ console.warn(`[AppKit] Cache item too large (${this.formatBytes(size)} > ${this.formatBytes(this.config.memory.maxSizeBytes)})`);
102
+ return false;
103
+ }
104
+ // Evict items to make space
105
+ this.evictIfNeeded(size);
106
+ // Add new item
107
+ this.cache.set(key, item);
108
+ this.totalSize += size;
109
+ return true;
110
+ }
111
+ catch (error) {
112
+ console.error(`[AppKit] Memory set error for key "${key}":`, error.message);
113
+ return false;
114
+ }
115
+ }
116
+ /**
117
+ * Deletes key from memory cache
118
+ * @llm-rule WHEN: Cache invalidation or removing specific cached data
119
+ * @llm-rule AVOID: Manual memory cleanup - this handles size tracking automatically
120
+ */
121
+ async delete(key) {
122
+ return this.deleteItem(key);
123
+ }
124
+ /**
125
+ * Clears entire memory cache
126
+ * @llm-rule WHEN: Full cache invalidation or testing cleanup
127
+ * @llm-rule AVOID: Using in production without consideration - clears all cached data
128
+ */
129
+ async clear() {
130
+ this.cache.clear();
131
+ this.totalSize = 0;
132
+ return true;
133
+ }
134
+ /**
135
+ * Checks if key exists in memory cache
136
+ * @llm-rule WHEN: Checking cache key existence without retrieving value
137
+ * @llm-rule AVOID: Using get() then checking null - this is more efficient
138
+ */
139
+ async has(key) {
140
+ const item = this.cache.get(key);
141
+ if (!item) {
142
+ return false;
143
+ }
144
+ // Check TTL expiration
145
+ if (this.isExpired(item)) {
146
+ this.deleteItem(key);
147
+ return false;
148
+ }
149
+ return true;
150
+ }
151
+ /**
152
+ * Gets all keys matching pattern (supports wildcards)
153
+ * @llm-rule WHEN: Finding all keys in namespace for bulk operations
154
+ * @llm-rule AVOID: Complex pattern matching - simple wildcards only
155
+ */
156
+ async keys(pattern = '*') {
157
+ const keys = [];
158
+ const regex = this.patternToRegex(pattern);
159
+ for (const [key, item] of this.cache.entries()) {
160
+ // Skip expired items
161
+ if (this.isExpired(item)) {
162
+ this.deleteItem(key);
163
+ continue;
164
+ }
165
+ if (regex.test(key)) {
166
+ keys.push(key);
167
+ }
168
+ }
169
+ return keys;
170
+ }
171
+ /**
172
+ * Deletes multiple keys efficiently
173
+ * @llm-rule WHEN: Bulk deletion operations like namespace clearing
174
+ * @llm-rule AVOID: Individual delete calls in loops - this batches operations
175
+ */
176
+ async deleteMany(keys) {
177
+ let deletedCount = 0;
178
+ for (const key of keys) {
179
+ if (this.deleteItem(key)) {
180
+ deletedCount++;
181
+ }
182
+ }
183
+ return deletedCount;
184
+ }
185
+ // Private helper methods
186
+ /**
187
+ * Deletes single item and updates size tracking
188
+ */
189
+ deleteItem(key) {
190
+ const item = this.cache.get(key);
191
+ if (!item)
192
+ return false;
193
+ this.cache.delete(key);
194
+ this.totalSize -= item.size;
195
+ return true;
196
+ }
197
+ /**
198
+ * Checks if cache item has expired
199
+ */
200
+ isExpired(item) {
201
+ return Date.now() > item.ttl;
202
+ }
203
+ /**
204
+ * Evicts items when memory limits are exceeded
205
+ */
206
+ evictIfNeeded(newItemSize) {
207
+ const memoryConfig = this.config.memory;
208
+ // Check item count limit
209
+ while (this.cache.size >= memoryConfig.maxItems) {
210
+ this.evictLRU();
211
+ }
212
+ // Check memory size limit
213
+ while (this.totalSize + newItemSize > memoryConfig.maxSizeBytes) {
214
+ if (!this.evictLRU()) {
215
+ break; // No more items to evict
216
+ }
217
+ }
218
+ }
219
+ /**
220
+ * Evicts least recently used item
221
+ */
222
+ evictLRU() {
223
+ if (this.cache.size === 0)
224
+ return false;
225
+ let oldestKey = null;
226
+ let oldestTime = Infinity;
227
+ // Find LRU item
228
+ for (const [key, item] of this.cache.entries()) {
229
+ if (item.accessTime < oldestTime) {
230
+ oldestTime = item.accessTime;
231
+ oldestKey = key;
232
+ }
233
+ }
234
+ if (oldestKey) {
235
+ this.deleteItem(oldestKey);
236
+ return true;
237
+ }
238
+ return false;
239
+ }
240
+ /**
241
+ * Calculates memory size of value (approximate)
242
+ */
243
+ calculateSize(value) {
244
+ try {
245
+ // Simple size calculation using JSON serialization
246
+ const serialized = JSON.stringify(value);
247
+ return Buffer.byteLength(serialized, 'utf8');
248
+ }
249
+ catch {
250
+ // Fallback for non-serializable values
251
+ return 1024; // 1KB default
252
+ }
253
+ }
254
+ /**
255
+ * Deep clones value to prevent external mutations
256
+ */
257
+ deepClone(value) {
258
+ try {
259
+ return JSON.parse(JSON.stringify(value));
260
+ }
261
+ catch {
262
+ // Fallback for non-serializable values
263
+ return value;
264
+ }
265
+ }
266
+ /**
267
+ * Converts glob pattern to regex for key matching
268
+ */
269
+ patternToRegex(pattern) {
270
+ if (pattern === '*') {
271
+ return /.*/; // Match everything
272
+ }
273
+ // Escape special regex characters except * and ?
274
+ const escaped = pattern
275
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
276
+ .replace(/\*/g, '.*') // * becomes .*
277
+ .replace(/\?/g, '.'); // ? becomes .
278
+ return new RegExp(`^${escaped}$`);
279
+ }
280
+ /**
281
+ * Starts automatic cleanup interval for TTL expiration
282
+ */
283
+ startCleanupInterval() {
284
+ const interval = this.config.memory.checkInterval;
285
+ this.cleanupInterval = setInterval(() => {
286
+ this.cleanupExpired();
287
+ }, interval);
288
+ // Don't let interval keep process alive
289
+ if (this.cleanupInterval.unref) {
290
+ this.cleanupInterval.unref();
291
+ }
292
+ }
293
+ /**
294
+ * Stops cleanup interval
295
+ */
296
+ stopCleanupInterval() {
297
+ if (this.cleanupInterval) {
298
+ clearInterval(this.cleanupInterval);
299
+ this.cleanupInterval = null;
300
+ }
301
+ }
302
+ /**
303
+ * Removes expired items from cache
304
+ */
305
+ cleanupExpired() {
306
+ const keysToDelete = [];
307
+ for (const [key, item] of this.cache.entries()) {
308
+ if (this.isExpired(item)) {
309
+ keysToDelete.push(key);
310
+ }
311
+ }
312
+ // Delete expired items
313
+ for (const key of keysToDelete) {
314
+ this.deleteItem(key);
315
+ }
316
+ // Log cleanup results in development
317
+ if (keysToDelete.length > 0 && this.config.environment.isDevelopment) {
318
+ console.log(`🧹 [AppKit] Memory cache cleanup: removed ${keysToDelete.length} expired items`);
319
+ }
320
+ }
321
+ /**
322
+ * Formats bytes for human-readable display
323
+ */
324
+ formatBytes(bytes) {
325
+ if (bytes === 0)
326
+ return '0 B';
327
+ const k = 1024;
328
+ const sizes = ['B', 'KB', 'MB', 'GB'];
329
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
330
+ return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;
331
+ }
332
+ /**
333
+ * Gets memory cache statistics for debugging
334
+ */
335
+ getStats() {
336
+ const memoryConfig = this.config.memory;
337
+ return {
338
+ itemCount: this.cache.size,
339
+ totalSize: this.totalSize,
340
+ totalSizeFormatted: this.formatBytes(this.totalSize),
341
+ maxItems: memoryConfig.maxItems,
342
+ maxSize: memoryConfig.maxSizeBytes,
343
+ maxSizeFormatted: this.formatBytes(memoryConfig.maxSizeBytes),
344
+ memoryUsage: this.totalSize / memoryConfig.maxSizeBytes,
345
+ };
346
+ }
347
+ }
348
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/cache/strategies/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Redis cache strategy with automatic connection management and retry logic
3
+ * @module @bloomneo/appkit/cache
4
+ * @file src/cache/strategies/redis.ts
5
+ *
6
+ * @llm-rule WHEN: App has REDIS_URL environment variable for distributed caching
7
+ * @llm-rule AVOID: Manual Redis setup - this handles connection, retry, and serialization automatically
8
+ * @llm-rule NOTE: Auto-reconnects on failure, handles JSON serialization, production-ready
9
+ */
10
+ import type { CacheStrategy } from '../cache.js';
11
+ import type { CacheConfig } from '../defaults.js';
12
+ /**
13
+ * Redis cache strategy with enterprise-grade reliability
14
+ */
15
+ export declare class RedisStrategy implements CacheStrategy {
16
+ private config;
17
+ private client;
18
+ private connected;
19
+ private connectionPromise;
20
+ /**
21
+ * Creates Redis strategy with direct environment access (like auth pattern)
22
+ * @llm-rule WHEN: Cache initialization with Redis URL detected
23
+ * @llm-rule AVOID: Manual Redis configuration - environment detection handles this
24
+ */
25
+ constructor(config: CacheConfig);
26
+ /**
27
+ * Connects to Redis with automatic retry and connection pooling
28
+ * @llm-rule WHEN: Cache initialization or reconnection after failure
29
+ * @llm-rule AVOID: Manual connection management - this handles all Redis complexity
30
+ */
31
+ connect(): Promise<void>;
32
+ /**
33
+ * Establishes Redis connection with retry logic
34
+ */
35
+ private establishConnection;
36
+ /**
37
+ * Sets up Redis event handlers for connection management
38
+ */
39
+ private setupEventHandlers;
40
+ /**
41
+ * Disconnects from Redis gracefully
42
+ * @llm-rule WHEN: App shutdown or cache cleanup
43
+ * @llm-rule AVOID: Abrupt disconnection - graceful shutdown prevents data loss
44
+ */
45
+ disconnect(): Promise<void>;
46
+ /**
47
+ * Gets value from Redis with automatic JSON deserialization
48
+ * @llm-rule WHEN: Retrieving cached data from distributed Redis cache
49
+ * @llm-rule AVOID: Manual Redis commands - this handles serialization automatically
50
+ */
51
+ get(key: string): Promise<any>;
52
+ /**
53
+ * Sets value in Redis with TTL and automatic JSON serialization
54
+ * @llm-rule WHEN: Storing data in distributed Redis cache with expiration
55
+ * @llm-rule AVOID: Manual Redis commands - this handles serialization and TTL automatically
56
+ */
57
+ set(key: string, value: any, ttl: number): Promise<boolean>;
58
+ /**
59
+ * Deletes key from Redis
60
+ * @llm-rule WHEN: Cache invalidation or removing specific cached data
61
+ * @llm-rule AVOID: Manual key management - this handles Redis delete operations
62
+ */
63
+ delete(key: string): Promise<boolean>;
64
+ /**
65
+ * Clears all keys matching pattern (usually namespace-based)
66
+ * @llm-rule WHEN: Namespace-based cache invalidation
67
+ * @llm-rule AVOID: Using FLUSHDB - this only clears specific namespace keys
68
+ */
69
+ clear(): Promise<boolean>;
70
+ /**
71
+ * Checks if key exists in Redis
72
+ * @llm-rule WHEN: Checking cache key existence without retrieving value
73
+ * @llm-rule AVOID: Using get() then checking null - this is more efficient
74
+ */
75
+ has(key: string): Promise<boolean>;
76
+ /**
77
+ * Gets all keys matching pattern (for namespace operations)
78
+ * @llm-rule WHEN: Finding all keys in namespace for bulk operations
79
+ * @llm-rule AVOID: Using KEYS in production with large datasets - use SCAN instead
80
+ */
81
+ keys(pattern?: string): Promise<string[]>;
82
+ /**
83
+ * Deletes multiple keys efficiently
84
+ * @llm-rule WHEN: Bulk deletion operations like namespace clearing
85
+ * @llm-rule AVOID: Individual delete calls - batch operations are much faster
86
+ */
87
+ deleteMany(keys: string[]): Promise<number>;
88
+ /**
89
+ * Ensures Redis connection is established
90
+ */
91
+ private ensureConnected;
92
+ /**
93
+ * Serializes value to JSON string for Redis storage
94
+ */
95
+ private serialize;
96
+ /**
97
+ * Deserializes JSON string from Redis
98
+ */
99
+ private deserialize;
100
+ /**
101
+ * Masks sensitive parts of Redis URL for logging
102
+ */
103
+ private maskUrl;
104
+ }
105
+ //# sourceMappingURL=redis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/cache/strategies/redis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;GAEG;AACH,qBAAa,aAAc,YAAW,aAAa;IACjD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,iBAAiB,CAA8B;IAEvD;;;;OAIG;gBACS,MAAM,EAAE,WAAW;IAI/B;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAa9B;;OAEG;YACW,mBAAmB;IAiDjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoC1B;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBjC;;;;OAIG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAkBpC;;;;OAIG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBjE;;;;OAIG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY3C;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAM/B;;;;OAIG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYxC;;;;OAIG;IACG,IAAI,CAAC,OAAO,GAAE,MAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAyBpD;;;;OAIG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBjD;;OAEG;YACW,eAAe;IAM7B;;OAEG;IACH,OAAO,CAAC,SAAS;IAQjB;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACH,OAAO,CAAC,OAAO;CAWhB"}