0.4.119 • Published 1 year ago

@http4t/result v0.4.119

Weekly downloads
51
License
Apache-2.0
Repository
-
Last release
1 year 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

1 year ago

0.4.109

1 year ago

0.4.110

1 year ago

0.3.63

2 years ago

0.3.62

2 years ago

0.2.61

3 years ago

0.1.49

3 years ago

0.1.45

3 years ago

0.1.47

3 years ago

0.1.48

3 years ago

0.1.30

3 years ago

0.1.31

3 years ago

0.1.32

3 years ago

0.1.33

3 years ago

0.1.34

3 years ago

0.1.35

3 years ago

0.1.37

3 years ago

0.1.38

3 years ago

0.1.29

3 years ago

0.1.28

3 years ago

0.1.27

3 years ago

0.1.21

3 years ago

0.1.22

3 years ago

0.1.23

3 years ago

0.1.24

3 years ago

0.1.19

3 years ago

0.0.158

4 years ago

0.0.156

4 years ago

0.0.155

4 years ago

0.0.153

4 years ago

0.0.152

4 years ago

0.0.151

4 years ago

0.0.150

4 years ago

0.0.149

4 years ago

0.0.148

4 years ago

0.0.145

4 years ago

0.0.144

4 years ago

0.0.143

4 years ago

0.0.142

4 years ago

0.0.141

4 years ago

0.0.140

4 years ago

0.0.139

4 years ago

0.0.138

4 years ago

0.0.137

4 years ago

0.0.131

4 years ago

0.0.122

4 years ago

0.0.121

4 years ago

0.0.119

4 years ago

0.0.117

4 years ago

0.0.118

4 years ago

0.0.114

4 years ago

0.0.113

4 years ago

0.0.112

4 years ago

0.0.111

4 years ago

0.0.110

4 years ago