joi icon indicating copy to clipboard operation
joi copied to clipboard

Using `.when` to check 2 values

Open jwarby opened this issue 1 month ago • 1 comments

Runtime

Node.js

Runtime version

v20.4

Module version

17

Used with

standalone

Any other relevant information

No response

How can we help?

Hi, struggling to figure out how I can apply a then clause based on whether one key has a certain value or another key has a different value, hoping somebody could help...

I currently have something like this:

.when("foo", {
    is: "bar",
    then: object.keys({
      somethingElse: string.optional().allow()
    })
});

And I'd like to extend it so that if either foo="bar" OR baz="qux" will both apply the then. I know I could† add another .when and move my then stuff into a var, or duplicate it (actual code has a lot of conditions though so want to avoid any duplication) like this:

const overrides = object.keys({ somethingElse: string.optional().allow("") });

/* ...snip...  */
.when("foo", { is: "bar", then: overrides })
.when("baz", { is: "qux", then: overrides })

but it feels like there must be a cleaner way to do it? Maybe with alternatives or something?

Thank you :pray:

† I'm assuming this would work anyway, haven't actually tried it

jwarby avatar Jun 07 '24 10:06 jwarby