0.4.119 • Published 2 years ago

@http4t/result v0.4.119

Weekly downloads
51
License
Apache-2.0
Repository
-
Last release
2 years ago

@http4t/result

A standard way of representing success/failure results, where in the case of failure we might want to flag issues with multiple elements in a complex data structure.

Basics

A success looks like:

const result = success("this value was ok!");
// -> {value: "this value was ok!"}

A failure looks like:

type Thing = {
  name: string;
  price: number;
}

function validate(value: any) : Result<Thing> {
  const problems = [];

  if(typeof value.name !== 'string')
    problems.push(problem("expected a string", ["name"]))

  if(typeof value.price !== 'number')
    problems.push(problem("expected a number", ["price"]))
  
  if(problems.length > 0) return failure(problems);

  return success(value);
}

validate({});

// -> {problems: [
//          {message: "expected a string", path: ["name"]},
//          {message: "expected a number", path: ["price"]}
//     ]}

Paths

The path in each problem is an array of string | number, which is a subset of jsonpath- just object keys and array indexes.

In the following data structure the value at path ["a", "b", 0, "c"] is 1:

{a: {
  b: [
    {c:1}, 
    {c:2}
  ]
}}

The equivalent json path of ["a", "b", 0, "c"] would be $.a.b.[0].c.

ResultError

Also provided is an error class that plays nicely with test runners and ides.

The error class will calculate an error.expected which is a copy of actual, but with the faulty values replaced with the message of any problems.

const actual = {ok: "ok", wrong: "wrong"};
const error = new ResultError(actual, failure("some error message", ["wrong"]));

console.log(error.expected);
// --> {ok: "ok", wrong: "some error message"}
0.4.119

2 years ago

0.4.109

2 years ago

0.4.110

2 years ago

0.3.63

3 years ago

0.3.62

4 years ago

0.2.61

4 years ago

0.1.49

5 years ago

0.1.45

5 years ago

0.1.47

5 years ago

0.1.48

5 years ago

0.1.30

5 years ago

0.1.31

5 years ago

0.1.32

5 years ago

0.1.33

5 years ago

0.1.34

5 years ago

0.1.35

5 years ago

0.1.37

5 years ago

0.1.38

5 years ago

0.1.29

5 years ago

0.1.28

5 years ago

0.1.27

5 years ago

0.1.21

5 years ago

0.1.22

5 years ago

0.1.23

5 years ago

0.1.24

5 years ago

0.1.19

5 years ago

0.0.158

5 years ago

0.0.156

5 years ago

0.0.155

5 years ago

0.0.153

5 years ago

0.0.152

5 years ago

0.0.151

5 years ago

0.0.150

5 years ago

0.0.149

5 years ago

0.0.148

5 years ago

0.0.145

5 years ago

0.0.144

5 years ago

0.0.143

5 years ago

0.0.142

5 years ago

0.0.141

5 years ago

0.0.140

5 years ago

0.0.139

5 years ago

0.0.138

5 years ago

0.0.137

5 years ago

0.0.131

5 years ago

0.0.122

5 years ago

0.0.121

5 years ago

0.0.119

5 years ago

0.0.117

5 years ago

0.0.118

5 years ago

0.0.114

5 years ago

0.0.113

5 years ago

0.0.112

5 years ago

0.0.111

5 years ago

0.0.110

5 years ago