---
name: http_cache
kind: function
lang: ts
domain: core
version: "1.0.0"
purity: pure
signature: "cacheGet<T>(key: string): T | null; cacheSet<T>(key: string, data: T): void; cacheHas(key: string): boolean; cacheIsStale(key: string, staleTime: number): boolean; cacheDelete(key: string): void; cacheInvalidatePrefix(prefix: string): void; cacheClear(): void; cacheSize(): number"
description: "Cache in-memory singleton para use_fetch. Map con funciones de get/set/has/isStale/invalidate por prefijo. Compartido entre todas las instancias de use_fetch."
tags: [cache, http, fetch, swr, singleton, memory]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: []
params:
  - name: key
    desc: "Clave de cache (string serializado desde url + params)"
  - name: staleTime
    desc: "Tiempo en ms antes de considerar una entrada stale"
output: "Modulo con funciones de lectura/escritura/invalidacion del cache in-memory compartido"
tested: false
tests: []
test_file_path: ""
file_path: "frontend/functions/core/http_cache.ts"
---

## Ejemplo

```typescript
import { cacheGet, cacheSet, cacheIsStale } from './http_cache'

cacheSet('users:list', [{ id: '1', name: 'Lucas' }])
const users = cacheGet<User[]>('users:list')
const stale = cacheIsStale('users:list', 30_000) // > 30s?
```

## Notas

Singleton de modulo — el `Map` vive mientras dure la sesion de la SPA. No se persiste en localStorage ni IndexedDB. Para invalidacion jerarquica, `cacheInvalidatePrefix('users')` elimina `users`, `users:list`, `users:123`, etc.
