Skip to content

Commit 090c52d

Browse files
author
Guillaume Chau
committed
feat(ui): use 'yarn info' if possible to get package metadata instead of npm.org api (which is slower)
1 parent ceccfbf commit 090c52d

File tree

1 file changed

+34
-19
lines changed

1 file changed

+34
-19
lines changed

packages/@vue/cli-ui/apollo-server/connectors/dependencies.js

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const fs = require('fs')
22
const path = require('path')
33
const LRU = require('lru-cache')
44
const semver = require('semver')
5+
const execa = require('execa')
56
// Connectors
67
const cwd = require('./cwd')
78
const folders = require('./folders')
@@ -10,7 +11,7 @@ const logs = require('./logs')
1011
// Context
1112
const getContext = require('../context')
1213
// Utils
13-
const { isPlugin } = require('@vue/cli-shared-utils')
14+
const { isPlugin, hasYarn } = require('@vue/cli-shared-utils')
1415
const { resolveModule } = require('@vue/cli/lib/util/module')
1516
const getPackageVersion = require('@vue/cli/lib/util/getPackageVersion')
1617
const {
@@ -84,6 +85,37 @@ function invalidatePackage (id, context) {
8485
return folders.invalidatePackage(getPath(id), context)
8586
}
8687

88+
async function getMetadata (id, context) {
89+
let metadata = metadataCache.get(id)
90+
if (metadata) {
91+
return metadata
92+
}
93+
94+
if (hasYarn()) {
95+
try {
96+
const { stdout } = await execa('yarn', ['info', id, '--json'], {
97+
cwd: cwd.get()
98+
})
99+
metadata = JSON.parse(stdout).data
100+
} catch (e) {
101+
// yarn info failed
102+
console.log(e)
103+
}
104+
}
105+
106+
if (!metadata) {
107+
const res = await getPackageVersion(id)
108+
if (res.statusCode === 200) {
109+
metadata = res.body
110+
}
111+
}
112+
113+
if (metadata) {
114+
metadataCache.set(id, metadata)
115+
return metadata
116+
}
117+
}
118+
87119
async function getVersion ({ id, installed, versionRange }, context) {
88120
let current
89121
if (installed) {
@@ -97,7 +129,7 @@ async function getVersion ({ id, installed, versionRange }, context) {
97129
if (metadata) {
98130
latest = metadata['dist-tags'].latest
99131

100-
const versions = Object.keys(metadata.versions)
132+
const versions = Array.isArray(metadata.versions) ? metadata.versions : Object.keys(metadata.versions)
101133
wanted = semver.maxSatisfying(versions, versionRange)
102134
}
103135

@@ -120,23 +152,6 @@ async function getDescription ({ id }, context) {
120152
return null
121153
}
122154

123-
async function getMetadata (id, context) {
124-
let metadata = metadataCache.get(id)
125-
if (metadata) {
126-
return metadata
127-
}
128-
129-
const res = await getPackageVersion(id)
130-
if (res.statusCode === 200) {
131-
metadata = res.body
132-
}
133-
134-
if (metadata) {
135-
metadataCache.set(id, metadata)
136-
return metadata
137-
}
138-
}
139-
140155
function getLink (id, context) {
141156
const pkg = readPackage(id, context)
142157
return pkg.homepage ||

0 commit comments

Comments
 (0)