Custom Driver
It is possible to extend unstorage by creating a custom driver.
Explore src/drivers to get an idea of how to implement them. Methods can:
import { createStorage, defineDriver } from "unstorage";
const myStorageDriver = defineDriver((options) => {
return {
name: "my-custom-driver",
options,
async hasItem(key, _opts) {},
async getItem(key, _opts) {},
async setItem(key, value, _opts) {},
async removeItem(key, _opts) {},
async getKeys(base, _opts) {},
async clear(base, _opts) {},
async dispose() {},
async watch(callback) {},
};
});
const storage = createStorage({
driver: myStorageDriver(),
});
Some important notes:
- Keys should be normalized following
foo:barconvention - Remove any open watcher and handlers in
dispose() - Returning a promise is optional, you can return a direct value (see memory driver)
- You don't have acces to the mount base
- Value returned by
getItemcan be a serializableobjectorstring - When setting
watchmethod, the unstorage default handler will be disabled. You are responsible for emitting an event ongetItem,setItemandremoveItem.