
Security News
Open Source CAI Framework Handles Pen Testing Tasks up to 3,600× Faster Than Humans
CAI is a new open source AI framework that automates penetration testing tasks like scanning and exploitation up to 3,600× faster than humans.
@openally/result
Advanced tools
Another Rust's Result implementation (inspired by ts-results)
This package is available in the Node Package Repository and can be easily installed with npm or yarn.
$ npm i @openally/result
# or
$ yarn add @openally/result
import fs from "node:fs";
import { Result, Ok, Err } from "@openally/result";
function readFile(path: string): Result<string, "invalid path"> {
if (existsSync(path)) {
return Ok(fs.readFileSync(path, "utf8"));
}
return Err("invalid path");
}
const fileContentStr = readFile("test.txt").unwrap();
console.log(fileContentStr);
Where Result could be either an Ok or Err
type Result<T, E> = OkImpl<T> | ErrImpl<E>;
You can combine that package with ts-pattern, here is an example;
return match(constraint.type)
.with("PRIMARY KEY", () => (
column.isPrimary ? None : Some({ columnName, type: "MISSING PK" })
))
.with("UNIQUE", () => helper
.getUniqueByColumnName(columnName)
.unwrapOr(Some({ columnName, type: "MISSING UNIQUE" }))
)
.with("FOREIGN KEY", () => helper
.getForeignKeyByColumnName(columnName)
.andThen((fk) => {
return helper.fkIsMatchingConstraint(fk, constraint) ?
Some({ columnName, type: "INVALID FK REFERENCE", constraint }) :
None;
})
.unwrapOr(Some({ columnName, type: "MISSING FK" }))
)
.otherwise(() => None) as Option<IConstraintDifference>;
Where Option is defined as being Some value or None.
type Option<T> = SomeImpl<T> | None
Get value if Ok but throw if Err.
Ok(1).unwrap(); // 1
Err("oops").unwrap(); // Error: Tried to unwrap Error: oops
Get value if Ok but fallback to a default value if Err (instead of throwing an Error).
Ok(1).unwrapOr(5); // 1
Err("oops").unwrapOr(5); // 5
Same as unwrapOr
but use a lazy function for the default value.
Ok(1).unwrapOrElse(() => 5); // 1
Err("oops").unwrapOrElse(() => 5); // 5
Same as unwrap
but only available for Ok (useful for type safety).
Map value for Ok. Do nothing with Err (use mapErr
instead).
Ok(1)
.map((v) => v + 1)
.unwrap(); // 2
Map and unwrap:
Ok(1)
.mapOr(1, (val) => val * 2); // 2
Err(new Error("oops"))
.mapOr(1, (val) => val * 2); // 1
Same as mapOr
but use a callback returning error for default value
Err(new Error("oops"))
.mapOrElse(
(err) => err.message),
(val) => val * 2
); // oops
Map value for Err. Do nothing with Ok (use map
instead).
Err(new Error("oops"))
.mapErr((cause) => new Error("oh no", { cause }))
.unwrap();
Similar to Promise.then, map and transform an Ok value.
Ok(1)
.andThen((value) => Ok(value + 1))
.unwrap(); // 2
This could be used to transform an Ok to an Err.
Return the Err stacktrace (not available for Ok).
const _e = Err(new Error());
console.log(_e.stack);
MIT
FAQs
Another inspired Rust's Result implementation.
The npm package @openally/result receives a total of 2,490 weekly downloads. As such, @openally/result popularity was classified as popular.
We found that @openally/result demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers 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
CAI is a new open source AI framework that automates penetration testing tasks like scanning and exploitation up to 3,600× faster than humans.
Security News
Deno 2.4 brings back bundling, improves dependency updates and telemetry, and makes the runtime more practical for real-world JavaScript projects.
Security News
CVEForecast.org uses machine learning to project a record-breaking surge in vulnerability disclosures in 2025.