New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

create-react-app

Package Overview
Dependencies
Maintainers
5
Versions
105
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

create-react-app - npm Package Compare versions

Comparing version 1.2.1 to 1.3.0

112

index.js

@@ -63,2 +63,5 @@ #!/usr/bin/env node

var dns = require('dns');
var tmp = require('tmp');
var unpack = require('tar-pack').unpack;
var hyperquest = require('hyperquest');

@@ -205,19 +208,30 @@ var projectName;

var packageToInstall = getInstallPackage(version);
var packageName = getPackageName(packageToInstall);
var allDependencies = ['react', 'react-dom', packageToInstall];
console.log('Installing packages. This might take a couple minutes.');
console.log(
'Installing ' + chalk.cyan('react') + ', ' + chalk.cyan('react-dom') +
', and ' + chalk.cyan(packageName) + '...'
);
console.log();
var useYarn = shouldUseYarn();
checkIfOnline(useYarn)
.then(function(isOnline) {
return install(useYarn, allDependencies, verbose, isOnline);
getPackageName(packageToInstall)
.then(function(packageName) {
return checkIfOnline(useYarn).then(function(isOnline) {
return {
isOnline: isOnline,
packageName: packageName,
};
});
})
.then(function() {
.then(function(info) {
var isOnline = info.isOnline;
var packageName = info.packageName;
console.log(
'Installing ' + chalk.cyan('react') + ', ' + chalk.cyan('react-dom') +
', and ' + chalk.cyan(packageName) + '...'
);
console.log();
return install(useYarn, allDependencies, verbose, isOnline).then(function() {
return packageName;
});
})
.then(function(packageName) {
checkNodeVersion(packageName);

@@ -245,2 +259,5 @@

console.log(' ' + chalk.cyan(reason.command), 'has failed.')
} else {
console.log(chalk.red('Unexpected error. Please report it as a bug:'));
console.log(reason);
}

@@ -288,8 +305,63 @@ console.log();

function getTemporaryDirectory() {
return new Promise(function(resolve, reject) {
// Unsafe cleanup lets us recursively delete the directory if it contains
// contents; by default it only allows removal if it's empty
tmp.dir({ unsafeCleanup: true }, function(err, tmpdir, callback) {
if (err) {
reject(err);
} else {
resolve({
tmpdir: tmpdir,
cleanup: function() {
try {
callback();
} catch (ignored) {
// Callback might throw and fail, since it's a temp directory the
// OS will clean it up eventually...
}
}
});
}
});
});
}
function extractStream(stream, dest) {
return new Promise(function(resolve, reject) {
stream.pipe(unpack(dest, function(err) {
if (err) {
reject(err);
} else {
resolve(dest);
}
}));
});
}
// Extract package name from tarball url or path.
function getPackageName(installPackage) {
if (installPackage.indexOf('.tgz') > -1) {
// The package name could be with or without semver version, e.g. react-scripts-0.2.0-alpha.1.tgz
// However, this function returns package name only without semver version.
return installPackage.match(/^.+\/(.+?)(?:-\d+.+)?\.tgz$/)[1];
return getTemporaryDirectory().then(function(obj) {
var stream;
if (/^http/.test(installPackage)) {
stream = hyperquest(installPackage);
} else {
stream = fs.createReadStream(installPackage);
}
return extractStream(stream, obj.tmpdir).then(function() {
return obj;
});
}).then(function(obj) {
var packageName = require(path.join(obj.tmpdir, 'package.json')).name;
obj.cleanup();
return packageName;
}).catch(function(err) {
// The package name could be with or without semver version, e.g. react-scripts-0.2.0-alpha.1.tgz
// However, this function returns package name only without semver version.
console.log('Could not extract the package name from the archive: ' + err.message);
var assumedProjectName = installPackage.match(/^.+\/(.+?)(?:-\d+.+)?\.tgz$/)[1];
console.log('Based on the filename, assuming it is "' + chalk.cyan(assumedProjectName) + '"');
return Promise.resolve(assumedProjectName);
});
} else if (installPackage.indexOf('git+') === 0) {

@@ -299,8 +371,8 @@ // Pull package name out of git urls e.g:

// git+ssh://github.com/mycompany/react-scripts.git#v1.2.3
return installPackage.match(/([^\/]+)\.git(#.*)?$/)[1];
return Promise.resolve(installPackage.match(/([^\/]+)\.git(#.*)?$/)[1]);
} else if (installPackage.indexOf('@') > 0) {
// Do not match @scope/ when stripping off @version or @tag
return installPackage.charAt(0) + installPackage.substr(1).split('@')[0];
return Promise.resolve(installPackage.charAt(0) + installPackage.substr(1).split('@')[0]);
}
return installPackage;
return Promise.resolve(installPackage);
}

@@ -361,3 +433,3 @@

}
// TODO: there should be a single place that holds the dependencies

@@ -455,3 +527,3 @@ var dependencies = ['react', 'react-dom'];

}
return new Promise(function(resolve) {

@@ -458,0 +530,0 @@ dns.resolve('registry.yarnpkg.com', function(err) {

5

package.json
{
"name": "create-react-app",
"version": "1.2.1",
"version": "1.3.0",
"keywords": [

@@ -27,5 +27,8 @@ "react"

"fs-extra": "^1.0.0",
"hyperquest": "^2.1.2",
"semver": "^5.0.3",
"tar-pack": "^3.4.0",
"tmp": "0.0.31",
"validate-npm-package-name": "^3.0.0"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc