Debugging Microservices & Distributed Systems
4 min read

What is the JavaScript Pipeline Operator |>

A deep dive into how pipeline operators can make your code more readable and maintainable

The pipeline operator |> is a proposed JavaScript feature that lets you chain operations in a more readable way. Instead of nesting function calls inside each other, you can write them left-to-right. This matters because deeply nested function calls are hard to read and a common source of bugs.

When you have to read code like h(g(f(x))), your brain has to work backwards from the inside out to understand what’s happening. The pipeline operator lets the code flow naturally from left to right, just like how we read.

How the Pipeline Operator Works

The pipeline operator takes a value on the left and feeds it as the first argument to the function on the right:

JavaScript
// Current way - nested function calls
const result = h(g(f(x)));
// With pipeline operator
const result = x |> f |> g |> h;

Each function in the chain must return a value that the next function can use. If any function returns undefined or throws an error, the pipeline stops there.

A Practical Example

Processing text is a common task that often requires multiple transformations. Think of validating user input, cleaning content for a CMS, or normalizing data for a database. The pipeline operator shines in these scenarios:

JavaScript
// Current way - hard to follow the flow
const cleanName = name => {
return capitalize(
trim(
sanitize(name)
)
);
};
// With pipeline - clear transformation steps
const cleanName = name =>
name
|> sanitize
|> trim
|> capitalize;

The pipeline version shows exactly what happens to the data at each step. You can read it like a recipe: take the name, sanitize it, trim it, then capitalize it. If another developer needs to add a step (like checking for profanity or validating length), they can simply add a new line to the pipeline without restructuring nested function calls.

Current Status

The pipeline operator is a Stage 2 proposal, which means:

  • It’s not part of JavaScript yet
  • You need Babel to use it
  • The syntax might change

To use it with Babel:

JavaScript
// babel.config.js
module.exports = {
plugins: [
['@babel/plugin-proposal-pipeline-operator', {
proposal: 'minimal'
}]
]
};

When to Use It

The pipeline operator excels at handling data transformations - when you need to process data through multiple steps. Think of functions that each take one main argument and return transformed data for the next step.

JavaScript
// Processing an order through multiple stages
const processOrder = order =>
order
|> validateItems
|> calculateTotal
|> addTax
|> formatForSaving;
// Each function is focused and easy to test
const validateItems = order => {
if (!order.items?.length) {
throw new Error('Order must have items');
}
return order;
};
const calculateTotal = order => ({
...order,
total: order.items.reduce((sum, item) => sum + item.price, 0)
});
const addTax = order => ({
...order,
totalWithTax: order.total * 1.2 // 20% tax
});
const formatForSaving = order => ({
id: order.id,
items: order.items.map(item => item.id),
total: order.totalWithTax,
processedAt: new Date()
});

This approach makes testing straightforward - each function can be verified in isolation. You can check that calculateTotal works correctly without worrying about validation or tax calculations. When something goes wrong, you can quickly identify which transformation caused the issue since the data flows in a clear, trackable sequence.

Need to add a new step like fraud detection? Just add another function to the pipeline. No need to dig through nested function calls. Each function is also a standalone unit that can be reused in other contexts. Maybe you need to calculateTotal for a shopping cart preview, or formatForSaving for a draft order.

The pipeline operator isn’t just about making code prettier - it’s about making it more maintainable, testable, and easier to reason about. When each transformation is a clear, single-purpose function, you build a toolkit of reliable operations that can be combined in different ways.


Related Articles

If you enjoyed this article, you might find these related pieces interesting as well.

Recommended Engineering Resources

Here are engineering resources I've personally vetted and use. They focus on skills you'll actually need to build and scale real projects - the kind of experience that gets you hired or promoted.

Imagine where you would be in two years if you actually took the time to learn every day. A little effort consistently adds up, shaping your skills, opening doors, and building the career you envision. Start now, and future you will thank you.


This article was originally published on https://www.trevorlasn.com/blog/javascript-pipeline-operator. It was written by a human and polished using grammar tools for clarity.

Interested in a partnership? Shoot me an email at hi [at] trevorlasn.com with all relevant information.