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.
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-DH-Uyikp.cjs +321 -0
  5. package/dist/electron-OKQIYbcw.mjs +181 -0
  6. package/dist/index.cjs +261 -331
  7. package/dist/index.d.cts +179 -169
  8. package/dist/index.d.mts +204 -0
  9. package/dist/index.mjs +273 -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 +120 -85
  18. package/dist/utils.d.mts +164 -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 +521 -0
  23. package/dist/vite.mjs +1094 -0
  24. package/dist/zip-BCC7FAQ_.cjs +264 -0
  25. package/dist/zip-Dwm7s1C9.mjs +185 -0
  26. package/package.json +66 -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/provider.cjs CHANGED
@@ -1,350 +1,162 @@
1
- 'use strict';
1
+ const require_version = require('./version-aPrLuz_-.cjs');
2
+ const require_zip = require('./zip-BCC7FAQ_.cjs');
3
+ let node_url = require("node:url");
2
4
 
3
- var electron = require('electron');
4
- var crypto = require('crypto');
5
- var zlib = require('zlib');
6
- var url = require('url');
7
-
8
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
-
10
- var electron__default = /*#__PURE__*/_interopDefault(electron);
11
- var crypto__default = /*#__PURE__*/_interopDefault(crypto);
12
- var zlib__default = /*#__PURE__*/_interopDefault(zlib);
13
-
14
- // src/utils/download.ts
15
-
16
- // src/utils/version.ts
17
- function parseVersion(version) {
18
- const match = /^(\d+)\.(\d+)\.(\d+)(?:-([a-z0-9.-]+))?/i.exec(version);
19
- if (!match) {
20
- throw new TypeError(`invalid version: ${version}`);
21
- }
22
- const [major, minor, patch] = match.slice(1, 4).map(Number);
23
- const ret = {
24
- major,
25
- minor,
26
- patch,
27
- stage: "",
28
- stageVersion: -1
29
- };
30
- if (match[4]) {
31
- let [stage, _v] = match[4].split(".");
32
- ret.stage = stage;
33
- ret.stageVersion = Number(_v) || -1;
34
- }
35
- if (Number.isNaN(major) || Number.isNaN(minor) || Number.isNaN(patch) || Number.isNaN(ret.stageVersion)) {
36
- throw new TypeError(`Invalid version: ${version}`);
37
- }
38
- return ret;
39
- }
40
- function compareStrings(str1, str2) {
41
- if (str1 === "") {
42
- return str2 !== "";
43
- } else if (str2 === "") {
44
- return true;
45
- }
46
- return str1 < str2;
47
- }
48
- function defaultIsLowerVersion(oldVer, newVer) {
49
- const oldV = parseVersion(oldVer);
50
- const newV = parseVersion(newVer);
51
- for (let key of Object.keys(oldV)) {
52
- if (key === "stage" && compareStrings(oldV[key], newV[key])) {
53
- return true;
54
- } else if (oldV[key] !== newV[key]) {
55
- return oldV[key] < newV[key];
56
- }
57
- }
58
- return false;
59
- }
60
- var is = (j) => !!(j && j.minimumVersion && j.signature && j.version);
61
- function isUpdateJSON(json) {
62
- return is(json) && is(json?.beta);
63
- }
64
-
65
- // src/utils/download.ts
66
- function getHeader(headers, key) {
67
- const value = headers[key];
68
- if (Array.isArray(value)) {
69
- return value.length === 0 ? null : value[value.length - 1];
70
- } else {
71
- return value;
72
- }
73
- }
74
- async function downloadUtil(url, headers, onResponse) {
75
- await electron__default.default.app.whenReady();
76
- return new Promise((resolve, reject) => {
77
- const request = electron__default.default.net.request({
78
- cache: "no-cache",
79
- headers,
80
- method: "GET",
81
- redirect: "follow",
82
- url
83
- });
84
- request.on("response", (resp) => {
85
- resp.on("aborted", () => reject(new Error("Aborted")));
86
- resp.on("error", reject);
87
- onResponse(request, resp, resolve, reject);
88
- });
89
- request.on("error", reject);
90
- request.end();
91
- });
92
- }
93
- function trimData(data) {
94
- return data.trim().slice(0, 5e3).replace(/\s+/g, " ");
95
- }
96
- var resolveJson = (data, resolve, reject) => {
97
- try {
98
- resolve(JSON.parse(data));
99
- } catch {
100
- reject(new Error(`Invalid json, "${trimData(data)}"`));
101
- }
102
- };
103
- async function defaultDownloadText(url, headers, signal, resolveData) {
104
- return await downloadUtil(
105
- url,
106
- headers,
107
- (request, resp, resolve, reject) => {
108
- let data = "";
109
- resp.on("data", (chunk) => data += chunk);
110
- resp.on("end", () => resolveData(data, resolve, reject));
111
- signal.addEventListener("abort", () => {
112
- request.abort();
113
- data = null;
114
- }, { once: true });
115
- }
116
- );
117
- }
118
- async function defaultDownloadUpdateJSON(url, headers, signal) {
119
- return await defaultDownloadText(
120
- url,
121
- headers,
122
- signal,
123
- (data, resolve, reject) => {
124
- try {
125
- const json = JSON.parse(data);
126
- if (isUpdateJSON(json)) {
127
- resolve(json);
128
- } else {
129
- throw Error;
130
- }
131
- } catch {
132
- reject(new Error(`Invalid update json, "${trimData(data)}"`));
133
- }
134
- }
135
- );
136
- }
137
- async function defaultDownloadAsar(url, headers, signal, onDownloading) {
138
- let transferred = 0;
139
- let time = Date.now();
140
- return await downloadUtil(
141
- url,
142
- headers,
143
- (request, resp, resolve) => {
144
- const total = +getHeader(resp.headers, "content-length") || -1;
145
- let data = [];
146
- resp.on("data", (chunk) => {
147
- const delta = chunk.length;
148
- transferred += delta;
149
- const current = Date.now();
150
- onDownloading?.({
151
- bps: delta / (current - time),
152
- delta,
153
- percent: total > 0 ? +(transferred / total).toFixed(2) * 100 : -1,
154
- total,
155
- transferred
156
- });
157
- time = current;
158
- data.push(chunk);
159
- });
160
- resp.on("end", () => resolve(Buffer.concat(data)));
161
- signal.addEventListener("abort", () => {
162
- request.abort();
163
- data.length = 0;
164
- data = null;
165
- }, { once: true });
166
- }
167
- );
168
- }
169
- function hashBuffer(data, length) {
170
- const hash = crypto__default.default.createHash("SHA256").update(data).digest("binary");
171
- return Buffer.from(hash).subarray(0, length);
172
- }
173
- function aesDecrypt(encryptedText, key, iv) {
174
- const decipher = crypto__default.default.createDecipheriv("aes-256-cbc", key, iv);
175
- return decipher.update(encryptedText, "base64url", "utf8") + decipher.final("utf8");
176
- }
177
- function defaultVerifySignature(buffer, version, signature, cert) {
178
- try {
179
- const [sig, ver] = aesDecrypt(signature, hashBuffer(cert, 32), hashBuffer(buffer, 16)).split("%");
180
- if (ver !== version) {
181
- return false;
182
- }
183
- return crypto__default.default.createVerify("RSA-SHA256").update(buffer).verify(cert, sig, "base64");
184
- } catch {
185
- return false;
186
- }
187
- }
188
- async function defaultUnzipFile(buffer) {
189
- return new Promise((resolve, reject) => {
190
- zlib__default.default.brotliDecompress(buffer, (err, buffer2) => err ? reject(err) : resolve(buffer2));
191
- });
192
- }
193
-
194
- // src/provider/base.ts
5
+ //#region src/provider/base.ts
195
6
  var BaseProvider = class {
196
- name = "BaseProvider";
197
- /**
198
- * @inheritdoc
199
- */
200
- isLowerVersion = defaultIsLowerVersion;
201
- /**
202
- * @inheritdoc
203
- */
204
- verifySignaure = defaultVerifySignature;
205
- /**
206
- * @inheritdoc
207
- */
208
- unzipFile = defaultUnzipFile;
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;
209
20
  };
