electron-incremental-update 2.2.6 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-KLUIYBS4.js → chunk-QPAKJHVM.js} +4 -4
- package/dist/index.cjs +64 -15
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +64 -15
- package/dist/provider.cjs +78 -77
- package/dist/provider.d.cts +58 -61
- package/dist/provider.d.ts +58 -61
- package/dist/provider.js +76 -76
- package/dist/{types-1T_tRG8a.d.cts → types-CU7GyVez.d.cts} +2 -2
- package/dist/{types-1T_tRG8a.d.ts → types-CU7GyVez.d.ts} +2 -2
- package/dist/utils.cjs +5 -4
- package/dist/utils.d.cts +2 -2
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js +1 -1
- package/dist/vite.d.ts +2 -2
- package/dist/vite.js +37 -33
- package/dist/{zip-ChpUyjy1.d.cts → zip-Blmn2vzE.d.cts} +4 -3
- package/dist/{zip-DUHOPZrB.d.ts → zip-CnSv_Njj.d.ts} +4 -3
- package/package.json +2 -1
|
@@ -60,14 +60,14 @@ async function downloadUtil(url, headers, onResponse) {
|
|
|
60
60
|
function trimData(data) {
|
|
61
61
|
return data.trim().slice(0, 5e3).replace(/\s+/g, " ");
|
|
62
62
|
}
|
|
63
|
-
var
|
|
63
|
+
var resolveJson = (data, resolve, reject) => {
|
|
64
64
|
try {
|
|
65
65
|
resolve(JSON.parse(data));
|
|
66
66
|
} catch {
|
|
67
67
|
reject(new Error(`Invalid json, "${trimData(data)}"`));
|
|
68
68
|
}
|
|
69
69
|
};
|
|
70
|
-
async function
|
|
70
|
+
async function defaultDownloadText(url, headers, signal, resolveData) {
|
|
71
71
|
return await downloadUtil(
|
|
72
72
|
url,
|
|
73
73
|
headers,
|
|
@@ -83,7 +83,7 @@ async function defaultDownloadJSON(url, headers, signal, resolveData = defaultRe
|
|
|
83
83
|
);
|
|
84
84
|
}
|
|
85
85
|
async function defaultDownloadUpdateJSON(url, headers, signal) {
|
|
86
|
-
return await
|
|
86
|
+
return await defaultDownloadText(
|
|
87
87
|
url,
|
|
88
88
|
headers,
|
|
89
89
|
signal,
|
|
@@ -144,4 +144,4 @@ async function defaultUnzipFile(buffer) {
|
|
|
144
144
|
});
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
export { aesDecrypt, aesEncrypt, defaultDownloadAsar,
|
|
147
|
+
export { aesDecrypt, aesEncrypt, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, defaultSignature, defaultUnzipFile, defaultVerifySignature, defaultZipFile, downloadUtil, getHeader, hashBuffer, resolveJson };
|
package/dist/index.cjs
CHANGED
|
@@ -103,7 +103,15 @@ var Updater = class extends events.EventEmitter {
|
|
|
103
103
|
}
|
|
104
104
|
this.logger?.debug(`Download from \`${this.provider.name}\``);
|
|
105
105
|
try {
|
|
106
|
-
const result = format === "json" ? await this.provider.downloadJSON(
|
|
106
|
+
const result = format === "json" ? await this.provider.downloadJSON(
|
|
107
|
+
electron__default.default.app.name,
|
|
108
|
+
__EIU_VERSION_PATH__,
|
|
109
|
+
this.controller.signal
|
|
110
|
+
) : await this.provider.downloadAsar(
|
|
111
|
+
this.info,
|
|
112
|
+
this.controller.signal,
|
|
113
|
+
(info) => this.emit("download-progress", info)
|
|
114
|
+
);
|
|
107
115
|
this.logger?.debug(`Download ${format} success${format === "buffer" ? `, file size: ${result.length}` : ""}`);
|
|
108
116
|
return result;
|
|
109
117
|
} catch (e) {
|
|
@@ -127,13 +135,19 @@ var Updater = class extends events.EventEmitter {
|
|
|
127
135
|
if (!data && !this.provider) {
|
|
128
136
|
const msg = "No update json or provider";
|
|
129
137
|
this.err("Check update failed", "ERR_PARAM", msg);
|
|
130
|
-
return emitUnavailable(
|
|
138
|
+
return emitUnavailable(
|
|
139
|
+
msg,
|
|
140
|
+
"UNAVAILABLE_ERROR"
|
|
141
|
+
);
|
|
131
142
|
}
|
|
132
143
|
const _data = await this.fetch("json", data);
|
|
133
144
|
if (!_data) {
|
|
134
|
-
return emitUnavailable(
|
|
145
|
+
return emitUnavailable(
|
|
146
|
+
"Failed to get update info",
|
|
147
|
+
"UNAVAILABLE_ERROR"
|
|
148
|
+
);
|
|
135
149
|
}
|
|
136
|
-
const { signature, version, minimumVersion, url
|
|
150
|
+
const { signature, version, minimumVersion, url, ...rest } = this.receiveBeta ? _data.beta : _data;
|
|
137
151
|
const info = { signature, minimumVersion, version, url };
|
|
138
152
|
const extraVersionInfo = {
|
|
139
153
|
signature,
|
|
@@ -145,16 +159,27 @@ var Updater = class extends events.EventEmitter {
|
|
|
145
159
|
};
|
|
146
160
|
this.logger?.debug(`Checked update, version: ${version}, signature: ${signature}`);
|
|
147
161
|
if (isDev && !this.forceUpdate && !data) {
|
|
148
|
-
return emitUnavailable(
|
|
162
|
+
return emitUnavailable(
|
|
163
|
+
"Skip check update in dev mode. To force update, set `updater.forceUpdate` to true or call checkUpdate with UpdateJSON",
|
|
164
|
+
"UNAVAILABLE_DEV"
|
|
165
|
+
);
|
|
149
166
|
}
|
|
150
167
|
const isLowerVersion = this.provider.isLowerVersion;
|
|
151
168
|
try {
|
|
152
169
|
if (isLowerVersion(extraVersionInfo.entryVersion, minimumVersion)) {
|
|
153
|
-
return emitUnavailable(
|
|
170
|
+
return emitUnavailable(
|
|
171
|
+
`Entry Version (${extraVersionInfo.entryVersion}) < MinimumVersion (${minimumVersion})`,
|
|
172
|
+
"UNAVAILABLE_VERSION",
|
|
173
|
+
extraVersionInfo
|
|
174
|
+
);
|
|
154
175
|
}
|
|
155
176
|
this.logger?.info(`Current version is ${extraVersionInfo.appVersion}, new version is ${version}`);
|
|
156
177
|
if (!isLowerVersion(extraVersionInfo.appVersion, version)) {
|
|
157
|
-
return emitUnavailable(
|
|
178
|
+
return emitUnavailable(
|
|
179
|
+
`Current version (${extraVersionInfo.appVersion}) > New version (${version})`,
|
|
180
|
+
"UNAVAILABLE_VERSION",
|
|
181
|
+
extraVersionInfo
|
|
182
|
+
);
|
|
158
183
|
}
|
|
159
184
|
this.logger?.info(`Update available: ${version}`);
|
|
160
185
|
this.emit("update-available", extraVersionInfo);
|
|
@@ -162,7 +187,11 @@ var Updater = class extends events.EventEmitter {
|
|
|
162
187
|
return true;
|
|
163
188
|
} catch {
|
|
164
189
|
const msg = "Fail to parse version string";
|
|
165
|
-
this.err(
|
|
190
|
+
this.err(
|
|
191
|
+
"Check update failed",
|
|
192
|
+
"ERR_VALIDATE",
|
|
193
|
+
msg
|
|
194
|
+
);
|
|
166
195
|
return emitUnavailable(msg, "UNAVAILABLE_ERROR", extraVersionInfo);
|
|
167
196
|
}
|
|
168
197
|
}
|
|
@@ -170,24 +199,40 @@ var Updater = class extends events.EventEmitter {
|
|
|
170
199
|
const _sig = info?.signature ?? this.info?.signature;
|
|
171
200
|
const _version = info?.version ?? this.info?.version;
|
|
172
201
|
if (!_sig || !_version) {
|
|
173
|
-
this.err(
|
|
202
|
+
this.err(
|
|
203
|
+
"Download failed",
|
|
204
|
+
"ERR_PARAM",
|
|
205
|
+
"No update signature, please call `checkUpdate` first or manually setup params"
|
|
206
|
+
);
|
|
174
207
|
return false;
|
|
175
208
|
}
|
|
176
209
|
if (!data && !this.provider) {
|
|
177
|
-
this.err(
|
|
210
|
+
this.err(
|
|
211
|
+
"Download failed",
|
|
212
|
+
"ERR_PARAM",
|
|
213
|
+
"No update asar buffer and provider"
|
|
214
|
+
);
|
|
178
215
|
return false;
|
|
179
216
|
}
|
|
180
217
|
const buffer = await this.fetch("buffer", data ? Buffer.from(data) : void 0);
|
|
181
218
|
if (!buffer) {
|
|
182
|
-
this.err(
|
|
219
|
+
this.err(
|
|
220
|
+
"Download failed",
|
|
221
|
+
"ERR_PARAM",
|
|
222
|
+
"No update asar file buffer"
|
|
223
|
+
);
|
|
183
224
|
return false;
|
|
184
225
|
}
|
|
185
|
-
this.logger?.debug("
|
|
226
|
+
this.logger?.debug("Validation start");
|
|
186
227
|
if (!await this.provider.verifySignaure(buffer, _version, _sig, this.CERT)) {
|
|
187
|
-
this.err(
|
|
228
|
+
this.err(
|
|
229
|
+
"Download failed",
|
|
230
|
+
"ERR_VALIDATE",
|
|
231
|
+
"Invalid update asar file"
|
|
232
|
+
);
|
|
188
233
|
return false;
|
|
189
234
|
}
|
|
190
|
-
this.logger?.debug("
|
|
235
|
+
this.logger?.debug("Validation end");
|
|
191
236
|
try {
|
|
192
237
|
const tmpFilePath = `${getPathFromAppNameAsar()}.tmp`;
|
|
193
238
|
this.logger?.debug(`Install to ${tmpFilePath}`);
|
|
@@ -197,7 +242,11 @@ var Updater = class extends events.EventEmitter {
|
|
|
197
242
|
this.emit("update-downloaded");
|
|
198
243
|
return true;
|
|
199
244
|
} catch (error) {
|
|
200
|
-
this.err(
|
|
245
|
+
this.err(
|
|
246
|
+
"Download failed",
|
|
247
|
+
"ERR_DOWNLOAD",
|
|
248
|
+
`Fail to unwrap asar file, ${error}`
|
|
249
|
+
);
|
|
201
250
|
return false;
|
|
202
251
|
}
|
|
203
252
|
}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { U as UpdateInfo, I as IProvider, D as DownloadingInfo, a as UpdateJSON, b as UpdateJSONWithURL } from './types-
|
|
1
|
+
import { U as UpdateInfo, I as IProvider, D as DownloadingInfo, a as UpdateJSON, b as UpdateJSONWithURL } from './types-CU7GyVez.cjs';
|
|
2
2
|
import { Promisable } from '@subframe7536/type-utils';
|
|
3
3
|
import { EventEmitter } from 'node:events';
|
|
4
4
|
import 'node:url';
|
|
@@ -55,8 +55,8 @@ declare class Updater<T extends UpdateInfoWithExtraVersion = UpdateInfoWithExtra
|
|
|
55
55
|
'update-not-available': [code: UpdaterUnavailableCode, msg: string, info?: T];
|
|
56
56
|
'error': [error: UpdaterError];
|
|
57
57
|
'download-progress': [info: DownloadingInfo];
|
|
58
|
-
'update-downloaded':
|
|
59
|
-
'update-cancelled':
|
|
58
|
+
'update-downloaded': [];
|
|
59
|
+
'update-cancelled': [];
|
|
60
60
|
}> {
|
|
61
61
|
private CERT;
|
|
62
62
|
private controller;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { U as UpdateInfo, I as IProvider, D as DownloadingInfo, a as UpdateJSON, b as UpdateJSONWithURL } from './types-
|
|
1
|
+
import { U as UpdateInfo, I as IProvider, D as DownloadingInfo, a as UpdateJSON, b as UpdateJSONWithURL } from './types-CU7GyVez.js';
|
|
2
2
|
import { Promisable } from '@subframe7536/type-utils';
|
|
3
3
|
import { EventEmitter } from 'node:events';
|
|
4
4
|
import 'node:url';
|
|
@@ -55,8 +55,8 @@ declare class Updater<T extends UpdateInfoWithExtraVersion = UpdateInfoWithExtra
|
|
|
55
55
|
'update-not-available': [code: UpdaterUnavailableCode, msg: string, info?: T];
|
|
56
56
|
'error': [error: UpdaterError];
|
|
57
57
|
'download-progress': [info: DownloadingInfo];
|
|
58
|
-
'update-downloaded':
|
|
59
|
-
'update-cancelled':
|
|
58
|
+
'update-downloaded': [];
|
|
59
|
+
'update-cancelled': [];
|
|
60
60
|
}> {
|
|
61
61
|
private CERT;
|
|
62
62
|
private controller;
|
package/dist/index.js
CHANGED
|
@@ -67,7 +67,15 @@ var Updater = class extends EventEmitter {
|
|
|
67
67
|
}
|
|
68
68
|
this.logger?.debug(`Download from \`${this.provider.name}\``);
|
|
69
69
|
try {
|
|
70
|
-
const result = format === "json" ? await this.provider.downloadJSON(
|
|
70
|
+
const result = format === "json" ? await this.provider.downloadJSON(
|
|
71
|
+
electron2.app.name,
|
|
72
|
+
__EIU_VERSION_PATH__,
|
|
73
|
+
this.controller.signal
|
|
74
|
+
) : await this.provider.downloadAsar(
|
|
75
|
+
this.info,
|
|
76
|
+
this.controller.signal,
|
|
77
|
+
(info) => this.emit("download-progress", info)
|
|
78
|
+
);
|
|
71
79
|
this.logger?.debug(`Download ${format} success${format === "buffer" ? `, file size: ${result.length}` : ""}`);
|
|
72
80
|
return result;
|
|
73
81
|
} catch (e) {
|
|
@@ -91,13 +99,19 @@ var Updater = class extends EventEmitter {
|
|
|
91
99
|
if (!data && !this.provider) {
|
|
92
100
|
const msg = "No update json or provider";
|
|
93
101
|
this.err("Check update failed", "ERR_PARAM", msg);
|
|
94
|
-
return emitUnavailable(
|
|
102
|
+
return emitUnavailable(
|
|
103
|
+
msg,
|
|
104
|
+
"UNAVAILABLE_ERROR"
|
|
105
|
+
);
|
|
95
106
|
}
|
|
96
107
|
const _data = await this.fetch("json", data);
|
|
97
108
|
if (!_data) {
|
|
98
|
-
return emitUnavailable(
|
|
109
|
+
return emitUnavailable(
|
|
110
|
+
"Failed to get update info",
|
|
111
|
+
"UNAVAILABLE_ERROR"
|
|
112
|
+
);
|
|
99
113
|
}
|
|
100
|
-
const { signature, version, minimumVersion, url
|
|
114
|
+
const { signature, version, minimumVersion, url, ...rest } = this.receiveBeta ? _data.beta : _data;
|
|
101
115
|
const info = { signature, minimumVersion, version, url };
|
|
102
116
|
const extraVersionInfo = {
|
|
103
117
|
signature,
|
|
@@ -109,16 +123,27 @@ var Updater = class extends EventEmitter {
|
|
|
109
123
|
};
|
|
110
124
|
this.logger?.debug(`Checked update, version: ${version}, signature: ${signature}`);
|
|
111
125
|
if (isDev && !this.forceUpdate && !data) {
|
|
112
|
-
return emitUnavailable(
|
|
126
|
+
return emitUnavailable(
|
|
127
|
+
"Skip check update in dev mode. To force update, set `updater.forceUpdate` to true or call checkUpdate with UpdateJSON",
|
|
128
|
+
"UNAVAILABLE_DEV"
|
|
129
|
+
);
|
|
113
130
|
}
|
|
114
131
|
const isLowerVersion = this.provider.isLowerVersion;
|
|
115
132
|
try {
|
|
116
133
|
if (isLowerVersion(extraVersionInfo.entryVersion, minimumVersion)) {
|
|
117
|
-
return emitUnavailable(
|
|
134
|
+
return emitUnavailable(
|
|
135
|
+
`Entry Version (${extraVersionInfo.entryVersion}) < MinimumVersion (${minimumVersion})`,
|
|
136
|
+
"UNAVAILABLE_VERSION",
|
|
137
|
+
extraVersionInfo
|
|
138
|
+
);
|
|
118
139
|
}
|
|
119
140
|
this.logger?.info(`Current version is ${extraVersionInfo.appVersion}, new version is ${version}`);
|
|
120
141
|
if (!isLowerVersion(extraVersionInfo.appVersion, version)) {
|
|
121
|
-
return emitUnavailable(
|
|
142
|
+
return emitUnavailable(
|
|
143
|
+
`Current version (${extraVersionInfo.appVersion}) > New version (${version})`,
|
|
144
|
+
"UNAVAILABLE_VERSION",
|
|
145
|
+
extraVersionInfo
|
|
146
|
+
);
|
|
122
147
|
}
|
|
123
148
|
this.logger?.info(`Update available: ${version}`);
|
|
124
149
|
this.emit("update-available", extraVersionInfo);
|
|
@@ -126,7 +151,11 @@ var Updater = class extends EventEmitter {
|
|
|
126
151
|
return true;
|
|
127
152
|
} catch {
|
|
128
153
|
const msg = "Fail to parse version string";
|
|
129
|
-
this.err(
|
|
154
|
+
this.err(
|
|
155
|
+
"Check update failed",
|
|
156
|
+
"ERR_VALIDATE",
|
|
157
|
+
msg
|
|
158
|
+
);
|
|
130
159
|
return emitUnavailable(msg, "UNAVAILABLE_ERROR", extraVersionInfo);
|
|
131
160
|
}
|
|
132
161
|
}
|
|
@@ -134,24 +163,40 @@ var Updater = class extends EventEmitter {
|
|
|
134
163
|
const _sig = info?.signature ?? this.info?.signature;
|
|
135
164
|
const _version = info?.version ?? this.info?.version;
|
|
136
165
|
if (!_sig || !_version) {
|
|
137
|
-
this.err(
|
|
166
|
+
this.err(
|
|
167
|
+
"Download failed",
|
|
168
|
+
"ERR_PARAM",
|
|
169
|
+
"No update signature, please call `checkUpdate` first or manually setup params"
|
|
170
|
+
);
|
|
138
171
|
return false;
|
|
139
172
|
}
|
|
140
173
|
if (!data && !this.provider) {
|
|
141
|
-
this.err(
|
|
174
|
+
this.err(
|
|
175
|
+
"Download failed",
|
|
176
|
+
"ERR_PARAM",
|
|
177
|
+
"No update asar buffer and provider"
|
|
178
|
+
);
|
|
142
179
|
return false;
|
|
143
180
|
}
|
|
144
181
|
const buffer = await this.fetch("buffer", data ? Buffer.from(data) : void 0);
|
|
145
182
|
if (!buffer) {
|
|
146
|
-
this.err(
|
|
183
|
+
this.err(
|
|
184
|
+
"Download failed",
|
|
185
|
+
"ERR_PARAM",
|
|
186
|
+
"No update asar file buffer"
|
|
187
|
+
);
|
|
147
188
|
return false;
|
|
148
189
|
}
|
|
149
|
-
this.logger?.debug("
|
|
190
|
+
this.logger?.debug("Validation start");
|
|
150
191
|
if (!await this.provider.verifySignaure(buffer, _version, _sig, this.CERT)) {
|
|
151
|
-
this.err(
|
|
192
|
+
this.err(
|
|
193
|
+
"Download failed",
|
|
194
|
+
"ERR_VALIDATE",
|
|
195
|
+
"Invalid update asar file"
|
|
196
|
+
);
|
|
152
197
|
return false;
|
|
153
198
|
}
|
|
154
|
-
this.logger?.debug("
|
|
199
|
+
this.logger?.debug("Validation end");
|
|
155
200
|
try {
|
|
156
201
|
const tmpFilePath = `${getPathFromAppNameAsar()}.tmp`;
|
|
157
202
|
this.logger?.debug(`Install to ${tmpFilePath}`);
|
|
@@ -161,7 +206,11 @@ var Updater = class extends EventEmitter {
|
|
|
161
206
|
this.emit("update-downloaded");
|
|
162
207
|
return true;
|
|
163
208
|
} catch (error) {
|
|
164
|
-
this.err(
|
|
209
|
+
this.err(
|
|
210
|
+
"Download failed",
|
|
211
|
+
"ERR_DOWNLOAD",
|
|
212
|
+
`Fail to unwrap asar file, ${error}`
|
|
213
|
+
);
|
|
165
214
|
return false;
|
|
166
215
|
}
|
|
167
216
|
}
|
package/dist/provider.cjs
CHANGED
|
@@ -93,14 +93,14 @@ async function downloadUtil(url, headers, onResponse) {
|
|
|
93
93
|
function trimData(data) {
|
|
94
94
|
return data.trim().slice(0, 5e3).replace(/\s+/g, " ");
|
|
95
95
|
}
|
|
96
|
-
var
|
|
96
|
+
var resolveJson = (data, resolve, reject) => {
|
|
97
97
|
try {
|
|
98
98
|
resolve(JSON.parse(data));
|
|
99
99
|
} catch {
|
|
100
100
|
reject(new Error(`Invalid json, "${trimData(data)}"`));
|
|
101
101
|
}
|
|
102
102
|
};
|
|
103
|
-
async function
|
|
103
|
+
async function defaultDownloadText(url, headers, signal, resolveData) {
|
|
104
104
|
return await downloadUtil(
|
|
105
105
|
url,
|
|
106
106
|
headers,
|
|
@@ -116,7 +116,7 @@ async function defaultDownloadJSON(url, headers, signal, resolveData = defaultRe
|
|
|
116
116
|
);
|
|
117
117
|
}
|
|
118
118
|
async function defaultDownloadUpdateJSON(url, headers, signal) {
|
|
119
|
-
return await
|
|
119
|
+
return await defaultDownloadText(
|
|
120
120
|
url,
|
|
121
121
|
headers,
|
|
122
122
|
signal,
|
|
@@ -207,23 +207,10 @@ var BaseProvider = class {
|
|
|
207
207
|
*/
|
|
208
208
|
unzipFile = defaultUnzipFile;
|
|
209
209
|
};
|
|
210
|
-
var
|
|
211
|
-
name = "GithubProvider";
|
|
212
|
-
options;
|
|
213
|
-
/**
|
|
214
|
-
* Update Provider for Github repo
|
|
215
|
-
* - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
|
|
216
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
|
|
217
|
-
*
|
|
218
|
-
* you can setup `urlHandler` in {@link GitHubProviderOptions} to modify url before request
|
|
219
|
-
* @param options provider options
|
|
220
|
-
*/
|
|
210
|
+
var BaseGitHubProvider = class extends BaseProvider {
|
|
221
211
|
constructor(options) {
|
|
222
212
|
super();
|
|
223
213
|
this.options = options;
|
|
224
|
-
if (!options.branch) {
|
|
225
|
-
this.options.branch = "HEAD";
|
|
226
|
-
}
|
|
227
214
|
}
|
|
228
215
|
get urlHandler() {
|
|
229
216
|
return this.options.urlHandler;
|
|
@@ -238,19 +225,15 @@ var GitHubProvider = class extends BaseProvider {
|
|
|
238
225
|
);
|
|
239
226
|
return (await this.urlHandler?.(url$1) || url$1).toString();
|
|
240
227
|
}
|
|
241
|
-
getHeaders(accept) {
|
|
242
|
-
return { Accept: `application/${accept}`, ...this.options.extraHeaders };
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* @inheritdoc
|
|
246
|
-
*/
|
|
247
228
|
async downloadJSON(name, versionPath, signal) {
|
|
248
229
|
const { beta, version, ...info } = await defaultDownloadUpdateJSON(
|
|
249
|
-
await this.parseURL(
|
|
230
|
+
await this.parseURL(await this.getVersionURL(versionPath, signal)),
|
|
250
231
|
this.getHeaders("json"),
|
|
251
232
|
signal
|
|
252
233
|
);
|
|
253
|
-
const getURL = (ver) => this.parseURL(
|
|
234
|
+
const getURL = (ver) => this.parseURL(
|
|
235
|
+
`releases/download/v${ver}/${name}-${ver}.asar.gz`
|
|
236
|
+
);
|
|
254
237
|
return {
|
|
255
238
|
...info,
|
|
256
239
|
version,
|
|
@@ -273,32 +256,22 @@ var GitHubProvider = class extends BaseProvider {
|
|
|
273
256
|
);
|
|
274
257
|
}
|
|
275
258
|
};
|
|
259
|
+
|
|
260
|
+
// src/provider/github/api.ts
|
|
276
261
|
var ERROR_MSG = "Cannot find UpdateJSON in latest release";
|
|
277
|
-
var GitHubApiProvider = class extends
|
|
262
|
+
var GitHubApiProvider = class extends BaseGitHubProvider {
|
|
278
263
|
name = "GithubApiProvider";
|
|
279
|
-
options;
|
|
280
264
|
/**
|
|
281
265
|
* Update Provider for Github API, you need to upload `version.json` to release as well
|
|
282
266
|
* - check update from `https://api.github.com/repos/{user}/{repo}/releases?per_page=1`
|
|
283
267
|
* - download update json and get version and download url
|
|
284
268
|
* - download update asar from update info
|
|
285
269
|
*
|
|
286
|
-
* you can setup `urlHandler` in
|
|
270
|
+
* you can setup `urlHandler` in options to modify url before request
|
|
287
271
|
* @param options provider options
|
|
288
272
|
*/
|
|
289
273
|
constructor(options) {
|
|
290
|
-
super();
|
|
291
|
-
this.options = options;
|
|
292
|
-
}
|
|
293
|
-
get urlHandler() {
|
|
294
|
-
return this.options.urlHandler;
|
|
295
|
-
}
|
|
296
|
-
set urlHandler(handler) {
|
|
297
|
-
this.options.urlHandler = handler;
|
|
298
|
-
}
|
|
299
|
-
async parseURL(url$1) {
|
|
300
|
-
const _url = new url.URL(url$1);
|
|
301
|
-
return (await this.urlHandler?.(_url) || _url).toString();
|
|
274
|
+
super(options);
|
|
302
275
|
}
|
|
303
276
|
getHeaders(accept) {
|
|
304
277
|
return {
|
|
@@ -310,64 +283,92 @@ var GitHubApiProvider = class extends BaseProvider {
|
|
|
310
283
|
/**
|
|
311
284
|
* @inheritdoc
|
|
312
285
|
*/
|
|
313
|
-
async
|
|
286
|
+
async getVersionURL(versionPath, signal) {
|
|
314
287
|
const basename = versionPath.slice(versionPath.lastIndexOf("/") + 1);
|
|
315
|
-
const data = await
|
|
288
|
+
const data = await defaultDownloadText(
|
|
316
289
|
await this.parseURL(`https://api.github.com/repos/${this.options.user}/${this.options.repo}/releases?per_page=1`),
|
|
317
290
|
this.getHeaders("vnd.github.v3+json"),
|
|
318
|
-
signal
|
|
291
|
+
signal,
|
|
292
|
+
resolveJson
|
|
319
293
|
);
|
|
320
294
|
const versionAssets = data[0]?.assets.find((asset) => asset.name === basename);
|
|
321
295
|
if (!versionAssets) {
|
|
322
296
|
throw new Error(`${ERROR_MSG}, ${"message" in data ? data.message : "please check the release assets"}`);
|
|
323
297
|
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
...beta,
|
|
346
|
-
url: await getURL(beta.version)
|
|
347
|
-
}
|
|
348
|
-
};
|
|
298
|
+
return versionAssets.browser_download_url;
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
// src/provider/github/atom.ts
|
|
303
|
+
var GitHubAtomProvider = class extends BaseGitHubProvider {
|
|
304
|
+
name = "GithubAtomProvider";
|
|
305
|
+
/**
|
|
306
|
+
* Update Provider for Github repo
|
|
307
|
+
* - check update from `https://github.com/{user}/{repo}/releases.atom`
|
|
308
|
+
* - download update json from `https://github.com/{user}/{repo}/releases/download/v{version}/{versionPath}`
|
|
309
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
|
|
310
|
+
*
|
|
311
|
+
* you can setup `urlHandler` in options to modify url before request
|
|
312
|
+
* @param options provider options
|
|
313
|
+
*/
|
|
314
|
+
constructor(options) {
|
|
315
|
+
super(options);
|
|
316
|
+
}
|
|
317
|
+
getHeaders(accept) {
|
|
318
|
+
return { Accept: `application/${accept}`, ...this.options.extraHeaders };
|
|
349
319
|
}
|
|
350
320
|
/**
|
|
351
321
|
* @inheritdoc
|
|
352
322
|
*/
|
|
353
|
-
async
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
return await defaultDownloadAsar(
|
|
358
|
-
info.url,
|
|
359
|
-
this.getHeaders("octet-stream"),
|
|
323
|
+
async getVersionURL(versionPath, signal) {
|
|
324
|
+
const tag = await defaultDownloadText(
|
|
325
|
+
await this.parseURL(`releases.atom`),
|
|
326
|
+
this.getHeaders("xml"),
|
|
360
327
|
signal,
|
|
361
|
-
|
|
328
|
+
(data, resolve, reject) => {
|
|
329
|
+
const result = data.match(/<entry>\s*<id>([^<]*\/)?([^/<]+)<\/id>/)?.[2];
|
|
330
|
+
if (result) {
|
|
331
|
+
resolve(result);
|
|
332
|
+
} else {
|
|
333
|
+
reject("No tag matched");
|
|
334
|
+
}
|
|
335
|
+
}
|
|
362
336
|
);
|
|
337
|
+
return `releases/download/v${tag}/${versionPath}`;
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
var GitHubProvider = class extends BaseGitHubProvider {
|
|
341
|
+
name = "GithubProvider";
|
|
342
|
+
/**
|
|
343
|
+
* Update Provider for Github repo
|
|
344
|
+
* - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
|
|
345
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
|
|
346
|
+
*
|
|
347
|
+
* you can setup `urlHandler` in options to modify url before request
|
|
348
|
+
* @param options provider options
|
|
349
|
+
*/
|
|
350
|
+
constructor(options) {
|
|
351
|
+
super(options);
|
|
352
|
+
if (!options.branch) {
|
|
353
|
+
this.options.branch = "HEAD";
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
getHeaders(accept) {
|
|
357
|
+
return { Accept: `application/${accept}`, ...this.options.extraHeaders };
|
|
358
|
+
}
|
|
359
|
+
getVersionURL(versionPath) {
|
|
360
|
+
return `raw/${this.options.branch}/${versionPath}`;
|
|
363
361
|
}
|
|
364
362
|
};
|
|
365
363
|
|
|
364
|
+
exports.BaseGitHubProvider = BaseGitHubProvider;
|
|
366
365
|
exports.BaseProvider = BaseProvider;
|
|
367
366
|
exports.GitHubApiProvider = GitHubApiProvider;
|
|
367
|
+
exports.GitHubAtomProvider = GitHubAtomProvider;
|
|
368
368
|
exports.GitHubProvider = GitHubProvider;
|
|
369
369
|
exports.defaultDownloadAsar = defaultDownloadAsar;
|
|
370
|
-
exports.
|
|
370
|
+
exports.defaultDownloadText = defaultDownloadText;
|
|
371
371
|
exports.defaultDownloadUpdateJSON = defaultDownloadUpdateJSON;
|
|
372
372
|
exports.downloadUtil = downloadUtil;
|
|
373
373
|
exports.getHeader = getHeader;
|
|
374
|
+
exports.resolveJson = resolveJson;
|