UNPKG

mlld

Version:

mlld: llm scripting language

1 lines 8.79 kB
{"version":3,"sources":["../core/registry/InMemoryModuleCache.ts"],"names":["InMemoryModuleCache","cache","Map","index","store","content","source","importPath","options","hash","createHash","update","digest","timestamp","Date","now","metadata","integrity","Buffer","from","toString","cachedAt","toISOString","size","byteLength","dependencies","devDependencies","moduleNeeds","moduleNeedsToSerializable","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-2G5KADUM.mjs","sourcesContent":["import { createHash } from 'crypto';\nimport { MlldError } from '@core/errors';\nimport type { ModuleCache, CacheEntry, ModuleCacheMetadata, ModuleCacheStoreOptions } from './ModuleCache';\nimport { moduleNeedsToSerializable } from './utils/ModuleNeeds';\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 options?: ModuleCacheStoreOptions\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 if (options?.dependencies) {\n metadata.dependencies = { ...options.dependencies };\n }\n\n if (options?.devDependencies) {\n metadata.devDependencies = { ...options.devDependencies };\n }\n\n if (options?.moduleNeeds) {\n metadata.moduleNeeds = moduleNeedsToSerializable(options.moduleNeeds);\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}"]}