21
+
22
+ //#endregion
23
+ //#region src/provider/github/base.ts
210
24
  var BaseGitHubProvider = class extends BaseProvider {
211
- constructor(options) {
212
- super();
213
- this.options = options;
214
- }
215
- get urlHandler() {
216
- return this.options.urlHandler;
217
- }
218
- set urlHandler(handler) {
219
- this.options.urlHandler = handler;
220
- }
221
- async parseURL(extraPath) {
222
- const url$1 = new url.URL(
223
- `/${this.options.user}/${this.options.repo}/${extraPath}`,
224
- "https://github.com"
225
- );
226
- return (await this.urlHandler?.(url$1) || url$1).toString();
227
- }
228
- async downloadJSON(name, versionPath, signal) {
229
- const { beta, version, ...info } = await defaultDownloadUpdateJSON(
230
- await this.parseURL(await this.getVersionURL(versionPath, signal)),
231
- this.getHeaders("json"),
232
- signal
233
- );
234
- const getURL = (ver) => this.parseURL(
235
- `releases/download/v${ver}/${name}-${ver}.asar.gz`
236
- );
237
- return {
238
- ...info,
239
- version,
240
- url: await getURL(version),
241
- beta: {
242
- ...beta,
243
- url: await getURL(beta.version)
244
- }
245
- };
246
- }
247
- /**
248
- * @inheritdoc
249
- */
250
- async downloadAsar(info, signal, onDownloading) {
251
- return await defaultDownloadAsar(
252
- info.url,
253
- this.getHeaders("octet-stream"),
254
- signal,
255
- onDownloading
256
- );
257
- }
25
+ constructor(options) {
26
+ super();
27
+ this.options = options;
28
+ }
29
+ get urlHandler() {
30
+ return this.options.urlHandler;
31
+ }
32
+ set urlHandler(handler) {
33
+ this.options.urlHandler = handler;
34
+ }
35
+ async parseURL(extraPath) {
36
+ const url = new node_url.URL(`/${this.options.user}/${this.options.repo}/${extraPath}`, "https://github.com");
37
+ return (await this.urlHandler?.(url) || url).toString();
38
+ }
39
+ 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`);
42
+ return {
43
+ ...info,
44
+ version,
45
+ url: await getURL(version),
46
+ beta: {
47
+ ...beta,
48
+ url: await getURL(beta.version)
49
+ }
50
+ };
51
+ }
52
+ /**
53
+ * @inheritdoc
54
+ */
55
+ async downloadAsar(info, signal, onDownloading) {
56
+ return await require_zip.defaultDownloadAsar(info.url, this.getHeaders("octet-stream"), signal, onDownloading);
57
+ }
258
58
  };
259
59
 
260
- // src/provider/github/api.ts
261
- var ERROR_MSG = "Cannot find UpdateJSON in latest release";
60
+ //#endregion
61
+ //#region src/provider/github/api.ts
62
+ const ERROR_MSG = "Cannot find UpdateJSON in latest release";
63
+ /**
64
+ * Update Provider for Github API, you need to upload `version.json` to release as well
65
+ * - check update from `https://api.github.com/repos/{user}/{repo}/releases?per_page=1`
66
+ * - download update json and get version and download url
67
+ * - download update asar from update info
68
+ *
69
+ * you can setup `urlHandler` in options to modify url before request
70
+ * @param options provider options
71
+ */
262
72
  var GitHubApiProvider = class extends BaseGitHubProvider {
263
- name = "GithubApiProvider";
264
- constructor(options) {
265
- super(options);
266
- }
267
- getHeaders(accept) {
268
- return {
269
- Accept: `application/${accept}`,
270
- ...this.options.token ? { Authorization: `token ${this.options.token}` } : {},
271
- ...this.options.extraHeaders
272
- };
273
- }
274
- /**
275
- * @inheritdoc
276
- */
277
- async getVersionURL(versionPath, signal) {
278
- const basename = versionPath.slice(versionPath.lastIndexOf("/") + 1);
279
- const data = await defaultDownloadText(
280
- await this.parseURL(`https://api.github.com/repos/${this.options.user}/${this.options.repo}/releases?per_page=1`),
281
- this.getHeaders("vnd.github.v3+json"),
282
- signal,
283
- resolveJson
284
- );
285
- const versionAssets = data[0]?.assets.find((asset) => asset.name === basename);
286
- if (!versionAssets) {
287
- throw new Error(`${ERROR_MSG}, ${"message" in data ? data.message : "please check the release assets"}`);
288
- }
289
- return versionAssets.browser_download_url;
290
- }
73
+ name = "GithubApiProvider";
74
+ getHeaders(accept) {
75
+ return {
76
+ Accept: `application/${accept}`,
77
+ ...this.options.token ? { Authorization: `token ${this.options.token}` } : {},
78
+ ...this.options.extraHeaders
79
+ };
80
+ }
81
+ /**
82
+ * @inheritdoc
83
+ */
84
+ async getVersionURL(versionPath, signal) {
85
+ 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);
87
+ const versionAssets = data[0]?.assets.find((asset) => asset.name === basename);
88
+ if (!versionAssets) throw new Error(`${ERROR_MSG}, ${"message" in data ? data.message : "please check the release assets"}`);
89
+ return versionAssets.browser_download_url;
90
+ }
291
91
  };
