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

orc-denorm

v0.1.2

Published

Denormalize Orchestrate items in the background.

Downloads

15

Readme

orc-denorm

Build Status Coverage Status

NPM

Denormalize Orchestrate items in the background.

Install

To get orc-denorm, you'll need node.js. Once you've got that installed, install orc-denorm like this:

npm install -g orc-denorm

That gives you access to orc-denorm's CLI. To install orc-denorm as a dependency of another project, install like this:

npm install orc-denorm

Usage

To run orc-denorm with just the default settings, do this:

orc-denorm -u YOUR_API_KEY -c COLLECTION

This will examine every item in COLLECTION for fields named like [collection]_key, use their value to find the item they refer to, and create a new document in denorm_COLLECTION where those [collection]_key fields have been changed to include the whole item they refer to, rather than just its key. So, for example, this document from a like collection:

{
    user_key: '...',
    post_key: '...'
}

... will be turned into this:

{
    user: {
        ...
    },
    post: {
        ...
    }
}

With the same key as the original, but in the denorm_like collection.

Customization

To customize how orc-denorm handles documents, you can write your own script:

var orc_denorm = require('orc-denorm')();

// the custom denormalization function
// must return a promise
orc_denorm.denormalize = function (db, path, item) {
    // db is an authenticated orchestrate.js client
    // path == { collection: '...', key: '...', ref: '...'}
    // item == { /* the item's value */ }

    // let's run the default denormalization function first
    return this._denormalize(db, path, item)
    .then(function (item) {
        // then let's add a post's comments to the post object
        return db.newEventReader()
        .from(path.collection, path.key)
        .type('comments')
        .list()
        .then(function (res) {
            item.comments = res.results;
            return item;
        })
        // then let's save the denormalized post
        .then(function (item) {
            var collection = ['denorm', path.collection].join('_');
            return db.put(collection, path.key, item);
        })
        .then(function () {
            return item;
        });
    });
};

// run orc-denorm's CLI
orc_denorm.cli();
// or just start the process with orc_denorm.start({ collection: '...', api_key: '...' })

Error Handling

orc-denorm does its best to continue running no matter what error messages it receives from Orchestrate. For example:

  • Related object is missing? That field in the denormalized item is now null, while scanning continues.
  • Related object yields some other wacky error? Skip denormalizing that object, while scanning continues.
  • Retrieving collection listing yields some 4xx or 5xx error? Try again!

To make sure orc-denorm really never dies, use forever:

forever orc-denorm -u YOUR_API_KEY -c COLLECTION

This will restart orc-denorm if it ever halts unexpectedly.

Tests

npm test

License

ASLv2, yo.