electron-incremental-update 3.0.0-beta.6 → 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.
- package/README.md +45 -288
- package/dist/{zip-D1dbBzw4.cjs → crypto-BSky88mL.cjs} +39 -34
- package/dist/{zip-DUK3opmV.mjs → crypto-DZzMmoz2.mjs} +27 -22
- package/dist/{download-BjWmHHAu.d.cts → download-BVmLiAvB.d.cts} +2 -2
- package/dist/{download-BGaAyi1Z.mjs → download-BdX4fZYM.mjs} +13 -15
- package/dist/{download-DVWJfV3S.d.mts → download-GONr15zK.d.mts} +2 -2
- package/dist/{download-BYnkme_X.cjs → download-KySXUyWC.cjs} +14 -16
- package/dist/{electron-BInvFJ-W.mjs → electron-BrIF1urZ.mjs} +1 -1
- package/dist/{electron-D_8AbLQ5.cjs → electron-CaS0I3S2.cjs} +4 -4
- package/dist/index.cjs +8 -8
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +5 -5
- package/dist/{local-s1cw_vwb.mjs → local-C5jw-7o5.mjs} +7 -7
- package/dist/{local-Daf8naRn.cjs → local-DbXBG1D9.cjs} +11 -11
- package/dist/provider.cjs +5 -5
- package/dist/provider.d.cts +9 -15
- package/dist/provider.d.mts +9 -15
- package/dist/provider.mjs +5 -5
- package/dist/{types-BOqQ_r5Q.d.mts → types-q78spjKB.d.cts} +17 -2
- package/dist/{types-BOqQ_r5Q.d.cts → types-q78spjKB.d.mts} +17 -2
- package/dist/utils.cjs +14 -14
- package/dist/utils.d.cts +6 -6
- package/dist/utils.d.mts +6 -6
- package/dist/utils.mjs +4 -4
- package/dist/vite.d.mts +14 -14
- package/dist/vite.mjs +38 -36
- package/package.json +6 -6
|
@@ -27,6 +27,11 @@ interface Version {
|
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Parse version string to {@link Version}, like `0.2.0-beta.1`
|
|
30
|
+
*
|
|
31
|
+
* **Supported format**: `major.minor.patch[-stage[.stageVersion]]`
|
|
32
|
+
*
|
|
33
|
+
* Build metadata (`+build`) and complex semver prerelease identifiers
|
|
34
|
+
* (e.g. `1.0.0-beta.1.2`) are not supported yet.
|
|
30
35
|
* @param version version string
|
|
31
36
|
*/
|
|
32
37
|
declare function parseVersion(version: string): Version;
|
|
@@ -138,7 +143,7 @@ interface IProvider {
|
|
|
138
143
|
* Function to decompress file using brotli
|
|
139
144
|
* @param buffer compressed file buffer
|
|
140
145
|
*/
|
|
141
|
-
|
|
146
|
+
decompressFile: (buffer: Buffer) => Promise<Buffer>;
|
|
142
147
|
/**
|
|
143
148
|
* Verify asar signature,
|
|
144
149
|
* if signature is valid, returns the version, otherwise returns `undefined`
|
|
@@ -147,8 +152,18 @@ interface IProvider {
|
|
|
147
152
|
* @param signature signature
|
|
148
153
|
* @param cert certificate
|
|
149
154
|
*/
|
|
150
|
-
|
|
155
|
+
verifySignature: (buffer: Buffer, version: string, signature: string, cert: string) => Promisable<boolean>;
|
|
151
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Custom URL handler for GitHub provider, useful for mirrors and custom gateways
|
|
159
|
+
* @param url original URL
|
|
160
|
+
* @example
|
|
161
|
+
* (url) => {
|
|
162
|
+
* url.hostname = 'mirror.ghproxy.com'
|
|
163
|
+
* url.pathname = 'https://github.com' + url.pathname
|
|
164
|
+
* return url
|
|
165
|
+
* }
|
|
166
|
+
*/
|
|
152
167
|
type URLHandler = (url: URL) => Promisable<URL | string | undefined | null>;
|
|
153
168
|
//#endregion
|
|
154
169
|
export { VersionJSON as a, Version as c, isUpdateJSON as d, parseVersion as f, UpdateInfoWithURL as i, defaultIsLowerVersion as l, Promisable as m, IProvider as n, UpdateInfo as o, Arrayable as p, URLHandler as r, UpdateJSON as s, DownloadingInfo as t, defaultVersionJsonGenerator as u };
|
|
@@ -27,6 +27,11 @@ interface Version {
|
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Parse version string to {@link Version}, like `0.2.0-beta.1`
|
|
30
|
+
*
|
|
31
|
+
* **Supported format**: `major.minor.patch[-stage[.stageVersion]]`
|
|
32
|
+
*
|
|
33
|
+
* Build metadata (`+build`) and complex semver prerelease identifiers
|
|
34
|
+
* (e.g. `1.0.0-beta.1.2`) are not supported yet.
|
|
30
35
|
* @param version version string
|
|
31
36
|
*/
|
|
32
37
|
declare function parseVersion(version: string): Version;
|
|
@@ -138,7 +143,7 @@ interface IProvider {
|
|
|
138
143
|
* Function to decompress file using brotli
|
|
139
144
|
* @param buffer compressed file buffer
|
|
140
145
|
*/
|
|
141
|
-
|
|
146
|
+
decompressFile: (buffer: Buffer) => Promise<Buffer>;
|
|
142
147
|
/**
|
|
143
148
|
* Verify asar signature,
|
|
144
149
|
* if signature is valid, returns the version, otherwise returns `undefined`
|
|
@@ -147,8 +152,18 @@ interface IProvider {
|
|
|
147
152
|
* @param signature signature
|
|
148
153
|
* @param cert certificate
|
|
149
154
|
*/
|
|
150
|
-
|
|
155
|
+
verifySignature: (buffer: Buffer, version: string, signature: string, cert: string) => Promisable<boolean>;
|
|
151
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Custom URL handler for GitHub provider, useful for mirrors and custom gateways
|
|
159
|
+
* @param url original URL
|
|
160
|
+
* @example
|
|
161
|
+
* (url) => {
|
|
162
|
+
* url.hostname = 'mirror.ghproxy.com'
|
|
163
|
+
* url.pathname = 'https://github.com' + url.pathname
|
|
164
|
+
* return url
|
|
165
|
+
* }
|
|
166
|
+
*/
|
|
152
167
|
type URLHandler = (url: URL) => Promisable<URL | string | undefined | null>;
|
|
153
168
|
//#endregion
|
|
154
169
|
export { VersionJSON as a, Version as c, isUpdateJSON as d, parseVersion as f, UpdateInfoWithURL as i, defaultIsLowerVersion as l, Promisable as m, IProvider as n, UpdateInfo as o, Arrayable as p, URLHandler as r, UpdateJSON as s, DownloadingInfo as t, defaultVersionJsonGenerator as u };
|
package/dist/utils.cjs
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const
|
|
3
|
-
const require_electron = require("./electron-
|
|
4
|
-
const require_download = require("./download-
|
|
5
|
-
exports.aesDecrypt =
|
|
6
|
-
exports.aesEncrypt =
|
|
2
|
+
const require_crypto = require("./crypto-BSky88mL.cjs");
|
|
3
|
+
const require_electron = require("./electron-CaS0I3S2.cjs");
|
|
4
|
+
const require_download = require("./download-KySXUyWC.cjs");
|
|
5
|
+
exports.aesDecrypt = require_crypto.aesDecrypt;
|
|
6
|
+
exports.aesEncrypt = require_crypto.aesEncrypt;
|
|
7
7
|
exports.beautifyDevTools = require_electron.beautifyDevTools;
|
|
8
|
+
exports.defaultCompressFile = require_crypto.defaultCompressFile;
|
|
9
|
+
exports.defaultDecompressFile = require_crypto.defaultDecompressFile;
|
|
8
10
|
exports.defaultDownloadAsar = require_download.defaultDownloadAsar;
|
|
9
11
|
exports.defaultDownloadText = require_download.defaultDownloadText;
|
|
10
12
|
exports.defaultDownloadUpdateJSON = require_download.defaultDownloadUpdateJSON;
|
|
11
|
-
exports.defaultIsLowerVersion =
|
|
12
|
-
exports.defaultSignature =
|
|
13
|
-
exports.
|
|
14
|
-
exports.
|
|
15
|
-
exports.defaultVersionJsonGenerator = require_zip.defaultVersionJsonGenerator;
|
|
16
|
-
exports.defaultZipFile = require_zip.defaultZipFile;
|
|
13
|
+
exports.defaultIsLowerVersion = require_crypto.defaultIsLowerVersion;
|
|
14
|
+
exports.defaultSignature = require_crypto.defaultSignature;
|
|
15
|
+
exports.defaultVerifySignature = require_crypto.defaultVerifySignature;
|
|
16
|
+
exports.defaultVersionJsonGenerator = require_crypto.defaultVersionJsonGenerator;
|
|
17
17
|
exports.disableHWAccForWin7 = require_electron.disableHWAccForWin7;
|
|
18
18
|
exports.downloadUtil = require_download.downloadUtil;
|
|
19
19
|
exports.getAppVersion = require_electron.getAppVersion;
|
|
@@ -25,15 +25,15 @@ exports.getPathFromMain = require_electron.getPathFromMain;
|
|
|
25
25
|
exports.getPathFromPreload = require_electron.getPathFromPreload;
|
|
26
26
|
exports.getPathFromPublic = require_electron.getPathFromPublic;
|
|
27
27
|
exports.handleUnexpectedErrors = require_electron.handleUnexpectedErrors;
|
|
28
|
-
exports.hashBuffer =
|
|
28
|
+
exports.hashBuffer = require_crypto.hashBuffer;
|
|
29
29
|
exports.importNative = require_electron.importNative;
|
|
30
30
|
exports.isDev = require_electron.isDev;
|
|
31
31
|
exports.isLinux = require_electron.isLinux;
|
|
32
32
|
exports.isMac = require_electron.isMac;
|
|
33
|
-
exports.isUpdateJSON =
|
|
33
|
+
exports.isUpdateJSON = require_crypto.isUpdateJSON;
|
|
34
34
|
exports.isWin = require_electron.isWin;
|
|
35
35
|
exports.loadPage = require_electron.loadPage;
|
|
36
|
-
exports.parseVersion =
|
|
36
|
+
exports.parseVersion = require_crypto.parseVersion;
|
|
37
37
|
exports.reloadOnPreloadScriptChanged = require_electron.reloadOnPreloadScriptChanged;
|
|
38
38
|
exports.requireNative = require_electron.requireNative;
|
|
39
39
|
exports.resolveJson = require_download.resolveJson;
|
package/dist/utils.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as Version, d as isUpdateJSON, f as parseVersion, l as defaultIsLowerVersion, o as UpdateInfo, s as UpdateJSON, u as defaultVersionJsonGenerator } from "./types-
|
|
2
|
-
import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-
|
|
1
|
+
import { c as Version, d as isUpdateJSON, f as parseVersion, l as defaultIsLowerVersion, o as UpdateInfo, s as UpdateJSON, u as defaultVersionJsonGenerator } 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
3
|
import { BrowserWindow } from "electron";
|
|
4
4
|
|
|
5
5
|
//#region src/utils/crypto.d.ts
|
|
@@ -149,16 +149,16 @@ declare function handleUnexpectedErrors(callback: (err: unknown) => void): void;
|
|
|
149
149
|
*/
|
|
150
150
|
declare function reloadOnPreloadScriptChanged(): void;
|
|
151
151
|
//#endregion
|
|
152
|
-
//#region src/utils/
|
|
152
|
+
//#region src/utils/compress.d.ts
|
|
153
153
|
/**
|
|
154
154
|
* Default function to compress file using brotli
|
|
155
155
|
* @param buffer uncompressed file buffer
|
|
156
156
|
*/
|
|
157
|
-
declare function
|
|
157
|
+
declare function defaultCompressFile(buffer: Buffer): Promise<Buffer>;
|
|
158
158
|
/**
|
|
159
159
|
* Default function to decompress file using brotli
|
|
160
160
|
* @param buffer compressed file buffer
|
|
161
161
|
*/
|
|
162
|
-
declare function
|
|
162
|
+
declare function defaultDecompressFile(buffer: Buffer): Promise<Buffer>;
|
|
163
163
|
//#endregion
|
|
164
|
-
export { UpdateInfo, UpdateJSON, Version, aesDecrypt, aesEncrypt, beautifyDevTools, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, defaultIsLowerVersion, defaultSignature,
|
|
164
|
+
export { UpdateInfo, UpdateJSON, Version, aesDecrypt, aesEncrypt, beautifyDevTools, defaultCompressFile, defaultDecompressFile, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, defaultIsLowerVersion, defaultSignature, defaultVerifySignature, defaultVersionJsonGenerator, disableHWAccForWin7, downloadUtil, getAppVersion, getEntryVersion, getHeader, getPathFromAppNameAsar, getPathFromEntryAsar, getPathFromMain, getPathFromPreload, getPathFromPublic, handleUnexpectedErrors, hashBuffer, importNative, isDev, isLinux, isMac, isUpdateJSON, isWin, loadPage, parseVersion, reloadOnPreloadScriptChanged, requireNative, resolveJson, restartApp, setAppUserModelId, setPortableAppDataPath, setPortableDataPath, singleInstance };
|
package/dist/utils.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as Version, d as isUpdateJSON, f as parseVersion, l as defaultIsLowerVersion, o as UpdateInfo, s as UpdateJSON, u as defaultVersionJsonGenerator } from "./types-
|
|
2
|
-
import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-
|
|
1
|
+
import { c as Version, d as isUpdateJSON, f as parseVersion, l as defaultIsLowerVersion, o as UpdateInfo, s as UpdateJSON, u as defaultVersionJsonGenerator } 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
3
|
import { BrowserWindow } from "electron";
|
|
4
4
|
|
|
5
5
|
//#region src/utils/crypto.d.ts
|
|
@@ -149,16 +149,16 @@ declare function handleUnexpectedErrors(callback: (err: unknown) => void): void;
|
|
|
149
149
|
*/
|
|
150
150
|
declare function reloadOnPreloadScriptChanged(): void;
|
|
151
151
|
//#endregion
|
|
152
|
-
//#region src/utils/
|
|
152
|
+
//#region src/utils/compress.d.ts
|
|
153
153
|
/**
|
|
154
154
|
* Default function to compress file using brotli
|
|
155
155
|
* @param buffer uncompressed file buffer
|
|
156
156
|
*/
|
|
157
|
-
declare function
|
|
157
|
+
declare function defaultCompressFile(buffer: Buffer): Promise<Buffer>;
|
|
158
158
|
/**
|
|
159
159
|
* Default function to decompress file using brotli
|
|
160
160
|
* @param buffer compressed file buffer
|
|
161
161
|
*/
|
|
162
|
-
declare function
|
|
162
|
+
declare function defaultDecompressFile(buffer: Buffer): Promise<Buffer>;
|
|
163
163
|
//#endregion
|
|
164
|
-
export { UpdateInfo, UpdateJSON, Version, aesDecrypt, aesEncrypt, beautifyDevTools, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, defaultIsLowerVersion, defaultSignature,
|
|
164
|
+
export { UpdateInfo, UpdateJSON, Version, aesDecrypt, aesEncrypt, beautifyDevTools, defaultCompressFile, defaultDecompressFile, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, defaultIsLowerVersion, defaultSignature, defaultVerifySignature, defaultVersionJsonGenerator, disableHWAccForWin7, downloadUtil, getAppVersion, getEntryVersion, getHeader, getPathFromAppNameAsar, getPathFromEntryAsar, getPathFromMain, getPathFromPreload, getPathFromPublic, handleUnexpectedErrors, hashBuffer, importNative, isDev, isLinux, isMac, isUpdateJSON, isWin, loadPage, parseVersion, reloadOnPreloadScriptChanged, requireNative, resolveJson, restartApp, setAppUserModelId, setPortableAppDataPath, setPortableDataPath, singleInstance };
|
package/dist/utils.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { C as singleInstance, S as setPortableDataPath, _ as reloadOnPreloadScriptChanged, a as getPathFromAppNameAsar, b as setAppUserModelId, c as getPathFromPreload, d as importNative, f as isDev, g as loadPage, h as isWin, i as getEntryVersion, l as getPathFromPublic, m as isMac, n as disableHWAccForWin7, o as getPathFromEntryAsar, p as isLinux, r as getAppVersion, s as getPathFromMain, t as beautifyDevTools, u as handleUnexpectedErrors, v as requireNative, x as setPortableAppDataPath, y as restartApp } from "./electron-
|
|
3
|
-
import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-
|
|
4
|
-
export { aesDecrypt, aesEncrypt, beautifyDevTools, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, defaultIsLowerVersion, defaultSignature,
|
|
1
|
+
import { a as hashBuffer, c as defaultIsLowerVersion, d as parseVersion, i as defaultVerifySignature, l as defaultVersionJsonGenerator, n as aesEncrypt, o as defaultCompressFile, r as defaultSignature, s as defaultDecompressFile, t as aesDecrypt, u as isUpdateJSON } from "./crypto-DZzMmoz2.mjs";
|
|
2
|
+
import { C as singleInstance, S as setPortableDataPath, _ as reloadOnPreloadScriptChanged, a as getPathFromAppNameAsar, b as setAppUserModelId, c as getPathFromPreload, d as importNative, f as isDev, g as loadPage, h as isWin, i as getEntryVersion, l as getPathFromPublic, m as isMac, n as disableHWAccForWin7, o as getPathFromEntryAsar, p as isLinux, r as getAppVersion, s as getPathFromMain, t as beautifyDevTools, u as handleUnexpectedErrors, v as requireNative, x as setPortableAppDataPath, y as restartApp } from "./electron-BrIF1urZ.mjs";
|
|
3
|
+
import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-BdX4fZYM.mjs";
|
|
4
|
+
export { aesDecrypt, aesEncrypt, beautifyDevTools, defaultCompressFile, defaultDecompressFile, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, defaultIsLowerVersion, defaultSignature, defaultVerifySignature, defaultVersionJsonGenerator, disableHWAccForWin7, downloadUtil, getAppVersion, getEntryVersion, getHeader, getPathFromAppNameAsar, getPathFromEntryAsar, getPathFromMain, getPathFromPreload, getPathFromPublic, handleUnexpectedErrors, hashBuffer, importNative, isDev, isLinux, isMac, isUpdateJSON, isWin, loadPage, parseVersion, reloadOnPreloadScriptChanged, requireNative, resolveJson, restartApp, setAppUserModelId, setPortableAppDataPath, setPortableDataPath, singleInstance };
|
package/dist/vite.d.mts
CHANGED
|
@@ -271,7 +271,7 @@ interface LocalDevUpdateOptions {
|
|
|
271
271
|
* Directory that contains local update resources.
|
|
272
272
|
*
|
|
273
273
|
* The generated version file is written under `{baseDir}/{versionPath}` and
|
|
274
|
-
* update archives are written as `{baseDir}/{name}-{version}.asar.
|
|
274
|
+
* update archives are written as `{baseDir}/{name}-{version}.asar.br`.
|
|
275
275
|
*
|
|
276
276
|
* @default 'release/local-update'
|
|
277
277
|
*/
|
|
@@ -315,10 +315,10 @@ interface UpdaterOptions {
|
|
|
315
315
|
*/
|
|
316
316
|
versionPath?: string;
|
|
317
317
|
/**
|
|
318
|
-
* Path to
|
|
319
|
-
* @default `release/${app.name}-${version}.asar.
|
|
318
|
+
* Path to compressed asar file
|
|
319
|
+
* @default `release/${app.name}-${version}.asar.br`
|
|
320
320
|
*/
|
|
321
|
-
|
|
321
|
+
compressedPath?: string;
|
|
322
322
|
/**
|
|
323
323
|
* Path to electron build output
|
|
324
324
|
* @default `dist-electron`
|
|
@@ -395,10 +395,10 @@ interface GeneratorOverrideFunctions {
|
|
|
395
395
|
*/
|
|
396
396
|
generateUpdateJson?: (existingJson: UpdateJSON, signature: string, version: string, minVersion: string) => Promisable<UpdateJSON>;
|
|
397
397
|
/**
|
|
398
|
-
* Custom generate
|
|
398
|
+
* Custom generate compressed file buffer
|
|
399
399
|
* @param buffer source buffer
|
|
400
400
|
*/
|
|
401
|
-
|
|
401
|
+
generateCompressedFile?: (buffer: Buffer) => Promisable<Buffer>;
|
|
402
402
|
}
|
|
403
403
|
//#endregion
|
|
404
404
|
//#region src/vite/core.d.ts
|
|
@@ -442,10 +442,15 @@ declare function electronWithUpdater(options: ElectronWithUpdaterOptions): Promi
|
|
|
442
442
|
//#endregion
|
|
443
443
|
//#region src/vite/define.d.ts
|
|
444
444
|
interface ElectronViteHelperOptions extends ElectronWithUpdaterOptions {
|
|
445
|
+
/**
|
|
446
|
+
* Root dir of project
|
|
447
|
+
* @default process.cwd()
|
|
448
|
+
*/
|
|
449
|
+
root?: string;
|
|
445
450
|
/**
|
|
446
451
|
* Config for renderer process
|
|
447
452
|
*/
|
|
448
|
-
renderer?: UserConfig
|
|
453
|
+
renderer?: Omit<UserConfig, "root">;
|
|
449
454
|
}
|
|
450
455
|
/**
|
|
451
456
|
* Vite config helper
|
|
@@ -455,6 +460,7 @@ interface ElectronViteHelperOptions extends ElectronWithUpdaterOptions {
|
|
|
455
460
|
* import { defineElectronConfig } from 'electron-incremental-update/vite'
|
|
456
461
|
*
|
|
457
462
|
* export default defineElectronConfig({
|
|
463
|
+
* // root: './apps'
|
|
458
464
|
* main: {
|
|
459
465
|
* files: ['./electron/main/index.ts', './electron/main/worker.ts'],
|
|
460
466
|
* },
|
|
@@ -465,13 +471,7 @@ interface ElectronViteHelperOptions extends ElectronWithUpdaterOptions {
|
|
|
465
471
|
* // options
|
|
466
472
|
* },
|
|
467
473
|
* renderer: {
|
|
468
|
-
*
|
|
469
|
-
* const url = new URL(pkg.debug.env.VITE_DEV_SERVER_URL)
|
|
470
|
-
* return {
|
|
471
|
-
* host: url.hostname,
|
|
472
|
-
* port: +url.port,
|
|
473
|
-
* }
|
|
474
|
-
* })(),
|
|
474
|
+
* // plugins: []
|
|
475
475
|
* }
|
|
476
476
|
* })
|
|
477
477
|
* ```
|
package/dist/vite.mjs
CHANGED
|
@@ -5,8 +5,8 @@ import { isCI } from "ci-info";
|
|
|
5
5
|
import { createLogger, mergeConfig, normalizePath } from "vite";
|
|
6
6
|
import { electronPluginFactory } from "vite-plugin-electron/multi-env";
|
|
7
7
|
import { esmShim } from "vite-plugin-electron/plugin";
|
|
8
|
-
import crypto from "node:crypto";
|
|
9
8
|
import zlib from "node:zlib";
|
|
9
|
+
import crypto from "node:crypto";
|
|
10
10
|
import cp from "node:child_process";
|
|
11
11
|
import * as babel from "@babel/core";
|
|
12
12
|
import { copyFile, cp as cp$1, mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
@@ -41,6 +41,17 @@ function fixWinCharEncoding(fn) {
|
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
//#endregion
|
|
44
|
+
//#region src/utils/compress.ts
|
|
45
|
+
/**
|
|
46
|
+
* Default function to compress file using brotli
|
|
47
|
+
* @param buffer uncompressed file buffer
|
|
48
|
+
*/
|
|
49
|
+
async function defaultCompressFile(buffer) {
|
|
50
|
+
return new Promise((resolve, reject) => {
|
|
51
|
+
zlib.brotliCompress(buffer, (err, buffer) => err ? reject(err) : resolve(buffer));
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//#endregion
|
|
44
55
|
//#region src/utils/crypto.ts
|
|
45
56
|
function hashBuffer(data, length) {
|
|
46
57
|
const hash = crypto.createHash("SHA256").update(data).digest("binary");
|
|
@@ -65,6 +76,11 @@ function defaultSignature(buffer, privateKey, cert, version) {
|
|
|
65
76
|
const REG_VERSION = /^(\d+)\.(\d+)\.(\d+)(?:-([a-z0-9]+)(?:\.(\d+))?)?$/i;
|
|
66
77
|
/**
|
|
67
78
|
* Parse version string to {@link Version}, like `0.2.0-beta.1`
|
|
79
|
+
*
|
|
80
|
+
* **Supported format**: `major.minor.patch[-stage[.stageVersion]]`
|
|
81
|
+
*
|
|
82
|
+
* Build metadata (`+build`) and complex semver prerelease identifiers
|
|
83
|
+
* (e.g. `1.0.0-beta.1.2`) are not supported yet.
|
|
68
84
|
* @param version version string
|
|
69
85
|
*/
|
|
70
86
|
function parseVersion(version) {
|
|
@@ -114,17 +130,6 @@ function defaultVersionJsonGenerator(existingJson, signature, version, minimumVe
|
|
|
114
130
|
return existingJson;
|
|
115
131
|
}
|
|
116
132
|
//#endregion
|
|
117
|
-
//#region src/utils/zip.ts
|
|
118
|
-
/**
|
|
119
|
-
* Default function to compress file using brotli
|
|
120
|
-
* @param buffer uncompressed file buffer
|
|
121
|
-
*/
|
|
122
|
-
async function defaultZipFile(buffer) {
|
|
123
|
-
return new Promise((resolve, reject) => {
|
|
124
|
-
zlib.brotliCompress(buffer, (err, buffer) => err ? reject(err) : resolve(buffer));
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
//#endregion
|
|
128
133
|
//#region src/vite/constant.ts
|
|
129
134
|
const id = "electron-incremental-update";
|
|
130
135
|
const bytecodeId = `${id}-bytecode`;
|
|
@@ -446,14 +451,14 @@ async function prepareLocalDevUpdateResource({ root, pkg, buildAsarOption, versi
|
|
|
446
451
|
const stagedElectronDistPath = path.join(workDir, "dist-electron");
|
|
447
452
|
const resolvedVersionPath = path.join(localDevUpdate.baseDir, versionPath);
|
|
448
453
|
const asarPath = path.join(localDevUpdate.baseDir, `${pkg.name}.asar`);
|
|
449
|
-
const
|
|
454
|
+
const compressedPath = path.join(localDevUpdate.baseDir, `${pkg.name}-${targetVersion}.asar.br`);
|
|
450
455
|
try {
|
|
451
456
|
await mkdir(localDevUpdate.baseDir, { recursive: true });
|
|
452
457
|
await mkdir(path.dirname(resolvedVersionPath), { recursive: true });
|
|
453
458
|
await cp$1(path.resolve(root, buildAsarOption.electronDistPath), stagedElectronDistPath, { recursive: true });
|
|
454
459
|
await writeFile(path.join(stagedElectronDistPath, "version"), targetVersion, "utf-8");
|
|
455
460
|
await createPackage(stagedElectronDistPath, asarPath);
|
|
456
|
-
await writeFile(
|
|
461
|
+
await writeFile(compressedPath, await buildAsarOption.generateCompressedFile(await readFile(asarPath)));
|
|
457
462
|
const updateJSON = defaultVersionJsonGenerator(await readExistingUpdateJSON(resolvedVersionPath, targetVersion), LOCAL_DEV_SIGNATURE, targetVersion, minimumVersion);
|
|
458
463
|
if (!isUpdateJSON(updateJSON)) throw new Error("Invalid local dev update json");
|
|
459
464
|
await writeFile(resolvedVersionPath, JSON.stringify(updateJSON, null, 2), "utf-8");
|
|
@@ -565,20 +570,20 @@ function copyAndSkipIfExist(from, to, skipIfExist) {
|
|
|
565
570
|
* @param options - Asar build options
|
|
566
571
|
* @returns Buffer of the built asar file
|
|
567
572
|
*/
|
|
568
|
-
async function buildAsar(root, { version, asarOutputPath, electronDistPath, rendererDistPath,
|
|
573
|
+
async function buildAsar(root, { version, asarOutputPath, electronDistPath, rendererDistPath, compressedPath, generateCompressedFile }) {
|
|
569
574
|
electronDistPath = path.resolve(root, electronDistPath);
|
|
570
575
|
asarOutputPath = path.resolve(root, asarOutputPath);
|
|
571
576
|
rendererDistPath = path.resolve(root, rendererDistPath);
|
|
572
|
-
|
|
577
|
+
compressedPath = path.resolve(root, compressedPath);
|
|
573
578
|
const rPath = path.join(electronDistPath, "renderer");
|
|
574
579
|
await fs.promises.cp(rendererDistPath, rPath, { recursive: true });
|
|
575
580
|
fs.writeFileSync(path.join(electronDistPath, "version"), version);
|
|
576
581
|
await fs.promises.mkdir(path.dirname(asarOutputPath), { recursive: true });
|
|
577
582
|
await createPackage(electronDistPath, asarOutputPath);
|
|
578
|
-
const buf = await
|
|
579
|
-
await fs.promises.mkdir(path.dirname(
|
|
580
|
-
fs.writeFileSync(
|
|
581
|
-
log.info(`Build update asar to '${
|
|
583
|
+
const buf = await generateCompressedFile(fs.readFileSync(asarOutputPath));
|
|
584
|
+
await fs.promises.mkdir(path.dirname(compressedPath), { recursive: true });
|
|
585
|
+
fs.writeFileSync(compressedPath, buf);
|
|
586
|
+
log.info(`Build update asar to '${compressedPath}' [${readableSize(buf.length)}]`, { timestamp: true });
|
|
582
587
|
return buf;
|
|
583
588
|
}
|
|
584
589
|
/**
|
|
@@ -586,7 +591,8 @@ async function buildAsar(root, { version, asarOutputPath, electronDistPath, rend
|
|
|
586
591
|
* @param options - Version build options
|
|
587
592
|
* @param asarBuffer - Buffer of the asar file to sign
|
|
588
593
|
*/
|
|
589
|
-
async function buildUpdateJson({ versionPath, privateKey, cert, version, minimumVersion, generateSignature, generateUpdateJson }, asarBuffer) {
|
|
594
|
+
async function buildUpdateJson(root, { versionPath, privateKey, cert, version, minimumVersion, generateSignature, generateUpdateJson }, asarBuffer) {
|
|
595
|
+
const resolvedVersionPath = path.resolve(root, versionPath);
|
|
590
596
|
let _json = {
|
|
591
597
|
beta: {
|
|
592
598
|
minimumVersion: version,
|
|
@@ -605,9 +611,9 @@ async function buildUpdateJson({ versionPath, privateKey, cert, version, minimum
|
|
|
605
611
|
const sig = await generateSignature(asarBuffer, privateKey, cert, version);
|
|
606
612
|
_json = await generateUpdateJson(_json, sig, version, minimumVersion);
|
|
607
613
|
if (!isUpdateJSON(_json)) throw new Error("Invalid update json");
|
|
608
|
-
await fs.promises.mkdir(path.dirname(
|
|
609
|
-
fs.writeFileSync(
|
|
610
|
-
log.info(`
|
|
614
|
+
await fs.promises.mkdir(path.dirname(resolvedVersionPath), { recursive: true });
|
|
615
|
+
fs.writeFileSync(resolvedVersionPath, JSON.stringify(_json, null, 2));
|
|
616
|
+
log.info(`Build update json to '${resolvedVersionPath}'`, { timestamp: true });
|
|
611
617
|
}
|
|
612
618
|
//#endregion
|
|
613
619
|
//#region src/vite/utils/key.ts
|
|
@@ -678,10 +684,10 @@ function parseSubjects(subject) {
|
|
|
678
684
|
//#endregion
|
|
679
685
|
//#region src/vite/core.ts
|
|
680
686
|
async function resolveUpdaterOption(root, pkg, options = {}, resolveSignatureKeys = true) {
|
|
681
|
-
const { minimumVersion = "0.0.0", paths: { asarOutputPath = `release/${pkg.name}.asar`,
|
|
687
|
+
const { minimumVersion = "0.0.0", paths: { asarOutputPath = `release/${pkg.name}.asar`, compressedPath = `release/${pkg.name}-${pkg.version}.asar.br`, entryOutDir = "dist-entry", electronDistPath = "dist-electron", rendererDistPath = "dist", versionPath = "release/version.json" } = {}, keys: { privateKeyPath = "keys/private.pem", certPath = "keys/cert.pem", keyLength = 2048, certInfo: { subject = {
|
|
682
688
|
commonName: pkg.name,
|
|
683
689
|
organizationName: `org.${pkg.name}`
|
|
684
|
-
}, days = 3650 } = {} } = {}, overrideGenerator: {
|
|
690
|
+
}, days = 3650 } = {} } = {}, overrideGenerator: { generateCompressedFile = defaultCompressFile, generateSignature = defaultSignature, generateUpdateJson = defaultVersionJsonGenerator } = {} } = options;
|
|
685
691
|
const { privateKey, cert } = resolveSignatureKeys ? await parseKeys({
|
|
686
692
|
keyLength,
|
|
687
693
|
privateKeyPath: path.resolve(root, privateKeyPath),
|
|
@@ -696,10 +702,10 @@ async function resolveUpdaterOption(root, pkg, options = {}, resolveSignatureKey
|
|
|
696
702
|
buildAsarOption: {
|
|
697
703
|
version: pkg.version,
|
|
698
704
|
asarOutputPath,
|
|
699
|
-
|
|
705
|
+
compressedPath,
|
|
700
706
|
electronDistPath,
|
|
701
707
|
rendererDistPath,
|
|
702
|
-
|
|
708
|
+
generateCompressedFile
|
|
703
709
|
},
|
|
704
710
|
buildVersionOption: {
|
|
705
711
|
version: pkg.version,
|
|
@@ -869,7 +875,7 @@ async function createElectronOptions(options, context) {
|
|
|
869
875
|
if (context.isDev) return;
|
|
870
876
|
const buffer = await buildAsar(context.root, buildAsarOption);
|
|
871
877
|
if (!buildVersionJson && !isCI) log.warn("No `buildVersionJson` option setup, skip build version json. Only build in CI by default", { timestamp: true });
|
|
872
|
-
else await buildUpdateJson(buildVersionOption, buffer);
|
|
878
|
+
else await buildUpdateJson(context.root, buildVersionOption, buffer);
|
|
873
879
|
}
|
|
874
880
|
}
|
|
875
881
|
],
|
|
@@ -944,6 +950,7 @@ async function electronWithUpdater(options) {
|
|
|
944
950
|
* import { defineElectronConfig } from 'electron-incremental-update/vite'
|
|
945
951
|
*
|
|
946
952
|
* export default defineElectronConfig({
|
|
953
|
+
* // root: './apps'
|
|
947
954
|
* main: {
|
|
948
955
|
* files: ['./electron/main/index.ts', './electron/main/worker.ts'],
|
|
949
956
|
* },
|
|
@@ -954,13 +961,7 @@ async function electronWithUpdater(options) {
|
|
|
954
961
|
* // options
|
|
955
962
|
* },
|
|
956
963
|
* renderer: {
|
|
957
|
-
*
|
|
958
|
-
* const url = new URL(pkg.debug.env.VITE_DEV_SERVER_URL)
|
|
959
|
-
* return {
|
|
960
|
-
* host: url.hostname,
|
|
961
|
-
* port: +url.port,
|
|
962
|
-
* }
|
|
963
|
-
* })(),
|
|
964
|
+
* // plugins: []
|
|
964
965
|
* }
|
|
965
966
|
* })
|
|
966
967
|
* ```
|
|
@@ -970,6 +971,7 @@ function defineElectronConfig(options) {
|
|
|
970
971
|
const result = options.renderer ?? {};
|
|
971
972
|
result.plugins ??= [];
|
|
972
973
|
result.plugins.push(electronPlugin);
|
|
974
|
+
result.root = options.root;
|
|
973
975
|
const rendererDistPath = options.updater?.paths?.rendererDistPath;
|
|
974
976
|
if (rendererDistPath) {
|
|
975
977
|
result.build ??= {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "electron-incremental-update",
|
|
3
|
-
"version": "3.0.0
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "Electron incremental update tools with Vite plugin, support bytecode protection",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bytecode",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"test:dev": "bun test --watch",
|
|
62
62
|
"format": "oxfmt",
|
|
63
63
|
"lint": "oxlint --fix",
|
|
64
|
-
"qa": "
|
|
64
|
+
"qa": "bun run lint && bun run format && tsc --noEmit"
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
67
|
"@babel/plugin-transform-arrow-functions": "^7.29.7",
|
|
@@ -72,14 +72,14 @@
|
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
74
|
"@subf/config": "^0.2.1",
|
|
75
|
-
"@tsdown/css": "^0.22.
|
|
75
|
+
"@tsdown/css": "^0.22.2",
|
|
76
76
|
"@types/babel__core": "^7.20.5",
|
|
77
77
|
"@types/bun": "^1.3.14",
|
|
78
78
|
"bumpp": "^11.1.0",
|
|
79
79
|
"electron": "42.2.0",
|
|
80
|
-
"oxfmt": "^0.
|
|
81
|
-
"oxlint": "^1.
|
|
82
|
-
"tsdown": "^0.22.
|
|
80
|
+
"oxfmt": "^0.54.0",
|
|
81
|
+
"oxlint": "^1.69.0",
|
|
82
|
+
"tsdown": "^0.22.2",
|
|
83
83
|
"typescript": "^6.0.3",
|
|
84
84
|
"vite": "^8.0.16"
|
|
85
85
|
},
|