/** * Memorio Platform & Context Example * * This example demonstrates: * - Platform detection * - Checking storage persistence * - Context isolation for server-side multi-tenancy * * Run: npx ts-node examples/platform.ts */ import 'memorio' // ============================================ // PLATFORM DETECTION // ============================================ console.debug('=== Platform Detection ===') console.debug('Memorio version:', memorio.version) // Check which platform we're on if (memorio.isBrowser()) { console.debug('Running in: Browser') console.debug('store.isPersistent:', store.isPersistent) // true console.debug('session.isPersistent:', session.isPersistent) // true } else if (memorio.isNode()) { console.debug('Running in: Node.js') console.debug('store.isPersistent:', store.isPersistent) // false (memory fallback) console.debug('session.isPersistent:', session.isPersistent) // false (memory fallback) } else if (memorio.isDeno()) { console.debug('Running in: Deno') console.debug('store.isPersistent:', store.isPersistent) // false (memory fallback) console.debug('session.isPersistent:', session.isPersistent) // false (memory fallback) } else if (memorio.isEdge()) { console.debug('Running in: Edge Worker') console.debug('store.isPersistent:', store.isPersistent) // true console.debug('session.isPersistent:', session.isPersistent) // true } // Get detailed capabilities const caps = memorio.getCapabilities() console.debug('\nCapabilities:') console.debug(' Platform:', caps.platform) console.debug(' localStorage:', caps.hasLocalStorage ? '✅' : '❌') console.debug(' sessionStorage:', caps.hasSessionStorage ? '✅' : '❌') console.debug(' IndexedDB:', caps.hasIndexedDB ? '✅' : '❌') console.debug(' Session ID:', caps.sessionId) // ============================================ // CONTEXT ISOLATION (Server-Side) // ============================================ console.debug('\n=== Context Isolation ===') console.debug('Use memorio.createContext() for multi-tenant server applications') // Example: Simulating different users/requests // In a real app, you'd create a context per HTTP request // Create isolated context for User A const userAContext = memorio.createContext('user-A') userAContext.state.name = 'Mario' userAContext.store.set('preferences', { theme: 'dark' }) userAContext.session.set('token', 'user-A-token') // Create isolated context for User B const userBContext = memorio.createContext('user-B') userBContext.state.name = 'Luigi' userBContext.store.set('preferences', { theme: 'light' }) userBContext.session.set('token', 'user-B-token') // Verify isolation - each context has its own data console.debug('\nUser A context:') console.debug(' state.name:', userAContext.state.name) // 'Mario' console.debug(' store.preferences:', userAContext.store.get('preferences')) // { theme: 'dark' } console.debug(' session.token:', userAContext.session.get('token')) // 'user-A-token' console.debug('\nUser B context:') console.debug(' state.name:', userBContext.state.name) // 'Luigi' console.debug(' store.preferences:', userBContext.store.get('preferences')) // { theme: 'light' } console.debug(' session.token:', userBContext.session.get('token')) // 'user-B-token' // Global state is separate from contexts console.debug('\nGlobal state (not affected by contexts):') console.debug(' state.name:', state.name) // undefined // List all contexts console.debug('\nActive contexts:', memorio.listContexts()) // ['user-A', 'user-B'] // Cleanup - delete a context when done memorio.deleteContext('user-A') console.debug('After deleting user-A:', memorio.listContexts()) // ['user-B'] // ============================================ // USE CASE: EXPRESS/FASTIFY MIDDLEWARE EXAMPLE // ============================================ console.debug('\n=== Server Use Case ===') console.debug(` // Example: Express middleware for request isolation app.use((req, res, next) => { // Create isolated context per request const ctx = memorio.createContext(\`req-\${req.id}\`) req.memorio = ctx next() }) // In your route handler: app.get('/user', (req, res) => { // This state is isolated per request req.memorio.state.user = getUserData() req.memorio.store.set('cache', data) }) `) console.debug('\nPlatform & Context example complete!')