Skip to content

Commit b8bdaa0

Browse files
committed
chore: update
1 parent cf26986 commit b8bdaa0

File tree

1 file changed

+46
-53
lines changed

1 file changed

+46
-53
lines changed

src/index.ts

+46-53
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ export async function fetchAndExtractPackage(options: { name: string, dist?: str
5050
await fsp.mkdir(tempDir, { recursive: true })
5151

5252
// Get the package tarball URL
53-
const tgzPath = await Promise.any([
54-
downloadWithHttp(name, tempDir, tempFile, retry, logger),
55-
downloadWithNpmHttp(name, tempDir, tempFile, retry, logger),
56-
downloadWitchPack(name, tempDir, retry, logger),
57-
])
53+
const tgzPath = await retryAsync(async () => Promise.any([
54+
downloadWithHttp(name, path.join(tempDir, 'http'), tempFile, logger),
55+
downloadWithNpmHttp(name, path.join(tempDir, 'npm'), tempFile, logger),
56+
downloadWitchPack(name, path.join(tempDir, 'pack'), logger),
57+
]), retry) as string
5858

5959
logger.info(`${loggerPrefix} download tgz success!`)
6060
logger.info(`${loggerPrefix} tgzPath: ${tgzPath}\ntempDir: ${tempDir}`)
@@ -114,69 +114,66 @@ async function retryAsync<T>(fn: () => Promise<T>, retries: number): Promise<T>
114114
}
115115
}
116116

117-
export async function downloadWitchPack(name: string, tempDir: string, retry: number, logger: any) {
118-
await retryAsync(() => {
119-
return new Promise((resolve, reject) => {
120-
const { result, status } = jsShell(`npm pack ${name} --pack-destination ${tempDir}`)
121-
if (status !== 0) {
122-
logger.error(result)
123-
reject(result)
124-
}
125-
else {
126-
resolve(true)
127-
}
128-
})
129-
}, retry)
130-
const tarballPattern = `${name.replace('@', '').replace('/', '-')}-.*.tgz`
117+
export async function downloadWitchPack(name: string, tempDir: string, logger: any = console) {
118+
await fsp.mkdir(tempDir, { recursive: true })
119+
await new Promise((resolve, reject) => {
120+
const { result, status } = jsShell(`npm pack ${name} --pack-destination ${tempDir}`)
121+
if (status !== 0) {
122+
logger.error(result)
123+
reject(result)
124+
}
125+
else {
126+
resolve(true)
127+
}
128+
})
129+
if (name.startsWith('@'))
130+
name = name.slice(1)
131+
const tarballPattern = `${name.replace(/[/@]/g, '-')}.tgz`
131132
const [tarballPath] = await fsp.readdir(tempDir).then(files => files.filter(file => file.match(tarballPattern)))
132133
return path.join(tempDir, tarballPath)
133134
}
134135

135-
export async function downloadWithNpmHttp(name: string, tempDir: string, tempFile: string, retry: number, logger: any) {
136-
const tarballUrl = await retryAsync(async () => {
137-
return new Promise((resolve, reject) => {
138-
const { result, status } = jsShell(`npm view ${name} dist.tarball`)
139-
if (status !== 0) {
140-
logger.error(result)
141-
reject(result)
142-
}
143-
else {
144-
resolve(result)
145-
}
146-
})
147-
}, retry)
136+
export async function downloadWithNpmHttp(name: string, tempDir: string, tempFile: string, logger: any = console) {
137+
await fsp.mkdir(tempDir, { recursive: true })
138+
const tarballUrl = await new Promise((resolve, reject) => {
139+
const { result, status } = jsShell(`npm view ${name} dist.tarball`)
140+
if (status !== 0) {
141+
logger.error(result)
142+
reject(result)
143+
}
144+
else {
145+
resolve(result)
146+
}
147+
})
148148

149149
if (!tarballUrl)
150150
return ''
151151
const protocol = new URL(tarballUrl).protocol
152152
const lib = protocol === 'https:' ? https : http
153-
const tgzPath = path.join(tempDir, `${tempFile}.tgz`)
153+
const tgzPath = path.join(tempDir, `${tempFile.replace(/@\d+\.\d+\.\d+/, '')}.tgz`)
154154
const tgzFile = createWriteStream(tgzPath)
155155

156-
await retryAsync(() => new Promise<void>((resolve, reject) => {
156+
return new Promise((resolve, reject) => {
157+
tgzFile.on('error', reject)
157158
lib.get(tarballUrl, (response) => {
158159
response.pipe(tgzFile)
159160
tgzFile.on('finish', () => {
160161
tgzFile.close()
161-
resolve()
162+
resolve(tgzPath)
162163
})
163164
}).on('error', (error) => {
164-
fsp.unlink(tgzPath).catch((error) => {
165-
reject(error)
166-
})
167165
tgzFile.close()
168166
reject(error)
169167
})
170-
}), retry)
171-
172-
return tgzPath
168+
})
173169
}
174170

175-
export async function downloadWithHttp(name: string, tempDir: string, tempFile: string, retry: number, logger: any) {
171+
export async function downloadWithHttp(name: string, tempDir: string, tempFile: string, logger: any = console) {
172+
await fsp.mkdir(tempDir, { recursive: true })
176173
const tarballUrl = await Promise.any([
177-
retryAsync(() => getTarballUrlFromRegistry(name), retry),
178-
retryAsync(() => getTarballUrlFromYarn(name), retry),
179-
retryAsync(() => getTarballUrlFromTencent(name), retry),
174+
getTarballUrlFromRegistry(name),
175+
getTarballUrlFromYarn(name),
176+
getTarballUrlFromTencent(name),
180177
]).catch((error) => {
181178
logger.error(`[fetch-npm]: Failed to fetch tarball URL from all sources: ${error}`)
182179
throw error
@@ -189,22 +186,18 @@ export async function downloadWithHttp(name: string, tempDir: string, tempFile:
189186
const tgzPath = path.join(tempDir, `${tempFile}.tgz`)
190187
const tgzFile = createWriteStream(tgzPath)
191188

192-
await retryAsync(() => new Promise<void>((resolve, reject) => {
189+
return new Promise((resolve, reject) => {
190+
tgzFile.on('error', reject)
193191
lib.get(tarballUrl, (response) => {
194192
response.pipe(tgzFile)
195193
tgzFile.on('finish', () => {
196194
tgzFile.close()
197-
resolve()
195+
resolve(tgzPath)
198196
})
199197
}).on('error', (error) => {
200-
fsp.unlink(tgzPath).catch((error) => {
201-
reject(error)
202-
})
203198
reject(error)
204199
})
205-
}), retry)
206-
207-
return tgzPath
200+
})
208201
}
209202

210203
async function getTarballUrlFromRegistry(name: string): Promise<string> {

0 commit comments

Comments
 (0)