@@ -5,7 +5,8 @@ import path from "node:path";
5
5
import progress from "cli-progress" ;
6
6
import tar from "tar" ;
7
7
8
- import { unzip } from "./get/decompress.js" ;
8
+ import decompress , { unzip } from "./get/decompress.js" ;
9
+ import nw from "./get/nw.js" ;
9
10
10
11
import util from "./util.js" ;
11
12
@@ -31,129 +32,50 @@ import util from "./util.js";
31
32
* @return {Promise<void> }
32
33
*/
33
34
async function get ( options ) {
34
- if ( fs . existsSync ( options . cacheDir ) === false ) {
35
+
36
+ const cacheDirExists = await util . fileExists ( options . cacheDir ) ;
37
+ if ( cacheDirExists === false ) {
35
38
await fs . promises . mkdir ( options . cacheDir , { recursive : true } ) ;
36
39
}
37
- await getNwjs ( options ) ;
38
- if ( options . ffmpeg === true ) {
39
- await getFfmpeg ( options ) ;
40
- }
41
- if ( options . nativeAddon === "gyp" ) {
42
- await getNodeHeaders ( options ) ;
43
- }
44
- }
45
40
46
- const getNwjs = async ( options ) => {
47
- const bar = new progress . SingleBar ( { } , progress . Presets . rect ) ;
48
- const out = path . resolve (
41
+ let nwFilePath = path . resolve (
49
42
options . cacheDir ,
50
43
`nwjs${ options . flavor === "sdk" ? "-sdk" : "" } -v${ options . version } -${ options . platform } -${ options . arch } .${ options . platform === "linux" ? "tar.gz" : "zip"
51
44
} `,
52
45
) ;
53
- // If options.cache is false, remove cache.
46
+
47
+ let nwDirPath = path . resolve (
48
+ options . cacheDir ,
49
+ `nwjs${ options . flavor === "sdk" ? "-sdk" : "" } -v${ options . version } -${ options . platform } -${ options . arch } ` ,
50
+ ) ;
51
+
54
52
if ( options . cache === false ) {
55
- await fs . promises . rm ( out , {
53
+ await fs . promises . rm ( nwFilePath , {
56
54
recursive : true ,
57
55
force : true ,
58
56
} ) ;
59
57
}
60
58
61
- if ( fs . existsSync ( out ) === true ) {
62
- await fs . promises . rm (
63
- path . resolve (
64
- options . cacheDir ,
65
- `nwjs${ options . flavor === "sdk" ? "-sdk" : "" } -v${ options . version } -${ options . platform } -${ options . arch } ` ,
66
- ) ,
67
- { recursive : true , force : true } ,
68
- ) ;
69
- if ( options . platform === "linux" ) {
70
- await tar . extract ( {
71
- file : out ,
72
- C : options . cacheDir
73
- } ) ;
74
- } else {
75
- await unzip ( out , options . cacheDir ) ;
76
- if ( options . platform === "osx" ) {
77
- await createSymlinks ( options ) ;
78
- }
79
- }
80
- return ;
59
+ if ( util . fileExists ( nwFilePath ) ) {
60
+ nwFilePath = await nw ( options . downloadUrl , options . version , options . flavor , options . platform , options . arch , options . cacheDir ) ;
81
61
}
82
62
83
- const stream = fs . createWriteStream ( out ) ;
84
- const request = new Promise ( ( res , rej ) => {
85
- let url = "" ;
86
-
87
- // Set download url and destination.
88
- if (
89
- options . downloadUrl === "https://dl.nwjs.io" ||
90
- options . downloadUrl === "https://npm.taobao.org/mirrors/nwjs" ||
91
- options . downloadUrl === "https://npmmirror.com/mirrors/nwjs"
92
- ) {
93
- url = `${ options . downloadUrl } /v${ options . version } /nwjs${ options . flavor === "sdk" ? "-sdk" : ""
94
- } -v${ options . version } -${ options . platform } -${ options . arch } .${ options . platform === "linux" ? "tar.gz" : "zip"
95
- } `;
96
- }
63
+ await fs . promises . rm ( nwDirPath , { recursive : true , force : true } ) ;
97
64
98
- https . get ( url , ( response ) => {
99
- // For GitHub releases and mirrors, we need to follow the redirect.
100
- if (
101
- options . downloadUrl === "https://npm.taobao.org/mirrors/nwjs" ||
102
- options . downloadUrl === "https://npmmirror.com/mirrors/nwjs"
103
- ) {
104
- url = response . headers . location ;
105
- }
65
+ await decompress ( nwFilePath , options . cacheDir ) ;
106
66
107
- https . get ( url , ( response ) => {
108
- let chunks = 0 ;
109
- bar . start ( Number ( response . headers [ "content-length" ] ) , 0 ) ;
110
- response . on ( "data" , ( chunk ) => {
111
- chunks += chunk . length ;
112
- bar . increment ( ) ;
113
- bar . update ( chunks ) ;
114
- } ) ;
115
-
116
- response . on ( "error" , ( error ) => {
117
- rej ( error ) ;
118
- } ) ;
119
-
120
- response . on ( "end" , ( ) => {
121
- bar . stop ( ) ;
122
- res ( ) ;
123
- } ) ;
124
-
125
- response . pipe ( stream ) ;
126
- } ) ;
127
-
128
- response . on ( "error" , ( error ) => {
129
- rej ( error ) ;
130
- } ) ;
131
- } ) ;
132
- } ) ;
133
-
134
- await request ;
135
- await fs . promises . rm (
136
- path . resolve (
137
- options . cacheDir ,
138
- `nwjs${ options . flavor === "sdk" ? "-sdk" : "" } -v${ options . version } -${ options . platform } -${ options . arch } ` ,
139
- ) ,
140
- { recursive : true , force : true } ,
141
- ) ;
142
- if ( options . platform === "linux" ) {
143
- await tar . extract ( {
144
- file : out ,
145
- C : options . cacheDir
146
- } ) ;
147
- } else {
148
- await unzip ( out , options . cacheDir ) ;
149
- if ( options . platform === "osx" ) {
150
- await createSymlinks ( options ) ;
151
- }
67
+ if ( options . platform === "osx" ) {
68
+ await createSymlinks ( options ) ;
69
+ }
152
70
71
+ if ( options . ffmpeg === true ) {
72
+ await getFfmpeg ( options ) ;
73
+ }
74
+ if ( options . nativeAddon === "gyp" ) {
75
+ await getNodeHeaders ( options ) ;
153
76
}
154
77
}
155
78
156
-
157
79
const getFfmpeg = async ( options ) => {
158
80
const nwDir = path . resolve (
159
81
options . cacheDir ,
0 commit comments