electron-incremental-update 2.4.3 → 3.0.0-beta.3
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/README.md +48 -40
- package/dist/download-BN4uMS4_.d.mts +39 -0
- package/dist/download-DO7iuxEJ.d.cts +39 -0
- package/dist/electron-DH-Uyikp.cjs +321 -0
- package/dist/electron-OKQIYbcw.mjs +181 -0
- package/dist/index.cjs +261 -331
- package/dist/index.d.cts +179 -169
- package/dist/index.d.mts +204 -0
- package/dist/index.mjs +273 -0
- package/dist/provider.cjs +142 -330
- package/dist/provider.d.cts +113 -114
- package/dist/provider.d.mts +133 -0
- package/dist/provider.mjs +152 -0
- package/dist/types-BM9Jfu7q.d.cts +154 -0
- package/dist/types-DASqEPXE.d.mts +154 -0
- package/dist/utils.cjs +43 -381
- package/dist/utils.d.cts +120 -85
- package/dist/utils.d.mts +164 -0
- package/dist/utils.mjs +5 -0
- package/dist/version--eVB2A7n.mjs +72 -0
- package/dist/version-aPrLuz_-.cjs +129 -0
- package/dist/vite.d.mts +521 -0
- package/dist/vite.mjs +1094 -0
- package/dist/zip-BCC7FAQ_.cjs +264 -0
- package/dist/zip-Dwm7s1C9.mjs +185 -0
- package/package.json +66 -64
- package/dist/chunk-AAAM44NW.js +0 -70
- package/dist/chunk-IVHNGRZY.js +0 -122
- package/dist/chunk-PD4EV4MM.js +0 -147
- package/dist/index.d.ts +0 -194
- package/dist/index.js +0 -309
- package/dist/provider.d.ts +0 -134
- package/dist/provider.js +0 -152
- package/dist/types-CU7GyVez.d.cts +0 -151
- package/dist/types-CU7GyVez.d.ts +0 -151
- package/dist/utils.d.ts +0 -129
- package/dist/utils.js +0 -3
- package/dist/vite.d.ts +0 -533
- package/dist/vite.js +0 -945
- package/dist/zip-Blmn2vzE.d.cts +0 -71
- package/dist/zip-CnSv_Njj.d.ts +0 -71
- package/provider.d.ts +0 -1
- package/provider.js +0 -1
- package/utils.d.ts +0 -1
- package/utils.js +0 -1
- package/vite.d.ts +0 -1
- package/vite.js +0 -1
package/dist/index.js
DELETED
|
@@ -1,309 +0,0 @@
|
|
|
1
|
-
import { isDev, getEntryVersion, getAppVersion, getPathFromAppNameAsar, restartApp } from './chunk-IVHNGRZY.js';
|
|
2
|
-
import { isUpdateJSON, __require } from './chunk-AAAM44NW.js';
|
|
3
|
-
import fs from 'fs';
|
|
4
|
-
import path from 'path';
|
|
5
|
-
import electron2 from 'electron';
|
|
6
|
-
import { EventEmitter } from 'events';
|
|
7
|
-
|
|
8
|
-
// src/entry/types.ts
|
|
9
|
-
var UpdaterError = class extends Error {
|
|
10
|
-
code;
|
|
11
|
-
constructor(code, info) {
|
|
12
|
-
super(`[${code}] ${info}`);
|
|
13
|
-
this.code = code;
|
|
14
|
-
}
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
// src/entry/updater.ts
|
|
18
|
-
var Updater = class extends EventEmitter {
|
|
19
|
-
CERT;
|
|
20
|
-
controller;
|
|
21
|
-
info;
|
|
22
|
-
tmpFilePath;
|
|
23
|
-
processing = false;
|
|
24
|
-
provider;
|
|
25
|
-
/**
|
|
26
|
-
* Updater logger
|
|
27
|
-
*/
|
|
28
|
-
logger;
|
|
29
|
-
/**
|
|
30
|
-
* Whether to receive beta update
|
|
31
|
-
*/
|
|
32
|
-
receiveBeta;
|
|
33
|
-
/**
|
|
34
|
-
* Whether force update in DEV
|
|
35
|
-
*/
|
|
36
|
-
forceUpdate;
|
|
37
|
-
/**
|
|
38
|
-
* Initialize incremental updater
|
|
39
|
-
* @param options UpdaterOption
|
|
40
|
-
*/
|
|
41
|
-
constructor(options = {}) {
|
|
42
|
-
super();
|
|
43
|
-
this.provider = options.provider;
|
|
44
|
-
this.receiveBeta = options.receiveBeta;
|
|
45
|
-
this.CERT = options.SIGNATURE_CERT || __EIU_SIGNATURE_CERT__;
|
|
46
|
-
this.logger = options.logger;
|
|
47
|
-
this.controller = new AbortController();
|
|
48
|
-
if (isDev && !this.logger) {
|
|
49
|
-
this.logger = {
|
|
50
|
-
info: (...args) => console.log("[EIU-INFO ]", ...args),
|
|
51
|
-
debug: (...args) => console.log("[EIU-DEBUG]", ...args),
|
|
52
|
-
warn: (...args) => console.log("[EIU-WARN ]", ...args),
|
|
53
|
-
error: (...args) => console.error("[EIU-ERROR]", ...args)
|
|
54
|
-
};
|
|
55
|
-
this.logger.info("No logger set, enable dev-only logger");
|
|
56
|
-
}
|
|
57
|
-
if (!this.provider) {
|
|
58
|
-
this.logger?.debug("WARN: No update provider");
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
async fetch(format, data) {
|
|
62
|
-
if (typeof data === "object") {
|
|
63
|
-
if (format === "json" && isUpdateJSON(data) || format === "buffer" && Buffer.isBuffer(data)) {
|
|
64
|
-
return data;
|
|
65
|
-
} else {
|
|
66
|
-
this.err("Invalid type", "ERR_PARAM", `Invalid type at format '${format}': ${JSON.stringify(data)}`);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
this.logger?.debug(`Download from \`${this.provider.name}\``);
|
|
71
|
-
try {
|
|
72
|
-
const result = format === "json" ? await this.provider.downloadJSON(
|
|
73
|
-
electron2.app.name,
|
|
74
|
-
__EIU_VERSION_PATH__,
|
|
75
|
-
this.controller.signal
|
|
76
|
-
) : await this.provider.downloadAsar(
|
|
77
|
-
this.info,
|
|
78
|
-
this.controller.signal,
|
|
79
|
-
(info) => this.emit("download-progress", info)
|
|
80
|
-
);
|
|
81
|
-
this.logger?.debug(`Download ${format} success${format === "buffer" ? `, file size: ${result.length}` : ""}`);
|
|
82
|
-
return result;
|
|
83
|
-
} catch (e) {
|
|
84
|
-
this.err(`Fetch ${format} failed`, "ERR_NETWORK", e instanceof Error ? e.message : e.toString());
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
cleanup() {
|
|
88
|
-
if (this.tmpFilePath && fs.existsSync(this.tmpFilePath)) {
|
|
89
|
-
try {
|
|
90
|
-
fs.unlinkSync(this.tmpFilePath);
|
|
91
|
-
this.tmpFilePath = void 0;
|
|
92
|
-
this.logger?.debug("Cleaned up temporary update file");
|
|
93
|
-
} catch (error) {
|
|
94
|
-
this.logger?.warn(`Failed to clean up temporary update file: ${error}`);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Handle error message and emit error event
|
|
100
|
-
*/
|
|
101
|
-
err(msg, code, errorInfo) {
|
|
102
|
-
const err = new UpdaterError(code, errorInfo);
|
|
103
|
-
this.logger?.error(`[${code}] ${msg}`, err);
|
|
104
|
-
this.cleanup();
|
|
105
|
-
this.emit("error", err);
|
|
106
|
-
}
|
|
107
|
-
async checkForUpdates(data) {
|
|
108
|
-
const emitUnavailable = (msg, code, info2) => {
|
|
109
|
-
this.logger?.info(`[${code}] ${msg}`);
|
|
110
|
-
this.logger?.debug("Check update end");
|
|
111
|
-
this.processing = false;
|
|
112
|
-
this.emit("update-not-available", code, msg, info2);
|
|
113
|
-
return false;
|
|
114
|
-
};
|
|
115
|
-
if (this.processing) {
|
|
116
|
-
this.logger?.info("Updater is already processing, skip check update");
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
this.processing = true;
|
|
120
|
-
this.logger?.debug("Check update start");
|
|
121
|
-
if (!data && !this.provider) {
|
|
122
|
-
const msg = "No update json or provider";
|
|
123
|
-
this.err("Check update failed", "ERR_PARAM", msg);
|
|
124
|
-
return emitUnavailable(
|
|
125
|
-
msg,
|
|
126
|
-
"UNAVAILABLE_ERROR"
|
|
127
|
-
);
|
|
128
|
-
}
|
|
129
|
-
const _data = await this.fetch("json", data);
|
|
130
|
-
if (!_data) {
|
|
131
|
-
return emitUnavailable(
|
|
132
|
-
"Failed to get update info",
|
|
133
|
-
"UNAVAILABLE_ERROR"
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
const { signature, version, minimumVersion, url, ...rest } = this.receiveBeta ? _data.beta : _data;
|
|
137
|
-
const info = { signature, minimumVersion, version, url };
|
|
138
|
-
const extraVersionInfo = {
|
|
139
|
-
signature,
|
|
140
|
-
minimumVersion,
|
|
141
|
-
version,
|
|
142
|
-
appVersion: getAppVersion(),
|
|
143
|
-
entryVersion: getEntryVersion(),
|
|
144
|
-
...rest
|
|
145
|
-
};
|
|
146
|
-
this.logger?.debug(`Checked update, version: ${version}, signature: ${signature}`);
|
|
147
|
-
if (isDev && !this.forceUpdate && !data) {
|
|
148
|
-
return emitUnavailable(
|
|
149
|
-
"Skip check update in dev mode. To force update, set `updater.forceUpdate` to true or call checkUpdate with UpdateJSON",
|
|
150
|
-
"UNAVAILABLE_DEV"
|
|
151
|
-
);
|
|
152
|
-
}
|
|
153
|
-
const isLowerVersion = this.provider.isLowerVersion;
|
|
154
|
-
try {
|
|
155
|
-
if (isLowerVersion(extraVersionInfo.entryVersion, minimumVersion)) {
|
|
156
|
-
return emitUnavailable(
|
|
157
|
-
`Entry Version (${extraVersionInfo.entryVersion}) < MinimumVersion (${minimumVersion})`,
|
|
158
|
-
"UNAVAILABLE_VERSION",
|
|
159
|
-
extraVersionInfo
|
|
160
|
-
);
|
|
161
|
-
}
|
|
162
|
-
this.logger?.info(`Current version is ${extraVersionInfo.appVersion}, new version is ${version}`);
|
|
163
|
-
if (!isLowerVersion(extraVersionInfo.appVersion, version)) {
|
|
164
|
-
return emitUnavailable(
|
|
165
|
-
`Current version (${extraVersionInfo.appVersion}) > New version (${version})`,
|
|
166
|
-
"UNAVAILABLE_VERSION",
|
|
167
|
-
extraVersionInfo
|
|
168
|
-
);
|
|
169
|
-
}
|
|
170
|
-
this.logger?.info(`Update available: ${version}`);
|
|
171
|
-
this.info = info;
|
|
172
|
-
this.processing = false;
|
|
173
|
-
this.logger?.debug("Check update end");
|
|
174
|
-
this.emit("update-available", extraVersionInfo);
|
|
175
|
-
return true;
|
|
176
|
-
} catch {
|
|
177
|
-
const msg = "Fail to parse version string";
|
|
178
|
-
this.err(
|
|
179
|
-
"Check update failed",
|
|
180
|
-
"ERR_VALIDATE",
|
|
181
|
-
msg
|
|
182
|
-
);
|
|
183
|
-
return emitUnavailable(msg, "UNAVAILABLE_ERROR", extraVersionInfo);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
async downloadUpdate(data, info) {
|
|
187
|
-
const emitError = (code, errorInfo) => {
|
|
188
|
-
this.err(`Download update failed`, code, errorInfo);
|
|
189
|
-
this.logger?.debug("Download update end");
|
|
190
|
-
this.processing = false;
|
|
191
|
-
return false;
|
|
192
|
-
};
|
|
193
|
-
if (this.processing) {
|
|
194
|
-
this.logger?.info("Updater is already processing, skip download update");
|
|
195
|
-
return false;
|
|
196
|
-
}
|
|
197
|
-
this.processing = true;
|
|
198
|
-
this.logger?.debug("Download update start");
|
|
199
|
-
const _sig = info?.signature ?? this.info?.signature;
|
|
200
|
-
const _version = info?.version ?? this.info?.version;
|
|
201
|
-
if (!_sig || !_version) {
|
|
202
|
-
return emitError(
|
|
203
|
-
"ERR_PARAM",
|
|
204
|
-
"No update signature, please call `checkUpdate` first or manually setup params"
|
|
205
|
-
);
|
|
206
|
-
}
|
|
207
|
-
if (!data && !this.provider) {
|
|
208
|
-
return emitError(
|
|
209
|
-
"ERR_PARAM",
|
|
210
|
-
"No update asar buffer and provider"
|
|
211
|
-
);
|
|
212
|
-
}
|
|
213
|
-
const buffer = await this.fetch("buffer", data ? Buffer.from(data) : void 0);
|
|
214
|
-
if (!buffer) {
|
|
215
|
-
return emitError(
|
|
216
|
-
"ERR_PARAM",
|
|
217
|
-
"No update asar file buffer"
|
|
218
|
-
);
|
|
219
|
-
}
|
|
220
|
-
this.logger?.debug("Validation start");
|
|
221
|
-
if (!await this.provider.verifySignaure(buffer, _version, _sig, this.CERT)) {
|
|
222
|
-
return emitError(
|
|
223
|
-
"ERR_VALIDATE",
|
|
224
|
-
"Invalid update asar file"
|
|
225
|
-
);
|
|
226
|
-
}
|
|
227
|
-
this.logger?.debug("Validation end");
|
|
228
|
-
try {
|
|
229
|
-
this.tmpFilePath = `${getPathFromAppNameAsar()}.tmp`;
|
|
230
|
-
this.logger?.debug(`Install to ${this.tmpFilePath}`);
|
|
231
|
-
fs.writeFileSync(this.tmpFilePath, await this.provider.unzipFile(buffer));
|
|
232
|
-
this.logger?.info(`Download success, version: ${_version}`);
|
|
233
|
-
this.info = void 0;
|
|
234
|
-
this.emit("update-downloaded");
|
|
235
|
-
this.processing = false;
|
|
236
|
-
this.logger?.debug("Download update end");
|
|
237
|
-
return true;
|
|
238
|
-
} catch (error) {
|
|
239
|
-
this.cleanup();
|
|
240
|
-
return emitError(
|
|
241
|
-
"ERR_DOWNLOAD",
|
|
242
|
-
`Failed to write update file: ${error instanceof Error ? error.message : error}`
|
|
243
|
-
);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* quit App and install
|
|
248
|
-
*/
|
|
249
|
-
quitAndInstall() {
|
|
250
|
-
this.logger?.info("Quit and install");
|
|
251
|
-
restartApp();
|
|
252
|
-
}
|
|
253
|
-
cancel() {
|
|
254
|
-
if (this.controller.signal.aborted) {
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
this.controller.abort();
|
|
258
|
-
this.cleanup();
|
|
259
|
-
this.logger?.info("Cancel update");
|
|
260
|
-
this.emit("update-cancelled");
|
|
261
|
-
this.controller = new AbortController();
|
|
262
|
-
}
|
|
263
|
-
};
|
|
264
|
-
async function autoUpdate(updater) {
|
|
265
|
-
if (await updater.checkForUpdates() && await updater.downloadUpdate()) {
|
|
266
|
-
updater.quitAndInstall();
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
// src/entry/core.ts
|
|
271
|
-
function startupWithUpdater(fn) {
|
|
272
|
-
return fn;
|
|
273
|
-
}
|
|
274
|
-
var defaultOnInstall = (install, _, __, logger) => {
|
|
275
|
-
install();
|
|
276
|
-
logger?.info(`update success!`);
|
|
277
|
-
};
|
|
278
|
-
async function createElectronApp(appOptions = {}) {
|
|
279
|
-
const appNameAsarPath = getPathFromAppNameAsar();
|
|
280
|
-
const {
|
|
281
|
-
mainPath = isDev ? path.join(electron2.app.getAppPath(), __EIU_ELECTRON_DIST_PATH__, "main", __EIU_MAIN_FILE__) : path.join(path.dirname(electron2.app.getAppPath()), __EIU_ASAR_BASE_NAME__, "main", __EIU_MAIN_FILE__),
|
|
282
|
-
updater,
|
|
283
|
-
onInstall = defaultOnInstall,
|
|
284
|
-
beforeStart,
|
|
285
|
-
onStartError
|
|
286
|
-
} = appOptions;
|
|
287
|
-
const updaterInstance = typeof updater === "object" || !updater ? new Updater(updater) : await updater();
|
|
288
|
-
const logger = updaterInstance.logger;
|
|
289
|
-
try {
|
|
290
|
-
const tempAsarPath = `${appNameAsarPath}.tmp`;
|
|
291
|
-
if (fs.existsSync(tempAsarPath)) {
|
|
292
|
-
logger?.info(`Installing new asar from ${tempAsarPath}`);
|
|
293
|
-
await onInstall(() => fs.renameSync(tempAsarPath, appNameAsarPath), tempAsarPath, appNameAsarPath, logger);
|
|
294
|
-
}
|
|
295
|
-
await beforeStart?.(mainPath, logger);
|
|
296
|
-
if (__EIU_IS_ESM__) {
|
|
297
|
-
(await import(`file://${mainPath}`)).default(updaterInstance);
|
|
298
|
-
} else {
|
|
299
|
-
__require(mainPath)(updaterInstance);
|
|
300
|
-
}
|
|
301
|
-
} catch (error) {
|
|
302
|
-
logger?.error("startup error, exit", error);
|
|
303
|
-
onStartError?.(error, logger);
|
|
304
|
-
electron2.app.quit();
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
var initApp = createElectronApp;
|
|
308
|
-
|
|
309
|
-
export { Updater, UpdaterError, autoUpdate, createElectronApp, initApp, startupWithUpdater };
|
package/dist/provider.d.ts
DELETED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { c as defaultVerifySignature, l as defaultUnzipFile } from './zip-CnSv_Njj.js';
|
|
2
|
-
export { j as defaultDownloadAsar, f as defaultDownloadText, i as defaultDownloadUpdateJSON, e as downloadUtil, g as getHeader, r as resolveJson } from './zip-CnSv_Njj.js';
|
|
3
|
-
import { I as IProvider, d as defaultIsLowerVersion, b as UpdateJSONWithURL, e as UpdateInfoWithURL, D as DownloadingInfo, f as URLHandler } from './types-CU7GyVez.js';
|
|
4
|
-
import { Promisable } from '@subframe7536/type-utils';
|
|
5
|
-
import 'electron';
|
|
6
|
-
import 'node:url';
|
|
7
|
-
|
|
8
|
-
declare abstract class BaseProvider implements IProvider {
|
|
9
|
-
name: string;
|
|
10
|
-
/**
|
|
11
|
-
* @inheritdoc
|
|
12
|
-
*/
|
|
13
|
-
isLowerVersion: typeof defaultIsLowerVersion;
|
|
14
|
-
/**
|
|
15
|
-
* @inheritdoc
|
|
16
|
-
*/
|
|
17
|
-
verifySignaure: typeof defaultVerifySignature;
|
|
18
|
-
/**
|
|
19
|
-
* @inheritdoc
|
|
20
|
-
*/
|
|
21
|
-
unzipFile: typeof defaultUnzipFile;
|
|
22
|
-
/**
|
|
23
|
-
* @inheritdoc
|
|
24
|
-
*/
|
|
25
|
-
abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<UpdateJSONWithURL>;
|
|
26
|
-
/**
|
|
27
|
-
* @inheritdoc
|
|
28
|
-
*/
|
|
29
|
-
abstract downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
interface BaseGitHubProviderOptions {
|
|
33
|
-
/**
|
|
34
|
-
* Github user name
|
|
35
|
-
*/
|
|
36
|
-
user: string;
|
|
37
|
-
/**
|
|
38
|
-
* Github repo name
|
|
39
|
-
*/
|
|
40
|
-
repo: string;
|
|
41
|
-
/**
|
|
42
|
-
* Extra headers
|
|
43
|
-
*/
|
|
44
|
-
extraHeaders?: Record<string, string>;
|
|
45
|
-
/**
|
|
46
|
-
* Custom url handler ({@link https://github.com/XIU2/UserScript/blob/master/GithubEnhanced-High-Speed-Download.user.js#L40 some public CDN links})
|
|
47
|
-
* @example
|
|
48
|
-
* (url) => {
|
|
49
|
-
* url.hostname = 'mirror.ghproxy.com'
|
|
50
|
-
* url.pathname = 'https://github.com' + url.pathname
|
|
51
|
-
* return url
|
|
52
|
-
* }
|
|
53
|
-
*/
|
|
54
|
-
urlHandler?: URLHandler;
|
|
55
|
-
}
|
|
56
|
-
declare abstract class BaseGitHubProvider<T extends BaseGitHubProviderOptions = BaseGitHubProviderOptions> extends BaseProvider {
|
|
57
|
-
protected options: T;
|
|
58
|
-
constructor(options: T);
|
|
59
|
-
get urlHandler(): URLHandler | undefined;
|
|
60
|
-
set urlHandler(handler: URLHandler);
|
|
61
|
-
protected parseURL(extraPath: string): Promise<string>;
|
|
62
|
-
protected abstract getHeaders(accept: string): Record<string, string>;
|
|
63
|
-
protected abstract getVersionURL(versionPath: string, signal: AbortSignal): Promisable<string>;
|
|
64
|
-
downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<UpdateJSONWithURL>;
|
|
65
|
-
/**
|
|
66
|
-
* @inheritdoc
|
|
67
|
-
*/
|
|
68
|
-
downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
interface GitHubApiProviderOptions extends BaseGitHubProviderOptions {
|
|
72
|
-
token?: string;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Update Provider for Github API, you need to upload `version.json` to release as well
|
|
76
|
-
* - check update from `https://api.github.com/repos/{user}/{repo}/releases?per_page=1`
|
|
77
|
-
* - download update json and get version and download url
|
|
78
|
-
* - download update asar from update info
|
|
79
|
-
*
|
|
80
|
-
* you can setup `urlHandler` in options to modify url before request
|
|
81
|
-
* @param options provider options
|
|
82
|
-
*/
|
|
83
|
-
declare class GitHubApiProvider extends BaseGitHubProvider<GitHubApiProviderOptions> {
|
|
84
|
-
name: string;
|
|
85
|
-
constructor(options: GitHubApiProviderOptions);
|
|
86
|
-
protected getHeaders(accept: string): Record<string, string>;
|
|
87
|
-
/**
|
|
88
|
-
* @inheritdoc
|
|
89
|
-
*/
|
|
90
|
-
protected getVersionURL(versionPath: string, signal: AbortSignal): Promise<string>;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Update Provider for Github repo
|
|
95
|
-
* - check update from `https://github.com/{user}/{repo}/releases.atom`
|
|
96
|
-
* - download update json from `https://github.com/{user}/{repo}/releases/download/v{version}/{versionPath}`
|
|
97
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
|
|
98
|
-
*
|
|
99
|
-
* you can setup `urlHandler` in options to modify url before request
|
|
100
|
-
* @param options provider options
|
|
101
|
-
*/
|
|
102
|
-
declare class GitHubAtomProvider extends BaseGitHubProvider {
|
|
103
|
-
name: string;
|
|
104
|
-
constructor(options: BaseGitHubProviderOptions);
|
|
105
|
-
protected getHeaders(accept: string): Record<string, string>;
|
|
106
|
-
/**
|
|
107
|
-
* @inheritdoc
|
|
108
|
-
*/
|
|
109
|
-
protected getVersionURL(versionPath: string, signal: AbortSignal): Promise<string>;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
interface GitHubProviderOptions extends BaseGitHubProviderOptions {
|
|
113
|
-
/**
|
|
114
|
-
* Github branch name that fetch version
|
|
115
|
-
* @default 'HEAD'
|
|
116
|
-
*/
|
|
117
|
-
branch?: string;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Update Provider for Github repo
|
|
121
|
-
* - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
|
|
122
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
|
|
123
|
-
*
|
|
124
|
-
* you can setup `urlHandler` in options to modify url before request
|
|
125
|
-
* @param options provider options
|
|
126
|
-
*/
|
|
127
|
-
declare class GitHubProvider extends BaseGitHubProvider<GitHubProviderOptions> {
|
|
128
|
-
name: string;
|
|
129
|
-
constructor(options: GitHubProviderOptions);
|
|
130
|
-
protected getHeaders(accept: string): Record<string, string>;
|
|
131
|
-
protected getVersionURL(versionPath: string): string;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
export { BaseGitHubProvider, type BaseGitHubProviderOptions, BaseProvider, DownloadingInfo, GitHubApiProvider, type GitHubApiProviderOptions, GitHubAtomProvider, GitHubProvider, type GitHubProviderOptions, IProvider, URLHandler, UpdateInfoWithURL, UpdateJSONWithURL };
|
package/dist/provider.js
DELETED
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import { defaultVerifySignature, defaultUnzipFile, defaultDownloadUpdateJSON, defaultDownloadAsar, defaultDownloadText, resolveJson } from './chunk-PD4EV4MM.js';
|
|
2
|
-
export { defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, downloadUtil, getHeader, resolveJson } from './chunk-PD4EV4MM.js';
|
|
3
|
-
import { defaultIsLowerVersion } from './chunk-AAAM44NW.js';
|
|
4
|
-
import { URL } from 'url';
|
|
5
|
-
|
|
6
|
-
// src/provider/base.ts
|
|
7
|
-
var BaseProvider = class {
|
|
8
|
-
name = "BaseProvider";
|
|
9
|
-
/**
|
|
10
|
-
* @inheritdoc
|
|
11
|
-
*/
|
|
12
|
-
isLowerVersion = defaultIsLowerVersion;
|
|
13
|
-
/**
|
|
14
|
-
* @inheritdoc
|
|
15
|
-
*/
|
|
16
|
-
verifySignaure = defaultVerifySignature;
|
|
17
|
-
/**
|
|
18
|
-
* @inheritdoc
|
|
19
|
-
*/
|
|
20
|
-
unzipFile = defaultUnzipFile;
|
|
21
|
-
};
|
|
22
|
-
var BaseGitHubProvider = class extends BaseProvider {
|
|
23
|
-
constructor(options) {
|
|
24
|
-
super();
|
|
25
|
-
this.options = options;
|
|
26
|
-
}
|
|
27
|
-
get urlHandler() {
|
|
28
|
-
return this.options.urlHandler;
|
|
29
|
-
}
|
|
30
|
-
set urlHandler(handler) {
|
|
31
|
-
this.options.urlHandler = handler;
|
|
32
|
-
}
|
|
33
|
-
async parseURL(extraPath) {
|
|
34
|
-
const url = new URL(
|
|
35
|
-
`/${this.options.user}/${this.options.repo}/${extraPath}`,
|
|
36
|
-
"https://github.com"
|
|
37
|
-
);
|
|
38
|
-
return (await this.urlHandler?.(url) || url).toString();
|
|
39
|
-
}
|
|
40
|
-
async downloadJSON(name, versionPath, signal) {
|
|
41
|
-
const { beta, version, ...info } = await defaultDownloadUpdateJSON(
|
|
42
|
-
await this.parseURL(await this.getVersionURL(versionPath, signal)),
|
|
43
|
-
this.getHeaders("json"),
|
|
44
|
-
signal
|
|
45
|
-
);
|
|
46
|
-
const getURL = (ver) => this.parseURL(
|
|
47
|
-
`releases/download/v${ver}/${name}-${ver}.asar.gz`
|
|
48
|
-
);
|
|
49
|
-
return {
|
|
50
|
-
...info,
|
|
51
|
-
version,
|
|
52
|
-
url: await getURL(version),
|
|
53
|
-
beta: {
|
|
54
|
-
...beta,
|
|
55
|
-
url: await getURL(beta.version)
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* @inheritdoc
|
|
61
|
-
*/
|
|
62
|
-
async downloadAsar(info, signal, onDownloading) {
|
|
63
|
-
return await defaultDownloadAsar(
|
|
64
|
-
info.url,
|
|
65
|
-
this.getHeaders("octet-stream"),
|
|
66
|
-
signal,
|
|
67
|
-
onDownloading
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
// src/provider/github/api.ts
|
|
73
|
-
var ERROR_MSG = "Cannot find UpdateJSON in latest release";
|
|
74
|
-
var GitHubApiProvider = class extends BaseGitHubProvider {
|
|
75
|
-
name = "GithubApiProvider";
|
|
76
|
-
constructor(options) {
|
|
77
|
-
super(options);
|
|
78
|
-
}
|
|
79
|
-
getHeaders(accept) {
|
|
80
|
-
return {
|
|
81
|
-
Accept: `application/${accept}`,
|
|
82
|
-
...this.options.token ? { Authorization: `token ${this.options.token}` } : {},
|
|
83
|
-
...this.options.extraHeaders
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* @inheritdoc
|
|
88
|
-
*/
|
|
89
|
-
async getVersionURL(versionPath, signal) {
|
|
90
|
-
const basename = versionPath.slice(versionPath.lastIndexOf("/") + 1);
|
|
91
|
-
const data = await defaultDownloadText(
|
|
92
|
-
await this.parseURL(`https://api.github.com/repos/${this.options.user}/${this.options.repo}/releases?per_page=1`),
|
|
93
|
-
this.getHeaders("vnd.github.v3+json"),
|
|
94
|
-
signal,
|
|
95
|
-
resolveJson
|
|
96
|
-
);
|
|
97
|
-
const versionAssets = data[0]?.assets.find((asset) => asset.name === basename);
|
|
98
|
-
if (!versionAssets) {
|
|
99
|
-
throw new Error(`${ERROR_MSG}, ${"message" in data ? data.message : "please check the release assets"}`);
|
|
100
|
-
}
|
|
101
|
-
return versionAssets.browser_download_url;
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
// src/provider/github/atom.ts
|
|
106
|
-
var GitHubAtomProvider = class extends BaseGitHubProvider {
|
|
107
|
-
name = "GithubAtomProvider";
|
|
108
|
-
constructor(options) {
|
|
109
|
-
super(options);
|
|
110
|
-
}
|
|
111
|
-
getHeaders(accept) {
|
|
112
|
-
return { Accept: `application/${accept}`, ...this.options.extraHeaders };
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* @inheritdoc
|
|
116
|
-
*/
|
|
117
|
-
async getVersionURL(versionPath, signal) {
|
|
118
|
-
const tag = await defaultDownloadText(
|
|
119
|
-
await this.parseURL(`releases.atom`),
|
|
120
|
-
this.getHeaders("xml"),
|
|
121
|
-
signal,
|
|
122
|
-
(data, resolve, reject) => {
|
|
123
|
-
const result = data.match(/<entry>\s*<id>([^<]*\/)?([^/<]+)<\/id>/)?.[2];
|
|
124
|
-
if (result) {
|
|
125
|
-
resolve(result);
|
|
126
|
-
} else {
|
|
127
|
-
reject("No tag matched");
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
);
|
|
131
|
-
return `releases/download/v${tag}/${versionPath}`;
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
// src/provider/github/file.ts
|
|
136
|
-
var GitHubProvider = class extends BaseGitHubProvider {
|
|
137
|
-
name = "GithubProvider";
|
|
138
|
-
constructor(options) {
|
|
139
|
-
super(options);
|
|
140
|
-
if (!options.branch) {
|
|
141
|
-
this.options.branch = "HEAD";
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
getHeaders(accept) {
|
|
145
|
-
return { Accept: `application/${accept}`, ...this.options.extraHeaders };
|
|
146
|
-
}
|
|
147
|
-
getVersionURL(versionPath) {
|
|
148
|
-
return `raw/${this.options.branch}/${versionPath}`;
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
export { BaseGitHubProvider, BaseProvider, GitHubApiProvider, GitHubAtomProvider, GitHubProvider };
|