Skip to content

String uri domain option does not allow Unicode when option is enabled #3068

Open
@danillouz

Description

@danillouz

Runtime

node.js

Runtime version

v23.7.0

Module version

17.13.3

Last module version without issue

No response

Used with

express

Any other relevant information

I found this issue: #2889

Which introduced encodeUri. But this option can't be used (while it is documented).

Is this a regression?

What are you trying to achieve or the steps to reproduce?

From what I understand, I should be able to use the domain option to validate URIs that contain Unicode characters (IDN):
https://joi.dev/api/?v=17.13.3#stringurioptions

For example:

Joi.object({
  url: Joi.string().uri({
    allowRelative: false,
    domain: {
      allowUnicode: true,
      tlds: false,
    }
  })
})

But that does not work. Am I doing something wrong, or is this indeed a bug?

What was the result you got?

Schema:

Joi.object({
  url: Joi.string().uri({
    allowRelative: false,
    domain: {
      allowUnicode: true,
      tlds: false,
    }
  })
})

Data to validate:

{
  url: "https://ëxample.com"
}

Output:

{
  "url" /* "url" must be a valid uri */: "https://ëxample.com"
}

Sandbox reproduction:

Image

What result did you expect?

For it to validate URIs that contain IDN, when the allowUnicode domain option is enabled.

IOW: for it to behave like domain (which does work as expected)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugBug or defect

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions