tachyon-drive is an extendable TypeScript (JavaScript) storage driver implementation that provides a simple interface for storing and retrieving data using a specified storage mechanism.
It includes a built-in memory storage driver, as well as support for other storage drivers such as file storage and Azure Blob Storage module
Tachyon-Drive to be solid basic building block for more complex operations which requires storing data to some storage.
As example, storing Map of verified user JWT token payloads to storage which is shared with multiple backends for cache and validation purposes (and gets store updates via onUpdate callback from driver).
const dataSchema = zod.object({
test: zod.string(),
});
type Data = zod.infer<typeof dataSchema>;
// example serializer for Data to Buffer with optional validation
const bufferSerializer: IPersistSerializer<Data, Buffer> = {
serialize: (data: Data) => Buffer.from(JSON.stringify(data)),
deserialize: (buffer: Buffer) => JSON.parse(buffer.toString()),
validator: (data: Data) => dataSchema.safeParse(data).success, // optional deserialization validation
};
const driver = new MemoryStorageDriver('MemoryStorageDriver', bufferSerializer, /* externalNotify = null, processor */);
await driver.init(); // initialize driver early
await driver.store({test: 'test'}); // store to the file
const data = await driver.hydrate(); // restore from file
await driver.clear(); // clear storage
driver.onUpdate((data: Data) => {
// listen for updates (if implemeting driver supports this)
console.log('data updated', data);
});
// listen driver state changes
driver.onHydrate((state: boolean) => {
console.log('data hydrate state change', state);
});
driver.onStore((state: boolean) => {
console.log('data store state change', state);
});
async function doSomethingWithDriver(driver: IStorageDriver<Data>) {
// await driver.store({test: 'test'});
// await driver.hydrate();
// await driver.clear();
}