{"_id":"@alsaifdev/localdb","name":"@alsaifdev/localdb","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@alsaifdev/localdb","version":"1.0.0","description":"A lightweight browser-based localStorage database with real-time multi-tab sync and a clean proxy-based API.","keywords":["localStorage","database","realtime","browser","BroadcastChannel","offline","sync","tabs"],"author":{"name":"Abdullah Al Saif","email":"contact@alsaifdev.space"},"license":"MIT","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"npx tsc","dev":"npx tsc --watch","prepublishOnly":"npm run build"},"devDependencies":{"@types/node":"^22.0.0","typescript":"^5.9.3"},"engines":{"node":">=18"},"repository":{"type":"git","url":"git+https://github.com/alsaifdev/localdb.git"},"homepage":"https://github.com/alsaifdev/localdb#readme","bugs":{"url":"https://github.com/alsaifdev/localdb/issues"},"_id":"@alsaifdev/localdb@1.0.0","_nodeVersion":"24.12.0","_npmVersion":"11.12.0","dist":{"integrity":"sha512-LJoV6qzoOrgA2GY5jcL8lwab0O6gZgLpCV1E6LYFgE61+IghH3nNOD2hpRfeckvSFuTY69ja5V0imc5O0W/WWA==","shasum":"1c8ba94f2b007c59b8bd026d6f01929e9d6474c7","tarball":"https://registry.npmjs.org/@alsaifdev/localdb/-/localdb-1.0.0.tgz","fileCount":5,"unpackedSize":15815,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDyIw84CR27qmA78BJxNAMDjLAN94Bg5LcQl4evvxyYdAIgDKgC+FM2w3CjI5R6LoicmCwhEB9jU4DRIV6kPIN3fAQ="}]},"_npmUser":{"name":"alsaifdev","email":"alsaifdev@gmail.com"},"directories":{},"maintainers":[{"name":"alsaifdev","email":"alsaifdev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/localdb_1.0.0_1777037202652_0.4087732711582255"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-24T13:26:42.547Z","1.0.0":"2026-04-24T13:26:42.870Z","modified":"2026-04-24T13:26:43.076Z"},"maintainers":[{"name":"alsaifdev","email":"alsaifdev@gmail.com"}],"description":"A lightweight browser-based localStorage database with real-time multi-tab sync and a clean proxy-based API.","homepage":"https://github.com/alsaifdev/localdb#readme","keywords":["localStorage","database","realtime","browser","BroadcastChannel","offline","sync","tabs"],"repository":{"type":"git","url":"git+https://github.com/alsaifdev/localdb.git"},"author":{"name":"Abdullah Al Saif","email":"contact@alsaifdev.space"},"bugs":{"url":"https://github.com/alsaifdev/localdb/issues"},"license":"MIT","readme":"# localdb\n\nA lightweight **browser-based localStorage database** with **real-time multi-tab sync** and a clean proxy-based API — inspired by Appwrite.\n\n## Features\n\n- 🗄️ **localStorage** — কোনো server ছাড়াই persistent storage\n- ⚡ **Real-time multi-tab sync** — BroadcastChannel দিয়ে সব tab instantly update\n- 🎯 **Proxy-based API** — `db.users.create()` এর মতো সহজ syntax\n- 🔷 **Full TypeScript** — type-safe generics সহ\n- 🪶 **Zero dependencies** — মাত্র ~2KB gzipped\n- 🔔 **Event system** — `.on()` এবং `.subscribe()` দুটোই\n\n## Installation\n\n```bash\n# npm\nnpm install localdb\n\n# bun\nbun add localdb\n\n# yarn\nyarn add localdb\n```\n\n## Quick Start\n\n```typescript\nimport Database from \"localdb\";\n\nconst db = new Database();\n\n// Create\nconst user = await db.users.create({ name: \"Abdullah\", role: \"admin\" });\n\n// List all\nconst users = await db.users.list();\n\n// Filter\nconst admins = await db.users.list({ role: \"admin\" });\n\n// Get one\nconst user = await db.users.get(\"some-id\");\n\n// Update\nawait db.users.update(\"some-id\", { name: \"Al Saif\" });\n\n// Delete\nawait db.users.delete(\"some-id\");\n```\n\n## TypeScript Generics\n\n```typescript\ninterface User {\n  name: string;\n  role: \"admin\" | \"user\";\n  age: number;\n}\n\n// Type-safe collection\nconst user = await db.users.create<User>({ name: \"Abdullah\", role: \"admin\", age: 25 });\n// user.$id, user.name, user.createdAt — সব typed\n```\n\n## Real-time Events\n\n### `.on()` — নির্দিষ্ট event শোনো\n\n```typescript\n// unsubscribe function return করে\nconst unsub = db.users.on(\"create\", ({ event, payload }) => {\n  console.log(\"নতুন user:\", payload.name);\n});\n\n// cleanup\nunsub();\n```\n\n### `.subscribe()` — সব event (create, update, delete)\n\n```typescript\nconst unsub = db.users.subscribe(({ event, payload }) => {\n  console.log(`[${event}]`, payload);\n});\n\n// cleanup\nunsub();\n```\n\n### Multi-tab Sync\n\nTab A-তে data পরিবর্তন করলে Tab B-তে subscriber **instantly** fire হবে:\n\n```typescript\n// Tab A\nawait db.products.create({ title: \"Keyboard\", price: 1200 });\n\n// Tab B — automatically triggered!\ndb.products.on(\"create\", ({ payload }) => {\n  console.log(\"নতুন product এলো:\", payload.title);\n});\n```\n\n## API Reference\n\n### Collection Methods\n\n| Method | Signature | Description |\n|--------|-----------|-------------|\n| `list` | `(query?) => Promise<Doc[]>` | সব document বা filtered list |\n| `create` | `(data, id?) => Promise<Doc>` | নতুন document তৈরি |\n| `get` | `(id) => Promise<Doc>` | একটি document |\n| `update` | `(id, data) => Promise<Doc[]>` | document update |\n| `delete` | `(id) => Promise<Doc[]>` | document delete |\n| `on` | `(event, cb) => unsubFn` | নির্দিষ্ট event শোনো |\n| `subscribe` | `(cb) => unsubFn` | সব event শোনো |\n| `off` | `(event, cb) => void` | listener সরাও |\n| `unsubscribe` | `(cb) => void` | সব listener সরাও |\n\n### Database Methods\n\n```typescript\ndb.clear(\"users\");  // একটি collection মুছো\ndb.clear();         // সব collection মুছো\ndb.destroy();       // BroadcastChannel বন্ধ করো (cleanup)\n```\n\n### Document Structure\n\nপ্রতিটি document-এ automatically যোগ হয়:\n\n```typescript\n{\n  $id: string;        // UUID (auto-generated বা custom)\n  createdAt: string;  // UTC string\n  updatedAt: string;  // UTC string\n  ...yourData\n}\n```\n\n## React Example\n\n```tsx\nimport { useEffect, useState } from \"react\";\nimport Database, { Document } from \"localdb\";\n\nconst db = new Database();\n\ninterface Todo { text: string; done: boolean; }\n\nfunction TodoApp() {\n  const [todos, setTodos] = useState<Document<Todo>[]>([]);\n\n  useEffect(() => {\n    // initial load\n    db.todos.list<Todo>().then(setTodos);\n\n    // real-time sync (এই tab + অন্য সব tab)\n    const unsub = db.todos.subscribe(() => {\n      db.todos.list<Todo>().then(setTodos);\n    });\n\n    return unsub;\n  }, []);\n\n  const addTodo = async (text: string) => {\n    await db.todos.create<Todo>({ text, done: false });\n  };\n\n  return (\n    <div>\n      {todos.map(todo => <div key={todo.$id}>{todo.text}</div>)}\n      <button onClick={() => addTodo(\"নতুন কাজ\")}>Add</button>\n    </div>\n  );\n}\n```\n\n## Browser Support\n\n`BroadcastChannel` এবং `localStorage` সব modern browser সমর্থন করে।\n\n| Chrome | Firefox | Safari | Edge |\n|--------|---------|--------|------|\n| ✅ 54+ | ✅ 38+ | ✅ 15.4+ | ✅ 79+ |\n\n## License\n\nMIT © [Abdullah Al Saif](https://alsaifdev.space)\n","readmeFilename":"README.md","_rev":"1-c131b521b68e09cd55c6503b3347eb25"}