(installPackage)
| 681 | |
| 682 | // Extract package name from tarball url or path. |
| 683 | function 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 }); |
no test coverage detected