electron-incremental-update 2.2.5 → 2.3.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.
@@ -1,12 +1,11 @@
1
- import { c as defaultVerifySignature, l as defaultUnzipFile } from './zip-DemXr4mk.cjs';
2
- export { j as defaultDownloadAsar, f as defaultDownloadJSON, i as defaultDownloadUpdateJSON, e as downloadUtil, g as getHeader } from './zip-DemXr4mk.cjs';
3
- import { e as UpdateInfoWithURL, I as IProvider, d as defaultIsLowerVersion, D as DownloadingInfo, f as URLHandler } from './types-1T_tRG8a.cjs';
4
- export { b as UpdateJSONWithURL } from './types-1T_tRG8a.cjs';
5
- import '@subframe7536/type-utils';
1
+ import { c as defaultVerifySignature, l as defaultUnzipFile } from './zip-Blmn2vzE.cjs';
2
+ export { j as defaultDownloadAsar, f as defaultDownloadText, i as defaultDownloadUpdateJSON, e as downloadUtil, g as getHeader, r as resolveJson } from './zip-Blmn2vzE.cjs';
3
+ import { I as IProvider, d as defaultIsLowerVersion, b as UpdateJSONWithURL, e as UpdateInfoWithURL, D as DownloadingInfo, f as URLHandler } from './types-CU7GyVez.cjs';
4
+ import { Promisable } from '@subframe7536/type-utils';
6
5
  import 'electron';
7
6
  import 'node:url';
8
7
 
