synapse-storage
Version:
Набор инструментов для управления состоянием и апи-запросами
219 lines (168 loc) • 8.11 kB
Markdown
# Synapse Storage
> **🇺🇸 English** | [🇷🇺 Русский](./docs/ru/README.md) | [📝 ChangeLog](./CHANGELOG.md)
State management toolkit + API client
[](https://badge.fury.io/js/synapse-storage)
[](https://bundlephobia.com/package/synapse-storage)
[](https://www.typescriptlang.org/)
[](https://rxjs.dev/)
## ✨ Key Features
- 🚀 **Framework Agnostic** - You can use Synapse with any framework or independently
- 💾 **Various Storage Adapters** - Memory, LocalStorage, IndexedDB
- 🧮 **Different Ways to Access Data** - Computed values with memoization
- Ability to create Redux-style computed selectors
- Ability to directly subscribe to specific properties in storage
- Ability to subscribe to reactive state
- 🌐 **API Client Creation** - HTTP client with caching capabilities (Similar to RTK Query)
- ⚛️ **React** - Several convenient hooks for React
- ⚡ **RxJS** - Ability to create Redux-Observable style effects
- ⚙️ **Custom Middleware Support** - Ability to extend storage functionality with custom middlewares
- 🔌 **Custom Plugin Support** - Ability to extend storage functionality with custom plugins
---
## Author
**Vladislav** — Senior Frontend Developer (React, TypeScript)
> ### 🔎 Currently looking for new career opportunities!
>
> [GitHub](https://github.com/Vlad92msk/) | [LinkedIn](https://www.linkedin.com/in/vlad-firsov/)
---
*PS: Not recommended for production use yet as I develop this in my free time.
The library works in general, but I can provide guarantees only after full integration into my pet project - Social Network.
This won't happen before changing my current workplace and country of residence*
---
## 📦 Installation
```bash
npm install synapse-storage
```
```bash
# For reactive capabilities
npm install rxjs
# For React integration
npm install react react-dom
# All at once for full functionality
npm install synapse-storage rxjs react react-dom
```
| Module | Description | Dependencies |
|--------|-------------|--------------|
| `synapse-storage/core` | base | - |
| `synapse-storage/react` | React | React 18+ |
| `synapse-storage/reactive` | RxJS | RxJS 7.8.2+ |
| `synapse-storage/api` | HTTP client | - |
| `synapse-storage/utils` | Utils | - |
> **💡 Tip:** Import only the modules you need for optimal bundle size
### tsconfig.json:
```json
{
"compilerOptions": {
"target": "ES2022",
"module": "ES2022",
"moduleResolution": "bundler"
}
}
```
## 📚 Documentation
- [📖 Main](./README.md)
- [🚀 Basic Usage](./docs/en/basic-usage.md)
- [🧮 Redux-style Computed Selectors](./docs/en/redux-selectors.md)
- [⚙️ Middlewares](./docs/en/middlewares.md)
- [🌐 API Client](./docs/en/api-client.md)
- ⚡ Reactive Approach
- [⚡ Creating Dispatcher](./docs/en/create-dispatcher.md)
- [⚡ Creating Effects](./docs/en/create-effects.md)
- [⚡ Creating Effects Module](./docs/en/create-effects-module.md)
- [🛠️ createSynapse Utility](./docs/en/create-synapse.md)
- [🔌 Creating Custom Plugins](./docs/en/custom-plugins.md)
- [⚙️ Creating Custom Middlewares](./docs/en/custom-middlewares.md)
- [📋 Additional](./docs/en/additional.md)
## 🎯 Examples
- [GitHub](https://github.com/Vlad92msk/synapse-examples)
- [YouTube](https://www.youtube.com/channel/UCGENI_i4qmBkPp98P2HvvGw)
---
## 📊 Why Synapse Storage?
**One library instead of many** - Synapse combines functionality that usually requires multiple dependencies:
| What you get | Traditional approach | Synapse Storage |
|--------------|---------------------|---------|
| **State Management** | Redux + RTK (~45KB) | ✅ |
| **HTTP Client + Caching** | React Query (~39KB) | ✅|
| **Reactive Effects** | Redux-Observable (~25KB) | ✅|
| **Storage Adapters** | Custom solutions | ✅|
| **React Integration** | Custom hooks | ✅|
| **Computed Selectors** | Reselect (~5KB) | ✅|
| **Middleware System** | Custom implementation | ✅|
| **Plugin Architecture** | Custom implementation | ✅|
### Bundle Size Comparison
```typescript
// Traditional stack
import { configureStore } from '@reduxjs/toolkit' // ~45KB
import { createApi } from '@reduxjs/toolkit/query' // included in RTK
import { QueryClient } from '@tanstack/react-query' // ~39KB
import { createEpicMiddleware } from 'redux-observable' // ~25KB
// Total: ~109KB + custom implementations
// Synapse Storage
import { createSynapse } from 'synapse-storage' // ~171KB
// Total: 171KB with ALL features included
```
### Modular Usage
Don't need everything? Import only what you use:
| Use Case | Import | Size | Comparison |
|-------------------|------------------------|------|---------------------------|
| **Basic state** | `synapse-storage/core` | ~42KB | vs Redux: 45KB |
| **+ HTTP client** | `+ /api` | +13KB | vs React Query: 39KB |
| **+ Reactive** | `+ /reactive` | +8KB | vs Redux-Observable: 25KB |
| **+ React hooks** | `+ /react` | +5KB | vs Custom hooks |
| **Full package** | all modules | ~171KB |vs 109KB stack + custom |
> **🎯 Result:** Similar or better performance with unified API and TypeScript support out of the box
## 🧩 Modular Architecture "Like a Constructor"
**Use only what you need** - each module works independently:
### 🎯 Flexible Usage Scenarios
```typescript
// 📦 Minimal project - storage only
import { MemoryStorage } from 'synapse-storage/core' // 42KB
// 📦 + Add HTTP client when needed
import { ApiClient } from 'synapse-storage/api' // +13KB
// 📦 + Add reactive effects when required
import { createDispatcher } from 'synapse-storage/reactive' // +8KB
// 📦 + Add React hooks for UI
import { useSelector } from 'synapse-storage/react' // +5KB
```
### 🔧 Or Create Your Own Implementation
```typescript
// Use core + your solutions
import { IStorage } from 'synapse-storage/core'
// Implement your HTTP client
class MyApiClient { /* your logic */ }
// Implement your React hooks
const useMyCustomHook = () => { /* your logic */ }
// Combine as convenient!
```
### 🎨 Constructor Approach Benefits
- **🚀 Quick Start** - begin with core, add modules as project grows
- **📦 Optimal Bundle** - don't pay for unused functionality
- **🔄 Flexibility** - replace any module with your implementation
- **🛠️ Compatibility** - modules work independently but integrate perfectly
- **📈 Scalability** - from simple state to full-featured architecture
> **💡 Evolution Example:** Started with MemoryStorage → added ApiClient → connected reactive effects → integrated React hooks. **Each step is optional!**
>
---
## 📁 Documentation Structure
```
docs/
├── ru/ # 🇷🇺 Russian documentation
│ └── ...
│
└── en/ # 🇺🇸 English documentation
├── README.md # Main page
├── basic-usage.md # Basic Usage
├── storage-creation.md # Storage Creation
├── value-updates.md # Value Updates
├── subscriptions.md # Subscriptions
├── redux-selectors.md # Redux-style Selectors
├── middlewares.md # Middlewares
├── api-client.md # API Client
├── reactive.md # Reactive Approach
├── create-dispatcher.md # Create Dispatcher
├── create-effects.md # Create Effects
├── create-synapse.md # createSynapse Utility
├── custom-plugins.md # Custom Plugins
├── custom-middlewares.md # Custom Middlewares
└── additional.md # Additional
```
---