vetus

A versioned json object store based on git (Currently in development)

Usage no npm install needed!

<script type="module">
  import vetus from 'https://cdn.skypack.dev/vetus';
</script>

README

vetus

A versioned json object store based on git (Currently in development)

Terms

  • name: the name of the collection, allows you to have multiple object stores one is always required
  • user: the name of the user accessing the document, if none is supplied a default user is used
  • branch: the branch to perform the operation on, if none is supplied the default master is used

npm install vetus

Require vetus

var vetus = require('vetus')({path: './localDirectory'})
  • the path is the local folder to use for disk storage

Save objects

vetus.collection({name: 'collection', user: 'user', branch: 'branch'}, function(collection) {
  // data object can have as many properties as you like, each property is saved as separate document
  collection.data.myObject = obj

  collection.save('Updated my object', function() {
    res.send('OK')
  })
})

Load objects

vetus.collection({ name: 'collection', user: 'user', branch: 'branch' }, function(collection) {
  collection.load(function() {
    res.json(collection.data.myObject)
  })
})

Branches

Branches are designed to be used globally rather than local/remote

Create a branch

Where master is the branch to create from

vetus.collection({name: 'collection', user: 'user', branch: 'master'}, function(collection) {
  collection.createBranch('my_branch', function() {
    res.send('OK')
  })
})

Get a list of branches

vetus.collection({name: 'collection', user:'user'}, function(collection) {
  collection.branchList(function(list) {
    res.json(list)
  })
})

Delete a branchList

vetus.collection({name: 'collection', user: 'user', branch: 'master'}, function(collection) {
  collection.deleteBranch('my_branch', function() {
    res.send('OK')
  })
})
  • Make sure collection branch is not the branch you want to delete
  • May be some issues with this currently as other users branches are removed when they load next (via fetch --prune)

Get History (beta)

  vetus.collection({name: 'collection', user: 'user', branch: 'master'}, function(collection) {
    collection.history(function(graph) {
      res.json(graph)
    })
  })
  • Returns an object graph that contains additional $history properties to show details of last update on each property/item

Planned Features

  • Object Graph History
  • Object Merge Resolution
  • Diff Branches
  • Better Logging (:D)

Things to maybe look at

  • Document Indexing (in collection?)
  • Merge of collections
  • Split collection
  • Cross collection search (maybe use index stuff? O_o)
  • Better define what collections are supposed to be used for

Collections

A collection is used to store multiple documents that version together, possibly later there should be a higher abstraction for documents that should be searchable together, this would allow for different document types to be stored. Don't really have to worry about this until search is implemented. This could just be a seperate vetus path tbh.

Contributors


Changelog

0.9.0

  • Add Revert Hard command

0.8.1

  • Fix command callback getting stuck

0.8.0

  • Add command logs and error callback

0.5.3

  • Load collection version by tag #46

0.5.2

  • Collection versions tag against base repo, not user repo #45

0.5.1

  • Added collection allVersions() function #44

0.5.0

  • Versioning support using git tags #43