export async function validateDevServerConfig()

in src/core/utils/net.ts [93:150]


export async function validateDevServerConfig(url: string | undefined, timeout: number | undefined) {
  logger.silly(`Validating dev server config:`);
  logger.silly({
    url,
    timeout,
  });

  let { hostname, port } = parseUrl(url);

  try {
    const resolvedPortNumber = await isAcceptingTcpConnections({ port, host: hostname });
    if (resolvedPortNumber !== 0) {
      const spinner = ora();
      let waitOnOneOfResources = hostname === "localhost" ? [`tcp:127.0.0.1:${port}`, `tcp:localhost:${port}`] : [`tcp:${hostname}:${port}`];
      spinner.start(`Waiting for ${chalk.green(url)} to be ready`);

      let promises = waitOnOneOfResources.map((resource) => {
        return waitOn({
          resources: [resource],
          delay: 1000, // initial delay in ms, default 0
          interval: 100, // poll interval in ms, default 250ms
          simultaneous: 1, // limit to 1 connection per resource at a time
          timeout: timeout ? timeout * 1000 : timeout, // timeout in ms, default Infinity
          tcpTimeout: 1000, // tcp timeout in ms, default 300ms
          window: 1000, // stabilization time in ms, default 750ms
          strictSSL: false,
          verbose: false, // force disable verbose logs even if SWA_CLI_DEBUG is enabled
        })
          .then(() => {
            logger.silly(`Connected to ${resource} successfully`);
            return resource;
          })
          .catch((err) => {
            logger.silly(`Could not connect to ${resource}`);
            throw err;
          });
      });

      try {
        await Promise.any(promises);
        spinner.succeed(`${url} validated successfully`);
        spinner.clear();
      } catch {
        spinner.fail();
        logger.error(`Could not connect to "${url}". Is the server up and running?`, true);
      }
    }
  } catch (err) {
    if ((err as any).message.includes("EACCES")) {
      logger.error(
        `Port "${port}" cannot be used. You might need elevated or admin privileges. Or, use a valid port from ${VALID_PORT_MIN} to ${VALID_PORT_MAX}.`,
        true
      );
    } else {
      logger.error((err as any).message, true);
    }
  }
}