-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
48 lines (38 loc) · 1 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
const pacote = require("pacote");
const { noop } = require("./utils");
const noopLogger = { log: noop, error: noop, warn: noop };
const carve = async (
packageList,
{ logger = noopLogger, ...pacoteOptions }
) => {
const packages = {};
const unresolvedPackages = [...packageList];
while (unresolvedPackages.length > 0) {
currentPackage = unresolvedPackages.pop();
try {
const {
dependencies,
_resolved: url,
name,
version
} = await pacote.manifest(currentPackage, pacoteOptions);
const id = `${name}@${version}`;
logger.log(id);
if (id in packages) {
continue;
}
packages[id] = url;
unresolvedPackages.push(
...Object.entries(dependencies || []).map(
([name, version]) => `${name}@${version}`
)
);
} catch (e) {
const msg = `Unable to resolve package ${currentPackage}`;
logger.error(msg);
throw e;
}
}
return packages;
};
module.exports = carve;