@aivron/sync-storage
Version:
A universal, synchronous storage solution for React (web & desktop) with support for core operations, bulk actions, JSON, TTL, and React hooks. For React Native, use @aivron/async-storage.
207 lines (131 loc) • 5.36 kB
Markdown
# sync-storage
**sync-storage** is a universal, synchronous storage solution for React web and desktop (Electron) applications. It provides a consistent API for managing web storage—whether you're using `localStorage`, `sessionStorage`, or a custom storage interface—while supporting core operations, bulk actions, JSON handling, TTL (time-to-live), and even React hooks for automated cleanup.
For more details on the underlying Web Storage API, please refer to the [MDN Web Storage API documentation](https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API).
## Features
- **Core Storage Operations:** Get, set, update, and remove individual keys.
- **Bulk Operations:** Filter, update, and remove multiple keys based on a predicate.
- **JSON Support:** Seamlessly store and retrieve objects using automatic JSON serialization.
- **TTL (Time-To-Live) Support:** Set expiration times for stored items.
- **React Hooks:** Use built-in hooks for automatic storage cleanup in your React components.
- **Universal:** Works with any Web Storage API–compatible storage (localStorage, sessionStorage, or custom adapters).
## Installation
Install via npm:
```bash
npm install @aivron/sync-storage
```
Or via yarn:
```bash
yarn add @aivron/sync-storage
```
## Usage
### Importing the Library
You can import individual functions or the entire module:
```ts
// Import specific functions:
import { setStorageItem, getStorageItem } from '@aivron/sync-storage';
// Or import the entire module:
import * as storage from '@aivron/sync-storage';
```
### Basic Storage Operations
#### Store a Key-Value Pair
```ts
import { setStorageItem } from '@aivron/sync-storage';
setStorageItem('userToken', 'abc123');
```
#### Retrieve a Stored Item
```ts
import { getStorageItem } from '@aivron/sync-storage';
const token = getStorageItem('userToken');
console.log(token); // Output: "abc123"
```
#### Update a Stored Item
```ts
import { updateStorageItem } from '@aivron/sync-storage';
updateStorageItem('userToken', current =>
current ? current + '_v2' : 'defaultToken'
);
```
#### Remove a Stored Item
```ts
import { removeStorageItem } from '@aivron/sync-storage';
removeStorageItem('userToken');
```
### Bulk Operations
#### Retrieve Multiple Items
For example, retrieve all keys that start with `"app:"`:
```ts
import { getStorageItems } from '@aivron/sync-storage';
const appItems = getStorageItems(key => key.startsWith('app:'));
console.log(appItems);
```
#### Update Multiple Items
```ts
import { updateStorageItems } from '@aivron/sync-storage';
updateStorageItems(
key => key.startsWith('app:'),
current => (current ? current.toUpperCase() : '')
);
```
#### Remove Multiple Items
```ts
import { removeStorageKeys } from '@aivron/sync-storage';
removeStorageKeys(key => key.includes('temp'));
```
### JSON Operations
#### Store a JSON Value
```ts
import { setJSONItem } from '@aivron/sync-storage';
setJSONItem('userData', { name: 'Alice', age: 30 });
```
#### Retrieve a JSON Value
```ts
import { getJSONItem } from '@aivron/sync-storage';
const userData = getJSONItem<{ name: string; age: number }>('userData');
console.log(userData);
```
#### Update a JSON Value
```ts
import { updateJSONItem } from '@aivron/sync-storage';
updateJSONItem<{ name: string; age: number }>('userData', current => ({
...current,
age: (current?.age || 0) + 1,
}));
```
### TTL (Time-To-Live) Operations
#### Store an Item with TTL
Store an item that expires in 1 hour:
```ts
import { setStorageItemWithTTL } from '@aivron/sync-storage';
setStorageItemWithTTL('sessionData', 'sessionValue', 3600 * 1000);
```
#### Retrieve an Item with TTL
```ts
import { getStorageItemWithTTL } from '@aivron/sync-storage';
const sessionValue = getStorageItemWithTTL('sessionData');
console.log(sessionValue);
```
### React Hook for Storage Cleanup
Automatically remove storage keys that match a predicate when your component mounts:
```tsx
import React from 'react';
import { useStorageCleanup } from '@aivron/sync-storage';
function App() {
// Automatically remove any keys that start with "old:" when the component mounts.
useStorageCleanup(key => key.startsWith('old:'));
return <div>Your React Web/Desktop App</div>;
}
export default App;
```
## MDN Documentation
This package is built in accordance with the [MDN Web Storage API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API) specification. For in-depth information on how the Web Storage API works, please review the MDN documentation linked above.
## API Reference
For a detailed API reference, please consult the source code or visit the repository's documentation site.
## Contributing
Contributions, bug reports, and feature requests are welcome!
Please see the [issues page](https://github.com/aivron/sync-storage/issues) for more details on how to contribute.
## License
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
## Repository
For the full source code and further documentation, visit the [sync-storage GitHub repository](https://github.com/aivron/sync-storage).
---
Enjoy using **@aivron/sync-storage** as your go-to solution for synchronous web storage in React web and desktop projects! If you have any questions or need assistance, feel free to open an issue on GitHub.