From 3a005e735b0623a169322d87a72fb227c873e010 Mon Sep 17 00:00:00 2001 From: netcon Date: Wed, 2 Sep 2026 01:58:14 +0800 Subject: [PATCH] fix: npmjs1s fails without version --- .../github1s/src/adapters/npmjs1s/data-source.ts | 15 ++++++++++----- .../github1s/src/providers/file-system/index.ts | 3 ++- .../github1s/src/providers/file-system/types.ts | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/extensions/github1s/src/adapters/npmjs1s/data-source.ts b/extensions/github1s/src/adapters/npmjs1s/data-source.ts index 4fac6312e..e53cf9ea5 100644 --- a/extensions/github1s/src/adapters/npmjs1s/data-source.ts +++ b/extensions/github1s/src/adapters/npmjs1s/data-source.ts @@ -51,10 +51,13 @@ export class Npmjs1sDataSource extends DataSource { getPackageFiles(packageName: string, version: string): Promise { const mapKey = `${packageName} ${version}`; if (!this._filesPromiseMap.has(mapKey)) { - const requestUrl = `https://unpkg.com/${packageName}@${version}/?meta`; - const filesPromise = fetch(requestUrl) - .then((response) => response.json()) - .then((data) => data?.files || []); + const filesPromise = (async () => { + const packageVersions = version === 'latest' ? await this.getPackageVersions(packageName) : []; + const exactVersion = packageVersions.find((packageVersion) => packageVersion.tag === 'latest')?.name || version; + const requestUrl = `https://unpkg.com/${packageName}@${exactVersion}/?meta`; + const data = await fetch(requestUrl).then((response) => response.json()); + return data?.files || []; + })(); this._filesPromiseMap.set(mapKey, filesPromise); } return this._filesPromiseMap.get(mapKey)!; @@ -86,7 +89,9 @@ export class Npmjs1sDataSource extends DataSource { const data = await fetch(requestUrl).then((response) => response.json(), reject); const tagEntries = Object.entries(data?.['dist-tags'] || {}) as [string, string][]; const versionTag = tagEntries.reduce((prevVersionTag, [tag, version]) => { - prevVersionTag[version] = tag; + if (!prevVersionTag[version] || tag === 'latest') { + prevVersionTag[version] = tag; + } return prevVersionTag; }, {}) as Record; const packageVersions = Object.keys(data?.versions || {}).map((version) => { diff --git a/extensions/github1s/src/providers/file-system/index.ts b/extensions/github1s/src/providers/file-system/index.ts index eb3f29f08..8fb0b7caa 100644 --- a/extensions/github1s/src/providers/file-system/index.ts +++ b/extensions/github1s/src/providers/file-system/index.ts @@ -68,7 +68,8 @@ export class GitHub1sFileSystemProvider implements FileSystemProvider, Disposabl const pathParts = dirname(entry.path).split('/').filter(Boolean); pathParts.forEach((part) => { if (!(current.entries || (current.entries = new Map())).has(part)) { - current.entries.set(part, createEntry(adapterTypes.FileType.Directory, current.uri, current.name)); + const entryUri = Uri.joinPath(current.uri, current.name); + current.entries.set(part, createEntry(adapterTypes.FileType.Directory, entryUri, part)); } current = current.entries.get(part) as Directory; }); diff --git a/extensions/github1s/src/providers/file-system/types.ts b/extensions/github1s/src/providers/file-system/types.ts index 7c789a965..a42f9053b 100644 --- a/extensions/github1s/src/providers/file-system/types.ts +++ b/extensions/github1s/src/providers/file-system/types.ts @@ -39,7 +39,7 @@ export class Directory implements FileStat { isSubmodule: boolean; constructor( - public uri: Uri, + public uri: Uri, // parent directory uri name: string, options?: any, ) {