Skip to content

Commit 5cce73b

Browse files
fix: Use npm view as fallback when package is private
1 parent 1ed0448 commit 5cce73b

File tree

4 files changed

+52
-8
lines changed

4 files changed

+52
-8
lines changed

package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/NPM.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,20 @@ export const getPackageVersions = async (
4242
return resolve(Object.keys(data.versions))
4343
}
4444

45-
return resolve(null)
45+
// Uses `npm view` as a fallback.
46+
// This usually happens when the package needs authentication.
47+
// In this case, we'll let `npm` handle it directly.
48+
return exec(`npm view --json ${name} versions`, (error, stdout) => {
49+
if (!error) {
50+
try {
51+
return resolve(JSON.parse(stdout))
52+
} catch (e) {
53+
/* empty */
54+
}
55+
}
56+
57+
return resolve(null)
58+
})
4659
})
4760
)
4861

src/TestUtils.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ export const vscodeSimulator = async (options: SimulatorOptions = {}) => {
165165
for (const packageName of Object.keys(options.packagesRepository)) {
166166
if (
167167
url.endsWith(`/${packageName}`) &&
168-
packageName in options.packagesRepository
168+
packageName in options.packagesRepository &&
169+
!packageName.startsWith("@private/")
169170
) {
170171
return Promise.resolve({
171172
versions: Object.fromEntries(
@@ -204,6 +205,15 @@ export const vscodeSimulator = async (options: SimulatorOptions = {}) => {
204205
}
205206

206207
if (typeof callbackReal === "function") {
208+
if (command === "npm view --json @private/npm-outdated versions") {
209+
callbackReal(
210+
null,
211+
JSON.stringify(options.packagesRepository!["@private/npm-outdated"])
212+
)
213+
214+
return
215+
}
216+
207217
callbackReal("error", null)
208218
}
209219

src/extension.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,27 @@ describe("package diagnostics", () => {
291291
expect(decorations).toStrictEqual([])
292292
expect(decorations).toStrictEqual([])
293293
})
294+
295+
it("package dependes on auth, so npm view will be used (found)", async () => {
296+
const { diagnostics } = await vscodeSimulator({
297+
packageJson: { devDependencies: { "@private/npm-outdated": "^1.0.0" } },
298+
packagesInstalled: { "@private/npm-outdated": "1.0.0" },
299+
packagesRepository: { "@private/npm-outdated": ["1.0.0", "1.0.1"] },
300+
})
301+
302+
expect(diagnostics[0]?.message).toContain("Newer version")
303+
expect(diagnostics[0]?.message).toContain("1.0.1")
304+
})
305+
306+
it("package dependes on auth, so npm view will be used (not found)", async () => {
307+
const { diagnostics } = await vscodeSimulator({
308+
packageJson: { devDependencies: { "@private/jest": "^1.0.0" } },
309+
packagesInstalled: { "@private/jest": "1.0.0" },
310+
packagesRepository: { "@private/jest": ["1.0.0", "1.0.1"] },
311+
})
312+
313+
expect(diagnostics).toStrictEqual([])
314+
})
294315
})
295316

296317
describe("code actions", () => {

0 commit comments

Comments
 (0)