
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
A railway-oriented programming helper library.
The term was coined by Scott Wlaschin of F# for Fun and Profit. Here's his talk on the subject. This method of programming allows us to deal with errors functionally in our applications. It involves having two paths (or tracks) if you will, one is the success path, and one is the error path. You start with the success path and when an error occurs, expected or not, you move to the error path. It's easier to understand if you try it out.
To use the library, first import it:
In Node:
const { compose, fromUnary, SomeError, Success } = require('baccano')
As ES Module:
import { compose, fromUnary, SomeError, Success } from 'baccano'
On the browser:
<script src="https://cdn.jsdelivr.net/npm/baccano@2.1.1/baccano.min.js"></script>
<script>
const { compose, fromUnary, SomeError, Success } = Baccano
</script>
Let's learn how to use the library by creating a pipeline of mathematical operations.
Features should not be the only things to be considered when planning software. Errors, or anything that can go wrong should also be planned. Hence, we have to define the possible errors that might occur in a particular pipeline of functions. Normally we'd use a type or a variant for this but we're in JavaScript so I suggest using Symbols for them. We'll be using division in the pipeline so we have to plan for a division by zero case.
const DIVISON_BY_ZERO = Symbol.for('DIVISION_BY_ZERO')
Now we'll define the functions that we will use. In Railway-Oriented Programming, a function should either return a success with the value, or some error with the error message. This would be easy in type-safe functional programming languages but that is not the case with JavaScript so we'll need some helpers from the library.
import { SomeError, Success } from 'baccano'
After importing our helper functions, let's define the functions we're going to use.
const divideBy = n => x => {
if (n === 0) {
return SomeError(DIVISON_BY_ZERO, "Cannot divide by zero.")
} else {
return Success(n / x)
}
}
const plusOne = x => {
return Success(x + 1)
}
In this case, we create a function divideBy which takes a number and returns a function that accepts a number and divides it by the previous number. If the previous number is zero, we return a DIVISON_BY_ZERO error using the SomeError function, which takes a value that represents the error and the error message. Else, we return a success using the Success function which accepts a value.
The plusOne function just takes a number and returns a Success with the number incremented by one.
Here is the complete example code:
// Import library
import { compose, fromUnary, SomeError, Success } from 'baccano'
// Define Errors
const DIVISON_BY_ZERO = Symbol.for('DIVISION_BY_ZERO')
const divideBy = n => x => {
if (n === 0) {
return SomeError(DIVISON_BY_ZERO, "Cannot divide by zero.")
} else {
return Success(n / x)
}
}
const plusOne = x => {
return Success(x + 1)
}
(async () => {
// Take unary functions and convert them to compatible functions
const compatibleDivideByZero = fromUnary(divideBy(0))
const compatiblePlusOne = fromUnary(plusOne)
// Create pipeline of functions
const pipeline = compose(compatiblePlusOne, compatibleDivideByZero, compatiblePlusOne)
// Get result of the pipeline
const result = await pipeline(2)
// Display end value
console.log(result.value) // 4
// Display errors
console.log(result.errors) // [ { message: 'Cannot divide by zero.', type: Symbol(DIVISON_BY_ZERO) } ]
})()
MIT
FAQs
Railway-oriented programming helper library
We found that baccano demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.