mirror of
				https://github.com/strapi/strapi.git
				synced 2025-11-04 03:43:34 +00:00 
			
		
		
		
	Merge pull request #3260 from strapi/tech/strapi-new-improvments
strapi new improvments
This commit is contained in:
		
						commit
						91fdc44bcc
					
				@ -53,7 +53,6 @@
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "strapi": {
 | 
			
		||||
    "packageManager": "npm",
 | 
			
		||||
    "uuid": "8917e89f-c8ff-4f80-b963-e3d568088422"
 | 
			
		||||
  },
 | 
			
		||||
  "engines": {
 | 
			
		||||
 | 
			
		||||
@ -25,7 +25,6 @@
 | 
			
		||||
    "chalk": "^2.4.2",
 | 
			
		||||
    "classnames": "^2.2.6",
 | 
			
		||||
    "cross-env": "^5.0.5",
 | 
			
		||||
    "crypto": "^1.0.1",
 | 
			
		||||
    "css-loader": "^2.1.1",
 | 
			
		||||
    "duplicate-package-checker-webpack-plugin": "^3.0.0",
 | 
			
		||||
    "file-loader": "^3.0.1",
 | 
			
		||||
 | 
			
		||||
@ -7,8 +7,6 @@
 | 
			
		||||
// Public node modules.
 | 
			
		||||
const _ = require('lodash');
 | 
			
		||||
 | 
			
		||||
const { packageManager } = require('strapi-utils');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Expose main package JSON of the application
 | 
			
		||||
 * with basic info, dependencies, etc.
 | 
			
		||||
@ -16,8 +14,6 @@ const { packageManager } = require('strapi-utils');
 | 
			
		||||
 | 
			
		||||
module.exports = scope => {
 | 
			
		||||
  const cliPkg = scope.strapiPackageJSON || {};
 | 
			
		||||
  // Store the package manager info into the package.json
 | 
			
		||||
  const pkgManager = packageManager.isStrapiInstalledWithNPM() ? 'npm' : 'yarn';
 | 
			
		||||
 | 
			
		||||
  // Let us install additional dependencies on a specific version.
 | 
			
		||||
  // Ex: it allows us to install the right version of knex.
 | 
			
		||||
@ -38,7 +34,6 @@ module.exports = scope => {
 | 
			
		||||
    'private': true,
 | 
			
		||||
    'version': '0.1.0',
 | 
			
		||||
    'description': 'A Strapi application.',
 | 
			
		||||
    'main': './server.js',
 | 
			
		||||
    'scripts': {
 | 
			
		||||
      'develop': 'strapi develop',
 | 
			
		||||
      'start': 'strapi start',
 | 
			
		||||
@ -73,7 +68,6 @@ module.exports = scope => {
 | 
			
		||||
      'url': scope.website || ''
 | 
			
		||||
    }],
 | 
			
		||||
    'strapi': {
 | 
			
		||||
      'packageManager': pkgManager,
 | 
			
		||||
      'uuid': scope.uuid
 | 
			
		||||
    },
 | 
			
		||||
    'engines': {
 | 
			
		||||
 | 
			
		||||
@ -13,16 +13,14 @@ const ora = require('ora');
 | 
			
		||||
const execa = require('execa');
 | 
			
		||||
 | 
			
		||||
// Logger.
 | 
			
		||||
const { packageManager } = require('strapi-utils');
 | 
			
		||||
const trackSuccess = require('./success');
 | 
			
		||||
 | 
			
		||||
const installArguments = ['install', '--production', '--no-optional'];
 | 
			
		||||
const runInstall = cwd => {
 | 
			
		||||
  if (packageManager.isStrapiInstalledWithNPM()) {
 | 
			
		||||
    return execa('npm', installArguments, { cwd });
 | 
			
		||||
const runInstall = ({ rootPath, hasYarn }) => {
 | 
			
		||||
  if (hasYarn) {
 | 
			
		||||
    return execa('yarnpkg', installArguments, { cwd: rootPath });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return execa('yarn', installArguments, { cwd });
 | 
			
		||||
  return execa('npm', installArguments, { cwd: rootPath });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = async (scope, cb) => {
 | 
			
		||||
@ -41,7 +39,7 @@ module.exports = async (scope, cb) => {
 | 
			
		||||
  loader.start('Installing dependencies ...');
 | 
			
		||||
 | 
			
		||||
  try {
 | 
			
		||||
    await runInstall(scope.rootPath);
 | 
			
		||||
    await runInstall(scope);
 | 
			
		||||
    loader.succeed();
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    loader.fail();
 | 
			
		||||
 | 
			
		||||
@ -19,9 +19,18 @@ const uuid = require('uuid/v4');
 | 
			
		||||
const rimraf = require('rimraf');
 | 
			
		||||
 | 
			
		||||
// Logger.
 | 
			
		||||
const { packageManager } = require('strapi-utils');
 | 
			
		||||
const trackSuccess = require('./success');
 | 
			
		||||
 | 
			
		||||
function hasYarn() {
 | 
			
		||||
  try {
 | 
			
		||||
    const { code } = execa.shellSync('yarnpkg --version');
 | 
			
		||||
    if (code === 0) return true;
 | 
			
		||||
    return false;
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This `before` function is run before generating targets.
 | 
			
		||||
 * Validate, configure defaults, get extra dependencies, etc.
 | 
			
		||||
@ -45,6 +54,7 @@ module.exports = (scope, cb) => {
 | 
			
		||||
    year: new Date().getFullYear(),
 | 
			
		||||
    license: 'MIT',
 | 
			
		||||
    database: {},
 | 
			
		||||
    hasYarn: hasYarn(),
 | 
			
		||||
    additionalsDependencies: [
 | 
			
		||||
      'strapi-plugin-settings-manager',
 | 
			
		||||
      'strapi-plugin-content-type-builder',
 | 
			
		||||
@ -181,192 +191,6 @@ module.exports = (scope, cb) => {
 | 
			
		||||
 | 
			
		||||
    scope.client = answers.client;
 | 
			
		||||
 | 
			
		||||
    const asyncFn = [
 | 
			
		||||
      new Promise(async resolve => {
 | 
			
		||||
        const isMongo = scope.client.database === 'mongo';
 | 
			
		||||
        const isSQLite = scope.database.settings.client === 'sqlite';
 | 
			
		||||
 | 
			
		||||
        let answers = await inquirer.prompt([
 | 
			
		||||
          {
 | 
			
		||||
            when: !hasDatabaseConfig && !isSQLite,
 | 
			
		||||
            type: 'input',
 | 
			
		||||
            name: 'database',
 | 
			
		||||
            message: 'Database name:',
 | 
			
		||||
            default: _.get(scope.database, 'database', scope.name),
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            when: !hasDatabaseConfig && !isSQLite,
 | 
			
		||||
            type: 'input',
 | 
			
		||||
            name: 'host',
 | 
			
		||||
            message: 'Host:',
 | 
			
		||||
            default: _.get(scope.database, 'host', '127.0.0.1'),
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            when: !hasDatabaseConfig && isMongo,
 | 
			
		||||
            type: 'boolean',
 | 
			
		||||
            name: 'srv',
 | 
			
		||||
            message: '+srv connection:',
 | 
			
		||||
            default: _.get(scope.database, 'srv', false),
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            when: !hasDatabaseConfig && !isSQLite,
 | 
			
		||||
            type: 'input',
 | 
			
		||||
            name: 'port',
 | 
			
		||||
            message: `Port${
 | 
			
		||||
              isMongo ? ' (It will be ignored if you enable +srv)' : ''
 | 
			
		||||
            }:`,
 | 
			
		||||
            default: answers => {
 | 
			
		||||
              // eslint-disable-line no-unused-vars
 | 
			
		||||
              if (_.get(scope.database, 'port')) {
 | 
			
		||||
                return scope.database.port;
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
              const ports = {
 | 
			
		||||
                mongo: 27017,
 | 
			
		||||
                postgres: 5432,
 | 
			
		||||
                mysql: 3306,
 | 
			
		||||
              };
 | 
			
		||||
 | 
			
		||||
              return ports[scope.client.database];
 | 
			
		||||
            },
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            when: !hasDatabaseConfig && !isSQLite,
 | 
			
		||||
            type: 'input',
 | 
			
		||||
            name: 'username',
 | 
			
		||||
            message: 'Username:',
 | 
			
		||||
            default: _.get(scope.database, 'username', undefined),
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            when: !hasDatabaseConfig && !isSQLite,
 | 
			
		||||
            type: 'password',
 | 
			
		||||
            name: 'password',
 | 
			
		||||
            message: 'Password:',
 | 
			
		||||
            mask: '*',
 | 
			
		||||
            default: _.get(scope.database, 'password', undefined),
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            when: !hasDatabaseConfig && isMongo,
 | 
			
		||||
            type: 'input',
 | 
			
		||||
            name: 'authenticationDatabase',
 | 
			
		||||
            message: 'Authentication database (Maybe "admin" or blank):',
 | 
			
		||||
            default: _.get(scope.database, 'authenticationDatabase', undefined),
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            when: !hasDatabaseConfig && !isSQLite,
 | 
			
		||||
            type: 'boolean',
 | 
			
		||||
            name: 'ssl',
 | 
			
		||||
            message: 'Enable SSL connection:',
 | 
			
		||||
            default: _.get(scope.database, 'ssl', false),
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            when: !hasDatabaseConfig && isSQLite && !isQuick,
 | 
			
		||||
            type: 'input',
 | 
			
		||||
            name: 'filename',
 | 
			
		||||
            message: 'Filename:',
 | 
			
		||||
            default: () => '.tmp/data.db',
 | 
			
		||||
          },
 | 
			
		||||
        ]);
 | 
			
		||||
 | 
			
		||||
        if (isQuick) {
 | 
			
		||||
          answers.filename = '.tmp/data.db';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (hasDatabaseConfig) {
 | 
			
		||||
          answers = _.merge(
 | 
			
		||||
            _.omit(scope.database.settings, ['client']),
 | 
			
		||||
            scope.database.options
 | 
			
		||||
          );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        scope.database.settings.host = answers.host;
 | 
			
		||||
        scope.database.settings.port = answers.port;
 | 
			
		||||
        scope.database.settings.database = answers.database;
 | 
			
		||||
        scope.database.settings.username = answers.username;
 | 
			
		||||
        scope.database.settings.password = answers.password;
 | 
			
		||||
 | 
			
		||||
        if (answers.filename) {
 | 
			
		||||
          scope.database.settings.filename = answers.filename;
 | 
			
		||||
        }
 | 
			
		||||
        if (answers.srv) {
 | 
			
		||||
          scope.database.settings.srv = _.toString(answers.srv) === 'true';
 | 
			
		||||
        }
 | 
			
		||||
        if (answers.authenticationDatabase) {
 | 
			
		||||
          scope.database.options.authenticationDatabase =
 | 
			
		||||
            answers.authenticationDatabase;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // SQLite requirements.
 | 
			
		||||
        if (isSQLite) {
 | 
			
		||||
          // Necessary for SQLite configuration (https://knexjs.org/#Builder-insert).
 | 
			
		||||
          scope.database.options = {
 | 
			
		||||
            useNullAsDefault: true,
 | 
			
		||||
          };
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (answers.ssl && scope.client.database === 'mongo') {
 | 
			
		||||
          scope.database.options.ssl = _.toString(answers.ssl) === 'true';
 | 
			
		||||
        } else if (answers.ssl) {
 | 
			
		||||
          scope.database.settings.ssl = _.toString(answers.ssl) === 'true';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        console.log();
 | 
			
		||||
        if (isQuick) {
 | 
			
		||||
          console.log('✅ Connected to the database');
 | 
			
		||||
        } else {
 | 
			
		||||
          console.log(
 | 
			
		||||
            '⏳ Testing database connection...\r\nIt might take a minute, please have a coffee ☕️'
 | 
			
		||||
          );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        resolve();
 | 
			
		||||
      }),
 | 
			
		||||
      new Promise(resolve => {
 | 
			
		||||
        const isStrapiInstalledWithNPM = packageManager.isStrapiInstalledWithNPM();
 | 
			
		||||
        let packageCmd = packageManager.commands(
 | 
			
		||||
          'install --prefix',
 | 
			
		||||
          scope.tmpPath
 | 
			
		||||
        );
 | 
			
		||||
        // Manually create the temp directory for yarn
 | 
			
		||||
        if (!isStrapiInstalledWithNPM) {
 | 
			
		||||
          fs.ensureDirSync(scope.tmpPath);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let cmd = `${packageCmd} ${scope.client.connector}@${
 | 
			
		||||
          scope.strapiPackageJSON.version
 | 
			
		||||
        }`;
 | 
			
		||||
 | 
			
		||||
        if (scope.client.module) {
 | 
			
		||||
          cmd += ` ${scope.client.module}`;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (scope.client.connector === 'strapi-hook-bookshelf') {
 | 
			
		||||
          cmd += ` strapi-hook-knex@${scope.strapiPackageJSON.version}`;
 | 
			
		||||
          scope.additionalsDependencies = scope.additionalsDependencies.concat([
 | 
			
		||||
            'strapi-hook-knex',
 | 
			
		||||
            'knex',
 | 
			
		||||
          ]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (isQuick) {
 | 
			
		||||
          scope.client.version = 'latest';
 | 
			
		||||
          return resolve();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        execa.shell(cmd).then(() => {
 | 
			
		||||
          if (scope.client.module) {
 | 
			
		||||
            const lock = require(path.join(
 | 
			
		||||
              `${scope.tmpPath}`,
 | 
			
		||||
              '/node_modules/',
 | 
			
		||||
              `${scope.client.module}/package.json`
 | 
			
		||||
            ));
 | 
			
		||||
            scope.client.version = lock.version;
 | 
			
		||||
          }
 | 
			
		||||
          resolve();
 | 
			
		||||
        });
 | 
			
		||||
      }),
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    const connectedToTheDatabase = (withMessage = true) => {
 | 
			
		||||
      if (withMessage) {
 | 
			
		||||
        console.log();
 | 
			
		||||
@ -386,35 +210,224 @@ module.exports = (scope, cb) => {
 | 
			
		||||
      cb.success();
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    Promise.all(asyncFn).then(() => {
 | 
			
		||||
      // Bypass real connection test.
 | 
			
		||||
      if (isQuick) {
 | 
			
		||||
        return connectedToTheDatabase(false);
 | 
			
		||||
      }
 | 
			
		||||
    Promise.all([
 | 
			
		||||
      handleCustomDatabase({ scope, isQuick, hasDatabaseConfig }),
 | 
			
		||||
      installDatabaseTestingDep({ scope, isQuick }),
 | 
			
		||||
    ])
 | 
			
		||||
      .then(() => {
 | 
			
		||||
        // Bypass real connection test.
 | 
			
		||||
        if (isQuick) {
 | 
			
		||||
          return connectedToTheDatabase(false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      try {
 | 
			
		||||
        const connectivityFile = path.join(
 | 
			
		||||
          scope.tmpPath,
 | 
			
		||||
          'node_modules',
 | 
			
		||||
          scope.client.connector,
 | 
			
		||||
          'lib',
 | 
			
		||||
          'utils',
 | 
			
		||||
          'connectivity.js'
 | 
			
		||||
        );
 | 
			
		||||
        try {
 | 
			
		||||
          const connectivityFile = path.join(
 | 
			
		||||
            scope.tmpPath,
 | 
			
		||||
            'node_modules',
 | 
			
		||||
            scope.client.connector,
 | 
			
		||||
            'lib',
 | 
			
		||||
            'utils',
 | 
			
		||||
            'connectivity.js'
 | 
			
		||||
          );
 | 
			
		||||
 | 
			
		||||
        require(connectivityFile)(
 | 
			
		||||
          scope,
 | 
			
		||||
          connectedToTheDatabase,
 | 
			
		||||
          connectionValidation
 | 
			
		||||
        );
 | 
			
		||||
      } catch (err) {
 | 
			
		||||
        trackSuccess('didNotConnectDatabase', scope, err);
 | 
			
		||||
          require(connectivityFile)(
 | 
			
		||||
            scope,
 | 
			
		||||
            connectedToTheDatabase,
 | 
			
		||||
            connectionValidation
 | 
			
		||||
          );
 | 
			
		||||
        } catch (err) {
 | 
			
		||||
          trackSuccess('didNotConnectDatabase', scope, err);
 | 
			
		||||
          console.log(err);
 | 
			
		||||
          rimraf.sync(scope.tmpPath);
 | 
			
		||||
          cb.error();
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      .catch(err => {
 | 
			
		||||
        console.log(err);
 | 
			
		||||
        rimraf.sync(scope.tmpPath);
 | 
			
		||||
        cb.error();
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
        cb.error(err);
 | 
			
		||||
      });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  connectionValidation();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
async function handleCustomDatabase({ scope, hasDatabaseConfig, isQuick }) {
 | 
			
		||||
  const isMongo = scope.client.database === 'mongo';
 | 
			
		||||
  const isSQLite = scope.database.settings.client === 'sqlite';
 | 
			
		||||
 | 
			
		||||
  let answers = await inquirer.prompt([
 | 
			
		||||
    {
 | 
			
		||||
      when: !hasDatabaseConfig && !isSQLite,
 | 
			
		||||
      type: 'input',
 | 
			
		||||
      name: 'database',
 | 
			
		||||
      message: 'Database name:',
 | 
			
		||||
      default: _.get(scope.database, 'database', scope.name),
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      when: !hasDatabaseConfig && !isSQLite,
 | 
			
		||||
      type: 'input',
 | 
			
		||||
      name: 'host',
 | 
			
		||||
      message: 'Host:',
 | 
			
		||||
      default: _.get(scope.database, 'host', '127.0.0.1'),
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      when: !hasDatabaseConfig && isMongo,
 | 
			
		||||
      type: 'boolean',
 | 
			
		||||
      name: 'srv',
 | 
			
		||||
      message: '+srv connection:',
 | 
			
		||||
      default: _.get(scope.database, 'srv', false),
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      when: !hasDatabaseConfig && !isSQLite,
 | 
			
		||||
      type: 'input',
 | 
			
		||||
      name: 'port',
 | 
			
		||||
      message: `Port${
 | 
			
		||||
        isMongo ? ' (It will be ignored if you enable +srv)' : ''
 | 
			
		||||
      }:`,
 | 
			
		||||
      default: answers => {
 | 
			
		||||
        // eslint-disable-line no-unused-vars
 | 
			
		||||
        if (_.get(scope.database, 'port')) {
 | 
			
		||||
          return scope.database.port;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const ports = {
 | 
			
		||||
          mongo: 27017,
 | 
			
		||||
          postgres: 5432,
 | 
			
		||||
          mysql: 3306,
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        return ports[scope.client.database];
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      when: !hasDatabaseConfig && !isSQLite,
 | 
			
		||||
      type: 'input',
 | 
			
		||||
      name: 'username',
 | 
			
		||||
      message: 'Username:',
 | 
			
		||||
      default: _.get(scope.database, 'username', undefined),
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      when: !hasDatabaseConfig && !isSQLite,
 | 
			
		||||
      type: 'password',
 | 
			
		||||
      name: 'password',
 | 
			
		||||
      message: 'Password:',
 | 
			
		||||
      mask: '*',
 | 
			
		||||
      default: _.get(scope.database, 'password', undefined),
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      when: !hasDatabaseConfig && isMongo,
 | 
			
		||||
      type: 'input',
 | 
			
		||||
      name: 'authenticationDatabase',
 | 
			
		||||
      message: 'Authentication database (Maybe "admin" or blank):',
 | 
			
		||||
      default: _.get(scope.database, 'authenticationDatabase', undefined),
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      when: !hasDatabaseConfig && !isSQLite,
 | 
			
		||||
      type: 'boolean',
 | 
			
		||||
      name: 'ssl',
 | 
			
		||||
      message: 'Enable SSL connection:',
 | 
			
		||||
      default: _.get(scope.database, 'ssl', false),
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      when: !hasDatabaseConfig && isSQLite && !isQuick,
 | 
			
		||||
      type: 'input',
 | 
			
		||||
      name: 'filename',
 | 
			
		||||
      message: 'Filename:',
 | 
			
		||||
      default: () => '.tmp/data.db',
 | 
			
		||||
    },
 | 
			
		||||
  ]);
 | 
			
		||||
 | 
			
		||||
  if (isQuick) {
 | 
			
		||||
    answers.filename = '.tmp/data.db';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (hasDatabaseConfig) {
 | 
			
		||||
    answers = _.merge(
 | 
			
		||||
      _.omit(scope.database.settings, ['client']),
 | 
			
		||||
      scope.database.options
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  scope.database.settings.host = answers.host;
 | 
			
		||||
  scope.database.settings.port = answers.port;
 | 
			
		||||
  scope.database.settings.database = answers.database;
 | 
			
		||||
  scope.database.settings.username = answers.username;
 | 
			
		||||
  scope.database.settings.password = answers.password;
 | 
			
		||||
 | 
			
		||||
  if (answers.filename) {
 | 
			
		||||
    scope.database.settings.filename = answers.filename;
 | 
			
		||||
  }
 | 
			
		||||
  if (answers.srv) {
 | 
			
		||||
    scope.database.settings.srv = _.toString(answers.srv) === 'true';
 | 
			
		||||
  }
 | 
			
		||||
  if (answers.authenticationDatabase) {
 | 
			
		||||
    scope.database.options.authenticationDatabase =
 | 
			
		||||
      answers.authenticationDatabase;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // SQLite requirements.
 | 
			
		||||
  if (isSQLite) {
 | 
			
		||||
    // Necessary for SQLite configuration (https://knexjs.org/#Builder-insert).
 | 
			
		||||
    scope.database.options = {
 | 
			
		||||
      useNullAsDefault: true,
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (answers.ssl && scope.client.database === 'mongo') {
 | 
			
		||||
    scope.database.options.ssl = _.toString(answers.ssl) === 'true';
 | 
			
		||||
  } else if (answers.ssl) {
 | 
			
		||||
    scope.database.settings.ssl = _.toString(answers.ssl) === 'true';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  console.log();
 | 
			
		||||
  if (isQuick) {
 | 
			
		||||
    console.log('✅ Connected to the database');
 | 
			
		||||
  } else {
 | 
			
		||||
    console.log(
 | 
			
		||||
      '⏳ Testing database connection...\r\nIt might take a minute, please have a coffee ☕️'
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function installDatabaseTestingDep({ scope, isQuick }) {
 | 
			
		||||
  let packageCmd = scope.hasYarn
 | 
			
		||||
    ? `yarnpkg --cwd ${scope.tmpPath} add`
 | 
			
		||||
    : `npm install --prefix ${scope.tmpPath}`;
 | 
			
		||||
 | 
			
		||||
  // Manually create the temp directory for yarn
 | 
			
		||||
  if (scope.hasYarn) {
 | 
			
		||||
    await fs.ensureDir(scope.tmpPath);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  let cmd = `${packageCmd} ${scope.client.connector}@${
 | 
			
		||||
    scope.strapiPackageJSON.version
 | 
			
		||||
  }`;
 | 
			
		||||
 | 
			
		||||
  if (scope.client.module) {
 | 
			
		||||
    cmd += ` ${scope.client.module}`;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (scope.client.connector === 'strapi-hook-bookshelf') {
 | 
			
		||||
    cmd += ` strapi-hook-knex@${scope.strapiPackageJSON.version}`;
 | 
			
		||||
    scope.additionalsDependencies = scope.additionalsDependencies.concat([
 | 
			
		||||
      'strapi-hook-knex',
 | 
			
		||||
      'knex',
 | 
			
		||||
    ]);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (isQuick) {
 | 
			
		||||
    scope.client.version = 'latest';
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  await execa.shell(cmd);
 | 
			
		||||
 | 
			
		||||
  if (scope.client.module) {
 | 
			
		||||
    const lock = require(path.join(
 | 
			
		||||
      `${scope.tmpPath}`,
 | 
			
		||||
      '/node_modules/',
 | 
			
		||||
      `${scope.client.module}/package.json`
 | 
			
		||||
    ));
 | 
			
		||||
    scope.client.version = lock.version;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -22,7 +22,6 @@
 | 
			
		||||
    "ora": "^2.1.0",
 | 
			
		||||
    "request": "^2.88.0",
 | 
			
		||||
    "rimraf": "^2.6.3",
 | 
			
		||||
    "strapi-utils": "3.0.0-alpha.26.2",
 | 
			
		||||
    "uuid": "^3.1.0"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
 | 
			
		||||
@ -1,45 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "strapi-lint",
 | 
			
		||||
  "version": "3.0.0-alpha.26.2",
 | 
			
		||||
  "description": "Strapi eslint and prettier configurations",
 | 
			
		||||
  "directories": {
 | 
			
		||||
    "lib": "lib"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "echo \"no tests yet\""
 | 
			
		||||
  },
 | 
			
		||||
  "author": {
 | 
			
		||||
    "email": "hi@strapi.io",
 | 
			
		||||
    "name": "Strapi team",
 | 
			
		||||
    "url": "http://strapi.io"
 | 
			
		||||
  },
 | 
			
		||||
  "engines": {
 | 
			
		||||
    "node": ">= 10.0.0",
 | 
			
		||||
    "npm": ">= 6.0.0"
 | 
			
		||||
  },
 | 
			
		||||
  "maintainers": [
 | 
			
		||||
    {
 | 
			
		||||
      "name": "Strapi team",
 | 
			
		||||
      "email": "hi@strapi.io",
 | 
			
		||||
      "url": "http://strapi.io"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "eslint": "^4.19.1",
 | 
			
		||||
    "eslint-config-airbnb": "^16.1.0",
 | 
			
		||||
    "eslint-config-airbnb-base": "^12.1.0",
 | 
			
		||||
    "eslint-config-prettier": "^2.9.0",
 | 
			
		||||
    "eslint-import-resolver-webpack": "^0.9.0",
 | 
			
		||||
    "eslint-plugin-import": "^2.11.0",
 | 
			
		||||
    "eslint-plugin-jsx-a11y": "^6.0.3",
 | 
			
		||||
    "eslint-plugin-react": "^7.7.0",
 | 
			
		||||
    "eslint-plugin-redux-saga": "^0.8.0",
 | 
			
		||||
    "webpack": "^4.6.0"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "babel-eslint": "^8.2.3",
 | 
			
		||||
    "prettier": "^1.12.1",
 | 
			
		||||
    "shelljs": "^0.7.8"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -16,7 +16,6 @@ module.exports = {
 | 
			
		||||
  knex: require('./knex'),
 | 
			
		||||
  logger: require('./logger'),
 | 
			
		||||
  models: require('./models'),
 | 
			
		||||
  packageManager: require('./packageManager'),
 | 
			
		||||
  policy: require('./policy'),
 | 
			
		||||
  regex: require('./regex'),
 | 
			
		||||
  templateConfiguration: require('./templateConfiguration'),
 | 
			
		||||
 | 
			
		||||
@ -1,76 +0,0 @@
 | 
			
		||||
const fs = require('fs');
 | 
			
		||||
const shell = require('shelljs');
 | 
			
		||||
const { includes } = require('lodash');
 | 
			
		||||
 | 
			
		||||
// let isStrapiInstalledWithNPM = true;
 | 
			
		||||
// let skipCheck = false;
 | 
			
		||||
 | 
			
		||||
const watcher = (cmd) => {
 | 
			
		||||
  const data = shell.exec(cmd, {
 | 
			
		||||
    silent: true,
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  if (includes(data.stderr, 'command not found') && data.code !== 0) {
 | 
			
		||||
    throw new Error('Command not found');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return data.stdout.toString();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  isStrapiInstalledWithNPM: () => {
 | 
			
		||||
    let isNPM = true;
 | 
			
		||||
    let skipCheck = false;
 | 
			
		||||
 | 
			
		||||
    // Check if we are in development mode (working with the monorepo)
 | 
			
		||||
    // So we don't run `npm -g ls` which takes time
 | 
			
		||||
    if (process.argv.indexOf('new') !== -1 && process.argv.indexOf('--dev') !== -1) {
 | 
			
		||||
      skipCheck = true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!skipCheck) {
 | 
			
		||||
      try {
 | 
			
		||||
        // Retrieve all the packages installed with NPM
 | 
			
		||||
        const npmPath = watcher('npm root -g');
 | 
			
		||||
 | 
			
		||||
        const data = fs.readdirSync(npmPath.trim());
 | 
			
		||||
 | 
			
		||||
        // Check if strapi is installed with NPM
 | 
			
		||||
        isNPM = includes(data, 'strapi');
 | 
			
		||||
 | 
			
		||||
        if (isNPM) {
 | 
			
		||||
          return isNPM;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
          const yarnData = watcher('yarn global list');
 | 
			
		||||
          isNPM = !includes(yarnData, 'strapi');
 | 
			
		||||
        } catch(err) {
 | 
			
		||||
          isNPM = true;
 | 
			
		||||
        }
 | 
			
		||||
      } catch(err) {
 | 
			
		||||
        // If NPM is not installed strapi is installed with Yarn
 | 
			
		||||
        isNPM = false;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return isNPM;
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  commands: function (cmdType, path = '') {
 | 
			
		||||
    const isNPM = this.isStrapiInstalledWithNPM();
 | 
			
		||||
 | 
			
		||||
    switch(cmdType) {
 | 
			
		||||
      case 'install --prefix':
 | 
			
		||||
        return isNPM ? `npm install --prefix ${path}` : `yarn --cwd ${path} add`;
 | 
			
		||||
      case 'root -g':
 | 
			
		||||
        return isNPM ? 'npm root -g' : 'yarn global dir';
 | 
			
		||||
      case 'install global':
 | 
			
		||||
        return isNPM ? 'npm install' : 'yarn install';
 | 
			
		||||
      case 'install package':
 | 
			
		||||
        return isNPM ? 'npm install' : 'yarn add';
 | 
			
		||||
      default:
 | 
			
		||||
        return '';
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
@ -79,7 +79,7 @@ program
 | 
			
		||||
 | 
			
		||||
// `$ strapi new`
 | 
			
		||||
program
 | 
			
		||||
  .command('new')
 | 
			
		||||
  .command('new [name]')
 | 
			
		||||
  .option('--debug', 'Display database connection error')
 | 
			
		||||
  .option('--quickstart', 'Quickstart app creation')
 | 
			
		||||
  .option('--dbclient <dbclient>', 'Database client')
 | 
			
		||||
 | 
			
		||||
@ -1,96 +0,0 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Module dependencies
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// Node.js core
 | 
			
		||||
const path = require('path');
 | 
			
		||||
const fs = require('fs');
 | 
			
		||||
 | 
			
		||||
// Public node modules.
 | 
			
		||||
const _ = require('lodash');
 | 
			
		||||
const shell = require('shelljs');
 | 
			
		||||
 | 
			
		||||
// Define files/dir paths
 | 
			
		||||
const pluginsDirPath = path.join(process.cwd(), 'plugins');
 | 
			
		||||
const adminDirPath = path.join(process.cwd(), 'admin');
 | 
			
		||||
 | 
			
		||||
let packageManager;
 | 
			
		||||
try {
 | 
			
		||||
  packageManager = require(path.resolve(process.cwd(), 'package.json')).strapi.packageManager;
 | 
			
		||||
} catch (error) {
 | 
			
		||||
  packageManager = 'npm';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const installCmd = packageManager === 'yarn' ? 'yarn install --production --ignore-scripts' : 'npm install --prod --ignore-scripts';
 | 
			
		||||
 | 
			
		||||
/* eslint-disable no-console */
 | 
			
		||||
 | 
			
		||||
// Install admin dependencies
 | 
			
		||||
console.log(`🔸  Administration Panel`);
 | 
			
		||||
console.log('📦  Installing packages...');
 | 
			
		||||
 | 
			
		||||
try {
 | 
			
		||||
  // Check if path is existing.
 | 
			
		||||
  fs.accessSync(adminDirPath, fs.constants.R_OK | fs.constants.W_OK);
 | 
			
		||||
 | 
			
		||||
  shell.cd(adminDirPath);
 | 
			
		||||
  const install = shell.exec(installCmd, {silent: true});
 | 
			
		||||
 | 
			
		||||
  if (install.stderr && install.code !== 0) {
 | 
			
		||||
    console.error(install.stderr);
 | 
			
		||||
    process.exit(1);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  console.log('✅  Success');
 | 
			
		||||
  console.log('');
 | 
			
		||||
} catch (e) {
 | 
			
		||||
  if (e.code === 'ENOENT') {
 | 
			
		||||
    console.log('✅  Success');
 | 
			
		||||
    console.log('');
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  console.log(e);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
try {
 | 
			
		||||
  // Check if path is existing.
 | 
			
		||||
  fs.accessSync(pluginsDirPath, fs.constants.R_OK | fs.constants.W_OK);
 | 
			
		||||
 | 
			
		||||
  const plugins = fs.readdirSync(pluginsDirPath).filter(x => x[0] !== '.');
 | 
			
		||||
 | 
			
		||||
  // Install dependencies for each plugins
 | 
			
		||||
  _.forEach(plugins, plugin => {
 | 
			
		||||
    const pluginPath = path.join(pluginsDirPath, plugin);
 | 
			
		||||
 | 
			
		||||
    console.log(`🔸  Plugin - ${_.upperFirst(plugin)}`);
 | 
			
		||||
    console.log('📦  Installing packages...');
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      shell.cd(pluginPath);
 | 
			
		||||
      const install = shell.exec(installCmd, {silent: true});
 | 
			
		||||
 | 
			
		||||
      if (install.stderr && install.code !== 0) {
 | 
			
		||||
        console.error(install.stderr);
 | 
			
		||||
        process.exit(1);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      console.log('✅  Success');
 | 
			
		||||
      console.log('');
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
      console.log(err);
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
} catch (e) {
 | 
			
		||||
  if (e.code === 'ENOENT') {
 | 
			
		||||
    console.log('✅  Success');
 | 
			
		||||
    console.log('');
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  console.log(e);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										289
									
								
								yarn.lock
									
									
									
									
									
								
							
							
						
						
									
										289
									
								
								yarn.lock
									
									
									
									
									
								
							@ -14,13 +14,6 @@
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.6.tgz#022209e28a2b547dcde15b219f0c50f47aa5beb3"
 | 
			
		||||
  integrity sha512-lqK94b+caNtmKFs5oUVXlSpN3sm5IXZ+KfhMxOtr0LR2SqErzkoJilitjDvJ1WbjHlxLI7WtCjRmOLdOGJqtMQ==
 | 
			
		||||
 | 
			
		||||
"@babel/code-frame@7.0.0-beta.44":
 | 
			
		||||
  version "7.0.0-beta.44"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9"
 | 
			
		||||
  integrity sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/highlight" "7.0.0-beta.44"
 | 
			
		||||
 | 
			
		||||
"@babel/code-frame@^7.0.0":
 | 
			
		||||
  version "7.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
 | 
			
		||||
@ -48,17 +41,6 @@
 | 
			
		||||
    semver "^5.4.1"
 | 
			
		||||
    source-map "^0.5.0"
 | 
			
		||||
 | 
			
		||||
"@babel/generator@7.0.0-beta.44":
 | 
			
		||||
  version "7.0.0-beta.44"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42"
 | 
			
		||||
  integrity sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/types" "7.0.0-beta.44"
 | 
			
		||||
    jsesc "^2.5.1"
 | 
			
		||||
    lodash "^4.2.0"
 | 
			
		||||
    source-map "^0.5.0"
 | 
			
		||||
    trim-right "^1.0.1"
 | 
			
		||||
 | 
			
		||||
"@babel/generator@^7.0.0", "@babel/generator@^7.4.0":
 | 
			
		||||
  version "7.4.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.0.tgz#c230e79589ae7a729fd4631b9ded4dc220418196"
 | 
			
		||||
@ -131,15 +113,6 @@
 | 
			
		||||
    "@babel/traverse" "^7.1.0"
 | 
			
		||||
    "@babel/types" "^7.0.0"
 | 
			
		||||
 | 
			
		||||
"@babel/helper-function-name@7.0.0-beta.44":
 | 
			
		||||
  version "7.0.0-beta.44"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd"
 | 
			
		||||
  integrity sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-get-function-arity" "7.0.0-beta.44"
 | 
			
		||||
    "@babel/template" "7.0.0-beta.44"
 | 
			
		||||
    "@babel/types" "7.0.0-beta.44"
 | 
			
		||||
 | 
			
		||||
"@babel/helper-function-name@^7.1.0":
 | 
			
		||||
  version "7.1.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53"
 | 
			
		||||
@ -149,13 +122,6 @@
 | 
			
		||||
    "@babel/template" "^7.1.0"
 | 
			
		||||
    "@babel/types" "^7.0.0"
 | 
			
		||||
 | 
			
		||||
"@babel/helper-get-function-arity@7.0.0-beta.44":
 | 
			
		||||
  version "7.0.0-beta.44"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15"
 | 
			
		||||
  integrity sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/types" "7.0.0-beta.44"
 | 
			
		||||
 | 
			
		||||
"@babel/helper-get-function-arity@^7.0.0":
 | 
			
		||||
  version "7.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
 | 
			
		||||
@ -244,13 +210,6 @@
 | 
			
		||||
    "@babel/template" "^7.1.0"
 | 
			
		||||
    "@babel/types" "^7.0.0"
 | 
			
		||||
 | 
			
		||||
"@babel/helper-split-export-declaration@7.0.0-beta.44":
 | 
			
		||||
  version "7.0.0-beta.44"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc"
 | 
			
		||||
  integrity sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/types" "7.0.0-beta.44"
 | 
			
		||||
 | 
			
		||||
"@babel/helper-split-export-declaration@^7.0.0", "@babel/helper-split-export-declaration@^7.4.0":
 | 
			
		||||
  version "7.4.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55"
 | 
			
		||||
@ -277,15 +236,6 @@
 | 
			
		||||
    "@babel/traverse" "^7.4.3"
 | 
			
		||||
    "@babel/types" "^7.4.0"
 | 
			
		||||
 | 
			
		||||
"@babel/highlight@7.0.0-beta.44":
 | 
			
		||||
  version "7.0.0-beta.44"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5"
 | 
			
		||||
  integrity sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    chalk "^2.0.0"
 | 
			
		||||
    esutils "^2.0.2"
 | 
			
		||||
    js-tokens "^3.0.0"
 | 
			
		||||
 | 
			
		||||
"@babel/highlight@^7.0.0":
 | 
			
		||||
  version "7.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
 | 
			
		||||
@ -757,16 +707,6 @@
 | 
			
		||||
  dependencies:
 | 
			
		||||
    regenerator-runtime "^0.13.2"
 | 
			
		||||
 | 
			
		||||
"@babel/template@7.0.0-beta.44":
 | 
			
		||||
  version "7.0.0-beta.44"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f"
 | 
			
		||||
  integrity sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/code-frame" "7.0.0-beta.44"
 | 
			
		||||
    "@babel/types" "7.0.0-beta.44"
 | 
			
		||||
    babylon "7.0.0-beta.44"
 | 
			
		||||
    lodash "^4.2.0"
 | 
			
		||||
 | 
			
		||||
"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.2.2", "@babel/template@^7.4.0":
 | 
			
		||||
  version "7.4.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.0.tgz#12474e9c077bae585c5d835a95c0b0b790c25c8b"
 | 
			
		||||
@ -776,22 +716,6 @@
 | 
			
		||||
    "@babel/parser" "^7.4.0"
 | 
			
		||||
    "@babel/types" "^7.4.0"
 | 
			
		||||
 | 
			
		||||
"@babel/traverse@7.0.0-beta.44":
 | 
			
		||||
  version "7.0.0-beta.44"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966"
 | 
			
		||||
  integrity sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/code-frame" "7.0.0-beta.44"
 | 
			
		||||
    "@babel/generator" "7.0.0-beta.44"
 | 
			
		||||
    "@babel/helper-function-name" "7.0.0-beta.44"
 | 
			
		||||
    "@babel/helper-split-export-declaration" "7.0.0-beta.44"
 | 
			
		||||
    "@babel/types" "7.0.0-beta.44"
 | 
			
		||||
    babylon "7.0.0-beta.44"
 | 
			
		||||
    debug "^3.1.0"
 | 
			
		||||
    globals "^11.1.0"
 | 
			
		||||
    invariant "^2.2.0"
 | 
			
		||||
    lodash "^4.2.0"
 | 
			
		||||
 | 
			
		||||
"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.0", "@babel/traverse@^7.4.3":
 | 
			
		||||
  version "7.4.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.3.tgz#1a01f078fc575d589ff30c0f71bf3c3d9ccbad84"
 | 
			
		||||
@ -807,15 +731,6 @@
 | 
			
		||||
    globals "^11.1.0"
 | 
			
		||||
    lodash "^4.17.11"
 | 
			
		||||
 | 
			
		||||
"@babel/types@7.0.0-beta.44":
 | 
			
		||||
  version "7.0.0-beta.44"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757"
 | 
			
		||||
  integrity sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    esutils "^2.0.2"
 | 
			
		||||
    lodash "^4.2.0"
 | 
			
		||||
    to-fast-properties "^2.0.0"
 | 
			
		||||
 | 
			
		||||
"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.4.0":
 | 
			
		||||
  version "7.4.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c"
 | 
			
		||||
@ -2747,14 +2662,6 @@ argparse@^1.0.7:
 | 
			
		||||
  dependencies:
 | 
			
		||||
    sprintf-js "~1.0.2"
 | 
			
		||||
 | 
			
		||||
aria-query@^3.0.0:
 | 
			
		||||
  version "3.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc"
 | 
			
		||||
  integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=
 | 
			
		||||
  dependencies:
 | 
			
		||||
    ast-types-flow "0.0.7"
 | 
			
		||||
    commander "^2.11.0"
 | 
			
		||||
 | 
			
		||||
arr-diff@^4.0.0:
 | 
			
		||||
  version "4.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
 | 
			
		||||
@ -2795,11 +2702,6 @@ array-find-index@^1.0.1:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
 | 
			
		||||
  integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
 | 
			
		||||
 | 
			
		||||
array-find@^1.0.0:
 | 
			
		||||
  version "1.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8"
 | 
			
		||||
  integrity sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=
 | 
			
		||||
 | 
			
		||||
array-ify@^1.0.0:
 | 
			
		||||
  version "1.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
 | 
			
		||||
@ -2938,11 +2840,6 @@ assign-symbols@^1.0.0:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
 | 
			
		||||
  integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
 | 
			
		||||
 | 
			
		||||
ast-types-flow@0.0.7, ast-types-flow@^0.0.7:
 | 
			
		||||
  version "0.0.7"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
 | 
			
		||||
  integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
 | 
			
		||||
 | 
			
		||||
ast-types@0.9.6:
 | 
			
		||||
  version "0.9.6"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9"
 | 
			
		||||
@ -3071,13 +2968,6 @@ aws4@^1.6.0, aws4@^1.8.0:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
 | 
			
		||||
  integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
 | 
			
		||||
 | 
			
		||||
axobject-query@^2.0.2:
 | 
			
		||||
  version "2.0.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9"
 | 
			
		||||
  integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    ast-types-flow "0.0.7"
 | 
			
		||||
 | 
			
		||||
babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
 | 
			
		||||
  version "6.26.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
 | 
			
		||||
@ -3097,18 +2987,6 @@ babel-eslint@^7.1.1:
 | 
			
		||||
    babel-types "^6.23.0"
 | 
			
		||||
    babylon "^6.17.0"
 | 
			
		||||
 | 
			
		||||
babel-eslint@^8.2.3:
 | 
			
		||||
  version "8.2.6"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9"
 | 
			
		||||
  integrity sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/code-frame" "7.0.0-beta.44"
 | 
			
		||||
    "@babel/traverse" "7.0.0-beta.44"
 | 
			
		||||
    "@babel/types" "7.0.0-beta.44"
 | 
			
		||||
    babylon "7.0.0-beta.44"
 | 
			
		||||
    eslint-scope "3.7.1"
 | 
			
		||||
    eslint-visitor-keys "^1.0.0"
 | 
			
		||||
 | 
			
		||||
babel-jest@^24.7.1:
 | 
			
		||||
  version "24.7.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.7.1.tgz#73902c9ff15a7dfbdc9994b0b17fcefd96042178"
 | 
			
		||||
@ -3211,11 +3089,6 @@ babel-types@^6.23.0, babel-types@^6.26.0:
 | 
			
		||||
    lodash "^4.17.4"
 | 
			
		||||
    to-fast-properties "^1.0.3"
 | 
			
		||||
 | 
			
		||||
babylon@7.0.0-beta.44:
 | 
			
		||||
  version "7.0.0-beta.44"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d"
 | 
			
		||||
  integrity sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==
 | 
			
		||||
 | 
			
		||||
babylon@^6.17.0, babylon@^6.18.0:
 | 
			
		||||
  version "6.18.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
 | 
			
		||||
@ -4901,11 +4774,6 @@ crypto-random-string@^1.0.0:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
 | 
			
		||||
  integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
 | 
			
		||||
 | 
			
		||||
crypto@^1.0.1:
 | 
			
		||||
  version "1.0.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037"
 | 
			
		||||
  integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==
 | 
			
		||||
 | 
			
		||||
css-blank-pseudo@^0.1.4:
 | 
			
		||||
  version "0.1.4"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5"
 | 
			
		||||
@ -5229,11 +5097,6 @@ cypress@3.1.2:
 | 
			
		||||
    url "0.11.0"
 | 
			
		||||
    yauzl "2.8.0"
 | 
			
		||||
 | 
			
		||||
damerau-levenshtein@^1.0.4:
 | 
			
		||||
  version "1.0.4"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514"
 | 
			
		||||
  integrity sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=
 | 
			
		||||
 | 
			
		||||
dargs@^4.0.1:
 | 
			
		||||
  version "4.1.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17"
 | 
			
		||||
@ -5877,7 +5740,7 @@ email-validator@^2.0.4:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/email-validator/-/email-validator-2.0.4.tgz#b8dfaa5d0dae28f1b03c95881d904d4e40bfe7ed"
 | 
			
		||||
  integrity sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==
 | 
			
		||||
 | 
			
		||||
emoji-regex@^7.0.1, emoji-regex@^7.0.2:
 | 
			
		||||
emoji-regex@^7.0.1:
 | 
			
		||||
  version "7.0.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
 | 
			
		||||
  integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
 | 
			
		||||
@ -5910,15 +5773,6 @@ enhanced-resolve@^4.1.0:
 | 
			
		||||
    memory-fs "^0.4.0"
 | 
			
		||||
    tapable "^1.0.0"
 | 
			
		||||
 | 
			
		||||
enhanced-resolve@~0.9.0:
 | 
			
		||||
  version "0.9.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e"
 | 
			
		||||
  integrity sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=
 | 
			
		||||
  dependencies:
 | 
			
		||||
    graceful-fs "^4.1.2"
 | 
			
		||||
    memory-fs "^0.2.0"
 | 
			
		||||
    tapable "^0.1.8"
 | 
			
		||||
 | 
			
		||||
entities@^1.1.1, entities@~1.1.1:
 | 
			
		||||
  version "1.1.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
 | 
			
		||||
@ -6097,13 +5951,6 @@ eslint-config-airbnb-base@^10.0.0:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-10.0.1.tgz#f17d4e52992c1d45d1b7713efbcd5ecd0e7e0506"
 | 
			
		||||
  integrity sha1-8X1OUpksHUXRt3E++81ezQ5+BQY=
 | 
			
		||||
 | 
			
		||||
eslint-config-airbnb-base@^12.1.0:
 | 
			
		||||
  version "12.1.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944"
 | 
			
		||||
  integrity sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    eslint-restricted-globals "^0.1.1"
 | 
			
		||||
 | 
			
		||||
eslint-config-airbnb@^13.0.0:
 | 
			
		||||
  version "13.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-13.0.0.tgz#688d15d3c276c0c753ae538c92a44397d76ae46e"
 | 
			
		||||
@ -6111,20 +5958,6 @@ eslint-config-airbnb@^13.0.0:
 | 
			
		||||
  dependencies:
 | 
			
		||||
    eslint-config-airbnb-base "^10.0.0"
 | 
			
		||||
 | 
			
		||||
eslint-config-airbnb@^16.1.0:
 | 
			
		||||
  version "16.1.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz#2546bfb02cc9fe92284bf1723ccf2e87bc45ca46"
 | 
			
		||||
  integrity sha512-zLyOhVWhzB/jwbz7IPSbkUuj7X2ox4PHXTcZkEmDqTvd0baJmJyuxlFPDlZOE/Y5bC+HQRaEkT3FoHo9wIdRiw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    eslint-config-airbnb-base "^12.1.0"
 | 
			
		||||
 | 
			
		||||
eslint-config-prettier@^2.9.0:
 | 
			
		||||
  version "2.10.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.10.0.tgz#ec07bc1d01f87d09f61d3840d112dc8a9791e30b"
 | 
			
		||||
  integrity sha512-Mhl90VLucfBuhmcWBgbUNtgBiK955iCDK1+aHAz7QfDQF6wuzWZ6JjihZ3ejJoGlJWIuko7xLqNm8BA5uenKhA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    get-stdin "^5.0.1"
 | 
			
		||||
 | 
			
		||||
eslint-import-resolver-node@^0.3.2:
 | 
			
		||||
  version "0.3.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
 | 
			
		||||
@ -6133,23 +5966,6 @@ eslint-import-resolver-node@^0.3.2:
 | 
			
		||||
    debug "^2.6.9"
 | 
			
		||||
    resolve "^1.5.0"
 | 
			
		||||
 | 
			
		||||
eslint-import-resolver-webpack@^0.9.0:
 | 
			
		||||
  version "0.9.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.9.0.tgz#231ce1578ad5124da5799f029bd33d28137623e3"
 | 
			
		||||
  integrity sha1-IxzhV4rVEk2leZ8Cm9M9KBN2I+M=
 | 
			
		||||
  dependencies:
 | 
			
		||||
    array-find "^1.0.0"
 | 
			
		||||
    debug "^2.6.8"
 | 
			
		||||
    enhanced-resolve "~0.9.0"
 | 
			
		||||
    find-root "^1.1.0"
 | 
			
		||||
    has "^1.0.1"
 | 
			
		||||
    interpret "^1.0.0"
 | 
			
		||||
    is-absolute "^0.2.3"
 | 
			
		||||
    lodash.get "^4.4.2"
 | 
			
		||||
    node-libs-browser "^1.0.0 || ^2.0.0"
 | 
			
		||||
    resolve "^1.4.0"
 | 
			
		||||
    semver "^5.3.0"
 | 
			
		||||
 | 
			
		||||
eslint-module-utils@^2.4.0:
 | 
			
		||||
  version "2.4.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz#8b93499e9b00eab80ccb6614e69f03678e84e09a"
 | 
			
		||||
@ -6175,20 +5991,6 @@ eslint-plugin-import@^2.11.0:
 | 
			
		||||
    read-pkg-up "^2.0.0"
 | 
			
		||||
    resolve "^1.10.0"
 | 
			
		||||
 | 
			
		||||
eslint-plugin-jsx-a11y@^6.0.3:
 | 
			
		||||
  version "6.2.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz#4ebba9f339b600ff415ae4166e3e2e008831cf0c"
 | 
			
		||||
  integrity sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    aria-query "^3.0.0"
 | 
			
		||||
    array-includes "^3.0.3"
 | 
			
		||||
    ast-types-flow "^0.0.7"
 | 
			
		||||
    axobject-query "^2.0.2"
 | 
			
		||||
    damerau-levenshtein "^1.0.4"
 | 
			
		||||
    emoji-regex "^7.0.2"
 | 
			
		||||
    has "^1.0.3"
 | 
			
		||||
    jsx-ast-utils "^2.0.1"
 | 
			
		||||
 | 
			
		||||
eslint-plugin-react@^7.7.0:
 | 
			
		||||
  version "7.12.4"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz#b1ecf26479d61aee650da612e425c53a99f48c8c"
 | 
			
		||||
@ -6202,24 +6004,6 @@ eslint-plugin-react@^7.7.0:
 | 
			
		||||
    prop-types "^15.6.2"
 | 
			
		||||
    resolve "^1.9.0"
 | 
			
		||||
 | 
			
		||||
eslint-plugin-redux-saga@^0.8.0:
 | 
			
		||||
  version "0.8.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-plugin-redux-saga/-/eslint-plugin-redux-saga-0.8.0.tgz#0c9d6b44183ded4b7bb470cdfad30244afbb1485"
 | 
			
		||||
  integrity sha512-SXIk5Z5ggPa1618h67EKPFDP6L2/FiF9wQFZ0b9vfRlLECOVupWqoj4N9LUegBjhPgqjnHJKi9ZyXE9/vFWOjA==
 | 
			
		||||
 | 
			
		||||
eslint-restricted-globals@^0.1.1:
 | 
			
		||||
  version "0.1.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7"
 | 
			
		||||
  integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=
 | 
			
		||||
 | 
			
		||||
eslint-scope@3.7.1:
 | 
			
		||||
  version "3.7.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
 | 
			
		||||
  integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=
 | 
			
		||||
  dependencies:
 | 
			
		||||
    esrecurse "^4.1.0"
 | 
			
		||||
    estraverse "^4.1.1"
 | 
			
		||||
 | 
			
		||||
eslint-scope@^3.7.1:
 | 
			
		||||
  version "3.7.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535"
 | 
			
		||||
@ -6803,7 +6587,7 @@ find-cache-dir@^2.0.0:
 | 
			
		||||
    make-dir "^2.0.0"
 | 
			
		||||
    pkg-dir "^3.0.0"
 | 
			
		||||
 | 
			
		||||
find-root@^1.0.0, find-root@^1.1.0:
 | 
			
		||||
find-root@^1.0.0:
 | 
			
		||||
  version "1.1.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
 | 
			
		||||
  integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
 | 
			
		||||
@ -7195,11 +6979,6 @@ get-stdin@^4.0.1:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
 | 
			
		||||
  integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
 | 
			
		||||
 | 
			
		||||
get-stdin@^5.0.1:
 | 
			
		||||
  version "5.0.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
 | 
			
		||||
  integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=
 | 
			
		||||
 | 
			
		||||
get-stream@3.0.0, get-stream@^3.0.0:
 | 
			
		||||
  version "3.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
 | 
			
		||||
@ -8457,7 +8236,7 @@ into-stream@^3.1.0:
 | 
			
		||||
    from2 "^2.1.1"
 | 
			
		||||
    p-is-promise "^1.1.0"
 | 
			
		||||
 | 
			
		||||
invariant@^2.1.0, invariant@^2.1.1, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4:
 | 
			
		||||
invariant@^2.1.0, invariant@^2.1.1, invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4:
 | 
			
		||||
  version "2.2.4"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
 | 
			
		||||
  integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
 | 
			
		||||
@ -8518,14 +8297,6 @@ is-absolute-url@^2.0.0:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
 | 
			
		||||
  integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
 | 
			
		||||
 | 
			
		||||
is-absolute@^0.2.3:
 | 
			
		||||
  version "0.2.6"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb"
 | 
			
		||||
  integrity sha1-IN5p89uULvLYe5wto28XIjWxtes=
 | 
			
		||||
  dependencies:
 | 
			
		||||
    is-relative "^0.2.1"
 | 
			
		||||
    is-windows "^0.2.0"
 | 
			
		||||
 | 
			
		||||
is-absolute@^1.0.0:
 | 
			
		||||
  version "1.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576"
 | 
			
		||||
@ -8870,13 +8641,6 @@ is-regex@^1.0.4:
 | 
			
		||||
  dependencies:
 | 
			
		||||
    has "^1.0.1"
 | 
			
		||||
 | 
			
		||||
is-relative@^0.2.1:
 | 
			
		||||
  version "0.2.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5"
 | 
			
		||||
  integrity sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=
 | 
			
		||||
  dependencies:
 | 
			
		||||
    is-unc-path "^0.1.1"
 | 
			
		||||
 | 
			
		||||
is-relative@^1.0.0:
 | 
			
		||||
  version "1.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"
 | 
			
		||||
@ -8951,13 +8715,6 @@ is-typedarray@~1.0.0:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
 | 
			
		||||
  integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
 | 
			
		||||
 | 
			
		||||
is-unc-path@^0.1.1:
 | 
			
		||||
  version "0.1.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9"
 | 
			
		||||
  integrity sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=
 | 
			
		||||
  dependencies:
 | 
			
		||||
    unc-path-regex "^0.1.0"
 | 
			
		||||
 | 
			
		||||
is-unc-path@^1.0.0:
 | 
			
		||||
  version "1.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d"
 | 
			
		||||
@ -8975,11 +8732,6 @@ is-whitespace@^0.3.0:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f"
 | 
			
		||||
  integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38=
 | 
			
		||||
 | 
			
		||||
is-windows@^0.2.0:
 | 
			
		||||
  version "0.2.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c"
 | 
			
		||||
  integrity sha1-3hqm1j6indJIc3tp8f+LgALSEIw=
 | 
			
		||||
 | 
			
		||||
is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2:
 | 
			
		||||
  version "1.0.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
 | 
			
		||||
@ -9568,16 +9320,16 @@ js-levenshtein@^1.1.3:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"
 | 
			
		||||
  integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==
 | 
			
		||||
 | 
			
		||||
js-tokens@^3.0.0, js-tokens@^3.0.2:
 | 
			
		||||
  version "3.0.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
 | 
			
		||||
  integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
 | 
			
		||||
 | 
			
		||||
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
 | 
			
		||||
  version "4.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
 | 
			
		||||
  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
 | 
			
		||||
 | 
			
		||||
js-tokens@^3.0.2:
 | 
			
		||||
  version "3.0.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
 | 
			
		||||
  integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
 | 
			
		||||
 | 
			
		||||
js-yaml@3.x, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.9.0, js-yaml@^3.9.1:
 | 
			
		||||
  version "3.13.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
 | 
			
		||||
@ -10640,7 +10392,7 @@ lodash@4.17.4:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
 | 
			
		||||
  integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=
 | 
			
		||||
 | 
			
		||||
lodash@^4, lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@~4.17.10:
 | 
			
		||||
lodash@^4, lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@~4.17.10:
 | 
			
		||||
  version "4.17.11"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
 | 
			
		||||
  integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
 | 
			
		||||
@ -10924,11 +10676,6 @@ memoize-one@^5.0.0:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.0.4.tgz#005928aced5c43d890a4dfab18ca908b0ec92cbc"
 | 
			
		||||
  integrity sha512-P0z5IeAH6qHHGkJIXWw0xC2HNEgkx/9uWWBQw64FJj3/ol14VYdfVGWWr0fXfjhhv3TKVIqUq65os6O4GUNksA==
 | 
			
		||||
 | 
			
		||||
memory-fs@^0.2.0:
 | 
			
		||||
  version "0.2.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290"
 | 
			
		||||
  integrity sha1-8rslNovBIeORwlIN6Slpyu4KApA=
 | 
			
		||||
 | 
			
		||||
memory-fs@^0.4.0, memory-fs@~0.4.1:
 | 
			
		||||
  version "0.4.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
 | 
			
		||||
@ -11535,7 +11282,7 @@ node-int64@^0.4.0:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
 | 
			
		||||
  integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
 | 
			
		||||
 | 
			
		||||
"node-libs-browser@^1.0.0 || ^2.0.0", node-libs-browser@^2.0.0:
 | 
			
		||||
node-libs-browser@^2.0.0:
 | 
			
		||||
  version "2.2.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77"
 | 
			
		||||
  integrity sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==
 | 
			
		||||
@ -13661,11 +13408,6 @@ prepend-http@^2.0.0:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
 | 
			
		||||
  integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
 | 
			
		||||
 | 
			
		||||
prettier@^1.12.1:
 | 
			
		||||
  version "1.17.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.0.tgz#53b303676eed22cc14a9f0cec09b477b3026c008"
 | 
			
		||||
  integrity sha512-sXe5lSt2WQlCbydGETgfm1YBShgOX4HxQkFPvbxkcwgDvGDeqVau8h+12+lmSVlP3rHPz0oavfddSZg/q+Szjw==
 | 
			
		||||
 | 
			
		||||
pretty-error@^2.0.2:
 | 
			
		||||
  version "2.1.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
 | 
			
		||||
@ -14971,7 +14713,7 @@ resolve@1.1.7, resolve@1.1.x:
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
 | 
			
		||||
  integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
 | 
			
		||||
 | 
			
		||||
resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1, resolve@^1.9.0:
 | 
			
		||||
resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1, resolve@^1.9.0:
 | 
			
		||||
  version "1.10.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18"
 | 
			
		||||
  integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==
 | 
			
		||||
@ -16530,11 +16272,6 @@ table@4.0.2:
 | 
			
		||||
    slice-ansi "1.0.0"
 | 
			
		||||
    string-width "^2.1.1"
 | 
			
		||||
 | 
			
		||||
tapable@^0.1.8:
 | 
			
		||||
  version "0.1.10"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
 | 
			
		||||
  integrity sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=
 | 
			
		||||
 | 
			
		||||
tapable@^1.0.0, tapable@^1.1.0:
 | 
			
		||||
  version "1.1.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
 | 
			
		||||
@ -17081,7 +16818,7 @@ unbzip2-stream@^1.0.9:
 | 
			
		||||
    buffer "^5.2.1"
 | 
			
		||||
    through "^2.3.8"
 | 
			
		||||
 | 
			
		||||
unc-path-regex@^0.1.0, unc-path-regex@^0.1.2:
 | 
			
		||||
unc-path-regex@^0.1.2:
 | 
			
		||||
  version "0.1.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
 | 
			
		||||
  integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo=
 | 
			
		||||
@ -17457,7 +17194,7 @@ webpack-sources@^1.1.0, webpack-sources@^1.3.0:
 | 
			
		||||
    source-list-map "^2.0.0"
 | 
			
		||||
    source-map "~0.6.1"
 | 
			
		||||
 | 
			
		||||
webpack@^4.29.6, webpack@^4.6.0:
 | 
			
		||||
webpack@^4.29.6:
 | 
			
		||||
  version "4.30.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.30.0.tgz#aca76ef75630a22c49fcc235b39b4c57591d33a9"
 | 
			
		||||
  integrity sha512-4hgvO2YbAFUhyTdlR4FNyt2+YaYBYHavyzjCMbZzgglo02rlKi/pcsEzwCuCpsn1ryzIl1cq/u8ArIKu8JBYMg==
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user