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

aqueduct-pipe-joints

v1.0.16

Published

Code for handling relationships

Downloads

25

Readme

Module for maintaining relationships that are specified on a pipe (for Aqueduct Sync)

For information about how to define the joints, see Aqueduct Sync! The rest of this document is about the internals of aqueduct-pipe-joints.

The general philosophy is that joints are maintained via a sub-document, rather than a foreign key, so we strip the foreign key and replace it with the summary version of the parent document.

Because those joints need to be maintained from the app code as well as from the sync process, this is available in an external module.

Each joint can have the following methods (but depending on whether or not it is a related list they may or may not all be present):

  • onChildUpdated, onChildInserted, onChildRemoved: this updates the related list
  • onParentInserted: this updates the parent relationship on children, and also builds up the related list based on the current children (it is only needed for remote operations, normally only needed when child and parent are coming in out of order)
  • onParentUpdated: this updates the parent relationship on children
  • enhanceCleanse: create a new cleanse method for the pipe, that will fetch the parent records when a child is received from the remote end

From the app code:

  • build a queue instance
  • loop through the pipes
  • get a local collection instance and add hooks to send messages on the queue
  • loop through the joints
  • get a local collection instance for the joint parent
  • build up a joint using the child and parent collection, and the rest of the configuration from the pipe
  • use the joint that was built and add hooks to invoke the onChildUpdated and onChildInserted functions (depending on the joint configuration they may not all be present)

From the sync code (this is in aqueduct-sync):

  • build up the joint using the child and parent collection
  • use the enhanceCleanse function to modify the pipe cleanse method (this will populate the parent relationship when a child is inserted or updated)
  • add an event listener for the onChildInserted, onChildUpdated and onChildRemoved functions, if present (to be invoked only when that is done from the remote), for corresponding events on the local child collection
  • add an event listener for onParentInserted and onParentUpdated (again, only to be invoked for remote operations), for corresponding events on the local parent collection

TODO:

  • need to be able to have "cascading" updates: if I update the parent on a child, and that child is in a related list, then that related list needs to update also. Currently this will not work, when the update is done from the remote end.