medialize / URI.js

Javascript URL mutation library
http://medialize.github.io/URI.js/
MIT License
6.26k stars 474 forks source link

Make invalid port check optional to support url templates #417

Open roguib opened 2 years ago

roguib commented 2 years ago

After version 1.18.11 of urijs, an invalid port exception is thrown if the uri is constructed with a port that isn't valid. This check is useful to avoid having an invalid value as a port, increasing the correctness of the generated URI, but makes impossible to use the library when working with url templates.

Before 1.18.11, the following code snippet was possible:

const uri = new urijs('https://github.com:{port}');

After 1.18.11, the same code snippet throws the invalid port exception.

There're several possible solutions to this problem, in case there's the desire to support URI templates.

  1. Make port check optional by passing an options object to the constructor:
    const uri = new urijs('https://github.com:{port}', { ensureValidPort: false });
  2. The second idea that comes to my mind is to throw the exception not when the URI is created but when it's converted to a string. My hypothesis here is that uri.toString() or uri.valueOf() might be the last calls to the urijs library before the constructed URI is used.
    const uri = new urijs('https://github.com:{port}'); // valid, no exception is thrown
    // do stuff here
    const resp = await fetch(uri.toString()); // here an exception will be thrown if the port is still invalid
  3. There might be also other valid options.

Would such change be considered for this library?