npm install @waveplay/stashy
import stashy from '@waveplay/stashy'
// Get a value from storage
const displayName = stashy.getString('name')
console.log(`Your username is ${displayName}`)
// Update a value in storage
stashy.set('name', 'Pkmmte Xeleon')
See the sample project for more usage examples.
Function | Description |
---|---|
clearAll |
Clears all data from the backend. |
delete |
Deletes the value for the given key. |
get |
Gets the value for the given key. |
getAsync |
Gets the value for the given key asynchronously. |
getBoolean |
Gets the boolean value for the given key. |
getBooleanAsync |
Gets the boolean value for the given key asynchronously. |
getNumber |
Gets the number value for the given key. |
getNumberAsync |
Gets the number value for the given key asynchronously. |
getString |
Gets the string value for the given key. |
getStringAsync |
Gets the string value for the given key asynchronously. |
set |
Sets the value for the given key. |
Stashy comes with a few backends available out of the box. You can also create your own backend by implementing the StashyBackend
interface.
import { Stashy } from '@waveplay/stashy'
import { StashyBackend } from '@waveplay/stashy/backend'
class CustomBackend implements StashyBackend {
// ... your custom backend implementation
}
const stashy = new Stashy({
backend: new CustomBackend()
})
// or with different backends per environment
const stashy = new Stashy({
backend: {
native: new MmkvBackend(),
ssr: new CookieBackend(),
web: new CustomBackend()
}
})
This backend uses @react-native-async-storage/async-storage
to store data. It is the default backend for native and only works with async functions such as getStringAsync()
.
import { AsyncStorageBackend } from '@waveplay/stashy/backend/async-storage'
Cookie-backed storage perfect for server-side environments. It is the default backend for SSR and requires a context
object to be passed with every function call.
import { CookieBackend } from '@waveplay/stashy/backend/cookie'
Meant to use process.env
variables. Supports dot notation for nested objects. This will not load the .env
file for you. Use with dotenv
if you need to load the .env
file. Frameworks like Next.js and Pilot.js do this automatically.
import { EnvBackend } from '@waveplay/stashy/backend/env'
Relies on localStorage
to store data. It is the default backend for web.
import { LocalStorageBackend } from '@waveplay/stashy/backend/local-storage'
Backed by react-native-mmkv
. Extremely fast and efficient storage for React Native, but requires that you install react-native-mmkv
separately. If you're using Expo, you will also need to generate a new development client build.
import { MmkvBackend } from '@waveplay/stashy/backend/mmkv'
You can pass your own logger to Stashy when creating a new instance and it will be used to log each and every event. This is useful for debugging backend and environment issues.
The id
property is included in each log message to help you differentiate between multiple instances of Stashy.
import { Stashy } from '@waveplay/stashy'
import pino from 'pino'
const stashy = new Stashy({
id: 'my-stash',
logger: pino({ level: 'debug' })
})
This project was originally developed for WavePlay.
The MIT License.