MCPcopy Create free account
hub / github.com/react/create-react-app / getPackageInfo

Function getPackageInfo

packages/create-react-app/createReactApp.js:683–741  ·  view source on GitHub ↗
(installPackage)

Source from the content-addressed store, hash-verified

681
682// Extract package name from tarball url or path.
683function getPackageInfo(installPackage) {
684 if (installPackage.match(/^.+\.(tgz|tar\.gz)$/)) {
685 return getTemporaryDirectory()
686 .then(obj => {
687 let stream;
688 if (/^http/.test(installPackage)) {
689 stream = hyperquest(installPackage);
690 } else {
691 stream = fs.createReadStream(installPackage);
692 }
693 return extractStream(stream, obj.tmpdir).then(() => obj);
694 })
695 .then(obj => {
696 const { name, version } = require(path.join(
697 obj.tmpdir,
698 'package.json'
699 ));
700 obj.cleanup();
701 return { name, version };
702 })
703 .catch(err => {
704 // The package name could be with or without semver version, e.g. react-scripts-0.2.0-alpha.1.tgz
705 // However, this function returns package name only without semver version.
706 console.log(
707 `Could not extract the package name from the archive: ${err.message}`
708 );
709 const assumedProjectName = installPackage.match(
710 /^.+\/(.+?)(?:-\d+.+)?\.(tgz|tar\.gz)$/
711 )[1];
712 console.log(
713 `Based on the filename, assuming it is "${chalk.cyan(
714 assumedProjectName
715 )}"`
716 );
717 return Promise.resolve({ name: assumedProjectName });
718 });
719 } else if (installPackage.startsWith('git+')) {
720 // Pull package name out of git urls e.g:
721 // git+https://github.com/mycompany/react-scripts.git
722 // git+ssh://github.com/mycompany/react-scripts.git#v1.2.3
723 return Promise.resolve({
724 name: installPackage.match(/([^/]+)\.git(#.*)?$/)[1],
725 });
726 } else if (installPackage.match(/.+@/)) {
727 // Do not match @scope/ when stripping off @version or @tag
728 return Promise.resolve({
729 name: installPackage.charAt(0) + installPackage.substr(1).split('@')[0],
730 version: installPackage.split('@')[1],
731 });
732 } else if (installPackage.match(/^file:/)) {
733 const installPackagePath = installPackage.match(/^file:(.*)?$/)[1];
734 const { name, version } = require(path.join(
735 installPackagePath,
736 'package.json'
737 ));
738 return Promise.resolve({ name, version });
739 }
740 return Promise.resolve({ name: installPackage });

Callers 1

runFunction · 0.85

Calls 3

getTemporaryDirectoryFunction · 0.85
extractStreamFunction · 0.85
testMethod · 0.80

Tested by

no test coverage detected