memorio 3.0.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/README.md CHANGED
@@ -1,430 +1,311 @@
1
1
  # [memorio](https://npmjs.com/package/memorio)
2
2
 
3
- > A lightweight, type-safe state management library for JavaScript applications
3
+ ![image](https://raw.githubusercontent.com/passariello/container/refs/heads/main/memorio/banner.svg)
4
4
 
5
- [![version](https://img.shields.io/npm/v/memorio.svg)](https://npmjs.org/package/memorio)
6
- [![install size](https://img.shields.io/badge/dynamic/json?url=https://packagephobia.com/v2/api.json?p=memorio&query=$.install.pretty&label=install%20size&style=flat-square)](https://packagephobia.now.sh/result?p=memorio)
7
- [![downloads](https://img.shields.io/npm/dm/memorio.svg)](https://npmjs.org/package/memorio)
5
+ ![version](https://img.shields.io/npm/v/memorio.svg)
6
+ ![install size](https://img.shields.io/badge/dynamic/json?url=https://packagephobia.com/v2/api.json?p=memorio&query=$.install.pretty&label=install%20size&style=flat-square)
7
+ ![downloads](https://img.shields.io/npm/dm/memorio.svg)
8
8
 
9
9
  ![Node.js](https://img.shields.io/badge/Node.js-gray?logo=node.js)
10
- ![React](https://img.shields.io/badge/React-gray?logo=React)
11
- ![Javascript](https://img.shields.io/badge/Javascript-gray?logo=Javascript)
10
+ ![Browser](https://img.shields.io/badge/Browser-gray?logo=google-chrome)
11
+ ![Deno](https://img.shields.io/badge/Deno-gray?logo=deno)
12
12
  ![TypeScript](https://img.shields.io/badge/TypeScript-gray?logo=typescript)
13
- ![esbuild](https://img.shields.io/badge/esbuild-gray?logo=esbuild)
13
+ ![MIT](https://img.shields.io/badge/MIT-green?logo=open-source-initiative)
14
+ ![tsup](https://img.shields.io/badge/tsup-gray?logo=tsup)
14
15
 
15
- ![Jest](https://img.shields.io/badge/Jest-gray?logo=jest)
16
- ![ESLint](https://img.shields.io/badge/Eslint-gray?logo=eslint)
17
- ![Playwright](https://img.shields.io/badge/Playwright-gray?logo=playwright)
16
+ **State management that actually makes your life easier.**
17
+ Zero friction. Zero bloat. Single import. Works everywhere JavaScript runs.
18
18
 
19
- ---
19
+ [Get Started](#-quick-start) · [API Reference](#-api-reference) · [License: MIT](https://opensource.org/licenses/MIT)
20
20
 
21
- ## Table of Contents
22
-
23
- - [Features](#features)
24
- - [Installation](#installation)
25
- - [Quick Start](#quick-start)
26
- - [API Reference](#api-reference)
27
- - [State Management](#state-management)
28
- - [Observer](#observer)
29
- - [useObserver](#useobserver)
30
- - [Store](#store)
31
- - [Session](#session)
32
- - [Cache](#cache)
33
- - [idb](#idb)
34
- - [DevTools](#devtools)
35
- - [Logger](#logger)
36
- - [Testing](#testing)
37
- - [Security](#security)
38
- - [License](#license)
39
- - [Cross-Platform Support](#cross-platform-support)
40
- - [Platform & Context Isolation](docs/markdown/PLATFORM.md)
21
+ ---
41
22
 
42
- ## Features
23
+ ## Why memorio?
43
24
 
44
- - Reactive state management with observer pattern
45
- - Persistent storage with Store API
46
- - Session management for temporary data
47
- - Type-safe with full TypeScript support
48
- - Comprehensive test coverage
49
- - Easy debugging with proxy-based state
50
- - **Cross-platform**: Works in Browser, Node.js, Deno, and Edge Workers
51
- - **Session Isolation**: Each session/request gets isolated state namespace
52
- - **Context System**: Multi-tenant server-side isolation with `memorio.createContext()`
53
- - **DevTools**: Browser console debugging tools
54
- - **Logger**: Automatic logging of state changes
25
+ | | memorio | Redux | Zustand |
26
+ |---|---|---|---|
27
+ | **Setup** | 1 import | Boilerplate hell | Moderate |
28
+ | **Dependencies** | **Zero** | Many | Few |
29
+ | **TypeScript** | ✅ Native | ✅ | ✅ |
30
+ | **Binary storage** | ✅ Built-in IDB | Add-on | ❌ |
31
+ | **Observer** | ✅ Built-in | Add-on | |
32
+ | **DevTools** | Built-in | Extension | ❌ |
33
+ | **Running on the edge** | Workers, Deno | ⚠️ Limited | ⚠️ Limited |
55
34
 
56
- ## Installation
35
+ If you need a `store` on the server. A `cache` in the edge worker.
36
+ Session isolation in Next.js. IndexedDB in a Service Worker.
37
+ All from one import, zero configuration.
57
38
 
58
- ```bash
59
- npm i -D memorio
60
- ```
39
+ ---
61
40
 
62
- ### All test suites are passing
41
+ ## Features
63
42
 
64
- - Basic functionality tests
65
- - State management tests
66
- - Store operations tests
67
- - Cache operations tests
68
- - Observer pattern tests
69
- - useObserver pattern tests
70
- - DevTools tests
71
- - Logger tests
43
+ | | |
44
+ |---|---|
45
+ | **`state`** | Reactive, volatile state — listen with `useObserver` |
46
+ | **`store`** | localStorage persistence — survives refresh |
47
+ | **`session`** | sessionStorage — dies with the tab |
48
+ | **`cache`** | In-memory cache fastest read possible |
49
+ | **`idb`** | IndexedDB with typed tables — structured, persistent, async |
50
+ | **`observer`** | Object watcher — legacy, still works |
51
+ | **`useObserver`** | React hook with auto-discovery — drops in |
52
+ | **`devtools`** | `memorio.devtools.inspect()` — see everything in console |
53
+ | **`logger`** | Auto-log every state change with timestamps |
54
+ | **Session Isolation** | Every browser tab, every request: isolated namespace |
55
+ | **Platform Detection** | `isBrowser`, `isNode`, `isDeno`, `isEdge` |
56
+
57
+ No Zustand. No Redux. No provider boilerplate.
58
+ Just import it and start storing.
72
59
 
73
- Total: 71 tests passed across 8 test suites
60
+ ---
74
61
 
75
62
  ## Quick Start
76
63
 
77
- ```javascript
78
- /*
79
- IMPORTANT!
80
- Add import only at first start of your SPA. Became global!.
81
- You don't need to import any time you need to use memorio
82
- */
83
-
84
- import 'memorio';
85
-
86
- // State Management
87
- state.counter = 0;
88
- state.active = false;
89
- state.name = "john";
90
- state.user = { name: 'John', age: 30 };
91
- state.hours = [2,3,10,23]
92
-
93
- // useObserver Pattern for react app
94
- // Example: if you change the state.counter you get a console.log
95
- useObserver(
96
- () => {
97
- console.log(`Counter changed to ${state.counter}`);
98
- },
99
- [state.counter]
100
- );
64
+ ```bash
65
+ npm i memorio
66
+ ```
101
67
 
68
+ ```typescript
69
+ // memorio/index.ts — import once at your app entry point
70
+ import 'memorio'
102
71
 
103
- // Store (Persistent Storage)
104
- store.set('preferences', { theme: 'dark' });
105
- const preferences = store.get('preferences');
72
+ // Memory
73
+ state.user = { name: 'Sara', role: 'admin' }
74
+ state.counter++
75
+ state.settings = { theme: 'dark', lang: 'it' }
106
76
 
107
- // Session Storage
108
- session.set('token', 'user-jwt-token');
109
- const token = session.get('token');
77
+ // Call it "a store" but make it observe automatically
78
+ useObserver(
79
+ () => { console.debug('user changed:', state.user) },
80
+ [state.user]
81
+ )
82
+ ```
110
83
 
111
- // DevTools
112
- memorio.devtools.inspect();
84
+ That is it.
85
+ No context providers. No `<Store>` wrappers. No action creators.
86
+ Import → assign → done.
113
87
 
114
- // Logger
115
- memorio.logger.configure({ enabled: true, logToConsole: true })
116
- ```
88
+ ---
117
89
 
118
90
  ## API Reference
119
91
 
120
- ### State Management
92
+ ### `state` — Volatile reactive state
121
93
 
122
- State in Memorio is globally accessible and reactive:
94
+ Global, Proxy-based, reactive. Access anywhere.
123
95
 
124
96
  ```javascript
125
- // Setting state
126
- state.user = { name: 'John' };
97
+ // Set
98
+ state.user = { name: 'Sara', role: 'admin' }
99
+ state.items = [1, 2, 3]
127
100
 
128
- // Getting state
129
- const userName = state.user.name;
101
+ // Get
102
+ const name = state.user.name // 'Sara'
130
103
 
131
- // Listing all states
132
- console.log(state.list);
104
+ // List all keys
105
+ console.debug(state.list) // ['user', 'items']
133
106
 
134
- // Removing state
135
- state.remove('user');
107
+ // Remove one key
108
+ state.remove('items')
136
109
 
137
- // Clearing all states
138
- state.removeAll();
110
+ // Clear all — lock/unlock available for frozen objects
111
+ state.removeAll()
112
+ state.lock() // freeze everything
113
+ state.unlock() // unfreeze
139
114
  ```
140
115
 
141
- ### useObserver
142
-
143
- useObserver is a React hook for observing Memorio state changes with auto-discovery:
144
-
145
- ```js
146
- // Basic useObserver - array syntax with state path
147
- useObserver(
148
- () => {
149
- console.log('User updated:', state.user);
150
- },
151
- [state.user]
152
- );
153
-
154
- // Multiple states
155
- useObserver(
156
- () => {
157
- console.log('States changed:', state.user, state.counter, state.settings);
158
- },
159
- [state.user, state.counter, state.settings]
160
- );
116
+ ### `store` — localStorage, survives refresh
161
117
 
162
- // With options
163
- useObserver(
164
- () => {
165
- console.log('Value changed');
166
- },
167
- [state.value],
168
- { immediate: true }
169
- );
118
+ ```javascript
119
+ store.set('preferences', { theme: 'dark' })
120
+ const prefs = store.get('preferences') // { theme: 'dark' } or null
121
+ store.remove('preferences')
122
+ store.removeAll()
123
+ console.debug(store.size(), 'chars stored')
124
+ console.debug(store.isPersistent) // true → real localStorage
170
125
  ```
171
126
 
172
- ### Store
173
-
174
- Persistent storage for your application:
127
+ ### `session` — sessionStorage, dies with tab
175
128
 
176
129
  ```javascript
177
- // Setting values
178
- store.set('config', { theme: 'dark', language: 'en' });
179
-
180
- // Getting values
181
- const config = store.get('config');
182
-
183
- // Removing specific value
184
- store.remove('config');
185
-
186
- // Getting store size
187
- const size = store.size();
188
-
189
- // Clearing store
190
- store.removeAll();
191
-
192
- // Check if using persistent storage
193
- if (store.isPersistent) {
194
- console.log('Using real localStorage');
195
- } else {
196
- console.log('Using memory fallback (server environment)');
197
- }
130
+ session.set('token', 'user-abc-123')
131
+ const token = session.get('token') // 'user-abc-123' or null
132
+ session.removeAll()
198
133
  ```
199
134
 
200
- ### Session
201
-
202
- Temporary storage that persists during page sessions:
203
-
204
- ```js
205
- // Setting session data
206
- session.set(
207
- 'userSession', {
208
- id: 'user123',
209
- lastActive: Date.now()
210
- }
211
- );
135
+ ### `cache` — In-memory, disappears on refresh
212
136
 
213
- // Getting session data
214
- const userData = session.get('userSession');
215
-
216
- // Checking session size
217
- const activeItems = session.size();
218
-
219
- // Removing session data
220
- session.remove('userSession');
221
-
222
- // Clearing all session data
223
- session.removeAll();
224
-
225
- // Check if using persistent storage
226
- if (session.isPersistent) {
227
- console.log('Using real sessionStorage');
228
- } else {
229
- console.log('Using memory fallback (server environment)');
230
- }
137
+ ```javascript
138
+ cache.set('temp', computeExpensiveResult())
139
+ const result = cache.get('temp') // undefined or the value
140
+ cache.clear() // empty it all
231
141
  ```
232
142
 
233
- ### Cache
143
+ ### `idb` — IndexedDB, structured & typed
234
144
 
235
- In-memory cache for temporary data storage:
236
-
237
- ```js
238
- // Setting cache data
239
- cache.set('tempData', { computed: true, value: 42 });
240
-
241
- // Getting cache data
242
- const cached = cache.get('tempData');
243
-
244
- // Checking cache size
245
- const cacheSize = cache.size();
145
+ ```javascript
146
+ await idb.db.create('my-db')
147
+ await idb.table.create('my-db', 'users')
148
+ await idb.data.set('my-db', 'users', { id: 1, name: 'Sara' })
149
+ const user = await idb.data.get('my-db', 'users', 1)
150
+ ```
246
151
 
247
- // Removing cache data
248
- cache.remove('tempData');
152
+ ### `observer` Object watcher (DEPRECATED)
249
153
 
250
- // Clearing all cache data
251
- cache.removeAll();
154
+ ```javascript
155
+ globalThis.observer('state.user', (newVal, oldVal) => {
156
+ console.debug('user changed:', newVal, oldVal)
157
+ })
252
158
  ```
253
159
 
254
- **Note:** Cache data is stored in memory and will be lost on page refresh.
255
-
256
- ### idb
160
+ ### `useObserver` React observer hook
257
161
 
258
- Permanent storage using browser database:
162
+ Available globally after `import 'memorio'`.
259
163
 
260
- #### Create database
164
+ ```jsx
165
+ import 'memorio'
261
166
 
262
- ```js
263
- idb.db.create("Database");
264
- ```
167
+ function Counter() {
168
+ const [, forceUpdate] = useReducer(x => x + 1, 0)
265
169
 
266
- #### Set data into table
170
+ useObserver(forceUpdate, [state.counter])
171
+ // State path auto-discovered during render — no manual deps needed
267
172
 
268
- ```js
269
- idb.data.set("Database","table", { id: 1, data:{...} } );
173
+ return <div>Count: {state.counter}</div>
174
+ }
270
175
  ```
271
176
 
272
- #### Get data from table
273
-
274
- > [in development]
177
+ ### `devtools` inspect everything in one call
275
178
 
276
- ```js
277
- idb.data.get("Database","table", 1 );
179
+ ```javascript
180
+ memorio.devtools.inspect() // pretty-prints state, store, session, cache
181
+ memorio.devtools.stats() // { stateKeys, storeKeys, sessionKeys, ... }
182
+ memorio.devtools.clear('state')
183
+ memorio.devtools.exportData() // JSON snapshot
184
+ $state // console shortcut — same as globalThis.state
278
185
  ```
279
186
 
280
- #### Delete database / table
187
+ ### `logger` track every change
281
188
 
282
- > [in development]
283
-
284
- ```js
285
- idb.db.delete("Database") // Remove DB
286
- idb.table.delete("Database","table") // Remove only "table"
189
+ ```javascript
190
+ memorio.logger.configure({ enabled: true, logToConsole: true })
191
+ memorio.logger.getHistory() // [{ timestamp, module, action, path, value }, ...]
192
+ memorio.logger.getStats() // { total, state, set, get, ... }
193
+ memorio.logger.exportLogs() // JSON string of all history
287
194
  ```
288
195
 
289
- ### DevTools
196
+ ### Platform detection
290
197
 
291
- Browser console debugging tools for inspecting state, store, session, cache:
198
+ Access via `memorio.*`:
292
199
 
293
200
  ```javascript
294
- // Inspect all state modules
295
- memorio.devtools.inspect();
201
+ memorio.isBrowser() // true in Chrome, Firefox, Safari
202
+ memorio.isNode() // true in Node.js
203
+ memorio.isDeno() // true in Deno
204
+ memorio.isEdge() // true in Cloudflare Workers, Vercel Edge
296
205
 
297
- // Get statistics
298
- memorio.devtools.stats();
206
+ const caps = memorio.getCapabilities()
207
+ // { platform: 'browser', hasLocalStorage: true, hasIndexedDB: true, ... }
208
+ ```
299
209
 
300
- // Clear specific module
301
- memorio.devtools.clear('state');
210
+ ### Context (multi-tenant)
302
211
 
303
- // Clear all modules
304
- memorio.devtools.clearAll();
212
+ ```javascript
213
+ memorio.createContext('tenant-name')
214
+ memorio.listContexts()
215
+ memorio.deleteContext('context-id')
216
+ memorio.isolate('tenant-name')
217
+ ```
305
218
 
306
- // Watch a path for changes
307
- memorio.devtools.watch('state', 'user.name');
219
+ ---
308
220
 
309
- // Export all data as JSON
310
- memorio.devtools.exportData();
221
+ ## Cross-Platform
311
222
 
312
- // Import data from JSON
313
- memorio.devtools.importData(jsonString);
223
+ Memorio runs in every JavaScript environment, with automatic fallbacks.
314
224
 
315
- // Get help
316
- memorio.devtools.help();
225
+ | | Browser | Node.js | Deno | Edge / Workers |
226
+ |---|---|---|---|---|
227
+ | `state` | ✅ | ✅ | ✅ | ✅ |
228
+ | `observer` / `useObserver` | ✅ | ✅ | ✅ | ✅ |
229
+ | `cache` | ✅ | ✅ | ✅ | ✅ |
230
+ | `store` | ✅ localStorage | ⚠️ memory | ⚠️ memory | ✅ localStorage |
231
+ | `session` | ✅ sessionStorage | ⚠️ memory | ⚠️ memory | ✅ sessionStorage |
232
+ | `idb` | ✅ IndexedDB | ❌ | ❌ | ⚠️ |
233
+ | `devtools` | ✅ | ❌ | ❌ | ⚠️ |
317
234
 
318
- // Console shortcuts (available in browser console)
319
- $state // globalThis.state
320
- $store // globalThis.store
321
- $session // globalThis.session
322
- $cache // globalThis.cache
323
- ```
235
+ > **Why memory fallbacks on the server?** There is no browser. `store` and `session` gracefully fall back to `Map`. You still get the same API. Same `state`, same `cache`, same `useObserver`. No extra config required.
324
236
 
325
- ### Logger
237
+ ### Platform detection
326
238
 
327
- Logging middleware for tracking all state changes:
239
+ Access via `memorio.*` after `import 'memorio'`:
328
240
 
329
241
  ```javascript
330
- // Configure logger
331
- memorio.logger.configure({ enabled: true, logToConsole: true });
332
-
333
- // Enable/disable logging
334
- memorio.logger.enable();
335
- memorio.logger.disable();
242
+ memorio.isBrowser() // true in Chrome, Firefox, Safari
243
+ memorio.isNode() // true in Node.js
244
+ memorio.isDeno() // true in Deno
245
+ memorio.isEdge() // true in Cloudflare Workers, Vercel Edge
336
246
 
337
- // Get log history
338
- memorio.logger.getHistory();
339
-
340
- // Get statistics
341
- memorio.logger.getStats();
342
-
343
- // Clear history
344
- memorio.logger.clearHistory();
345
-
346
- // Export logs as JSON
347
- memorio.logger.exportLogs();
247
+ const c = memorio.getCapabilities()
248
+ // { platform: 'browser', hasLocalStorage: true, hasIndexedDB: true, ... }
348
249
  ```
349
250
 
350
- ## Testing
351
-
352
- All test suites are passing:
353
-
354
- - Basic functionality tests
355
- - State management tests
356
- - Store operations tests
357
- - Cache operations tests
358
- - Observer pattern tests
359
- - useObserver pattern tests
360
- - DevTools tests
361
- - Logger tests
362
-
363
- Total: 71 tests passed across 8 test suites
251
+ ---
364
252
 
365
253
  ## Security
366
254
 
367
- Security scans and reports are available at:
368
-
369
- - [Socket.dev](https://socket.dev/npm/package/memorio)
370
- - [Snyk.io](https://security.snyk.io/package/npm/memorio)
371
-
372
- ## License
373
-
374
- MIT License
375
-
376
- Copyright (c) [Dario Passariello](https://dario.passariello.ca/)
255
+ - Zero production dependencies no supply chain surprises
256
+ - NIST & NSA aligned — enterprise-grade security standards
257
+ - No `eval`, no obfuscation, no hardcoded secrets
258
+ - All inputs validated, keys sanitized, errors caught
259
+ - Secure random session IDs via `crypto.randomUUID`
260
+ - MIT license — full audit trail on [`SECURITY.md`](.github/SECURITY.md)
377
261
 
378
262
  ---
379
263
 
380
- ## Cross-Platform Support
264
+ ## Installation options
381
265
 
382
- Memorio is designed to work across multiple JavaScript environments:
266
+ ```bash
267
+ # npm
268
+ npm i memorio
383
269
 
384
- ### Platform Compatibility
270
+ # pnpm
271
+ pnpm add memorio
385
272
 
386
- | Feature | Browser | Node.js | Deno | Edge Workers |
387
- |---------|---------|---------|------|---------------|
388
- | `state` | ✅ | ✅ | ✅ | ✅ |
389
- | `observer` | ✅ | ✅ | ✅ | ✅ |
390
- | `useObserver` | ✅ | ⚠️ | ⚠️ | ✅ |
391
- | `cache` | ✅ | ✅ | ✅ | ✅ |
392
- | `store` | ✅ (localStorage) | ⚠️ (memory) | ⚠️ (memory) | ✅ (localStorage) |
393
- | `session` | ✅ (sessionStorage) | ⚠️ (memory) | ⚠️ (memory) | ✅ (sessionStorage) |
394
- | `idb` | ✅ | ❌ | ❌ | ⚠️ |
395
- | `devtools` | ✅ | ❌ | ❌ | ⚠️ |
396
- | `logger` | ✅ | ✅ | ✅ | ✅ |
273
+ # yarn
274
+ yarn add memorio
397
275
 
398
- - Full support
399
- - ⚠️ Partial support (fallback to in-memory)
400
- - ❌ Not available
276
+ # React peer dep (optional, React ≥ 16.8)
277
+ npm i react react-dom
278
+ ```
401
279
 
402
- ### Session Isolation
280
+ ---
403
281
 
404
- Memorio provides automatic session isolation to prevent state leakage between different requests or contexts:
282
+ ## Testing
405
283
 
406
- - **Unique Session IDs**: Each import gets a unique session identifier
407
- - **Namespaced Storage**: `store` and `session` keys are prefixed with session ID
408
- - **State Isolation**: `state` is isolated per-instance
284
+ ```
285
+ 95 tests · 8 suites · all passing
409
286
 
410
- This ensures that in server-side environments (Node.js/Deno), different requests don't share state data.
287
+ basic | state | store | session | cache | idb | observer | useObserver
288
+ ```
411
289
 
412
- ### Best Practices
290
+ | Suite | Tests | Status |
291
+ |-------|-------|--------|
292
+ | Basic | 7 | ✅ |
293
+ | State | 24 | ✅ |
294
+ | Store | 17 | ✅ |
295
+ | Session | 12 | ✅ |
296
+ | IDB | 7 | ✅ |
297
+ | Cache | 5 | ✅ |
298
+ | Observer | 12 | ✅ |
299
+ | useObserver | 12 | ✅ |
413
300
 
414
- 1. **For Client-Side**: Use all features freely - store, session, idb work with real browser storage
415
- 2. **For Server-Side**: Use `state` and `cache` for in-memory data; store/session fall back to memory
416
- 3. **For Edge Workers**: Same as browser; localStorage/sessionStorage available
301
+ ```bash
302
+ npm test
303
+ ```
417
304
 
418
- ### Checking Platform
305
+ ---
419
306
 
420
- ```javascript
421
- import { isBrowser, isNode, isDeno, getCapabilities } from 'memorio';
307
+ ## License
422
308
 
423
- console.log('Browser:', isBrowser()); // true in browser
424
- console.log('Node.js:', isNode()); // true in Node.js
425
- console.log('Deno:', isDeno()); // true in Deno
309
+ MIT © [Dario Passariello](https://dario.passariello.ca)
426
310
 
427
- const caps = getCapabilities();
428
- console.log('Platform:', caps.platform); // 'browser' | 'node' | 'deno' | 'edge'
429
- console.log('Persistent:', store.isPersistent); // true if using real storage
430
- ```
311
+ © [BigLogic Inc Canada](https://biglogic.ca)
@@ -26,8 +26,8 @@ cache.set('username', 'Mario');
26
26
  cache.set('score', 1500);
27
27
 
28
28
  // Read data
29
- console.log(cache.get('username')); // "Mario"
30
- console.log(cache.get('score')); // 1500
29
+ console.debug(cache.get('username')); // "Mario"
30
+ console.debug(cache.get('score')); // 1500
31
31
  ```
32
32
 
33
33
  ### Example 2: Intermediate
@@ -36,7 +36,7 @@ console.log(cache.get('score')); // 1500
36
36
  // Store objects
37
37
  cache.set('user', { name: 'Luigi', level: 5 });
38
38
  const user = cache.get('user');
39
- console.log(user.name); // "Luigi"
39
+ console.debug(user.name); // "Luigi"
40
40
 
41
41
  // Remove single item
42
42
  cache.remove('username');