hunk.code_window: }
   watchAllWithDevServer();
  
hunk.labels: keep keep replace
hunk.after_edit: watchAllWithDevServer().then((exitCode) => {
       process.exit(exitCode);
   });
hunk.file_path: webapp/scripts/dev-server.js
hunk.type: replace
file: // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
  // See LICENSE.txt for license information.
  
  /* eslint-disable no-console */
  
  const chalk = require('chalk');
  const concurrently = require('concurrently');
  
  const {getPlatformCommands} = require('./utils.js');
  
  async function buildAll() {
      console.log(chalk.inverse.bold('Building subpackages...') + '\n');
  
      try {
          const {result} = concurrently(
              getPlatformCommands('build'),
              {
                  killOthers: 'failure',
              },
          );
  
          await result;
      } catch (e) {
          console.error(chalk.inverse.bold.red('Failed to build subpackages'), e);
          return;
      }
  
      console.log('\n' + chalk.inverse.bold('Subpackages built! Building web app...') + '\n');
  
      // It's not necessary to run these commands through concurrently, but it makes the output consistent
  
      try {
          const {result} = concurrently([
              {command: 'npm:build --workspace=channels', name: 'webapp', prefixColor: 'cyan'},
          ]);
          await result;
      } catch (e) {
          console.error(chalk.inverse.bold.red('Failed to build web app'), e);
          return;
      }
  
      console.log('\n' + chalk.inverse.bold('Web app built! '));
  }
  
  buildAll();
  