Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

interface-datastore

Package Overview
Dependencies
Maintainers
3
Versions
68
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

interface-datastore

datastore interface

  • 0.8.3
  • Source
  • npm
  • Socket score

Version published
Maintainers
3
Created
Source

interface-datastore

standard-readme compliant Build Status Code Coverage Dependency Status js-standard-style

Implementation of the datastore interface in JavaScript

Lead Maintainer

Alex Potsides

Table of Contents

Implementations

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')

// flatfs now works like go-flatfs
const flatfs = await ShardingStore.createOrOpen(fs, new NextToLast(2))

Install

$ npm install interface-datastore

The type definitions for this package are available on http://definitelytyped.org/. To install just use:

$ npm install -D @types/interface-datastore

Usage

Wrapping Stores

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() })

Test suite

Available under src/tests.js

describe('mystore', () => {
  require('interface-datastore/src/tests')({
    async setup () {
      return instanceOfMyStore
    },
    async teardown () {
      // cleanup resources
    }
  })
})

API

Keys

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 typically 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 parameterized 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')

Methods

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.

has(key) -> Promise<Boolean>

  • key: Key

Check for the existence of a given key

const exists = await store.has(new Key('awesome'))
console.log('is it there', exists)

put(key, value) -> Promise

  • key: Key
  • value: Value

Store a value with the given key.

await store.put(new Key('awesome'), new Buffer('datastores'))
console.log('put content')

get(key) -> Promise<Value>

  • key: Key

Retrieve the value stored under the given key.

const value = await store.get(new Key('awesome'))
console.log('got content: %s', value.toString())
// => got content: datastore

delete(key) -> Promise

  • key: Key

Delete the content stored under the given key.

await store.delete(new Key('awesome'))
console.log('deleted awesome content :(')

query(query) -> Iterable

  • query: Query see below for possible values

Search the store for some values. Returns an Iterable with each item being a Value.

// retrieve __all__ values from the store
let list = []
for await (const value of store.query({})) {
  list.push(value)
}
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 prefix
  • filters: Array<Filter<Value>> (optional) - filter the results according to the these functions
  • orders: Array<Order<Value>> (optional) - order the results according to these functions
  • limit: Number (optional) - only return this many records
  • offset: Number (optional) - skip this many records at the beginning
  • keysOnly: Boolean (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}`))
}

await b.commit()
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() -> Promise

Write all queued operations to the underyling store. The batch object should not be used after calling this.

open() -> Promise

Opens the datastore, this is only needed if the store was closed before, otherwise this is taken care of by the constructor.

close() -> Promise

Close the datastore, this should always be called to ensure resources are cleaned up.

Contribute

PRs accepted.

Small note: If editing the Readme, please conform to the standard-readme specification.

License

MIT 2017 © IPFS

Keywords

FAQs

Package last updated on 07 Apr 2020

Did you know?

Socket

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.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc