Skip to content

Commit b8f1f9d

Browse files
authored
update to use latest ncm2 api. closes #4 (#7)
* update to use latest ncm2 api. closes #4 * add .tree option This allows passing in an universal-module-tree, which is useful when you for example have the files already in memory and don't want it to look at the file system.
1 parent 17e9a80 commit b8f1f9d

2 files changed

Lines changed: 25 additions & 36 deletions

File tree

example.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const analyze = require('.')
55
const prefix = process.env.NS_ENV
66
? `${process.env.NS_ENV}.`
77
: ''
8-
const url = `https://${prefix}api.nodesource.com/ncm2/api/v1`
8+
const url = `https://${prefix}api.nodesource.com/ncm2/api/v2/graphql`
99

1010
const dir = process.argv[2] || __dirname
1111
const token = process.env.NCM_TOKEN

index.js

Lines changed: 24 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,16 @@ const universalModuleTree = require('universal-module-tree')
66

77
const analyze = async ({
88
dir,
9+
tree,
910
token,
1011
pageSize: pageSize = 50,
1112
concurrency: concurrency = 5,
1213
onPkgs: onPkgs = () => {},
1314
filter: filter = () => true,
1415
url
1516
}) => {
16-
const pkgs = filterPkgs(await readUniversalTree(dir), filter)
17+
if (!tree) tree = await readUniversalTree(dir)
18+
const pkgs = filterPkgs(tree, filter)
1719
onPkgs(pkgs)
1820
let data = new Set()
1921
const pages = splitSet(pkgs, pageSize)
@@ -49,46 +51,33 @@ const readUniversalTree = async dir => {
4951
}
5052

5153
const fetchData = async ({ pkgs, token, url }) => {
52-
const query = `{
53-
${[...pkgs].map((pkg, i) => `
54-
pkg${i}: package(name: "${pkg.name}") {
54+
const query = `
55+
query getPackageVersions($packageVersions: [PackageVersionInput!]!) {
56+
packageVersions(packageVersions: $packageVersions) {
5557
name
58+
version
5659
published
57-
versions(version: "${pkg.version}") {
58-
version
59-
score
60-
publishedAt
61-
results {
62-
severity
63-
pass
64-
name
65-
test
66-
value
67-
}
68-
vulnerabilities {
69-
id,
70-
title,
71-
semver {
72-
vulnerable
73-
},
74-
severity
75-
}
60+
publishedAt
61+
scores {
62+
group
63+
name
64+
pass
65+
severity
66+
title
67+
data
7668
}
7769
}
78-
`).join('\n')}
79-
}`
80-
const res = await graphql({ token, url }, query)
70+
}
71+
`
72+
73+
const variables = {
74+
packageVersions: [...pkgs].map(({ name, version }) => ({ name, version }))
75+
}
76+
77+
const res = await graphql({ token, url }, query, variables)
8178
const data = new Set()
82-
const values = Object.values(res)
83-
for (let i = 0; i < values.length; i++) {
84-
const pkg = values[i]
85-
const datum = pkg.versions[0]
86-
datum.name = pkg.name
87-
datum.published = pkg.published
79+
for (const [i, datum] of Object.entries(res.packageVersions)) {
8880
datum.paths = [...pkgs][i].paths
89-
for (const result of datum.results) {
90-
result.value = JSON.parse(result.value)
91-
}
9281
data.add(datum)
9382
}
9483
return data

0 commit comments

Comments
 (0)