electron-incremental-update 2.4.3 → 3.0.0-beta.2

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.
Files changed (47) hide show
  1. package/README.md +48 -40
  2. package/dist/download-BN4uMS4_.d.mts +39 -0
  3. package/dist/download-DO7iuxEJ.d.cts +39 -0
  4. package/dist/electron-BFoZUBhU.cjs +320 -0
  5. package/dist/electron-CJIoO4ny.mjs +180 -0
  6. package/dist/index.cjs +259 -331
  7. package/dist/index.d.cts +179 -169
  8. package/dist/index.d.mts +204 -0
  9. package/dist/index.mjs +271 -0
  10. package/dist/provider.cjs +142 -330
  11. package/dist/provider.d.cts +113 -114
  12. package/dist/provider.d.mts +133 -0
  13. package/dist/provider.mjs +152 -0
  14. package/dist/types-BM9Jfu7q.d.cts +154 -0
  15. package/dist/types-DASqEPXE.d.mts +154 -0
  16. package/dist/utils.cjs +43 -381
  17. package/dist/utils.d.cts +117 -85
  18. package/dist/utils.d.mts +161 -0
  19. package/dist/utils.mjs +5 -0
  20. package/dist/version--eVB2A7n.mjs +72 -0
  21. package/dist/version-aPrLuz_-.cjs +129 -0
  22. package/dist/vite.d.mts +565 -0
  23. package/dist/vite.mjs +1222 -0
  24. package/dist/zip-BCC7FAQ_.cjs +264 -0
  25. package/dist/zip-Dwm7s1C9.mjs +185 -0
  26. package/package.json +65 -64
  27. package/dist/chunk-AAAM44NW.js +0 -70
  28. package/dist/chunk-IVHNGRZY.js +0 -122
  29. package/dist/chunk-PD4EV4MM.js +0 -147
  30. package/dist/index.d.ts +0 -194
  31. package/dist/index.js +0 -309
  32. package/dist/provider.d.ts +0 -134
  33. package/dist/provider.js +0 -152
  34. package/dist/types-CU7GyVez.d.cts +0 -151
  35. package/dist/types-CU7GyVez.d.ts +0 -151
  36. package/dist/utils.d.ts +0 -129
  37. package/dist/utils.js +0 -3
  38. package/dist/vite.d.ts +0 -533
  39. package/dist/vite.js +0 -945
  40. package/dist/zip-Blmn2vzE.d.cts +0 -71
  41. package/dist/zip-CnSv_Njj.d.ts +0 -71
  42. package/provider.d.ts +0 -1
  43. package/provider.js +0 -1
  44. package/utils.d.ts +0 -1
  45. package/utils.js +0 -1
  46. package/vite.d.ts +0 -1
  47. 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 };
@@ -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 };