@@ -175,7 +175,7 @@ export async function downloadWithNpmHttp(name: string, tempDir: string, tempFil
175
175
export async function downloadWithHttp ( name : string , tempDir : string , tempFile : string , retry : number , logger : any ) {
176
176
const tarballUrl = await Promise . any ( [
177
177
retryAsync ( ( ) => getTarballUrlFromRegistry ( name ) , retry ) ,
178
- // retryAsync(() => getTarballUrlFromYarn(name), retry),
178
+ retryAsync ( ( ) => getTarballUrlFromYarn ( name ) , retry ) ,
179
179
retryAsync ( ( ) => getTarballUrlFromTencent ( name ) , retry ) ,
180
180
] ) . catch ( ( error ) => {
181
181
logger . error ( `[fetch-npm]: Failed to fetch tarball URL from all sources: ${ error } ` )
@@ -208,7 +208,7 @@ export async function downloadWithHttp(name: string, tempDir: string, tempFile:
208
208
}
209
209
210
210
async function getTarballUrlFromRegistry ( name : string ) : Promise < string > {
211
- const registryUrl = `https://registry.npmjs.org/${ name . replace ( '/' , '%2F ' ) } `
211
+ const registryUrl = `https://registry.npmjs.org/${ name . replace ( / @ ( \d + \. \d + \. \d + ) / , '/$1 ' ) } `
212
212
const data : Uint8Array [ ] = [ ]
213
213
await new Promise ( ( resolve , reject ) => {
214
214
https . get ( registryUrl , ( response ) => {
@@ -219,12 +219,15 @@ async function getTarballUrlFromRegistry(name: string): Promise<string> {
219
219
} )
220
220
221
221
const metadata = JSON . parse ( data . toString ( ) )
222
- const version = metadata [ 'dist-tags' ] . latest
223
- return metadata . versions [ version ] . dist . tarball
222
+ if ( metadata [ 'dist-tags' ] ) {
223
+ const version = metadata [ 'dist-tags' ] . latest
224
+ return metadata . versions [ version ] . dist . tarball
225
+ }
226
+ return metadata . dist . tarball
224
227
}
225
228
226
229
export async function getTarballUrlFromYarn ( name : string ) : Promise < string > {
227
- const registryUrl = `https://registry.yarnpkg.com/${ name . replace ( '/' , '%2F ' ) } `
230
+ const registryUrl = `https://registry.yarnpkg.com/${ name . replace ( / @ ( \d + \. \d + \. \d + ) / , '/$1 ' ) } `
228
231
const data : Uint8Array [ ] = [ ]
229
232
await new Promise ( ( resolve , reject ) => {
230
233
https . get ( registryUrl , ( response ) => {
@@ -235,12 +238,15 @@ export async function getTarballUrlFromYarn(name: string): Promise<string> {
235
238
} )
236
239
237
240
const metadata = JSON5 . parse ( data . toString ( ) )
238
- const version = metadata [ 'dist-tags' ] . latest
239
- return metadata . versions [ version ] . dist . tarball
241
+ if ( metadata [ 'dist-tags' ] ) {
242
+ const version = metadata [ 'dist-tags' ] . latest
243
+ return metadata . versions [ version ] . dist . tarball
244
+ }
245
+ return metadata . dist . tarball
240
246
}
241
247
242
248
async function getTarballUrlFromTencent ( name : string ) : Promise < string > {
243
- const registryUrl = `https://mirrors.cloud.tencent.com/npm/${ name . replace ( '/' , '%2F ' ) } `
249
+ const registryUrl = `https://mirrors.cloud.tencent.com/npm/${ name . replace ( / @ ( \d + \. \d + \. \d + ) / , '/$1 ' ) } `
244
250
const data : Uint8Array [ ] = [ ]
245
251
await new Promise ( ( resolve , reject ) => {
246
252
https . get ( registryUrl , ( response ) => {
@@ -251,8 +257,11 @@ async function getTarballUrlFromTencent(name: string): Promise<string> {
251
257
} )
252
258
253
259
const metadata = JSON5 . parse ( data . toString ( ) )
254
- const version = metadata [ 'dist-tags' ] . latest
255
- return metadata . versions [ version ] . dist . tarball
260
+ if ( metadata [ 'dist-tags' ] ) {
261
+ const version = metadata [ 'dist-tags' ] . latest
262
+ return metadata . versions [ version ] . dist . tarball
263
+ }
264
+ return metadata . dist . tarball
256
265
}
257
266
258
267
function requestAuth ( tempDir : string ) {
0 commit comments