# IDB - Memorio

> 🖥️ **Browser Only**: Requires IndexedDB (not available in Node.js/Deno)

IDB provides access to browser IndexedDB for large data storage. Unlike localStorage, IDB can store large amounts of structured data.

## Installation

```bash
npm install memorio
```

```javascript
import 'memorio';
```

---

## Quick Examples

### Example 1: Basic Usage

```javascript
// Create a database
idb.db.create('myApp');

// Add data
idb.data.set('myApp', 'users', { id: 1, name: 'Mario' });

// Get data
const user = idb.data.get('myApp', 'users', 1);
console.debug(user.name); // "Mario"
```

### Example 2: Intermediate

```javascript
// Create database with tables
idb.db.create('store');
idb.table.create('store', 'products');

// Add multiple records
idb.data.set('store', 'products', { id: 1, name: 'Apple', price: 1.5 });
idb.data.set('store', 'products', { id: 2, name: 'Banana', price: 0.8 });

// List databases
const databases = idb.db.list();
console.debug(databases); // ['myApp', 'store']
```

### Example 3: Advanced

```javascript
// Check database support
if (idb.db.support()) {
  // Use IDB
}

// Get database info
const version = idb.db.version('store');
const size = idb.db.size('store');

// Delete database
idb.db.delete('store');

// Handle quota
const quota = idb.db.quota();
console.debug(`Using ${quota.used} of ${quota.total} bytes`);
```

---

## API Reference

### Database Methods

| Method | Parameters | Returns | Description |
|--------|------------|---------|-------------|
| `idb.db.create(name)` | `name: string` | `void` | Create database |
| `idb.db.delete(name)` | `name: string` | `void` | Delete database |
| `idb.db.list()` | none | `string[]` | List all databases |
| `idb.db.exist(name)` | `name: string` | `boolean` | Check if exists |
| `idb.db.size(name)` | `name: string` | `number` | Get database size |
| `idb.db.version(name)` | `name: string` | `number` | Get version |
| `idb.db.support()` | none | `boolean` | Check browser support |
| `idb.db.quota()` | none | `object` | Get storage quota |

### Table Methods

| Method | Parameters | Returns | Description |
|--------|------------|---------|-------------|
| `idb.table.create(db, table)` | `db: string, table: string` | `void` | Create table |
| `idb.table.size(db, table)` | `db: string, table: string` | `number` | Get table size |

### Data Methods

| Method | Parameters | Returns | Description |
|--------|------------|---------|-------------|
| `idb.data.get(db, table, id)` | `db, table, id` | `any` | Get single record |
| `idb.data.set(db, table, data)` | `db, table, data` | `void` | Set record |
| `idb.data.delete(db, table, id)` | `db, table, id` | `void` | Delete record |

---

## Data Structure

Each record needs an `id` field:

```javascript
idb.data.set('myDB', 'users', {
  id: 1,           // Required!
  name: 'Mario',
  email: 'm@test.com'
});
```

---

## Platform Support

| Platform | Support | Notes |
|----------|---------|-------|
| Browser | ✅ Full | Full IndexedDB support |
| Edge Worker | ⚠️ Limited | May not be available in all workers |
| Node.js | ❌ Not available | Use store or session instead |
| Deno | ❌ Not available | Use store or session instead |

---

## Storage Limits

- **Desktop browsers**: 50+ MB (often unlimited)
- **Mobile browsers**: 50-100 MB
- **More than localStorage**: Much higher limits

---

## Best Practices

1. Always include `id` in records
2. Use for large data: images, caches, offline data
3. Check support: `idb.db.support()`
4. Clean up: `idb.db.delete('tempDB')`

---

## Use Cases

### Offline Data

```javascript
// Cache API response
idb.data.set('cache', 'apiResponse', {
  id: 'users',
  data: usersArray,
  timestamp: Date.now()
});
```

### Large User Data

```javascript
// Store user-generated content
idb.data.set('app', 'uploads', {
  id: Date.now(),
  file: fileData,
  userId: currentUser.id
});
```
