Skip to content

Commit

Permalink
fix: parse tarball url error
Browse files Browse the repository at this point in the history
  • Loading branch information
tianding.wk committed Jun 9, 2023
1 parent 68ada2a commit 44071be
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 4 deletions.
18 changes: 14 additions & 4 deletions packages/cli/lib/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,20 @@ async function shouldFuseSupport() {
}

function getPkgNameFromTarballUrl(tarballUrl) {
// /@scope/a/download/@scope/a-1.0.0.tgz -> [ '@scope/a', '/download/', '@scope/a-1.0.0.tgz' ]
// /@scope/a/-/a-1.0.0.tgz -> [ '@scope/a', '/-/', 'a-1.0.0.tgz' ]
const matches = new url.URL(tarballUrl).pathname.substring(1).split(/(\/\-\/|\/download\/)/);
return matches[0];
const pathname = new url.URL(tarballUrl).pathname.substring(1);
if (pathname.includes('@')) {
if (pathname.includes('/-/')) { // @scope/download/-/download-1.0.0.tgz
return pathname.substring(0, pathname.indexOf('/-/'));
}
// @scope/download/download/@scope/download-1.0.0.tgz
return pathname.substring(0, pathname.lastIndexOf('/download/@'));
}

if (pathname.includes('/-/')) { // download/-/download-1.0.0.tgz
return pathname.substring(0, pathname.indexOf('/-/'));
}
// download/download/download-1.0.0.tgz
return pathname.substring(0, pathname.lastIndexOf('/download/'));
}

function generatePackageId(name, version) {
Expand Down
12 changes: 12 additions & 0 deletions packages/cli/test/util.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -262,10 +262,18 @@ describe('test/cache/util.test.js', () => {
const name = getPkgNameFromTarballUrl('https://registry.npmjs.org/egg/download/egg-2.15.1.tgz');
assert.strictEqual(name, 'egg');
});
it('should parse successfully with old non-scoped tarball url including download', () => {
const name = getPkgNameFromTarballUrl('https://registry.npmjs.org/download/download/download-2.15.1.tgz');
assert.strictEqual(name, 'download');
});
it('should parse successfully with old scoped tarball url', () => {
const name = getPkgNameFromTarballUrl('https://registry.npmjs.org/@cnpmjs/errors/download/@cnpmjs/errors-2.15.1.tgz');
assert.strictEqual(name, '@cnpmjs/errors');
});
it('should parse successfully with old scoped tarball url including download', () => {
const name = getPkgNameFromTarballUrl('https://registry.npmjs.org/@cnpmjs/download/download/@cnpmjs/download-2.15.1.tgz');
assert.strictEqual(name, '@cnpmjs/download');
});
it('should parse successfully with new non-scoped tarball url', () => {
const name = getPkgNameFromTarballUrl('https://registry.npmjs.org/egg/-/egg-2.15.1.tgz');
assert.strictEqual(name, 'egg');
Expand All @@ -274,6 +282,10 @@ describe('test/cache/util.test.js', () => {
const name = getPkgNameFromTarballUrl('https://registry.npmjs.org/@cnpmjs/errors/-/errors-2.15.1.tgz');
assert.strictEqual(name, '@cnpmjs/errors');
});
it('should parse successfully with new scoped tarball url including download', () => {
const name = getPkgNameFromTarballUrl('https://registry.npmjs.org/@cnpmjs/download/-/download-2.15.1.tgz');
assert.strictEqual(name, '@cnpmjs/download');
});
});
});

Expand Down

0 comments on commit 44071be

Please sign in to comment.