Skip to content

Commit f1b2b2d

Browse files
committed
feat: resolve package repository from registry
1 parent 1e21b85 commit f1b2b2d

File tree

3 files changed

+72
-4
lines changed

3 files changed

+72
-4
lines changed

lib/loader.js

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
const Fs = require('fs');
44
const GitUrlParse = require('git-url-parse');
5+
const Package = require('../package.json');
6+
const Pacote = require('pacote');
57
const Path = require('path');
68
const Wreck = require('@hapi/wreck');
79

@@ -10,6 +12,17 @@ const Utils = require('./utils');
1012
const internals = {};
1113

1214

15+
internals.createPackageLoader = async (packageName) => {
16+
17+
const packument = await Pacote.packument(packageName + '@latest', {
18+
'fullMetadata': true,
19+
'user-agent': `${Package.name}@${Package.version}, see ${Package.homepage}`
20+
});
21+
22+
return internals.createRepositoryLoader(packument.repository.url);
23+
};
24+
25+
1326
internals.createRepositoryLoader = (repository) => {
1427

1528
const parsedRepository = GitUrlParse(repository);
@@ -68,9 +81,15 @@ internals.createPathLoader = async (path) => {
6881
};
6982

7083

71-
exports.create = ({ path, repository }) => {
84+
exports.create = ({ path, repository, packageName }) => {
85+
86+
if (repository) {
87+
return internals.createRepositoryLoader(repository);
88+
}
89+
90+
if (packageName) {
91+
return internals.createPackageLoader(packageName);
92+
}
7293

73-
return repository
74-
? internals.createRepositoryLoader(repository)
75-
: internals.createPathLoader(path);
94+
return internals.createPathLoader(path);
7695
};

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
"@hapi/wreck": "^16.0.1",
3333
"git-url-parse": "^11.1.2",
3434
"js-yaml": "^3.13.1",
35+
"pacote": "^10.3.1",
3536
"simple-git": "^1.131.0"
3637
}
3738
}

test/index.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,5 +400,53 @@ describe('node-support', () => {
400400
.to.reject('Only github.com paths supported, feel free to PR at https://github.com/pkgjs/node-support');
401401
});
402402
});
403+
404+
describe('packageName', () => {
405+
406+
beforeEach(() => {
407+
408+
if (!Nock.isActive()) {
409+
Nock.activate();
410+
}
411+
});
412+
413+
afterEach(() => {
414+
415+
Nock.restore();
416+
Nock.cleanAll();
417+
});
418+
419+
it('returns node versions from `.travis.yml` in the package repository', async () => {
420+
421+
listRemoteStub
422+
.returns('9cef39d21ad229dea4b10295f55b0d9a83800b23\tHEAD\n');
423+
424+
Nock('https://raw.githubusercontent.com')
425+
.get('/pkgjs/node-support/HEAD/package.json')
426+
.reply(200, Fs.readFileSync(Path.join(__dirname, '..', 'package.json')))
427+
.get('/pkgjs/node-support/HEAD/.travis.yml')
428+
.reply(200, Fs.readFileSync(Path.join(__dirname, '..', '.travis.yml')));
429+
430+
Nock('https://registry.npmjs.org')
431+
.get('/node-support')
432+
.reply(200, Fs.readFileSync(Path.join(__dirname, '..', 'package.json')));
433+
434+
const result = await NodeSupport.detect({ packageName: 'node-support' });
435+
436+
expect(listRemoteStub.callCount).to.equal(1);
437+
expect(listRemoteStub.args[0]).to.equal([['http://github.com/pkgjs/node-support.git', 'HEAD']]);
438+
439+
expect(result).to.equal({
440+
name: 'node-support',
441+
version: '0.0.0-development',
442+
commit: '9cef39d21ad229dea4b10295f55b0d9a83800b23',
443+
timestamp: 1580673602000,
444+
travis: {
445+
raw: ['10', '12', '13']
446+
},
447+
engines: '>=10'
448+
});
449+
});
450+
});
403451
});
404452
});

0 commit comments

Comments
 (0)