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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy