1
+ const fs = require ( 'fs' ) ;
2
+ const path = require ( 'path' ) ;
3
+ const logger = require ( './log' ) ;
4
+ const { generateAuthorization, getRegistryInfo } = require ( './utils' ) ;
5
+ const { fetchDownloadList, downloadFile } = require ( '../lib/request' ) ;
6
+ const argv = require ( './argv' ) ;
7
+
8
+ const { version, host, protocol, pathname } = getRegistryInfo ( argv . registry ) ;
9
+
10
+ let Authorization = '' ;
11
+
12
+ const onDownload = async ( ) => {
13
+ console . log ( '************************ 准备下载 ************************' ) ;
14
+ logger . info ( '************************ 准备下载 ************************' ) ;
15
+ Authorization = generateAuthorization ( argv . username , argv . password ) ;
16
+ const res = await fetchDownloadList ( argv . registry , Authorization )
17
+ const { status, fileInfos = [ ] } = res . data
18
+ if ( status === 200 ) {
19
+ await downloadFiles ( fileInfos )
20
+ console . log ( '************************ 下载完毕 ************************' ) ;
21
+ logger . info ( '************************ 下载完毕 ************************' ) ;
22
+ }
23
+ }
24
+
25
+ const downloadFiles = async ( fileInfos = [ ] ) => {
26
+ try {
27
+ return await Promise . all ( fileInfos . map ( async info => {
28
+ console . log ( `正在下载 ${ info . fileName } ...` ) ;
29
+ logger . info ( `正在下载 ${ info . fileName } ...` ) ;
30
+ const p = path . join ( process . cwd ( ) , info . fileName ) ;
31
+ const dir = p . split ( '/' ) . slice ( 0 , - 1 ) . join ( '/' ) ;
32
+ if ( dir && ! fs . existsSync ( dir ) ) {
33
+ fs . mkdirSync ( dir ) ;
34
+ }
35
+ const writer = fs . createWriteStream ( p ) ;
36
+ const url = `${ protocol } //${ path . join ( host , path . join ( pathname . split ( '/' ) . slice ( 0 , - 2 ) . join ( '/' ) , info . fileName ) ) } `
37
+ const res = await downloadFile ( url , { version } , Authorization ) ;
38
+ await res . data . pipe ( writer )
39
+ await writer . end ( ) ;
40
+ await writer . close ( ) ;
41
+ console . log ( `下载 ${ info . fileName } 完成` ) ;
42
+ logger . info ( `下载 ${ info . fileName } 完成` ) ;
43
+ } ) ) ;
44
+ } catch ( error ) {
45
+ console . log ( error ) ;
46
+ logger . error ( error ) ;
47
+ throw error ;
48
+ }
49
+
50
+ }
51
+
52
+ module . exports = {
53
+ onDownload
54
+ }
0 commit comments