예제 #1
0
        private async Task <AngularCliServerInfo> StartAngularCliServerAsync(string npmScriptName)
        {
            var portNumber = FindAvailablePort();

            _logger.LogInformation($"Starting @angular/cli on port {portNumber}...");

            var npmScriptRunner = new NpmScriptRunner(
                _sourcePath, npmScriptName, $"--port {portNumber}");

            npmScriptRunner.AttachToLogger(_logger);

            var openBrowserLine = await npmScriptRunner.StdOut.WaitForMatch(
                new Regex("open your browser on (http\\S+)"),
                TimeoutMilliseconds);

            var uri        = new Uri(openBrowserLine.Groups[1].Value);
            var serverInfo = new AngularCliServerInfo {
                Port = uri.Port
            };

            // Even after the Angular CLI claims to be listening for requests, there's a short
            // period where it will give an error if you make a request too quickly. Give it
            // a moment to finish starting up.
            await Task.Delay(500);

            return(serverInfo);
        }
        private static async Task <AngularCliServerInfo> StartAngularCliServerAsync(
            string sourcePath, string npmScriptName, ILogger logger)
        {
            var portNumber = FindAvailablePort();

            logger.LogInformation($"Starting @angular/cli on port {portNumber}...");

            var npmScriptRunner = new NpmScriptRunner(
                sourcePath, npmScriptName, $"--port {portNumber}");

            npmScriptRunner.AttachToLogger(logger);

            Match openBrowserLine;

            using (var stdErrReader = new EventedStreamStringReader(npmScriptRunner.StdErr))
            {
                try
                {
                    openBrowserLine = await npmScriptRunner.StdOut.WaitForMatch(
                        new Regex("open your browser on (http\\S+)"),
                        TimeoutMilliseconds);
                }
                catch (EndOfStreamException ex)
                {
                    throw new InvalidOperationException(
                              $"The NPM script '{npmScriptName}' exited without indicating that the " +
                              $"Angular CLI was listening for requests. The error output was: " +
                              $"{stdErrReader.ReadAsString()}", ex);
                }
                catch (TaskCanceledException ex)
                {
                    throw new InvalidOperationException(
                              $"The Angular CLI process did not start listening for requests " +
                              $"within the timeout period of {TimeoutMilliseconds / 1000} seconds. " +
                              $"Check the log output for error information.", ex);
                }
            }

            var uri        = new Uri(openBrowserLine.Groups[1].Value);
            var serverInfo = new AngularCliServerInfo {
                Port = uri.Port
            };

            // Even after the Angular CLI claims to be listening for requests, there's a short
            // period where it will give an error if you make a request too quickly. Give it
            // a moment to finish starting up.
            await Task.Delay(500);

            return(serverInfo);
        }
예제 #3
0
        private static async Task <AngularCliServerInfo> StartAngularCliServerAsync(
            string sourcePath, string scriptName, string pkgManagerCommand, int portNumber, ILogger logger)
        {
            if (portNumber == default(int))
            {
                portNumber = TcpPortFinder.FindAvailablePort();
            }
            logger.LogInformation($"Starting @angular/cli on port {portNumber}...");

            var scriptRunner = new NodeScriptRunner(
                sourcePath, scriptName, $"--port {portNumber}", null, pkgManagerCommand);

            scriptRunner.AttachToLogger(logger);

            Match openBrowserLine;

            using (var stdErrReader = new EventedStreamStringReader(scriptRunner.StdErr))
            {
                try
                {
                    openBrowserLine = await scriptRunner.StdOut.WaitForMatch(
                        new Regex("open your browser on (http\\S+)", RegexOptions.None, RegexMatchTimeout));
                }
                catch (EndOfStreamException ex)
                {
                    throw new InvalidOperationException(
                              $"The {pkgManagerCommand} script '{scriptName}' exited without indicating that the " +
                              $"Angular CLI was listening for requests. The error output was: " +
                              $"{stdErrReader.ReadAsString()}", ex);
                }
            }

            var uri        = new Uri(openBrowserLine.Groups[1].Value);
            var serverInfo = new AngularCliServerInfo {
                Port = uri.Port
            };

            // Even after the Angular CLI claims to be listening for requests, there's a short
            // period where it will give an error if you make a request too quickly
            await WaitForAngularCliServerToAcceptRequests(uri);

            return(serverInfo);
        }
        private static async Task <AngularCliServerInfo> StartAngularCliServerAsync(string sourcePath, string npmScriptName, NLog.ILogger logger)
        {
            var availablePort = TcpPortFinder.FindAvailablePort();

            logger.Info($"Starting @angular/cli on port {(object) availablePort}...");

            var npmScriptRunner = new NpmScriptRunner(
                sourcePath, npmScriptName, $"--port {availablePort}", null);

            npmScriptRunner.AttachToLogger(logger);

            Match openBrowserLine;

            using (var stdErrReader = new EventedStreamStringReader(npmScriptRunner.StdErr))
            {
                try
                {
                    openBrowserLine = await npmScriptRunner.StdOut.WaitForMatch(
                        new Regex("open your browser on (http\\S+)", RegexOptions.None, RegexMatchTimeout));
                }
                catch (EndOfStreamException ex)
                {
                    throw new InvalidOperationException(
                              $"The NPM script '{npmScriptName}' exited without indicating that the " +
                              $"Angular CLI was listening for requests. The error output was: " +
                              $"{stdErrReader.ReadAsString()}", ex);
                }
            }

            var cliServerUri = new Uri(openBrowserLine.Groups[1].Value);
            var serverInfo   = new AngularCliServerInfo
            {
                Port = cliServerUri.Port
            };

            // Even after the Angular CLI claims to be listening for requests, there's a short
            // period where it will give an error if you make a request too quickly
            await WaitForAngularCliServerToAcceptRequests(cliServerUri);

            return(serverInfo);
        }