{"_id":"@allem-sdk/storage","name":"@allem-sdk/storage","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.1":{"name":"@allem-sdk/storage","version":"0.1.1","description":"Provider-agnostic key-value storage for React. Adapters for localStorage, sessionStorage, cookies, and in-memory. useStorage, useStorageItem. SSR-safe.","license":"MIT","author":{"name":"Ahmed Allem"},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"sideEffects":false,"devDependencies":{"@testing-library/react":"^16.0.0","@types/react":"^19.0.0","jsdom":"^25.0.0","react":"^19.0.0","react-dom":"^19.0.0","tsup":"^8.4.0","typescript":"^5.8.0","vitest":"^3.0.0"},"peerDependencies":{"react":">=18.0.0"},"repository":{"type":"git","url":"git+https://github.com/kingofmit/allem-sdk.git","directory":"packages/storage"},"keywords":["allem-sdk","react","react-hooks","storage","localStorage","sessionStorage","cookies","key-value","ssr","typescript","nextjs"],"publishConfig":{"access":"public"},"scripts":{"build":"tsup","dev":"tsup --watch","clean":"rm -rf dist","test":"vitest run"},"_id":"@allem-sdk/storage@0.1.1","bugs":{"url":"https://github.com/kingofmit/allem-sdk/issues"},"homepage":"https://github.com/kingofmit/allem-sdk#readme","_integrity":"sha512-3miHE8kTuYnSZDcPxOjeGkAcicEdxN//dZJjM/Bnaps01yBekaWg9QG2wF/rCF4RZArIRaW/WkitH/YVXiDldQ==","_resolved":"/private/var/folders/4v/rph2hgm54rqf12vzbjxpn5kc0000gn/T/a43a4cfeeb5c677989c398f688c56ff7/allem-sdk-storage-0.1.1.tgz","_from":"file:allem-sdk-storage-0.1.1.tgz","_nodeVersion":"26.0.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-3miHE8kTuYnSZDcPxOjeGkAcicEdxN//dZJjM/Bnaps01yBekaWg9QG2wF/rCF4RZArIRaW/WkitH/YVXiDldQ==","shasum":"285c6d63cda1527ac4f2ab229deb14e021c25e06","tarball":"https://registry.npmjs.org/@allem-sdk/storage/-/storage-0.1.1.tgz","fileCount":8,"unpackedSize":23335,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBnezogFOTs0UVuVtMX9dmQg6/W2SyXMlv0BX0u3DxEYAiBzdj6BBhAAkYvZZhYTtkyb9dtydiGG8vZhMqgnZ5FVcA=="}]},"_npmUser":{"name":"kingofmit","email":"allem.ahmed@gmail.com"},"directories":{},"maintainers":[{"name":"kingofmit","email":"allem.ahmed@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/storage_0.1.1_1779571360040_0.5850392504177375"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-23T21:22:39.874Z","0.1.1":"2026-05-23T21:22:40.197Z","modified":"2026-05-23T21:22:40.421Z"},"maintainers":[{"name":"kingofmit","email":"allem.ahmed@gmail.com"}],"description":"Provider-agnostic key-value storage for React. Adapters for localStorage, sessionStorage, cookies, and in-memory. useStorage, useStorageItem. SSR-safe.","homepage":"https://github.com/kingofmit/allem-sdk#readme","keywords":["allem-sdk","react","react-hooks","storage","localStorage","sessionStorage","cookies","key-value","ssr","typescript","nextjs"],"repository":{"type":"git","url":"git+https://github.com/kingofmit/allem-sdk.git","directory":"packages/storage"},"author":{"name":"Ahmed Allem"},"bugs":{"url":"https://github.com/kingofmit/allem-sdk/issues"},"license":"MIT","readme":"<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/kingofmit/allem-sdk/main/.github/AllemSDK.png\" alt=\"Allem SDK\" />\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@allem-sdk/storage\"><img src=\"https://img.shields.io/npm/v/@allem-sdk/storage.svg\" alt=\"npm version\" /></a>\n  <a href=\"https://github.com/kingofmit/allem-sdk/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"License\" /></a>\n  <img src=\"https://img.shields.io/badge/react-19-61dafb\" alt=\"React 19\" />\n  <img src=\"https://img.shields.io/badge/typescript-strict-blue\" alt=\"TypeScript\" />\n</p>\n\n# @allem-sdk/storage\n\nProvider-agnostic key-value storage for React. Swap between localStorage, sessionStorage, cookies, or in-memory storage with a single adapter change. SSR-safe.\n\n## Installation\n\n```bash\nnpm install @allem-sdk/storage\n```\n\n## Usage\n\n```tsx\nimport { StorageProvider, useStorageItem, localStorageAdapter } from \"@allem-sdk/storage\";\n\nfunction App() {\n  return (\n    <StorageProvider adapter={localStorageAdapter()}>\n      <Settings />\n    </StorageProvider>\n  );\n}\n\nfunction Settings() {\n  const [theme, setTheme, removeTheme] = useStorageItem(\"theme\", \"light\");\n\n  return (\n    <div>\n      <p>Current theme: {theme}</p>\n      <button onClick={() => setTheme(\"dark\")}>Dark</button>\n      <button onClick={() => setTheme(\"light\")}>Light</button>\n      <button onClick={removeTheme}>Reset</button>\n    </div>\n  );\n}\n```\n\n## Built-in Adapters\n\n| Adapter | Factory | Description |\n|---------|---------|-------------|\n| localStorage | `localStorageAdapter()` | Persists across tabs and sessions. SSR-safe. |\n| sessionStorage | `sessionStorageAdapter()` | Persists for the current tab only. SSR-safe. |\n| Cookies | `cookieAdapter(options?)` | Persists as cookies. Configurable path, maxAge, secure, sameSite. SSR-safe. |\n| In-memory | `memoryAdapter()` | Map-based, no persistence. Useful for tests and SSR. |\n\n### Cookie adapter options\n\n```tsx\nimport { cookieAdapter } from \"@allem-sdk/storage\";\n\nconst adapter = cookieAdapter({\n  path: \"/\",          // default: \"/\"\n  maxAge: 86400,      // seconds\n  secure: true,\n  sameSite: \"lax\",    // \"strict\" | \"lax\" | \"none\"\n});\n```\n\n## Custom Adapters\n\nImplement the `StorageAdapter` interface to use any storage backend:\n\n```tsx\nimport type { StorageAdapter } from \"@allem-sdk/storage\";\n\nconst redisAdapter: StorageAdapter = {\n  getItem: (key) => /* fetch from Redis */,\n  setItem: (key, value) => /* write to Redis */,\n  removeItem: (key) => /* delete from Redis */,\n};\n```\n\n## useStorageItem\n\n```tsx\nconst [value, setValue, removeValue] = useStorageItem<T>(key: string, initialValue: T)\n```\n\n| Param | Type | Description |\n|-------|------|-------------|\n| `key` | `string` | Storage key |\n| `initialValue` | `T` | Fallback when key doesn't exist |\n\nReturns `[storedValue, setValue, removeValue]`. Values are JSON-serialized automatically. `setValue` accepts a value or updater function `(prev) => next`.\n\n## Exports\n\n| Export | Type | Description |\n|--------|------|-------------|\n| `StorageProvider` | Component | Context provider accepting a storage adapter |\n| `useStorageItem` | Hook | Read/write a single key with JSON serialization |\n| `useStorageAdapter` | Hook | Access the raw adapter directly |\n| `localStorageAdapter` | Factory | Creates a localStorage adapter |\n| `sessionStorageAdapter` | Factory | Creates a sessionStorage adapter |\n| `cookieAdapter` | Factory | Creates a cookie adapter with options |\n| `memoryAdapter` | Factory | Creates an in-memory Map adapter |\n\n## Part of [Allem SDK](https://github.com/kingofmit/allem-sdk)\n\nThis package can be used standalone or as part of the full SDK. Install `allem-sdk` to get all packages in one install.\n\n## Support\n\nIf you find Allem SDK useful, consider supporting its development:\n\n<a href=\"https://buymeacoffee.com/kingofmit\" target=\"_blank\"><img src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" height=\"50\" /></a>\n\n## License\n\n[MIT](https://github.com/kingofmit/allem-sdk/blob/main/LICENSE) - [Ahmed Allem](https://kingallem.com)\n","readmeFilename":"README.md","_rev":"1-18a03411e41134746b1aa587214bb152"}