electron-incremental-update 3.0.0-beta.5 → 3.0.0

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.
@@ -0,0 +1,118 @@
1
+ const require_crypto = require("./crypto-BSky88mL.cjs");
2
+ let node_path = require("node:path");
3
+ node_path = require_crypto.__toESM(node_path, 1);
4
+ let node_fs_promises = require("node:fs/promises");
5
+ node_fs_promises = require_crypto.__toESM(node_fs_promises, 1);
6
+ //#region src/provider/base.ts
7
+ var BaseProvider = class {
8
+ name = "BaseProvider";
9
+ /**
10
+ * @inheritdoc
11
+ */
12
+ isLowerVersion = require_crypto.defaultIsLowerVersion;
13
+ /**
14
+ * @inheritdoc
15
+ */
16
+ verifySignature = require_crypto.defaultVerifySignature;
17
+ /**
18
+ * @inheritdoc
19
+ */
20
+ decompressFile = require_crypto.defaultDecompressFile;
21
+ };
22
+ //#endregion
23
+ //#region src/provider/local.ts
24
+ /**
25
+ * Update Provider for local development
26
+ * - download update json from `{baseDir}/{versionPath}`
27
+ * - download update asar from `{baseDir}/{name}-{version}.asar.br`
28
+ *
29
+ * This provider is useful for testing updates during development without
30
+ * needing to deploy to a remote server.
31
+ * @param options provider options
32
+ */
33
+ var LocalDevProvider = class extends BaseProvider {
34
+ name = "LocalDevProvider";
35
+ verifySignature;
36
+ options;
37
+ constructor(options) {
38
+ super();
39
+ const resolvedOptions = {
40
+ chunkSize: 64 * 1024,
41
+ chunkDelay: 30,
42
+ ...options
43
+ };
44
+ if (resolvedOptions.chunkSize <= 0) throw new Error("localDevUpdate.chunkSize must be greater than 0");
45
+ if (resolvedOptions.chunkDelay < 0) throw new Error("localDevUpdate.chunkDelay must be greater than or equal to 0");
46
+ this.options = resolvedOptions;
47
+ this.verifySignature = async function verifySignature() {
48
+ return true;
49
+ };
50
+ }
51
+ /**
52
+ * @inheritdoc
53
+ */
54
+ async downloadJSON(name, versionPath, signal) {
55
+ signal.throwIfAborted();
56
+ const { beta, version, ...info } = await this.readJSON(versionPath);
57
+ const getURL = (ver) => node_path.default.join(this.options.baseDir, `${name}-${ver}.asar.br`);
58
+ return {
59
+ ...info,
60
+ version,
61
+ url: getURL(version),
62
+ beta: {
63
+ ...beta,
64
+ url: getURL(beta.version)
65
+ }
66
+ };
67
+ }
68
+ /**
69
+ * @inheritdoc
70
+ */
71
+ async downloadAsar(info, signal, onDownloading) {
72
+ signal.throwIfAborted();
73
+ const fileBuffer = await node_fs_promises.default.readFile(info.url);
74
+ await this.emitProgress(fileBuffer, signal, onDownloading);
75
+ return fileBuffer;
76
+ }
77
+ async readJSON(versionPath) {
78
+ const fullPath = node_path.default.join(this.options.baseDir, versionPath);
79
+ const content = await node_fs_promises.default.readFile(fullPath, "utf-8");
80
+ const json = JSON.parse(content);
81
+ if (!require_crypto.isUpdateJSON(json)) throw new Error(`Invalid update json: ${content}`);
82
+ return json;
83
+ }
84
+ async emitProgress(fileBuffer, signal, onDownloading) {
85
+ if (!onDownloading) return;
86
+ const total = fileBuffer.length;
87
+ let transferred = 0;
88
+ let lastTime = Date.now();
89
+ while (transferred < total) {
90
+ signal.throwIfAborted();
91
+ const currentTime = Date.now();
92
+ const delta = Math.min(this.options.chunkSize, total - transferred);
93
+ transferred += delta;
94
+ onDownloading({
95
+ delta,
96
+ percent: Math.round(transferred / total * 100),
97
+ total,
98
+ transferred,
99
+ bps: Math.round(delta / Math.max(currentTime - lastTime, 1) * 1e3)
100
+ });
101
+ lastTime = currentTime;
102
+ if (transferred < total && this.options.chunkDelay > 0) await new Promise((resolve) => setTimeout(resolve, this.options.chunkDelay));
103
+ }
104
+ }
105
+ };
106
+ //#endregion
107
+ Object.defineProperty(exports, "BaseProvider", {
108
+ enumerable: true,
109
+ get: function() {
110
+ return BaseProvider;
111
+ }
112
+ });
113
+ Object.defineProperty(exports, "LocalDevProvider", {
114
+ enumerable: true,
115
+ get: function() {
116
+ return LocalDevProvider;
117
+ }
118
+ });
package/dist/provider.cjs CHANGED
@@ -1,27 +1,10 @@
1
- const require_version = require('./version-aPrLuz_-.cjs');
2
- const require_zip = require('./zip-BCC7FAQ_.cjs');
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_local = require("./local-DbXBG1D9.cjs");
3
+ const require_download = require("./download-KySXUyWC.cjs");
3
4
  let node_url = require("node:url");
