For more tips like this, sign up to the weekly newsletter!

Use ImmutableJs's update for code reuse

Code reuse in collection pipelines is usually done with a function that has a signature of (coll) => coll. But unfortunately, these functions do not fit into the flat structure of the pipeline.

Let's see an example!

With a List of log objects, each with a time, severity, and a message, we need to sort them by time and format to a string in multiple places.

const processLogs = (list) => list
  .sortBy(({time}) => time)
  .map(({time, severity, msg}) => `${severity}[${time}] ${msg}`);

This function takes care of the sorting and the formatting in a central place.

But what happens when we want to insert it into a pipeline?

For example, let's filter by severity and reverse the sort order:

processLogs( // 2nd
  logs // input
    .filter(({severity}) => severity === "E") // 1st
)
  .reverse() // 3rd

The flat structure is gone, and the order of operations is messed up.

The update function

ImmutableJs provides an update function that gets a parameter with the signature of (coll) => coll, which exactly matches the processLogs above.

update's purpose is to allow the insertion of custom functions into the pipeline while retaining the flat structure.

logs // input
  .filter(({severity}) => severity === "E") // 1st
  .update(processLogs) // 2nd
  .reverse() // 3rd

Using update, code can be reused between collection pipelines more easily.

Try it
References
Learn more: