UNPKG

mlld

Version:

mlld: a modular prompt scripting language

1 lines 7.86 kB
{"version":3,"sources":["../core/registry/InMemoryModuleCache.ts"],"names":["InMemoryModuleCache","cache","Map","index","store","content","source","importPath","hash","createHash","update","digest","timestamp","Date","now","metadata","integrity","Buffer","from","toString","cachedAt","toISOString","size","byteLength","set","path","retrieve","entry","get","getMetadata","exists","has","findByImportPath","list","results","push","clear","remove","delete","getStats","totalSize","oldestTimestamp","values","moduleCount"],"mappings":"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","file":"InMemoryModuleCache-7OUCRAYX.mjs","sourcesContent":["import { createHash } from 'crypto';\nimport { MlldError } from '@core/errors';\nimport type { ModuleCache, CacheEntry, ModuleCacheMetadata } from './ModuleCache';\n\n/**\n * In-memory implementation of ModuleCache for ephemeral/CI environments\n * Stores modules in memory only - no filesystem persistence\n */\nexport class InMemoryModuleCache implements ModuleCache {\n private cache = new Map<string, {\n content: string;\n metadata: ModuleCacheMetadata;\n timestamp: number;\n }>();\n \n private index = new Map<string, string>(); // importPath -> hash mapping\n\n /**\n * Store module content in memory cache\n */\n async store(\n content: string, \n source: string, \n importPath?: string\n ): Promise<CacheEntry> {\n const hash = createHash('sha256').update(content, 'utf8').digest('hex');\n const timestamp = Date.now();\n \n const metadata: ModuleCacheMetadata = {\n hash,\n integrity: `sha256-${Buffer.from(hash, 'hex').toString('base64')}`,\n source,\n cachedAt: new Date(timestamp).toISOString(),\n size: Buffer.byteLength(content, 'utf8'),\n importPath\n };\n \n // Store in cache\n this.cache.set(hash, {\n content,\n metadata,\n timestamp\n });\n \n // Update index if importPath provided\n if (importPath) {\n this.index.set(importPath, hash);\n }\n \n return {\n path: `memory://${hash}`,\n hash,\n timestamp\n };\n }\n\n /**\n * Retrieve module content from memory cache\n */\n async retrieve(hash: string): Promise<string | null> {\n const entry = this.cache.get(hash);\n return entry?.content || null;\n }\n\n /**\n * Get metadata for a cached module\n */\n async getMetadata(hash: string): Promise<ModuleCacheMetadata | null> {\n const entry = this.cache.get(hash);\n return entry?.metadata || null;\n }\n\n /**\n * Check if a module exists in memory cache\n */\n async exists(hash: string): Promise<boolean> {\n return this.cache.has(hash);\n }\n\n /**\n * Find module by import path\n */\n async findByImportPath(importPath: string): Promise<CacheEntry | null> {\n const hash = this.index.get(importPath);\n if (!hash) return null;\n \n const entry = this.cache.get(hash);\n if (!entry) return null;\n \n return {\n path: `memory://${hash}`,\n hash,\n timestamp: entry.timestamp\n };\n }\n\n /**\n * List all cached modules (for debugging)\n */\n async list(): Promise<Array<{ importPath?: string; hash: string; size: number }>> {\n const results: Array<{ importPath?: string; hash: string; size: number }> = [];\n \n for (const [hash, entry] of this.cache) {\n results.push({\n importPath: entry.metadata.importPath,\n hash,\n size: entry.metadata.size\n });\n }\n \n return results;\n }\n\n /**\n * Clear the entire cache\n */\n async clear(): Promise<void> {\n this.cache.clear();\n this.index.clear();\n }\n\n /**\n * Remove a specific module from cache\n */\n async remove(hash: string): Promise<boolean> {\n const entry = this.cache.get(hash);\n if (!entry) return false;\n \n // Remove from index if it has an import path\n if (entry.metadata.importPath) {\n this.index.delete(entry.metadata.importPath);\n }\n \n // Remove from cache\n this.cache.delete(hash);\n return true;\n }\n\n /**\n * Get cache statistics\n */\n getStats(): { \n moduleCount: number; \n totalSize: number; \n oldestTimestamp: number | null;\n } {\n let totalSize = 0;\n let oldestTimestamp: number | null = null;\n \n for (const entry of this.cache.values()) {\n totalSize += entry.metadata.size;\n if (oldestTimestamp === null || entry.timestamp < oldestTimestamp) {\n oldestTimestamp = entry.timestamp;\n }\n }\n \n return {\n moduleCount: this.cache.size,\n totalSize,\n oldestTimestamp\n };\n }\n}"]}