4
-
5
- //#region src/provider/base.ts
6
- var BaseProvider = class {
7
- name = "BaseProvider";
8
- /**
9
- * @inheritdoc
10
- */
11
- isLowerVersion = require_version.defaultIsLowerVersion;
12
- /**
13
- * @inheritdoc
14
- */
15
- verifySignaure = require_zip.defaultVerifySignature;
16
- /**
17
- * @inheritdoc
18
- */
19
- unzipFile = require_zip.defaultUnzipFile;
20
- };
21
-
22
- //#endregion
23
5
  //#region src/provider/github/base.ts
24
- var BaseGitHubProvider = class extends BaseProvider {
6
+ var BaseGitHubProvider = class extends require_local.BaseProvider {
7
+ options;
25
8
  constructor(options) {
26
9
  super();
27
10
  this.options = options;
@@ -32,13 +15,13 @@ var BaseGitHubProvider = class extends BaseProvider {
32
15
  set urlHandler(handler) {
33
16
  this.options.urlHandler = handler;
34
17
  }
35
- async parseURL(extraPath) {
36
- const url = new node_url.URL(`/${this.options.user}/${this.options.repo}/${extraPath}`, "https://github.com");
18
+ async parseURL(pathOrURL) {
19
+ const url = node_url.URL.canParse(pathOrURL) ? new node_url.URL(pathOrURL) : new node_url.URL(`/${this.options.user}/${this.options.repo}/${pathOrURL}`, "https://github.com");
37
20
  return (await this.urlHandler?.(url) || url).toString();
38
21
  }
39
22
  async downloadJSON(name, versionPath, signal) {
40
- const { beta, version, ...info } = await require_zip.defaultDownloadUpdateJSON(await this.parseURL(await this.getVersionURL(versionPath, signal)), this.getHeaders("json"), signal);
41
- const getURL = (ver) => this.parseURL(`releases/download/v${ver}/${name}-${ver}.asar.gz`);
23
+ const { beta, version, ...info } = await require_download.defaultDownloadUpdateJSON(await this.parseURL(await this.getVersionURL(versionPath, signal)), this.getHeaders("json"), signal);
24
+ const getURL = (ver) => this.parseURL(`releases/download/v${ver}/${name}-${ver}.asar.br`);
42
25
  return {
43
26
  ...info,
44
27
  version,
@@ -53,10 +36,9 @@ var BaseGitHubProvider = class extends BaseProvider {
53
36
  * @inheritdoc
54
37
  */
55
38
  async downloadAsar(info, signal, onDownloading) {
56
- return await require_zip.defaultDownloadAsar(info.url, this.getHeaders("octet-stream"), signal, onDownloading);
39
+ return await require_download.defaultDownloadAsar(info.url, this.getHeaders("octet-stream"), signal, onDownloading);
57
40
  }
58
41
  };
59
-
60
42
  //#endregion
61
43
  //#region src/provider/github/api.ts
62
44
  const ERROR_MSG = "Cannot find UpdateJSON in latest release";
@@ -83,20 +65,19 @@ var GitHubApiProvider = class extends BaseGitHubProvider {
83
65
  */
84
66
  async getVersionURL(versionPath, signal) {
85
67
  const basename = versionPath.slice(versionPath.lastIndexOf("/") + 1);
86
- const data = await require_zip.defaultDownloadText(await this.parseURL(`https://api.github.com/repos/${this.options.user}/${this.options.repo}/releases?per_page=1`), this.getHeaders("vnd.github.v3+json"), signal, require_zip.resolveJson);
68
+ const data = await require_download.defaultDownloadText(await this.parseURL(`https://api.github.com/repos/${this.options.user}/${this.options.repo}/releases?per_page=1`), this.getHeaders("vnd.github.v3+json"), signal, require_download.resolveJson);
87
69
  const versionAssets = data[0]?.assets.find((asset) => asset.name === basename);
88
70
  if (!versionAssets) throw new Error(`${ERROR_MSG}, ${"message" in data ? data.message : "please check the release assets"}`);
89
71
  return versionAssets.browser_download_url;
90
72
  }
91
73
  };
92
-
93
74
  //#endregion
94
75
  //#region src/provider/github/atom.ts
95
76
  /**
96
77
  * Update Provider for Github repo
97
78
  * - check update from `https://github.com/{user}/{repo}/releases.atom`
98
79
  * - download update json from `https://github.com/{user}/{repo}/releases/download/v{version}/{versionPath}`
99
- * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
80
+ * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
100
81
  *
101
82
  * you can setup `urlHandler` in options to modify url before request
102
83
  * @param options provider options
@@ -113,20 +94,20 @@ var GitHubAtomProvider = class extends BaseGitHubProvider {
113
94
  * @inheritdoc
114
95
  */
115
96
  async getVersionURL(versionPath, signal) {
116
- return `releases/download/v${await require_zip.defaultDownloadText(await this.parseURL(`releases.atom`), this.getHeaders("xml"), signal, (data, resolve, reject) => {
97
+ const tag = await require_download.defaultDownloadText(await this.parseURL(`releases.atom`), this.getHeaders("xml"), signal, (data, resolve, reject) => {
117
98
  const result = data.match(/<entry>\s*<id>([^<]*\/)?([^/<]+)<\/id>/)?.[2];
118
99
  if (result) resolve(result);
119
100
  else reject("No tag matched");
120
- })}/${versionPath}`;
101
+ });
102
+ return `releases/download/v${tag.startsWith("v") ? tag.slice(1) : tag}/${versionPath}`;
121
103
  }
122
104
  };
123
-
124
105
  //#endregion
125
106
  //#region src/provider/github/file.ts
126
107
  /**
127
108
  * Update Provider for Github repo
128
109
  * - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
129
- * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
110
+ * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
130
111
  *
131
112
  * you can setup `urlHandler` in options to modify url before request
132
113
  * @param options provider options
@@ -147,16 +128,16 @@ var GitHubProvider = class extends BaseGitHubProvider {
147
128
  return `raw/${this.options.branch}/${versionPath}`;
148
129
  }
149
130
  };
150
-
151
131
  //#endregion
152
132
  exports.BaseGitHubProvider = BaseGitHubProvider;
153
- exports.BaseProvider = BaseProvider;
133
+ exports.BaseProvider = require_local.BaseProvider;
154
134
  exports.GitHubApiProvider = GitHubApiProvider;
155
135
  exports.GitHubAtomProvider = GitHubAtomProvider;
156
136
  exports.GitHubProvider = GitHubProvider;
157
- exports.defaultDownloadAsar = require_zip.defaultDownloadAsar;
158
- exports.defaultDownloadText = require_zip.defaultDownloadText;
159
- exports.defaultDownloadUpdateJSON = require_zip.defaultDownloadUpdateJSON;
160
- exports.downloadUtil = require_zip.downloadUtil;
161
- exports.getHeader = require_zip.getHeader;
162
- exports.resolveJson = require_zip.resolveJson;
137
+ exports.LocalDevProvider = require_local.LocalDevProvider;
138
+ exports.defaultDownloadAsar = require_download.defaultDownloadAsar;
139
+ exports.defaultDownloadText = require_download.defaultDownloadText;
140
+ exports.defaultDownloadUpdateJSON = require_download.defaultDownloadUpdateJSON;
141
+ exports.downloadUtil = require_download.downloadUtil;
142
+ exports.getHeader = require_download.getHeader;
143
+ exports.resolveJson = require_download.resolveJson;
@@ -1,5 +1,6 @@
1
- import { a as UpdateJSONWithURL, i as UpdateInfoWithURL, m as Promisable, n as IProvider, r as URLHandler, t as DownloadingInfo } from "./types-BM9Jfu7q.cjs";
2
- import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-DO7iuxEJ.cjs";
1
+ import { a as VersionJSON, i as UpdateInfoWithURL, m as Promisable, n as IProvider, r as URLHandler, t as DownloadingInfo } from "./types-q78spjKB.cjs";
2
+ import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-BVmLiAvB.cjs";
3
+ import { Buffer as Buffer$1 } from "node:buffer";
3
4
 
4
5
  //#region src/provider/base.d.ts
5
6
  declare abstract class BaseProvider implements IProvider {
@@ -11,15 +12,15 @@ declare abstract class BaseProvider implements IProvider {
11
12
  /**
12
13
  * @inheritdoc
13
14
  */
14
- verifySignaure: IProvider["verifySignaure"];
15
+ verifySignature: IProvider["verifySignature"];
15
16
  /**
16
17
  * @inheritdoc
17
18
  */
18
- unzipFile: IProvider["unzipFile"];
19
+ decompressFile: IProvider["decompressFile"];
19
20
  /**
20
21
  * @inheritdoc
21
22
  */
22
- abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<UpdateJSONWithURL>;
23
+ abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<VersionJSON>;
23
24
  /**
24
25
  * @inheritdoc
25
26
  */
@@ -41,13 +42,7 @@ interface BaseGitHubProviderOptions {
41
42
  */
42
43
  extraHeaders?: Record<string, string>;
43
44
  /**
44
- * Custom url handler ({@link https://github.com/XIU2/UserScript/blob/master/GithubEnhanced-High-Speed-Download.user.js#L40 some public CDN links})
45
- * @example
46
- * (url) => {
47
- * url.hostname = 'mirror.ghproxy.com'
48
- * url.pathname = 'https://github.com' + url.pathname
49
- * return url
50
- * }
45
+ * Custom url handler ([some public CDN links](https://github.com/XIU2/UserScript/blob/master/GithubEnhanced-High-Speed-Download.user.js#L40)). See {@link URLHandler} for details.
51
46
  */
52
47
  urlHandler?: URLHandler;
53
48
  }
@@ -56,10 +51,10 @@ declare abstract class BaseGitHubProvider<T extends BaseGitHubProviderOptions =
56
51
  constructor(options: T);
57
52
  get urlHandler(): URLHandler | undefined;
58
53
  set urlHandler(handler: URLHandler);
59
- protected parseURL(extraPath: string): Promise<string>;
54
+ protected parseURL(pathOrURL: string): Promise<string>;
60
55
  protected abstract getHeaders(accept: string): Record<string, string>;
61
56
  protected abstract getVersionURL(versionPath: string, signal: AbortSignal): Promisable<string>;
62
- downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<UpdateJSONWithURL>;
57
+ downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<VersionJSON>;
63
58
  /**
64
59
  * @inheritdoc
65
60
  */
@@ -80,7 +75,7 @@ interface GitHubApiProviderOptions extends BaseGitHubProviderOptions {
80
75
  * @param options provider options
81
76
  */
82
77
  declare class GitHubApiProvider extends BaseGitHubProvider<GitHubApiProviderOptions> {
83
- name: string;
78
+ override name: string;
84
79
  protected getHeaders(accept: string): Record<string, string>;
85
80
  /**
86
81
  * @inheritdoc
@@ -93,13 +88,13 @@ declare class GitHubApiProvider extends BaseGitHubProvider<GitHubApiProviderOpti
93
88
  * Update Provider for Github repo
94
89
  * - check update from `https://github.com/{user}/{repo}/releases.atom`
95
90
  * - download update json from `https://github.com/{user}/{repo}/releases/download/v{version}/{versionPath}`
96
- * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
91
+ * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
97
92
  *
98
93
  * you can setup `urlHandler` in options to modify url before request
99
94
  * @param options provider options
100
95
  */
101
96
  declare class GitHubAtomProvider extends BaseGitHubProvider {
102
- name: string;
97
+ override name: string;
103
98
  protected getHeaders(accept: string): Record<string, string>;
104
99
  /**
105
100
  * @inheritdoc
@@ -118,16 +113,59 @@ interface GitHubProviderOptions extends BaseGitHubProviderOptions {
118
113
  /**
119
114
  * Update Provider for Github repo
120
115
  * - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
121
- * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
116
+ * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
122
117
  *
123
118
  * you can setup `urlHandler` in options to modify url before request
124
119
  * @param options provider options
125
120
  */
126
121
  declare class GitHubProvider extends BaseGitHubProvider<GitHubProviderOptions> {
127
- name: string;
122
+ override name: string;
128
123
  constructor(options: GitHubProviderOptions);
129
124
  protected getHeaders(accept: string): Record<string, string>;
130
125
  protected getVersionURL(versionPath: string): string;
131
126
  }
132
127
  //#endregion
133
- export { BaseGitHubProvider, BaseGitHubProviderOptions, BaseProvider, DownloadingInfo, GitHubApiProvider, GitHubApiProviderOptions, GitHubAtomProvider, GitHubProvider, GitHubProviderOptions, IProvider, URLHandler, UpdateInfoWithURL, UpdateJSONWithURL, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, downloadUtil, getHeader, resolveJson };
128
+ //#region src/provider/local.d.ts
129
+ interface LocalDevProviderOptions {
130
+ /**
131
+ * Base directory for update files
132
+ */
133
+ baseDir: string;
134
+ /**
135
+ * Local read chunk size for simulated download progress
136
+ * @default 64 * 1024
137
+ */
138
+ chunkSize?: number;
139
+ /**
140
+ * Delay between chunks in milliseconds
141
+ * @default 30
142
+ */
143
+ chunkDelay?: number;
144
+ }
145
+ /**
146
+ * Update Provider for local development
147
+ * - download update json from `{baseDir}/{versionPath}`
148
+ * - download update asar from `{baseDir}/{name}-{version}.asar.br`
149
+ *
150
+ * This provider is useful for testing updates during development without
151
+ * needing to deploy to a remote server.
152
+ * @param options provider options
153
+ */
154
+ declare class LocalDevProvider extends BaseProvider {
155
+ override name: string;
156
+ override verifySignature: IProvider["verifySignature"];
157
+ private readonly options;
158
+ constructor(options: LocalDevProviderOptions);
159
+ /**
160
+ * @inheritdoc
161
+ */
162
+ downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<VersionJSON>;
163
+ /**
164
+ * @inheritdoc
165
+ */
166
+ downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer$1>;
167
+ private readJSON;
168
+ private emitProgress;
169
+ }
170
+ //#endregion
171
+ export { BaseGitHubProvider, BaseGitHubProviderOptions, BaseProvider, DownloadingInfo, GitHubApiProvider, GitHubApiProviderOptions, GitHubAtomProvider, GitHubProvider, GitHubProviderOptions, IProvider, LocalDevProvider, LocalDevProviderOptions, URLHandler, UpdateInfoWithURL, VersionJSON, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, downloadUtil, getHeader, resolveJson };
@@ -1,5 +1,6 @@
1
- import { a as UpdateJSONWithURL, i as UpdateInfoWithURL, m as Promisable, n as IProvider, r as URLHandler, t as DownloadingInfo } from "./types-DASqEPXE.mjs";
2
- import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-BN4uMS4_.mjs";
1
+ import { a as VersionJSON, i as UpdateInfoWithURL, m as Promisable, n as IProvider, r as URLHandler, t as DownloadingInfo } from "./types-q78spjKB.mjs";
2
+ import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-GONr15zK.mjs";
3
+ import { Buffer as Buffer$1 } from "node:buffer";
3
4
 
4
5
  //#region src/provider/base.d.ts
5
6
  declare abstract class BaseProvider implements IProvider {
@@ -11,15 +12,15 @@ declare abstract class BaseProvider implements IProvider {
11
12
  /**
12
13
  * @inheritdoc
13
14
  */
14
- verifySignaure: IProvider["verifySignaure"];
15
+ verifySignature: IProvider["verifySignature"];
15
16
  /**
16
17
  * @inheritdoc
17
18
  */
18
- unzipFile: IProvider["unzipFile"];
19
+ decompressFile: IProvider["decompressFile"];
19
20
  /**
20
21
  * @inheritdoc
21
22
  */
22
- abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<UpdateJSONWithURL>;
23
+ abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<VersionJSON>;
23
24
  /**
24
25
  * @inheritdoc
25
26
  */
@@ -41,13 +42,7 @@ interface BaseGitHubProviderOptions {
41
42
  */
42
43
  extraHeaders?: Record<string, string>;
43
44
  /**
44
- * Custom url handler ({@link https://github.com/XIU2/UserScript/blob/master/GithubEnhanced-High-Speed-Download.user.js#L40 some public CDN links})
45
- * @example
46
- * (url) => {
47
- * url.hostname = 'mirror.ghproxy.com'
48
- * url.pathname = 'https://github.com' + url.pathname
49
- * return url
50
- * }
45
+ * Custom url handler ([some public CDN links](https://github.com/XIU2/UserScript/blob/master/GithubEnhanced-High-Speed-Download.user.js#L40)). See {@link URLHandler} for details.
51
46
  */
52
47
  urlHandler?: URLHandler;
53
48
  }
@@ -56,10 +51,10 @@ declare abstract class BaseGitHubProvider<T extends BaseGitHubProviderOptions =
56
51
  constructor(options: T);
57
52
  get urlHandler(): URLHandler | undefined;
58
53
  set urlHandler(handler: URLHandler);
59
- protected parseURL(extraPath: string): Promise<string>;
54
+ protected parseURL(pathOrURL: string): Promise<string>;
60
55
  protected abstract getHeaders(accept: string): Record<string, string>;
61
56
  protected abstract getVersionURL(versionPath: string, signal: AbortSignal): Promisable<string>;
62
- downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<UpdateJSONWithURL>;
57
+ downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<VersionJSON>;
63
58
  /**
64
59
  * @inheritdoc
65
60
  */
@@ -80,7 +75,7 @@ interface GitHubApiProviderOptions extends BaseGitHubProviderOptions {
80
75
  * @param options provider options
81
76
  */
82
77
  declare class GitHubApiProvider extends BaseGitHubProvider<GitHubApiProviderOptions> {
83
- name: string;
78
+ override name: string;
84
79
  protected getHeaders(accept: string): Record<string, string>;
85
80
  /**
86
81
  * @inheritdoc
@@ -93,13 +88,13 @@ declare class GitHubApiProvider extends BaseGitHubProvider<GitHubApiProviderOpti
93
88
  * Update Provider for Github repo
94
89
  * - check update from `https://github.com/{user}/{repo}/releases.atom`
95
90
  * - download update json from `https://github.com/{user}/{repo}/releases/download/v{version}/{versionPath}`
96
- * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
91
+ * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
97
92
  *
98
93
  * you can setup `urlHandler` in options to modify url before request
99
94
  * @param options provider options
100
95
  */
101
96
  declare class GitHubAtomProvider extends BaseGitHubProvider {
102
- name: string;
97
+ override name: string;
103
98
  protected getHeaders(accept: string): Record<string, string>;
104
99
  /**
105
100
  * @inheritdoc
@@ -118,16 +113,59 @@ interface GitHubProviderOptions extends BaseGitHubProviderOptions {
118
113
  /**
119
114
  * Update Provider for Github repo
120
115
  * - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
121
- * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
116
+ * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
122
117
  *
123
118
  * you can setup `urlHandler` in options to modify url before request
124
119
  * @param options provider options
125
120
  */
126
121
  declare class GitHubProvider extends BaseGitHubProvider<GitHubProviderOptions> {
127
- name: string;
122
+ override name: string;
128
123
  constructor(options: GitHubProviderOptions);
129
124
  protected getHeaders(accept: string): Record<string, string>;
130
125
  protected getVersionURL(versionPath: string): string;
131
126
  }
132
127
  //#endregion
133
- export { BaseGitHubProvider, BaseGitHubProviderOptions, BaseProvider, DownloadingInfo, GitHubApiProvider, GitHubApiProviderOptions, GitHubAtomProvider, GitHubProvider, GitHubProviderOptions, IProvider, URLHandler, UpdateInfoWithURL, UpdateJSONWithURL, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, downloadUtil, getHeader, resolveJson };
128
+ //#region src/provider/local.d.ts
129
+ interface LocalDevProviderOptions {
130
+ /**
131
+ * Base directory for update files
132
+ */
133
+ baseDir: string;
134
+ /**
135
+ * Local read chunk size for simulated download progress
136
+ * @default 64 * 1024
137
+ */
138
+ chunkSize?: number;
139
+ /**
140
+ * Delay between chunks in milliseconds
141
+ * @default 30
142
+ */
143
+ chunkDelay?: number;
144
+ }
145
+ /**
146
+ * Update Provider for local development
147
+ * - download update json from `{baseDir}/{versionPath}`
148
+ * - download update asar from `{baseDir}/{name}-{version}.asar.br`
149
+ *
150
+ * This provider is useful for testing updates during development without
151
+ * needing to deploy to a remote server.
152
+ * @param options provider options
153
+ */
154
+ declare class LocalDevProvider extends BaseProvider {
155
+ override name: string;
156
+ override verifySignature: IProvider["verifySignature"];
157
+ private readonly options;
158
+ constructor(options: LocalDevProviderOptions);
159
+ /**
160
+ * @inheritdoc
161
+ */
162
+ downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<VersionJSON>;
163
+ /**
164
+ * @inheritdoc
165
+ */
166
+ downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer$1>;
167
+ private readJSON;
168
+ private emitProgress;
169
+ }
170
+ //#endregion
171
+ export { BaseGitHubProvider, BaseGitHubProviderOptions, BaseProvider, DownloadingInfo, GitHubApiProvider, GitHubApiProviderOptions, GitHubAtomProvider, GitHubProvider, GitHubProviderOptions, IProvider, LocalDevProvider, LocalDevProviderOptions, URLHandler, UpdateInfoWithURL, VersionJSON, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, downloadUtil, getHeader, resolveJson };
package/dist/provider.mjs CHANGED
@@ -1,27 +1,9 @@
1
- import { t as defaultIsLowerVersion } from "./version--eVB2A7n.mjs";
2
- import { a as defaultDownloadUpdateJSON, c as resolveJson, f as defaultVerifySignature, i as defaultDownloadText, o as downloadUtil, r as defaultDownloadAsar, s as getHeader, t as defaultUnzipFile } from "./zip-Dwm7s1C9.mjs";
1
+ import { n as BaseProvider, t as LocalDevProvider } from "./local-C5jw-7o5.mjs";
2
+ import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-BdX4fZYM.mjs";
3
3
  import { URL } from "node:url";
4
-
5
- //#region src/provider/base.ts
6
- var BaseProvider = class {
7
- name = "BaseProvider";
8
- /**
9
- * @inheritdoc
10
- */
11
- isLowerVersion = defaultIsLowerVersion;
12
- /**
13
- * @inheritdoc
14
- */
15
- verifySignaure = defaultVerifySignature;
16
- /**
17
- * @inheritdoc
18
- */
19
- unzipFile = defaultUnzipFile;
20
- };
21
-
22
- //#endregion
23
4
  //#region src/provider/github/base.ts
24
5
  var BaseGitHubProvider = class extends BaseProvider {
6
+ options;
25
7
  constructor(options) {
26
8
  super();
27
9
  this.options = options;
@@ -32,13 +14,13 @@ var BaseGitHubProvider = class extends BaseProvider {
32
14
  set urlHandler(handler) {
33
15
  this.options.urlHandler = handler;
34
16
  }
35
- async parseURL(extraPath) {
36
- const url = new URL(`/${this.options.user}/${this.options.repo}/${extraPath}`, "https://github.com");
17
+ async parseURL(pathOrURL) {
18
+ const url = URL.canParse(pathOrURL) ? new URL(pathOrURL) : new URL(`/${this.options.user}/${this.options.repo}/${pathOrURL}`, "https://github.com");
37
19
  return (await this.urlHandler?.(url) || url).toString();
38
20
  }
39
21
  async downloadJSON(name, versionPath, signal) {
40
22
  const { beta, version, ...info } = await defaultDownloadUpdateJSON(await this.parseURL(await this.getVersionURL(versionPath, signal)), this.getHeaders("json"), signal);
41
- const getURL = (ver) => this.parseURL(`releases/download/v${ver}/${name}-${ver}.asar.gz`);
23
+ const getURL = (ver) => this.parseURL(`releases/download/v${ver}/${name}-${ver}.asar.br`);
42
24
  return {
43
25
  ...info,
44
26
  version,
@@ -56,7 +38,6 @@ var BaseGitHubProvider = class extends BaseProvider {
56
38
  return await defaultDownloadAsar(info.url, this.getHeaders("octet-stream"), signal, onDownloading);
57
39
  }
58
40
  };
59
-
60
41
  //#endregion
61
42
  //#region src/provider/github/api.ts
62
43
  const ERROR_MSG = "Cannot find UpdateJSON in latest release";
@@ -89,14 +70,13 @@ var GitHubApiProvider = class extends BaseGitHubProvider {
89
70
  return versionAssets.browser_download_url;
90
71
  }
91
72
  };
92
-
93
73
  //#endregion
94
74
  //#region src/provider/github/atom.ts
95
75
  /**
96
76
  * Update Provider for Github repo
97
77
  * - check update from `https://github.com/{user}/{repo}/releases.atom`
98
78
  * - download update json from `https://github.com/{user}/{repo}/releases/download/v{version}/{versionPath}`
99
- * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
79
+ * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
100
80
  *
101
81
  * you can setup `urlHandler` in options to modify url before request
102
82
  * @param options provider options
@@ -113,20 +93,20 @@ var GitHubAtomProvider = class extends BaseGitHubProvider {
113
93
  * @inheritdoc
114
94
  */
115
95
  async getVersionURL(versionPath, signal) {
116
- return `releases/download/v${await defaultDownloadText(await this.parseURL(`releases.atom`), this.getHeaders("xml"), signal, (data, resolve, reject) => {
96
+ const tag = await defaultDownloadText(await this.parseURL(`releases.atom`), this.getHeaders("xml"), signal, (data, resolve, reject) => {
117
97
  const result = data.match(/<entry>\s*<id>([^<]*\/)?([^/<]+)<\/id>/)?.[2];
118
98
  if (result) resolve(result);
119
99
  else reject("No tag matched");
120
- })}/${versionPath}`;
100
+ });
101
+ return `releases/download/v${tag.startsWith("v") ? tag.slice(1) : tag}/${versionPath}`;
121
102
  }
122
103
  };
123
-
124
104
  //#endregion
125
105
  //#region src/provider/github/file.ts
126
106
  /**
127
107
  * Update Provider for Github repo
128
108
  * - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
129
- * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
109
+ * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
130
110
  *
131
111
  * you can setup `urlHandler` in options to modify url before request
132
112
  * @param options provider options
@@ -147,6 +127,5 @@ var GitHubProvider = class extends BaseGitHubProvider {
147
127
  return `raw/${this.options.branch}/${versionPath}`;
148
128
  }
149
129
  };
150
-
151
130
  //#endregion
152
- export { BaseGitHubProvider, BaseProvider, GitHubApiProvider, GitHubAtomProvider, GitHubProvider, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, downloadUtil, getHeader, resolveJson };
131
+ export { BaseGitHubProvider, BaseProvider, GitHubApiProvider, GitHubAtomProvider, GitHubProvider, LocalDevProvider, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, downloadUtil, getHeader, resolveJson };