Security News
ESLint is Now Language-Agnostic: Linting JSON, Markdown, and Beyond
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
interface-datastore
Advanced tools
Implementation of the datastore interface in JavaScript
src/memory
datastore-level
(supports any levelup compatible backend)datstore-fs
datastore-core/src/mount
datstore-core/src/keytransform
datastore-core/src/sharding
datstore-core/src/tiered
datastore-core/src/namespace
If you want the same functionality as go-ds-flatfs, use sharding with fs.
const FsStore = require('datastore-fs')
const ShardingStore = require('datastore-core').ShardingDatatstore
const NextToLast = require('datastore-core').shard.NextToLast
const fs = new FsStore('path/to/store')
ShardingStore.createOrOpen(fs, new NextToLast(2), (err, flatfs) => {
// flatfs now works like go-flatfs
})
$ npm install interface-datastore
const MemoryStore = require('interface-datastore').MemoryDatastore
const MountStore = require('datastore-core').MountDatastore
const Key = require('interface-datastore').Key
const store = new MountStore({prefix: new Key('/a'), datastore: new MemoryStore()})
Available under src/tests.js
describe('mystore', () => {
require('interface-datastore/src/tests')({
setup (callback) {
callback(null, instanceOfMyStore)
},
teardown (callback) {
// cleanup resources
callback()
}
})
})
To allow a better abstraction on how to address values, there is a Key
class which is used as identifier. It's easy to create a key from a Buffer
or a string
.
const a = new Key('a')
const b = new Key(new Buffer('hello'))
The key scheme is inspired by file systems and Google App Engine key model. Keys are meant to be unique across a system. They are typical hierarchical, incorporating more and more specific namespaces. Thus keys can be deemed 'children' or 'ancestors' of other keys:
new Key('/Comedy')
new Key('/Comedy/MontyPython')
Also, every namespace can be parametrized to embed relevant object information. For example, the Key name
(most specific namespace) could include the object type:
new Key('/Comedy/MontyPython/Actor:JohnCleese')
new Key('/Comedy/MontyPython/Sketch:CheeseShop')
new Key('/Comedy/MontyPython/Sketch:CheeseShop/Character:Mousebender')
The exact types can be found in
src/index.js
.
These methods will be present on every datastore. Key
always means an instance of the above mentioned Key type. Every datastore is generic over the Value
type, though currently all backing implementations are implemented only for Buffer
.
put(key, value, callback)
key: Key
value: Value
callback: function(Error)
Store a value with the given key.
store.put(new Key('awesome'), new Buffer('datastores'), (err) => {
if (err) {
throw err
}
console.log('put content')
})
get(key, callback)
key: Key
callback: function(Error, Value)
Retrieve the value stored under the given key.
store.get(new Key('awesome'), (err, value) => {
if (err) {
throw err
}
console.log('got content: %s', value.toString())
// => got content: datastore
})
delete(key, callback)
key: Key
callback: function(Error)
Delete the content stored under the given key.
store.delete(new Key('awesome'), (err) => {
if (err) {
throw err
}
console.log('deleted awesome content :(')
})
query(query)
query: Query
see below for possible valuespull-stream source
Search the store for some values. Returns a pull-stream with each item being a Value
.
// retrieve __all__ values from the store
pull(
store.query({}),
pull.collect((err, list) => {
if (err) {
console.error(err)
}
console.log('ALL THE VALUES', list)
})
)
Query
Object in the form with the following optional properties
prefix: string
(optional) - only return values where the key starts with this prefixfilters: Array<Filter<Value>>
(optional) - filter the results according to the these functionsorders: Array<Order<Value>>
(optional) - order the results according to these functionslimit: number
(optional) - only return this many recordsoffset: number
(optional) - skip this many records at the beginningkeysOnly: bool
(optional) - Only return keys, no values.batch()
This will return an object with which you can chain multiple operations together, with them only being executed on calling commit
.
const b = store.batch()
for (let i = 0; i < 100; i++) {
b.put(new Key(`hello${i}`), new Buffer(`hello world ${i}`))
}
b.commit((err) => {
if (err) {
throw err
}
console.log('put 100 values')
})
put(key, value)
key: Key
value: Value
Queue a put operation to the store.
delete(key)
key: Key
Queue a delete operation to the store.
commit(callback)
callback: function(Error)
Write all queued operations to the underyling store. The batch object should not be used after calling this.
open(callback)
callback: function(Error)
Opens the datastore, this is only needed if the store was closed before, otherwise this is taken care of by the constructor.
close(callback)
callback: function(Error)
Close the datastore, this should always be called to ensure resources are cleaned up.
PRs accepted.
Small note: If editing the Readme, please conform to the standard-readme specification.
MIT 2017 © IPFS
FAQs
datastore interface
The npm package interface-datastore receives a total of 77,544 weekly downloads. As such, interface-datastore popularity was classified as popular.
We found that interface-datastore demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
Security News
Members Hub is conducting large-scale campaigns to artificially boost Discord server metrics, undermining community trust and platform integrity.
Security News
NIST has failed to meet its self-imposed deadline of clearing the NVD's backlog by the end of the fiscal year. Meanwhile, CVE's awaiting analysis have increased by 33% since June.