292
92
 
293
- // src/provider/github/atom.ts
93
+ //#endregion
94
+ //#region src/provider/github/atom.ts
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
+ */
294
104
  var GitHubAtomProvider = class extends BaseGitHubProvider {
295
- name = "GithubAtomProvider";
296
- constructor(options) {
297
- super(options);
298
- }
299
- getHeaders(accept) {
300
- return { Accept: `application/${accept}`, ...this.options.extraHeaders };
301
- }
302
- /**
303
- * @inheritdoc
304
- */
305
- async getVersionURL(versionPath, signal) {
306
- const tag = await defaultDownloadText(
307
- await this.parseURL(`releases.atom`),
308
- this.getHeaders("xml"),
309
- signal,
310
- (data, resolve, reject) => {
311
- const result = data.match(/<entry>\s*<id>([^<]*\/)?([^/<]+)<\/id>/)?.[2];
312
- if (result) {
313
- resolve(result);
314
- } else {
315
- reject("No tag matched");
316
- }
317
- }
318
- );
319
- return `releases/download/v${tag}/${versionPath}`;
320
- }
105
+ name = "GithubAtomProvider";
106
+ getHeaders(accept) {
107
+ return {
108
+ Accept: `application/${accept}`,
109
+ ...this.options.extraHeaders
110
+ };
111
+ }
112
+ /**
113
+ * @inheritdoc
114
+ */
115
+ 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) => {
117
+ const result = data.match(/<entry>\s*<id>([^<]*\/)?([^/<]+)<\/id>/)?.[2];
118
+ if (result) resolve(result);
119
+ else reject("No tag matched");
120
+ })}/${versionPath}`;
121
+ }
321
122
  };
322
123
 
323
- // src/provider/github/file.ts
124
+ //#endregion
125
+ //#region src/provider/github/file.ts
126
+ /**
127
+ * Update Provider for Github repo
128
+ * - 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`
130
+ *
131
+ * you can setup `urlHandler` in options to modify url before request
132
+ * @param options provider options
133
+ */
324
134
  var GitHubProvider = class extends BaseGitHubProvider {
325
- name = "GithubProvider";
326
- constructor(options) {
327
- super(options);
328
- if (!options.branch) {
329
- this.options.branch = "HEAD";
330
- }
331
- }
332
- getHeaders(accept) {
333
- return { Accept: `application/${accept}`, ...this.options.extraHeaders };
334
- }
335
- getVersionURL(versionPath) {
336
- return `raw/${this.options.branch}/${versionPath}`;
337
- }
135
+ name = "GithubProvider";
136
+ constructor(options) {
137
+ super(options);
138
+ if (!options.branch) this.options.branch = "HEAD";
139
+ }
140
+ getHeaders(accept) {
141
+ return {
142
+ Accept: `application/${accept}`,
143
+ ...this.options.extraHeaders
144
+ };
145
+ }
146
+ getVersionURL(versionPath) {
147
+ return `raw/${this.options.branch}/${versionPath}`;
148
+ }
338
149
  };
339
150
 
151
+ //#endregion
340
152
  exports.BaseGitHubProvider = BaseGitHubProvider;
341
153
  exports.BaseProvider = BaseProvider;
342
154
  exports.GitHubApiProvider = GitHubApiProvider;
343
155
  exports.GitHubAtomProvider = GitHubAtomProvider;
344
156
  exports.GitHubProvider = GitHubProvider;
345
- exports.defaultDownloadAsar = defaultDownloadAsar;
346
- exports.defaultDownloadText = defaultDownloadText;
347
- exports.defaultDownloadUpdateJSON = defaultDownloadUpdateJSON;
348
- exports.downloadUtil = downloadUtil;
349
- exports.getHeader = getHeader;
350
- exports.resolveJson = resolveJson;
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;