whole_func_string: function formatMessage(message) {
    var lines = message.split('\n');
  
    // line #0 is filename
    // line #1 is the main error message
    if (!lines[0] || !lines[1]) {
      return message;
    }
  
    // Remove webpack-specific loader notation from filename.
    // Before:
    // ./~/css-loader!./~/postcss-loader!./src/App.css
    // After:
    // ./src/App.css
    if (lines[0].lastIndexOf('!') !== -1) {
      lines[0] = lines[0].substr(lines[0].lastIndexOf('!') + 1);
    }
  
    // Cleans up verbose "module not found" messages for files and packages.
    if (lines[1].indexOf('Module not found: ') === 0) {
      lines = [
        lines[0],
        // Clean up message because "Module not found: " is descriptive enough.
        lines[1].replace(
          'Cannot resolve \'file\' or \'directory\' ', ''
        ).replace(
          'Cannot resolve module ', ''
        ).replace(
          'Error: ', ''
        ),
        // Skip all irrelevant lines.
        // (For some reason they only appear on the client in browser.)
        '',
        lines[lines.length - 1] // error location is the last line
      ]
    }
  
    // Cleans up syntax error messages.
    if (lines[1].indexOf('Module build failed: ') === 0) {
      // For some reason, on the client messages appear duplicated:
      // https://github.com/webpack/webpack/issues/3008
      // This won't happen in Node but since we share this helpers,
      // we will dedupe them right here. We will ignore all lines
      // after the original error message text is repeated the second time.
      var errorText = lines[1].substr('Module build failed: '.length);
      var cleanedLines = [];
      var hasReachedDuplicateMessage = false;
      // Gather lines until we reach the beginning of duplicate message.
      lines.forEach(function(line, index) {
        if (
          // First time it occurs is fine.
          index !== 1 &&
          // line.endsWith(errorText)
          line.length >= errorText.length &&
          line.indexOf(errorText) === line.length - errorText.length
        ) {
          // We see the same error message for the second time!
          // Filter out repeated error message and everything after it.
          hasReachedDuplicateMessage = true;
        }
        if (
          !hasReachedDuplicateMessage ||
          // Print last line anyway because it contains the source location
          index === lines.length - 1
        ) {
          // This line is OK to appear in the output.
          cleanedLines.push(line);
        }
      });
      // We are clean now!
      lines = cleanedLines;
      // Finally, brush up the error message a little.
      lines[1] = lines[1].replace(
        'Module build failed: SyntaxError:',
        friendlySyntaxErrorLabel
      );
    }
  
    // Reassemble the message.
    message = lines.join('\n');
    // Internal stacks are generally useless so we strip them
    message = message.replace(
      /^\s*at\s.*:\d+:\d+[\s\)]*\n/gm, ''
    ); // at ... ...:x:y
  
    return message;
  }
func_code_string: function formatMessage(message) {
    var lines = message.split('\n');
  
    // line #0 is filename
    // line #1 is the main error message
    if (!lines[0] || !lines[1]) {
      return message;
    }
  
    // Remove webpack-specific loader notation from filename.
    // Before:
    // ./~/css-loader!./~/postcss-loader!./src/App.css
    // After:
    // ./src/App.css
    if (lines[0].lastIndexOf('!') !== -1) {
      lines[0] = lines[0].substr(lines[0].lastIndexOf('!') + 1);
    }
  
    // Cleans up verbose "module not found" messages for files and packages.
    if (lines[1].indexOf('Module not found: ') === 0) {
      lines = [
        lines[0],
        // Clean up message because "Module not found: " is descriptive enough.
        lines[1].replace(
          'Cannot resolve \'file\' or \'directory\' ', ''
        ).replace(
          'Cannot resolve module ', ''
        ).replace(
          'Error: ', ''
        ),
        // Skip all irrelevant lines.
        // (For some reason they only appear on the client in browser.)
        '',
        lines[lines.length - 1] // error location is the last line
      ]
    }
  
    // Cleans up syntax error messages.
    if (lines[1].indexOf('Module build failed: ') === 0) {
      // For some reason, on the client messages appear duplicated:
      // https://github.com/webpack/webpack/issues/3008
      // This won't happen in Node but since we share this helpers,
      // we will dedupe them right here. We will ignore all lines
      // after the original error message text is repeated the second time.
      var errorText = lines[1].substr('Module build failed: '.length);
      var cleanedLines = [];
      var hasReachedDuplicateMessage = false;
      // Gather lines until we reach the beginning of duplicate message.
      lines.forEach(function(line, index) {
        if (
          // First time it occurs is fine.
          index !== 1 &&
          // line.endsWith(errorText)
          line.length >= errorText.length &&
          line.indexOf(errorText) === line.length - errorText.length
        ) {
          // We see the same error message for the second time!
          // Filter out repeated error message and everything after it.
          hasReachedDuplicateMessage = true;
        }
        if (
          !hasReachedDuplicateMessage ||
          // Print last line anyway because it contains the source location
          index === lines.length - 1
        ) {
          // This line is OK to appear in the output.
          cleanedLines.push(line);
        }
      });
      // We are clean now!
      lines = cleanedLines;
      // Finally, brush up the error message a little.
      lines[1] = lines[1].replace(
        'Module build failed: SyntaxError:',
        friendlySyntaxErrorLabel
      );
    }
  
    // Reassemble the message.
    message = lines.join('\n');
    // Internal stacks are generally useless so we strip them
    message = message.replace(
      /^\s*at\s.*:\d+:\d+[\s\)]*\n/gm, ''
    ); // at ... ...:x:y
  
    return message;
  }
func_documentation_string: Cleans up webpack error messages.