npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

lokijs-collections-syncing

v0.15.0

Published

lokijs-collections syncing to and from a remote data source

Downloads

8

Readme

lokijs-collections-syncing

Sync lokijs-collections to or from a remote data source. To use this library your lokijs-collections models need to have 3 properties:

  • deleted property (truthy/falsey
  • modified property (truthy/falsey)
  • last modified property (timestamp - unix style milliseconds since epoch). See the lokijs-collections README for more info on creating and using collections.

Usage

This project is designed to be imported using commonJs require(...) calls. To use this in a web app, it's currently setup to be required and then included in a bundle at build time.

Setup

sync/SyncSettingsBuilder is used to create settings objects containing information and functions needed to sync a data collection.

sync/SyncDataCollection is used to upload a local in-memory data collection to a remote destination ('sync up') or download and integrate data from a remote data collection ('sync down').

Create a sync instance for a data collection:

var SyncSettingsBuilder = require("lokijs-collections-syncing/sync/SyncSettingsBuilder");

var collection = /* a lokijs-collections collection instance */

var collSync = SyncSettingsBuilder.fromDataCollectionAndSyncFuncs(
		collection,
		function syncDown(params) { /* returns a promise */ },
		function syncUp(params, data) { /* returns a promise */ }
	)
	.addFilterFuncs(function findItem(item) { /* return a lokijs (mongoDB) style query object */ })
	.build();

Example 1: Configure and run a sync:

var SyncDataCollection = require("lokijs-collections-syncing/sync/SyncDataCollection");

// set of configuration flags for sync down actions, can be reused
var syncDownOp = SyncDataCollection.createSyncDownOp(
	false/* remove all existing data from collection */,
	true/* removed deleted entries */,
	true/* merge new entities with existing ones using the '.addFilterFuncs()' func to match entities */
);

// Create a sync instance which can be used to sync any collection sync instance up or down
var syncer = new SyncDataCollection(
	(coll) => /* e.g. tableSyncHistory.get(coll.getName()) */,
	(coll) => /* e.g. tableSyncHistory.save(coll.getName()) */,
	"Deleted", /* property name in your data models that indicates whether an entity is deleted */
	"Modified", /* property name in your data models that indicates whether an entity has been modified since the last sync */
	"LastModified" /* property name in your data models that stores a last modified timestamps*/
);

var collUpdater = SyncDataCollection.createAddUpdateOrRemoveItemsFunc(collSync, "Deleted", syncDownOp);

syncer.syncUpCollection({ /* sync down parameters */ }, collSync);

syncer.syncDownCollection({ /* sync down parameters */ }, collSync.localCollection, collSync.syncDownFunc, collUpdater).then(function () {
	/* done! */
}, function (err) {
	/* sync error */
});

Example 2: (low-level)

Call sync functions manually, handle the results yourself:

collSync.syncUpFunc({ /* sync up parameters */ }, /* data array such as collection.data() */).then(function (results) {
	/* ... */
}, function (err) {
	/* ... */
});

collSync.syncDownFunc({ /* sync down parameters */ }).then(function (results) {
	/* ... */
}, function (err) {
	/* ... */
});