/**
 * Copyright (c) 2015-present, Facebook, Inc.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
'use strict';

const browserslist = require('browserslist');
const chalk = require('chalk');
const os = require('os');
const inquirer = require('inquirer');
const pkgUp = require('pkg-up');
const fs = require('fs');

const defaultBrowsers = ['>0.25%', 'not op_mini all', 'ie 11'];

function checkBrowsers(dir, retry = true) {
  const current = browserslist.findConfig(dir);
  if (current != null) {
    return Promise.resolve(current);
  }

  if (!retry) {
    return Promise.reject(
      new Error(
        chalk.red(
          'As of react-scripts >=2 you must specify targeted browsers.'
        ) +
          os.EOL +
          `Please add a ${chalk.underline(
            'browserslist'
          )} key to your ${chalk.bold('package.json')}.`
      )
    );
  }

  const question = {
    type: 'confirm',
    name: 'shouldSetBrowsers',
    message:
      chalk.yellow("We're unable to detect target browsers.") +
      `\n\nWould you like to add the defaults to your ${chalk.bold(
        'package.json'
      )}?`,
    default: true,
  };
  return inquirer.prompt(question).then(answer => {
    if (answer.shouldSetBrowsers) {
      return (
        pkgUp(dir)
          .then(filePath => {
            if (filePath == null) {
              return Promise.reject();
            }
            const pkg = JSON.parse(fs.readFileSync(filePath));
            pkg['browserslist'] = defaultBrowsers;
            fs.writeFileSync(filePath, JSON.stringify(pkg, null, 2) + os.EOL);

            browserslist.clearCaches();
            console.log();
            console.log(chalk.green('Set target browsers:'));
            console.log();
            console.log(`\t${chalk.cyan(defaultBrowsers.join(', '))}`);
            console.log();
          })
          // Swallow any error
          .catch(() => {})
          .then(() => checkBrowsers(dir, false))
      );
    } else {
      return checkBrowsers(dir, false);
    }
  });
}

module.exports = { defaultBrowsers, checkBrowsers };

/**
 * Copyright (c) 2015-present, Facebook, Inc.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
'use strict';

const browserslist = require('browserslist');
const chalk = require('chalk');
const os = require('os');
const inquirer = require('inquirer');
const pkgUp = require('pkg-up');
const fs = require('fs');

const defaultBrowsers = ['>0.25%', 'not op_mini all', 'ie 11'];

function checkBrowsers(dir, retry = true) {
  const current = browserslist.findConfig(dir);
  if (current != null) {
    return Promise.resolve(current);
  }

  if (!retry) {
    return Promise.reject(
      new Error(
        chalk.red(
          'As of react-scripts >=2 you must specify targeted browsers.'
        ) +
          os.EOL +
          `Please add a ${chalk.underline(
            'browserslist'
          )} key to your ${chalk.bold('package.json')}.`
      )
    );
  }

  const question = {
    type: 'confirm',
    name: 'shouldSetBrowsers',
    message:
      chalk.yellow("We're unable to detect target browsers.") +
      `\n\nWould you like to add the defaults to your ${chalk.bold(
        'package.json'
      )}?`,
    default: true,
  };
  return inquirer.prompt(question).then(answer => {
    if (answer.shouldSetBrowsers) {
      return (
        pkgUp(dir)
          .then(filePath => {
            if (filePath == null) {
              return Promise.reject();
            }
            const pkg = JSON.parse(fs.readFileSync(filePath));
            pkg['browserslist'] = defaultBrowsers;
            fs.writeFileSync(filePath, JSON.stringify(pkg, null, 2) + os.EOL);

            browserslist.clearCaches();
            console.log();
            console.log(
              `${chalk.green('Set target browsers:')} ${chalk.cyan(
                defaultBrowsers.join(', ')
              )}`
            );
            console.log();
          })
          // Swallow any error
          .catch(() => {})
          .then(() => checkBrowsers(dir, false))
      );
    } else {
      return checkBrowsers(dir, false);
    }
  });
}

module.exports = { defaultBrowsers, checkBrowsers };

Change browsers output to be a single line