@mastra/core
Version:
Mastra is a framework for building AI-powered applications and agents with a modern TypeScript stack.
1 lines • 7.55 kB
Source Map (JSON)
{"version":3,"sources":["../src/cache/base.ts","../src/cache/inmemory.ts"],"names":["MastraBase","TTLCache"],"mappings":"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","file":"chunk-BRVYVULM.cjs","sourcesContent":["import { MastraBase } from '../base';\n\nexport abstract class MastraServerCache extends MastraBase {\n constructor({ name }: { name: string }) {\n super({\n component: 'SERVER_CACHE',\n name,\n });\n }\n\n abstract get(key: string): Promise<unknown>;\n\n abstract listLength(key: string): Promise<number>;\n\n /**\n * Store a value in the cache.\n * @param key - Cache key\n * @param value - Value to store\n * @param ttlMs - Optional per-key TTL in milliseconds. If not provided, uses\n * the implementation's default TTL.\n */\n abstract set(key: string, value: unknown, ttlMs?: number): Promise<void>;\n\n abstract listPush(key: string, value: unknown): Promise<void>;\n\n abstract listFromTo(key: string, from: number, to?: number): Promise<unknown[]>;\n\n abstract delete(key: string): Promise<void>;\n\n abstract clear(): Promise<void>;\n\n /**\n * Atomically increment a counter and return the new value.\n * Used for generating sequential indices for events.\n * Returns 1 on first call (counter starts at 0, increments to 1).\n *\n * For Redis: Uses INCR command which is atomic.\n * For in-memory: Uses a simple counter map.\n */\n abstract increment(key: string): Promise<number>;\n}\n","import { TTLCache } from '@isaacs/ttlcache';\nimport { MastraServerCache } from './base';\n\n/**\n * Options for InMemoryServerCache\n */\nexport interface InMemoryServerCacheOptions {\n /**\n * Maximum number of items to store in cache.\n * Defaults to 1000.\n */\n maxSize?: number;\n\n /**\n * Default TTL in milliseconds for cached items.\n * Defaults to 300000 (5 minutes).\n * Set to 0 to disable TTL (items persist until explicitly deleted or evicted).\n */\n ttlMs?: number;\n}\n\nexport class InMemoryServerCache extends MastraServerCache {\n private cache: TTLCache<string, unknown>;\n private ttlMs: number;\n\n constructor(options: InMemoryServerCacheOptions = {}) {\n super({ name: 'InMemoryServerCache' });\n\n this.ttlMs = options.ttlMs ?? 1000 * 60 * 5;\n // TTLCache requires positive integer or Infinity; use Infinity when TTL is disabled\n const ttl = this.ttlMs > 0 ? this.ttlMs : Infinity;\n\n this.cache = new TTLCache<string, unknown>({\n max: options.maxSize ?? 1000,\n ttl,\n });\n }\n\n async get(key: string): Promise<unknown> {\n return this.cache.get(key);\n }\n\n async set(key: string, value: unknown, ttlMs?: number): Promise<void> {\n if (ttlMs === undefined) {\n this.cache.set(key, value);\n return;\n }\n // TTLCache requires positive integer or Infinity; non-positive overrides\n // mean \"no expiry\" and must be normalized.\n this.cache.set(key, value, { ttl: ttlMs > 0 ? ttlMs : Infinity });\n }\n\n async listLength(key: string): Promise<number> {\n const value = this.cache.get(key);\n if (value === undefined) {\n return 0; // Key doesn't exist - return 0\n }\n if (!Array.isArray(value)) {\n throw new Error(`${key} exists but is not an array`);\n }\n return value.length;\n }\n\n async listPush(key: string, value: unknown): Promise<void> {\n const existing = this.cache.get(key);\n if (Array.isArray(existing)) {\n existing.push(value);\n // Refresh TTL on push by re-setting the key with the updated list\n if (this.ttlMs > 0) {\n this.cache.set(key, existing, { ttl: this.ttlMs });\n }\n } else if (existing !== undefined) {\n throw new Error(`${key} exists but is not an array`);\n } else {\n this.cache.set(key, [value]);\n }\n }\n\n async listFromTo(key: string, from: number, to: number = -1): Promise<unknown[]> {\n const list = this.cache.get(key) as unknown[];\n if (Array.isArray(list)) {\n // Make 'to' inclusive like Redis LRANGE - add 1 unless it's -1\n const endIndex = to === -1 ? undefined : to + 1;\n return list.slice(from, endIndex);\n }\n return [];\n }\n\n async delete(key: string): Promise<void> {\n this.cache.delete(key);\n }\n\n async clear(): Promise<void> {\n this.cache.clear();\n }\n\n async increment(key: string): Promise<number> {\n const value = this.cache.get(key);\n let counter: number;\n if (value === undefined) {\n counter = 1;\n } else if (typeof value === 'number') {\n counter = value + 1;\n } else {\n throw new Error(`${key} exists but is not a number`);\n }\n this.cache.set(key, counter);\n return counter;\n }\n}\n"]}