mirror of
https://github.com/orbitdb/orbitdb.git
synced 2025-10-07 22:57:07 +00:00
* refactor: Functionize identity provider. * docs: Building a custom identity provider. * refactor: Functionize clock.
111 lines
2.4 KiB
JavaScript
111 lines
2.4 KiB
JavaScript
/**
|
|
* @namespace Storage-LRU
|
|
* @memberof module:Storage
|
|
* @description
|
|
* LRUStorage stores data in a Least Recently Used (LRU) cache.
|
|
*/
|
|
import LRU from 'lru'
|
|
|
|
const defaultSize = 1000000
|
|
|
|
/**
|
|
* Creates an instance of LRUStorage.
|
|
* @function
|
|
* @param {Object} [params={}] One or more parameters for configuring
|
|
* IPFSBlockStorage.
|
|
* @param {string} [params.size=defaultSize] The number of elements to store.
|
|
* @return {module:Storage.Storage-LRU} An instance of LRUStorage.
|
|
* @memberof module:Storage
|
|
* @instance
|
|
*/
|
|
const LRUStorage = async ({ size } = {}) => {
|
|
let lru = new LRU(size || defaultSize)
|
|
|
|
/**
|
|
* Puts data to the LRU cache.
|
|
* @function
|
|
* @param {string} hash The hash of the data to put.
|
|
* @param {*} data The data to store.
|
|
* @memberof module:Storage.Storage-LRU
|
|
* @instance
|
|
*/
|
|
const put = async (hash, data) => {
|
|
lru.set(hash, data)
|
|
}
|
|
|
|
/**
|
|
* Deletes data from the LRU cache.
|
|
* @function
|
|
* @param {string} hash The hash of the data to delete.
|
|
* @memberof module:Storage.Storage-LRU
|
|
* @instance
|
|
*/
|
|
const del = async (hash) => {
|
|
lru.remove(hash)
|
|
}
|
|
|
|
/**
|
|
* Gets data from the LRU cache.
|
|
* @function
|
|
* @param {string} hash The hash of the data to get.
|
|
* @memberof module:Storage.Storage-LRU
|
|
* @instance
|
|
*/
|
|
const get = async (hash) => {
|
|
return lru.get(hash)
|
|
}
|
|
|
|
/**
|
|
* Iterates over records stored in the LRU cache.
|
|
* @function
|
|
* @yields [string, string] The next key/value pair from the LRU cache.
|
|
* @memberof module:Storage.Storage-LRU
|
|
* @instance
|
|
*/
|
|
const iterator = async function * () {
|
|
for await (const key of lru.keys) {
|
|
const value = lru.get(key)
|
|
yield [key, value]
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Merges data from another source into the LRU cache.
|
|
* @function
|
|
* @param {module:Storage} other Another storage instance.
|
|
* @memberof module:Storage.Storage-LRU
|
|
* @instance
|
|
*/
|
|
const merge = async (other) => {
|
|
if (other) {
|
|
for await (const [key, value] of other.iterator()) {
|
|
lru.set(key, value)
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Clears the contents of the LRU cache.
|
|
* @function
|
|
* @memberof module:Storage.Storage-LRU
|
|
* @instance
|
|
*/
|
|
const clear = async () => {
|
|
lru = new LRU(size || defaultSize)
|
|
}
|
|
|
|
const close = async () => {}
|
|
|
|
return {
|
|
put,
|
|
del,
|
|
get,
|
|
iterator,
|
|
merge,
|
|
clear,
|
|
close
|
|
}
|
|
}
|
|
|
|
export default LRUStorage
|