Skip to content

Commit b189e34

Browse files
committed
feat: (wip) stub out dep detector
1 parent 0d0307e commit b189e34

File tree

3 files changed

+60
-25
lines changed

3 files changed

+60
-25
lines changed

lib/deps.js

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const Fs = require('fs');
55
const Path = require('path');
66
const Tempy = require('tempy');
77

8+
const Package = require('./package');
89

910
const internals = {};
1011

@@ -24,7 +25,10 @@ exports.resolve = async ({ packageJson, lockfile }) => {
2425

2526
const path = Tempy.directory();
2627
Fs.writeFileSync(Path.join(path, 'package.json'), JSON.stringify(packageJson, null, ' '));
27-
Fs.writeFileSync(Path.join(path, 'package-lock.json'), JSON.stringify(lockfile, null, ' '));
28+
29+
if (lockfile) {
30+
Fs.writeFileSync(Path.join(path, 'package-lock.json'), JSON.stringify(lockfile, null, ' '));
31+
}
2832

2933
const arborist = new Arborist({ path });
3034

@@ -50,3 +54,36 @@ exports.resolve = async ({ packageJson, lockfile }) => {
5054

5155
return result;
5256
};
57+
58+
internals.tryLoad = (loadFile, filename) => {
59+
60+
try {
61+
return loadFile(filename, { json: 'force' });
62+
}
63+
catch (err) {
64+
if (err.code !== 'ENOENT') {
65+
throw err;
66+
}
67+
}
68+
};
69+
70+
exports.detect = async ({ packageJson, loadFile }) => {
71+
72+
const lockfile = (await internals.tryLoad(loadFile, 'package-lock.json')) || (await internals.tryLoad(loadFile, 'npm-shrinkwrap.json'));
73+
74+
const versions = await exports.resolve({ packageJson, lockfile });
75+
76+
const support = [];
77+
78+
for (const packageName of Object.keys(versions)) {
79+
try {
80+
const { result } = await Package.detect({ packageName });
81+
support.push(result);
82+
}
83+
catch (err) {
84+
console.warn(`Failed to detect support for ${packageName}: ${err && err.message}`);
85+
}
86+
}
87+
88+
return { support, versions };
89+
};

lib/index.js

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,15 @@
11
'use strict';
22

3-
const Assert = require('assert');
4-
5-
const Engines = require('./engines');
3+
const Deps = require('./deps');
64
const Package = require('./package');
7-
const Travis = require('./travis');
85

96
exports.detect = async function (what, { deps } = {}) {
107

11-
Assert.ok(!deps, '`deps` support not implemented yet');
12-
13-
const packageInfo = await Package.detect(what);
14-
15-
const result = {};
16-
17-
result.name = packageInfo.name;
18-
result.version = packageInfo.version;
19-
result.commit = await packageInfo.getCommit();
20-
result.timestamp = Date.now();
21-
22-
const travis = await Travis.detect(packageInfo);
23-
const engines = await Engines.detect(packageInfo);
8+
const { result, meta } = await Package.detect(what);
249

25-
Object.assign(result, travis, engines);
10+
if (deps) {
11+
result.dependencies = await Deps.detect(meta);
12+
}
2613

2714
return result;
2815
};

lib/package.js

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
const Fs = require('fs');
44
const { URL } = require('url');
55

6+
const Engines = require('./engines');
67
const Loader = require('./loader');
8+
const Travis = require('./travis');
79

810

911
const internals = {};
@@ -45,14 +47,23 @@ exports.detect = async (what) => {
4547

4648
const packageJson = await loadFile('package.json', { json: 'force' });
4749

48-
const { name, version } = packageJson;
49-
50-
return {
51-
name,
52-
version,
50+
const meta = {
5351
packageJson,
54-
5552
getCommit,
5653
loadFile
5754
};
55+
56+
const result = {};
57+
58+
result.name = packageJson.name;
59+
result.version = packageJson.version;
60+
result.commit = await meta.getCommit();
61+
result.timestamp = Date.now();
62+
63+
const travis = await Travis.detect(meta);
64+
const engines = await Engines.detect(meta);
65+
66+
Object.assign(result, travis, engines);
67+
68+
return { result, meta };
5869
};

0 commit comments

Comments
 (0)