%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/3/cwd/usr/local/lib/node_modules/babel-upgrade/src/
Upload File :
Create Path :
Current File : //proc/3/cwd/usr/local/lib/node_modules/babel-upgrade/src/index.js

const path = require('path');
const readPkgUp = require('read-pkg-up');
const sortKeys = require('sort-keys');
const fs = require('fs');
const pify = require('pify');
const JSON5 = require('json5');
const writeJsonFile = require('write-json-file');
const semver = require('semver');
const writeFile = require('write');
const crossSpawn = require('cross-spawn');
const hasYarn = require('has-yarn');
const { packages } = require('./packageData');
const diff = require('diff');
const upgradeDeps = require('./upgradeDeps');
const upgradeConfig = require('./upgradeConfig');

function isAcceptedNodeVersion() {
  return semver.satisfies(process.version, '>= 4');
}

function getLatestVersion() {
  return "^7.0.0";
}

function replaceMocha(str) {
  return str
    .replace(/--compilers\s+js:babel-core\/register/, '--compilers js:@babel/register')
    .replace(/--compilers\s+js:babel-register/, '--compilers js:@babel/register')
    .replace(/--require\s+babel-register/, '--require @babel/register')
    .replace(/--require\s+babel-polyfill/, '--require @babel/polyfill');
}

function upgradeScripts(scripts) {
  for (const script of Object.keys(scripts)) {
    scripts[script] = replaceMocha(scripts[script]);
  }
  return scripts;
}

async function updatePackageJSON(pkg, options = {}) {
  if (process.env.NODE_ENV !== 'test') {
    console.log("Updating closest package.json dependencies");
  }

  if (!pkg) {
    console.log("package.json not found");
    process.exit(1);
  }

  if (pkg.scripts) {
    pkg.scripts = upgradeScripts(pkg.scripts);

    if (Object.values(pkg.scripts).some(s => s.includes('babel-node'))) {
      if (pkg.devDependencies) {
        pkg.devDependencies["@babel/node"] = getLatestVersion();
      }
    }
  }

  if (pkg.devDependencies) {
    pkg.devDependencies = sortKeys(upgradeDeps(
      pkg.devDependencies,
      getLatestVersion(),
      options,
    ));

    // Adds preset-flow if needed, especially since it was split out of
    // preset-react
    if (options.hasFlow && !pkg.devDependencies['@babel/preset-flow']) {
      pkg.devDependencies['@babel/preset-flow'] = getLatestVersion();
    }
  }

  if (pkg.dependencies) {
    pkg.dependencies = sortKeys(upgradeDeps(
      pkg.dependencies,
      getLatestVersion(),
      options,
    ));
  }

  // ava
  if (pkg.ava) {
    if (pkg.ava.require && Array.isArray(pkg.ava.require)) {
      pkg.ava.require = pkg.ava.require.map((p) => packages[p] || p);
    }

    if (pkg.ava.babel && pkg.ava.babel.testOptions) {
      pkg.ava.babel.testOptions = upgradeConfig(pkg.ava.babel.testOptions, options);
    }
  }

  return pkg;
}

function prettyPrint(json) {
  return JSON.stringify(json, null, 2);
}

function showPatch(filename, before, after) {
  console.log(
    diff.createPatch(
      filename,
      before,
      after,
      "Before Upgrade",
      "After Upgrade"
    )
  );
  console.log("");
}

async function writePackageJSON(options) {
  let { pkg, path } = await readPkgUp({ normalize: false });
  let oldPkg = prettyPrint(pkg);
  pkg = await updatePackageJSON(pkg, options);

  if (pkg.babel) {
    console.log("Updating package.json 'babel' config");
    pkg.babel = upgradeConfig(pkg.babel, options);
  }
  showPatch(path, oldPkg, prettyPrint(pkg));

  if (options.write) {
    await writeJsonFile(path, pkg, { detectIndent: true });
  }
}

async function installDeps() {
  const command = hasYarn() ? 'yarn' : 'npm';
  const args = ['install'];
  await pify(crossSpawn)(command, args, { stdio: 'inherit' });
}

async function readBabelRC(configPath) {
  try {
    const rawFile = (await pify(fs.readFile)(configPath)).toString('utf8');
    return JSON5.parse(rawFile);
  } catch (e) {
    throw new Error(`babel-upgrade: ${configPath} does not contain a valid .babelrc file. ${e.stack}`);
  }
}

async function writeBabelRC(configPath, options) {
  let json;

  try {
    json = await readBabelRC(configPath);
  } catch (e) { }

  if (json) {
    console.log(`Updating .babelrc config at ${configPath}`);
    let oldJson = prettyPrint(json);
    json = upgradeConfig(json, options);
    showPatch(configPath, oldJson, prettyPrint(json));

    if (options.write) {
      await writeJsonFile(configPath, json, { detectIndent: true });
    };
  }
}

async function writeMochaOpts(configPath, options) {
  let rawFile = (await pify(fs.readFile)(configPath)).toString('utf8');
  showPatch(configPath, rawFile, replaceMocha(rawFile));

  if (options.write) {
    await writeFile(configPath, replaceMocha(rawFile));
  }
}

module.exports = {
  isAcceptedNodeVersion,
  updatePackageJSON,
  writePackageJSON,
  readBabelRC,
  writeBabelRC,
  getLatestVersion,
  writeMochaOpts,
  installDeps,
};

Zerion Mini Shell 1.0