jeffbski / wait-on

wait-on is a cross-platform command line utility and Node.js API which will wait for files, ports, sockets, and http(s) resources to become available
MIT License
1.87k stars 77 forks source link

Error when using waitOn() with IPv6 address #141

Open cjk7989 opened 1 year ago

cjk7989 commented 1 year ago

Hi, I'm wondering if wait-on does not support ipv6, because I got an error when I tried to use it with an ipv6 address. Here are the details:

I opened an ipv6 address: [::1]:4200, but when I run the code:

waitOn({ 
  resources: ["tcp:[::1]:4200"],
  delay: 1000,
  interval: 100,
  simultaneous: 1,
  timeout: 3000,
  tcpTimeout: 1000,
  window: 1000,
  strictSSL: false,
  verbose: false,
})

I got an error with message:

wait-on(18440) exiting with error TypeError: object null is not iterable (cannot read property Symbol(Symbol.iterator))
at tcpExists (C:\myTsProject\node_modules\wait-on\lib\wait-on.js:342:61)

But when I use psping or browser, "[::1]:4200" can be connected.

I find the code in line 342 of wait-on.js is:

const [, , /* full, hostWithColon */ hostMatched, port] = HOST_PORT_RE.exec(tcpPath);

Where

const HOST_PORT_RE = /^(([^:]*):)?(\d+)$/;

and tcpPath in my case maybe "tcp:[::1]:4200" or "[::1]:4200", both of them indeed do not match this regular expression.

Some additional information:

Thank you for your help. I appreciate your work on this library.

cjk7989 commented 1 year ago

When I changed the resource to “tcp:localhost:4200”, waitOn() worked fine. So I guess it’s not that waitOn() does not support ipv6, it’s just that the regex check in line 342 of wait-on.js does not handle ipv6 format addresses. Maybe this can be fixed in a future update. Am I right? : )