9
- declare abstract class BaseProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> implements IProvider<T> {
8
+ declare abstract class BaseProvider implements IProvider {
10
9
  name: string;
11
10
  /**
12
11
  * @inheritdoc
@@ -23,14 +22,14 @@ declare abstract class BaseProvider<T extends UpdateInfoWithURL = UpdateInfoWith
23
22
  /**
24
23
  * @inheritdoc
25
24
  */
26
- abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<T>;
25
+ abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<UpdateJSONWithURL>;
27
26
  /**
28
27
  * @inheritdoc
29
28
  */
30
29
  abstract downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
31
30
  }
32
31
 
33
- interface GitHubProviderOptions {
32
+ interface BaseGitHubProviderOptions {
34
33
  /**
35
34
  * Github user name
36
35
  */
@@ -39,11 +38,6 @@ interface GitHubProviderOptions {
39
38
  * Github repo name
40
39
  */
41
40
  repo: string;
42
- /**
43
- * Github branch name that fetch version
44
- * @default 'HEAD'
45
- */
46
- branch?: string;
47
41
  /**
48
42
  * Extra headers
49
43
  */
@@ -59,79 +53,82 @@ interface GitHubProviderOptions {
59
53
  */
60
54
  urlHandler?: URLHandler;
61
55
  }
62
- declare class GitHubProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> extends BaseProvider<T> {
63
- name: string;
64
- private options;
65
- /**
66
- * Update Provider for Github repo
67
- * - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
68
- * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
69
- *
70
- * you can setup `urlHandler` in {@link GitHubProviderOptions} to modify url before request
71
- * @param options provider options
72
- */
73
- constructor(options: GitHubProviderOptions);
56
+ declare abstract class BaseGitHubProvider<T extends BaseGitHubProviderOptions = BaseGitHubProviderOptions> extends BaseProvider {
57
+ protected options: T;
58
+ constructor(options: T);
74
59
  get urlHandler(): URLHandler | undefined;
75
60
  set urlHandler(handler: URLHandler);
76
- private parseURL;
77
- private getHeaders;
78
- /**
79
- * @inheritdoc
80
- */
81
- downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<T>;
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>;
82
65
  /**
83
66
  * @inheritdoc
84
67
  */
85
68
  downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
86
69
  }
87
70
 
88
- interface GitHubApiProviderOptions {
89
- /**
90
- * Github user name
91
- */
92
- user: string;
93
- /**
94
- * Github repo name
95
- */
96
- repo: string;
97
- /**
98
- * Github access token
99
- */
71
+ interface GitHubApiProviderOptions extends BaseGitHubProviderOptions {
100
72
  token?: string;
101
- /**
102
- * Extra headers
103
- */
104
- extraHeaders?: Record<string, string>;
105
- /**
106
- * Custom url handler
107
- */
108
- urlHandler?: URLHandler;
109
73
  }
110
- declare class GitHubApiProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> extends BaseProvider<T> {
74
+ declare class GitHubApiProvider extends BaseGitHubProvider<GitHubApiProviderOptions> {
111
75
  name: string;
112
- private options;
113
76
  /**
114
77
  * Update Provider for Github API, you need to upload `version.json` to release as well
115
78
  * - check update from `https://api.github.com/repos/{user}/{repo}/releases?per_page=1`
116
79
  * - download update json and get version and download url
117
80
  * - download update asar from update info
118
81
  *
119
- * you can setup `urlHandler` in {@link GitHubApiProviderOptions} to modify url before request
82
+ * you can setup `urlHandler` in options to modify url before request
120
83
  * @param options provider options
121
84
  */
122
85
  constructor(options: GitHubApiProviderOptions);
123
- get urlHandler(): URLHandler | undefined;
124
- set urlHandler(handler: URLHandler);
125
- private parseURL;
126
- private getHeaders;
86
+ protected getHeaders(accept: string): Record<string, string>;
127
87
  /**
128
88
  * @inheritdoc
129
89
  */
130
- downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<T>;
90
+ protected getVersionURL(versionPath: string, signal: AbortSignal): Promise<string>;
91
+ }
92
+
93
+ declare class GitHubAtomProvider extends BaseGitHubProvider {
94
+ name: string;
95
+ /**
96
+ * Update Provider for Github repo
97
+ * - check update from `https://github.com/{user}/{repo}/releases.atom`
98
+ * - 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`
100
+ *
101
+ * you can setup `urlHandler` in options to modify url before request
102
+ * @param options provider options
103
+ */
104
+ constructor(options: BaseGitHubProviderOptions);
105
+ protected getHeaders(accept: string): Record<string, string>;
131
106
  /**
132
107
  * @inheritdoc
133
108
  */
134
- downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
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
+ declare class GitHubProvider extends BaseGitHubProvider<GitHubProviderOptions> {
120
+ name: string;
121
+ /**
122
+ * Update Provider for Github repo
123
+ * - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
124
+ * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
125
+ *
126
+ * you can setup `urlHandler` in options to modify url before request
127
+ * @param options provider options
128
+ */
129
+ constructor(options: GitHubProviderOptions);
130
+ protected getHeaders(accept: string): Record<string, string>;
131
+ protected getVersionURL(versionPath: string): string;
135
132
  }
136
133
 
137
- export { BaseProvider, DownloadingInfo, GitHubApiProvider, type GitHubApiProviderOptions, GitHubProvider, type GitHubProviderOptions, IProvider, URLHandler, UpdateInfoWithURL };
134
+ export { BaseGitHubProvider, type BaseGitHubProviderOptions, BaseProvider, DownloadingInfo, GitHubApiProvider, type GitHubApiProviderOptions, GitHubAtomProvider, GitHubProvider, type GitHubProviderOptions, IProvider, URLHandler, UpdateInfoWithURL, UpdateJSONWithURL };
@@ -1,12 +1,11 @@
1
- import { c as defaultVerifySignature, l as defaultUnzipFile } from './zip-CDmogV-s.js';
2
- export { j as defaultDownloadAsar, f as defaultDownloadJSON, i as defaultDownloadUpdateJSON, e as downloadUtil, g as getHeader } from './zip-CDmogV-s.js';
3
- import { e as UpdateInfoWithURL, I as IProvider, d as defaultIsLowerVersion, D as DownloadingInfo, f as URLHandler } from './types-1T_tRG8a.js';
4
- export { b as UpdateJSONWithURL } from './types-1T_tRG8a.js';
5
- import '@subframe7536/type-utils';
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';
6
5
  import 'electron';
7
6
  import 'node:url';
8
7
 
9
- declare abstract class BaseProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> implements IProvider<T> {
8
+ declare abstract class BaseProvider implements IProvider {
10
9
  name: string;
11
10
  /**
12
11
  * @inheritdoc
@@ -23,14 +22,14 @@ declare abstract class BaseProvider<T extends UpdateInfoWithURL = UpdateInfoWith
23
22
  /**
24
23
  * @inheritdoc
25
24
  */
26
- abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<T>;
25
+ abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<UpdateJSONWithURL>;
27
26
  /**
28
27
  * @inheritdoc
29
28
  */
30
29
  abstract downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
31
30
  }
32
31
 
33
- interface GitHubProviderOptions {
32
+ interface BaseGitHubProviderOptions {
34
33
  /**
35
34
  * Github user name
36
35
  */
@@ -39,11 +38,6 @@ interface GitHubProviderOptions {
39
38
  * Github repo name
40
39
  */
41
40
  repo: string;
42
- /**
43
- * Github branch name that fetch version
44
- * @default 'HEAD'
45
- */
46
- branch?: string;
47
41
  /**
48
42
  * Extra headers
49
43
  */
@@ -59,79 +53,82 @@ interface GitHubProviderOptions {
59
53
  */
60
54
  urlHandler?: URLHandler;
61
55
  }
62
- declare class GitHubProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> extends BaseProvider<T> {
63
- name: string;
64
- private options;
65
- /**
66
- * Update Provider for Github repo
67
- * - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
68
- * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
69
- *
70
- * you can setup `urlHandler` in {@link GitHubProviderOptions} to modify url before request
71
- * @param options provider options
72
- */
73
- constructor(options: GitHubProviderOptions);
56
+ declare abstract class BaseGitHubProvider<T extends BaseGitHubProviderOptions = BaseGitHubProviderOptions> extends BaseProvider {
57
+ protected options: T;
58
+ constructor(options: T);
74
59
  get urlHandler(): URLHandler | undefined;
75
60
  set urlHandler(handler: URLHandler);
76
- private parseURL;
77
- private getHeaders;
78
- /**
79
- * @inheritdoc
80
- */
81
- downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<T>;
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>;
82
65
  /**
83
66
  * @inheritdoc
84
67
  */
85
68
  downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
86
69
  }
87
70
 
88
- interface GitHubApiProviderOptions {
89
- /**
90
- * Github user name
91
- */
92
- user: string;
93
- /**
94
- * Github repo name
95
- */
96
- repo: string;
97
- /**
98
- * Github access token
99
- */
71
+ interface GitHubApiProviderOptions extends BaseGitHubProviderOptions {
100
72
  token?: string;
101
- /**
102
- * Extra headers
103
- */
104
- extraHeaders?: Record<string, string>;
105
- /**
106
- * Custom url handler
107
- */
108
- urlHandler?: URLHandler;
109
73
  }
110
- declare class GitHubApiProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> extends BaseProvider<T> {
74
+ declare class GitHubApiProvider extends BaseGitHubProvider<GitHubApiProviderOptions> {
111
75
  name: string;
112
- private options;
113
76
  /**
114
77
  * Update Provider for Github API, you need to upload `version.json` to release as well
115
78
  * - check update from `https://api.github.com/repos/{user}/{repo}/releases?per_page=1`
116
79
  * - download update json and get version and download url
117
80
  * - download update asar from update info
118
81
  *
119
- * you can setup `urlHandler` in {@link GitHubApiProviderOptions} to modify url before request
82
+ * you can setup `urlHandler` in options to modify url before request
120
83
  * @param options provider options
121
84
  */
122
85
  constructor(options: GitHubApiProviderOptions);
123
- get urlHandler(): URLHandler | undefined;
124
- set urlHandler(handler: URLHandler);
125
- private parseURL;
126
- private getHeaders;
86
+ protected getHeaders(accept: string): Record<string, string>;
127
87
  /**
128
88
  * @inheritdoc
129
89
  */
130
- downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<T>;
90
+ protected getVersionURL(versionPath: string, signal: AbortSignal): Promise<string>;
91
+ }
92
+
93
+ declare class GitHubAtomProvider extends BaseGitHubProvider {
94
+ name: string;
95
+ /**
96
+ * Update Provider for Github repo
97
+ * - check update from `https://github.com/{user}/{repo}/releases.atom`
98
+ * - 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`
100
+ *
101
+ * you can setup `urlHandler` in options to modify url before request
102
+ * @param options provider options
103
+ */
104
+ constructor(options: BaseGitHubProviderOptions);
105
+ protected getHeaders(accept: string): Record<string, string>;
131
106
  /**
132
107
  * @inheritdoc
133
108
  */
134
- downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
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
+ declare class GitHubProvider extends BaseGitHubProvider<GitHubProviderOptions> {
120
+ name: string;
121
+ /**
122
+ * Update Provider for Github repo
123
+ * - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
124
+ * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
125
+ *
126
+ * you can setup `urlHandler` in options to modify url before request
127
+ * @param options provider options
128
+ */
129
+ constructor(options: GitHubProviderOptions);
130
+ protected getHeaders(accept: string): Record<string, string>;
131
+ protected getVersionURL(versionPath: string): string;
135
132
  }
136
133
 
137
- export { BaseProvider, DownloadingInfo, GitHubApiProvider, type GitHubApiProviderOptions, GitHubProvider, type GitHubProviderOptions, IProvider, URLHandler, UpdateInfoWithURL };
134
+ export { BaseGitHubProvider, type BaseGitHubProviderOptions, BaseProvider, DownloadingInfo, GitHubApiProvider, type GitHubApiProviderOptions, GitHubAtomProvider, GitHubProvider, type GitHubProviderOptions, IProvider, URLHandler, UpdateInfoWithURL, UpdateJSONWithURL };
package/dist/provider.js CHANGED
@@ -1,5 +1,5 @@
1
- import { defaultVerifySignature, defaultUnzipFile, defaultDownloadUpdateJSON, defaultDownloadAsar, defaultDownloadJSON } from './chunk-KLUIYBS4.js';
2
- export { defaultDownloadAsar, defaultDownloadJSON, defaultDownloadUpdateJSON, downloadUtil, getHeader } from './chunk-KLUIYBS4.js';
1
+ import { defaultVerifySignature, defaultUnzipFile, defaultDownloadUpdateJSON, defaultDownloadAsar, defaultDownloadText, resolveJson } from './chunk-QPAKJHVM.js';
2
+ export { defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, downloadUtil, getHeader, resolveJson } from './chunk-QPAKJHVM.js';
3
3
  import { defaultIsLowerVersion } from './chunk-AAAM44NW.js';
4
4
  import { URL } from 'node:url';
5
5
 
@@ -19,23 +19,10 @@ var BaseProvider = class {
19
19
  */
20
20
  unzipFile = defaultUnzipFile;
21
21
  };
22
- var GitHubProvider = class extends BaseProvider {
23
- name = "GithubProvider";
24
- options;
25
- /**
26
- * Update Provider for Github repo
27
- * - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
28
- * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
29
- *
30
- * you can setup `urlHandler` in {@link GitHubProviderOptions} to modify url before request
31
- * @param options provider options
32
- */
22
+ var BaseGitHubProvider = class extends BaseProvider {
33
23
  constructor(options) {
34
24
  super();
35
25
  this.options = options;
36
- if (!options.branch) {
37
- this.options.branch = "HEAD";
38
- }
39
26
  }
40
27
  get urlHandler() {
41
28
  return this.options.urlHandler;
@@ -50,19 +37,15 @@ var GitHubProvider = class extends BaseProvider {
50
37
  );
51
38
  return (await this.urlHandler?.(url) || url).toString();
52
39
  }
53
- getHeaders(accept) {
54
- return { Accept: `application/${accept}`, ...this.options.extraHeaders };
55
- }
56
- /**
57
- * @inheritdoc
58
- */
59
40
  async downloadJSON(name, versionPath, signal) {
60
41
  const { beta, version, ...info } = await defaultDownloadUpdateJSON(
61
- await this.parseURL(`raw/${this.options.branch}/${versionPath}`),
42
+ await this.parseURL(await this.getVersionURL(versionPath, signal)),
62
43
  this.getHeaders("json"),
63
44
  signal
64
45
  );
65
- const getURL = (ver) => this.parseURL(`releases/download/v${ver}/${name}-${ver}.asar.gz`);
46
+ const getURL = (ver) => this.parseURL(
47
+ `releases/download/v${ver}/${name}-${ver}.asar.gz`
48
+ );
66
49
  return {
67
50
  ...info,
68
51
  version,
@@ -85,32 +68,22 @@ var GitHubProvider = class extends BaseProvider {
85
68
  );
86
69
  }
87
70
  };
71
+
72
+ // src/provider/github/api.ts
88
73
  var ERROR_MSG = "Cannot find UpdateJSON in latest release";
89
- var GitHubApiProvider = class extends BaseProvider {
74
+ var GitHubApiProvider = class extends BaseGitHubProvider {
90
75
  name = "GithubApiProvider";
91
- options;
92
76
  /**
93
77
  * Update Provider for Github API, you need to upload `version.json` to release as well
94
78
  * - check update from `https://api.github.com/repos/{user}/{repo}/releases?per_page=1`
95
79
  * - download update json and get version and download url
96
80
  * - download update asar from update info
97
81
  *
98
- * you can setup `urlHandler` in {@link GitHubApiProviderOptions} to modify url before request
82
+ * you can setup `urlHandler` in options to modify url before request
99
83
  * @param options provider options
100
84
  */
101
85
  constructor(options) {
102
- super();
103
- this.options = options;
104
- }
105
- get urlHandler() {
106
- return this.options.urlHandler;
107
- }
108
- set urlHandler(handler) {
109
- this.options.urlHandler = handler;
110
- }
111
- async parseURL(url) {
112
- const _url = new URL(url);
113
- return (await this.urlHandler?.(_url) || _url).toString();
86
+ super(options);
114
87
  }
115
88
  getHeaders(accept) {
116
89
  return {
@@ -122,57 +95,84 @@ var GitHubApiProvider = class extends BaseProvider {
122
95
  /**
123
96
  * @inheritdoc
124
97
  */
125
- async downloadJSON(name, versionPath, signal) {
98
+ async getVersionURL(versionPath, signal) {
126
99
  const basename = versionPath.slice(versionPath.lastIndexOf("/") + 1);
127
- const data = await defaultDownloadJSON(
100
+ const data = await defaultDownloadText(
128
101
  await this.parseURL(`https://api.github.com/repos/${this.options.user}/${this.options.repo}/releases?per_page=1`),
129
102
  this.getHeaders("vnd.github.v3+json"),
130
- signal
103
+ signal,
104
+ resolveJson
131
105
  );
132
106
  const versionAssets = data[0]?.assets.find((asset) => asset.name === basename);
133
107
  if (!versionAssets) {
134
108
  throw new Error(`${ERROR_MSG}, ${"message" in data ? data.message : "please check the release assets"}`);
135
109
  }
136
- const { beta, version, ...info } = await defaultDownloadUpdateJSON(
137
- versionAssets.browser_download_url,
138
- this.getHeaders("json"),
139
- signal
140
- );
141
- const getURL = (ver) => {
142
- const _ver = data.find((r) => r.tag_name === ver);
143
- if (!_ver) {
144
- throw new Error(ERROR_MSG);
145
- }
146
- const asset = _ver.assets.find((a) => a.name === `${name}-${ver}.asar.gz`);
147
- if (!asset) {
148
- throw new Error(ERROR_MSG);
149
- }
150
- return this.parseURL(asset.browser_download_url);
151
- };
152
- return {
153
- ...info,
154
- version,
155
- url: await getURL(version),
156
- beta: {
157
- ...beta,
158
- url: await getURL(beta.version)
159
- }
160
- };
110
+ return versionAssets.browser_download_url;
111
+ }
112
+ };
113
+
114
+ // src/provider/github/atom.ts
115
+ var GitHubAtomProvider = class extends BaseGitHubProvider {
116
+ name = "GithubAtomProvider";
117
+ /**
118
+ * Update Provider for Github repo
119
+ * - check update from `https://github.com/{user}/{repo}/releases.atom`
120
+ * - download update json from `https://github.com/{user}/{repo}/releases/download/v{version}/{versionPath}`
121
+ * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
122
+ *
123
+ * you can setup `urlHandler` in options to modify url before request
124
+ * @param options provider options
125
+ */
126
+ constructor(options) {
127
+ super(options);
128
+ }
129
+ getHeaders(accept) {
130
+ return { Accept: `application/${accept}`, ...this.options.extraHeaders };
161
131
  }
162
132
  /**
163
133
  * @inheritdoc
164
134
  */
165
- async downloadAsar(info, signal, onDownloading) {
166
- if (!info.url) {
167
- throw new Error("Cannot download asar without url");
168
- }
169
- return await defaultDownloadAsar(
170
- info.url,
171
- this.getHeaders("octet-stream"),
135
+ async getVersionURL(versionPath, signal) {
136
+ const tag = await defaultDownloadText(
137
+ await this.parseURL(`releases.atom`),
138
+ this.getHeaders("xml"),
172
139
  signal,
173
- onDownloading
140
+ (data, resolve, reject) => {
141
+ const result = data.match(/<entry>\s*<id>([^<]*\/)?([^/<]+)<\/id>/)?.[2];
142
+ if (result) {
143
+ resolve(result);
144
+ } else {
145
+ reject("No tag matched");
146
+ }
147
+ }
174
148
  );
149
+ return `releases/download/v${tag}/${versionPath}`;
150
+ }
151
+ };
152
+
153
+ // src/provider/github/file.ts
154
+ var GitHubProvider = class extends BaseGitHubProvider {
155
+ name = "GithubProvider";
156
+ /**
157
+ * Update Provider for Github repo
158
+ * - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
159
+ * - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
160
+ *
161
+ * you can setup `urlHandler` in options to modify url before request
162
+ * @param options provider options
163
+ */
164
+ constructor(options) {
165
+ super(options);
166
+ if (!options.branch) {
167
+ this.options.branch = "HEAD";
168
+ }
169
+ }
170
+ getHeaders(accept) {
171
+ return { Accept: `application/${accept}`, ...this.options.extraHeaders };
172
+ }
173
+ getVersionURL(versionPath) {
174
+ return `raw/${this.options.branch}/${versionPath}`;
175
175
  }
176
176
  };
177
177
 
178
- export { BaseProvider, GitHubApiProvider, GitHubProvider };
178
+ export { BaseGitHubProvider, BaseProvider, GitHubApiProvider, GitHubAtomProvider, GitHubProvider };
@@ -106,7 +106,7 @@ interface DownloadingInfo {
106
106
  type UpdateJSONWithURL = UpdateInfoWithURL & {
107
107
  beta: UpdateInfoWithURL;
108
108
  };
109
- interface IProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> {
109
+ interface IProvider {
110
110
  /**
111
111
  * Provider name
112
112
  */
@@ -117,7 +117,7 @@ interface IProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> {
117
117
  * @param versionPath normalized version path in project
118
118
  * @param signal abort signal
119
119
  */
120
- downloadJSON: (name: string, versionPath: string, signal: AbortSignal) => Promise<T>;
120
+ downloadJSON: (name: string, versionPath: string, signal: AbortSignal) => Promise<UpdateJSONWithURL>;
121
121
  /**
122
122
  * Download update asar buffer
123
123
  * @param updateInfo existing update info
@@ -106,7 +106,7 @@ interface DownloadingInfo {
106
106
  type UpdateJSONWithURL = UpdateInfoWithURL & {
107
107
  beta: UpdateInfoWithURL;
108
108
  };
109
- interface IProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> {
109
+ interface IProvider {
110
110
  /**
111
111
  * Provider name
112
112
  */
@@ -117,7 +117,7 @@ interface IProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> {
117
117
  * @param versionPath normalized version path in project
118
118
  * @param signal abort signal
119
119
  */
120
- downloadJSON: (name: string, versionPath: string, signal: AbortSignal) => Promise<T>;
120
+ downloadJSON: (name: string, versionPath: string, signal: AbortSignal) => Promise<UpdateJSONWithURL>;
121
121
  /**
122
122
  * Download update asar buffer
123
123
  * @param updateInfo existing update info
package/dist/utils.cjs CHANGED
@@ -141,14 +141,14 @@ async function downloadUtil(url, headers, onResponse) {
141
141
  function trimData(data) {
142
142
  return data.trim().slice(0, 5e3).replace(/\s+/g, " ");
143
143
  }
144
- var defaultResolveDataFn = (data, resolve, reject) => {
144
+ var resolveJson = (data, resolve, reject) => {
145
145
  try {
146
146
  resolve(JSON.parse(data));
147
147
  } catch {
148
148
  reject(new Error(`Invalid json, "${trimData(data)}"`));
149
149
  }
150
150
  };
151
- async function defaultDownloadJSON(url, headers, signal, resolveData = defaultResolveDataFn) {
151
+ async function defaultDownloadText(url, headers, signal, resolveData) {
152
152
  return await downloadUtil(
153
153
  url,
154
154
  headers,
@@ -164,7 +164,7 @@ async function defaultDownloadJSON(url, headers, signal, resolveData = defaultRe
164
164
  );
165
165
  }
166
166
  async function defaultDownloadUpdateJSON(url, headers, signal) {
167
- return await defaultDownloadJSON(
167
+ return await defaultDownloadText(
168
168
  url,
169
169
  headers,
170
170
  signal,
@@ -333,7 +333,7 @@ exports.aesDecrypt = aesDecrypt;
333
333
  exports.aesEncrypt = aesEncrypt;
334
334
  exports.beautifyDevTools = beautifyDevTools;
335
335
  exports.defaultDownloadAsar = defaultDownloadAsar;
336
- exports.defaultDownloadJSON = defaultDownloadJSON;
336
+ exports.defaultDownloadText = defaultDownloadText;
337
337
  exports.defaultDownloadUpdateJSON = defaultDownloadUpdateJSON;
338
338
  exports.defaultIsLowerVersion = defaultIsLowerVersion;
339
339
  exports.defaultSignature = defaultSignature;
@@ -363,6 +363,7 @@ exports.loadPage = loadPage;
363
363
  exports.parseVersion = parseVersion;
364
364
  exports.reloadOnPreloadScriptChanged = reloadOnPreloadScriptChanged;
365
365
  exports.requireNative = requireNative;
366
+ exports.resolveJson = resolveJson;
366
367
  exports.restartApp = restartApp;
367
368
  exports.setAppUserModelId = setAppUserModelId;
368
369
  exports.setPortableAppDataPath = setPortableAppDataPath;
package/dist/utils.d.cts CHANGED
@@ -1,6 +1,6 @@
1
- export { b as aesDecrypt, a as aesEncrypt, j as defaultDownloadAsar, f as defaultDownloadJSON, i as defaultDownloadUpdateJSON, d as defaultSignature, l as defaultUnzipFile, c as defaultVerifySignature, k as defaultZipFile, e as downloadUtil, g as getHeader, h as hashBuffer } from './zip-DemXr4mk.cjs';
1
+ export { b as aesDecrypt, a as aesEncrypt, j as defaultDownloadAsar, f as defaultDownloadText, i as defaultDownloadUpdateJSON, d as defaultSignature, l as defaultUnzipFile, c as defaultVerifySignature, k as defaultZipFile, e as downloadUtil, g as getHeader, h as hashBuffer, r as resolveJson } from './zip-Blmn2vzE.cjs';
2
2
  import { BrowserWindow } from 'electron';
3
- export { U as UpdateInfo, a as UpdateJSON, V as Version, d as defaultIsLowerVersion, c as defaultVersionJsonGenerator, i as isUpdateJSON, p as parseVersion } from './types-1T_tRG8a.cjs';
3
+ export { U as UpdateInfo, a as UpdateJSON, V as Version, d as defaultIsLowerVersion, c as defaultVersionJsonGenerator, i as isUpdateJSON, p as parseVersion } from './types-CU7GyVez.cjs';
4
4
  import '@subframe7536/type-utils';
5
5
  import 'node:url';
6
6