electron-incremental-update 2.2.2 → 2.2.4

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/dist/utils.cjs CHANGED
@@ -1,17 +1,17 @@
1
1
  'use strict';
2
2
 
3
3
  var crypto = require('crypto');
4
+ var electron2 = require('electron');
4
5
  var fs = require('fs');
5
6
  var path = require('path');
6
- var electron = require('electron');
7
7
  var zlib = require('zlib');
8
8
 
9
9
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
10
 
11
11
  var crypto__default = /*#__PURE__*/_interopDefault(crypto);
12
+ var electron2__default = /*#__PURE__*/_interopDefault(electron2);
12
13
  var fs__default = /*#__PURE__*/_interopDefault(fs);
13
14
  var path__default = /*#__PURE__*/_interopDefault(path);
14
- var electron__default = /*#__PURE__*/_interopDefault(electron);
15
15
  var zlib__default = /*#__PURE__*/_interopDefault(zlib);
16
16
 
17
17
  var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
@@ -47,18 +47,173 @@ function defaultVerifySignature(buffer, version, signature, cert) {
47
47
  return false;
48
48
  }
49
49
  }
50
+
51
+ // src/utils/version.ts
52
+ function parseVersion(version) {
53
+ const match = /^(\d+)\.(\d+)\.(\d+)(?:-([a-z0-9.-]+))?/i.exec(version);
54
+ if (!match) {
55
+ throw new TypeError(`invalid version: ${version}`);
56
+ }
57
+ const [major, minor, patch] = match.slice(1, 4).map(Number);
58
+ const ret = {
59
+ major,
60
+ minor,
61
+ patch,
62
+ stage: "",
63
+ stageVersion: -1
64
+ };
65
+ if (match[4]) {
66
+ let [stage, _v] = match[4].split(".");
67
+ ret.stage = stage;
68
+ ret.stageVersion = Number(_v) || -1;
69
+ }
70
+ if (Number.isNaN(major) || Number.isNaN(minor) || Number.isNaN(patch) || Number.isNaN(ret.stageVersion)) {
71
+ throw new TypeError(`Invalid version: ${version}`);
72
+ }
73
+ return ret;
74
+ }
75
+ function compareStrings(str1, str2) {
76
+ if (str1 === "") {
77
+ return str2 !== "";
78
+ } else if (str2 === "") {
79
+ return true;
80
+ }
81
+ return str1 < str2;
82
+ }
83
+ function defaultIsLowerVersion(oldVer, newVer) {
84
+ const oldV = parseVersion(oldVer);
85
+ const newV = parseVersion(newVer);
86
+ for (let key of Object.keys(oldV)) {
87
+ if (key === "stage" && compareStrings(oldV[key], newV[key])) {
88
+ return true;
89
+ } else if (oldV[key] !== newV[key]) {
90
+ return oldV[key] < newV[key];
91
+ }
92
+ }
93
+ return false;
94
+ }
95
+ var is = (j) => !!(j && j.minimumVersion && j.signature && j.version);
96
+ function isUpdateJSON(json) {
97
+ return is(json) && is(json?.beta);
98
+ }
99
+ function defaultVersionJsonGenerator(existingJson, signature, version, minimumVersion) {
100
+ existingJson.beta = {
101
+ version,
102
+ minimumVersion,
103
+ signature
104
+ };
105
+ if (!parseVersion(version).stage) {
106
+ existingJson.version = version;
107
+ existingJson.minimumVersion = minimumVersion;
108
+ existingJson.signature = signature;
109
+ }
110
+ return existingJson;
111
+ }
112
+
113
+ // src/utils/download.ts
114
+ function getHeader(headers, key) {
115
+ const value = headers[key];
116
+ if (Array.isArray(value)) {
117
+ return value.length === 0 ? null : value[value.length - 1];
118
+ } else {
119
+ return value;
120
+ }
121
+ }
122
+ async function downloadUtil(url, headers, signal, onResponse) {
123
+ await electron2__default.default.app.whenReady();
124
+ return new Promise((resolve, reject) => {
125
+ const request = electron2__default.default.net.request({ url, method: "GET", redirect: "follow", headers, cache: "no-cache" });
126
+ signal.addEventListener("abort", () => request.abort(), { once: true });
127
+ request.on("response", (resp) => {
128
+ resp.on("aborted", () => reject(new Error("aborted")));
129
+ resp.on("error", () => reject(new Error("download error")));
130
+ onResponse(resp, resolve, reject);
131
+ });
132
+ request.on("error", reject);
133
+ request.end();
134
+ });
135
+ }
136
+ function trimData(data) {
137
+ return data.trim().slice(0, 5e3).replace(/\s+/g, " ");
138
+ }
139
+ var defaultResolveDataFn = (data, resolve, reject) => {
140
+ try {
141
+ resolve(JSON.parse(data));
142
+ } catch {
143
+ reject(new Error(`Invalid json, "${trimData(data)}"`));
144
+ }
145
+ };
146
+ async function defaultDownloadJSON(url, headers, signal, resolveData = defaultResolveDataFn) {
147
+ return await downloadUtil(
148
+ url,
149
+ headers,
150
+ signal,
151
+ (resp, resolve, reject) => {
152
+ let data = "";
153
+ resp.on("data", (chunk) => data += chunk);
154
+ resp.on("end", () => resolveData(data, resolve, reject));
155
+ }
156
+ );
157
+ }
158
+ async function defaultDownloadUpdateJSON(url, headers, signal) {
159
+ return await defaultDownloadJSON(
160
+ url,
161
+ headers,
162
+ signal,
163
+ (data, resolve, reject) => {
164
+ try {
165
+ const json = JSON.parse(data);
166
+ if (isUpdateJSON(json)) {
167
+ resolve(json);
168
+ } else {
169
+ throw Error;
170
+ }
171
+ } catch {
172
+ reject(new Error(`Invalid update json, "${trimData(data)}"`));
173
+ }
174
+ }
175
+ );
176
+ }
177
+ async function defaultDownloadAsar(url, headers, signal, onDownloading) {
178
+ let transferred = 0;
179
+ let time = Date.now();
180
+ return await downloadUtil(
181
+ url,
182
+ headers,
183
+ signal,
184
+ (resp, resolve) => {
185
+ const total = +getHeader(resp.headers, "content-length") || -1;
186
+ const data = [];
187
+ resp.on("data", (chunk) => {
188
+ const delta = chunk.length;
189
+ transferred += delta;
190
+ const current = Date.now();
191
+ onDownloading?.({
192
+ percent: total > 0 ? +(transferred / total).toFixed(2) * 100 : -1,
193
+ total,
194
+ transferred,
195
+ delta,
196
+ bps: delta / (current - time)
197
+ });
198
+ time = current;
199
+ data.push(chunk);
200
+ });
201
+ resp.on("end", () => resolve(Buffer.concat(data)));
202
+ }
203
+ );
204
+ }
50
205
  var isDev = __EIU_IS_DEV__;
51
206
  var isWin = process.platform === "win32";
52
207
  var isMac = process.platform === "darwin";
53
208
  var isLinux = process.platform === "linux";
54
209
  function getPathFromAppNameAsar(...paths) {
55
- return isDev ? "DEV.asar" : path__default.default.join(path__default.default.dirname(electron__default.default.app.getAppPath()), `${electron__default.default.app.name}.asar`, ...paths);
210
+ return isDev ? "DEV.asar" : path__default.default.join(path__default.default.dirname(electron2__default.default.app.getAppPath()), `${electron2__default.default.app.name}.asar`, ...paths);
56
211
  }
57
212
  function getAppVersion() {
58
213
  return isDev ? getEntryVersion() : fs__default.default.readFileSync(getPathFromAppNameAsar("version"), "utf-8");
59
214
  }
60
215
  function getEntryVersion() {
61
- return electron__default.default.app.getVersion();
216
+ return electron2__default.default.app.getVersion();
62
217
  }
63
218
  function requireNative(moduleName) {
64
219
  const m = getPathFromEntryAsar(moduleName);
@@ -75,21 +230,21 @@ async function importNative(moduleName) {
75
230
  return await import(`file://${m}.js`);
76
231
  }
77
232
  function restartApp() {
78
- electron__default.default.app.relaunch();
79
- electron__default.default.app.quit();
233
+ electron2__default.default.app.relaunch();
234
+ electron2__default.default.app.quit();
80
235
  }
81
236
  function setAppUserModelId(id) {
82
237
  if (isWin) {
83
- electron__default.default.app.setAppUserModelId(id ?? `org.${electron__default.default.app.name}`);
238
+ electron2__default.default.app.setAppUserModelId(id ?? `org.${electron2__default.default.app.name}`);
84
239
  }
85
240
  }
86
241
  function disableHWAccForWin7() {
87
242
  if (!__EIU_IS_ESM__ && __require("os").release().startsWith("6.1")) {
88
- electron__default.default.app.disableHardwareAcceleration();
243
+ electron2__default.default.app.disableHardwareAcceleration();
89
244
  }
90
245
  }
91
246
  function singleInstance(window) {
92
- electron__default.default.app.on("second-instance", () => {
247
+ electron2__default.default.app.on("second-instance", () => {
93
248
  if (window) {
94
249
  window.show();
95
250
  if (window.isMinimized()) {
@@ -100,11 +255,11 @@ function singleInstance(window) {
100
255
  });
101
256
  }
102
257
  function setPortableAppDataPath(dirName = "data") {
103
- const portablePath = path__default.default.join(path__default.default.dirname(electron__default.default.app.getPath("exe")), dirName);
258
+ const portablePath = path__default.default.join(path__default.default.dirname(electron2__default.default.app.getPath("exe")), dirName);
104
259
  if (!fs__default.default.existsSync(portablePath)) {
105
260
  fs__default.default.mkdirSync(portablePath);
106
261
  }
107
- electron__default.default.app.setPath("appData", portablePath);
262
+ electron2__default.default.app.setPath("appData", portablePath);
108
263
  }
109
264
  function loadPage(win, htmlFilePath = "index.html") {
110
265
  if (isDev) {
@@ -115,92 +270,41 @@ function loadPage(win, htmlFilePath = "index.html") {
115
270
  }
116
271
  function beautifyDevTools(win, options) {
117
272
  const { mono, sans, scrollbar = true } = options;
118
- win.webContents.on("devtools-opened", () => {
119
- let css = `:root{--sans: ${sans};--mono: ${mono}}:root,body{--source-code-font-family: var(--mono) !important;--source-code-font-size: 12px !important;--monospace-font-family: var(--mono) !important;--monospace-font-size: 12px !important;--default-font-family: var(--sans), sans-serif !important;--default-font-size: 12px !important}button,input,select,.undisplayable-text,.expandable-inline-button{font-family:var(--sans)!important}`;
273
+ win.webContents.on("devtools-opened", async () => {
274
+ let css = `:root{--sans:${sans};--mono:${mono}}:root,body{--source-code-font-family:var(--mono)!important;--source-code-font-size:12px!important;--monospace-font-family:var(--mono)!important;--monospace-font-size:12px!important;--default-font-family:var(--sans), sans-serif!important;--default-font-size:12px!important}button,input,select,.undisplayable-text,.expandable-inline-button{font-family:var(--sans)!important}`;
120
275
  if (scrollbar) {
121
- css += ":root{--scrollbar-width: max(.85vw, 10px)}@media (prefers-color-scheme: light){:root{--scrollbar-color-rgb: 0, 0, 0}}@media (prefers-color-scheme: dark){:root{--scrollbar-color-rgb: 255, 255, 255}}*::-webkit-scrollbar{width:var(--scrollbar-width)!important;height:var(--scrollbar-width)!important}*::-webkit-scrollbar-track{background-color:transparent!important;border-radius:var(--scrollbar-width)!important;box-shadow:none!important}*::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 var(--scrollbar-width)!important;border-radius:var(--scrollbar-width)!important;border:calc(var(--scrollbar-width) * 2 / 9) solid transparent!important;background-clip:content-box;background-color:transparent!important;color:rgba(var(--scrollbar-color-rgb),30%)!important}*::-webkit-scrollbar-thumb:hover{color:rgba(var(--scrollbar-color-rgb),45%)!important}*::-webkit-scrollbar-thumb:active{color:rgba(var(--scrollbar-color-rgb),60%)!important}@supports not selector(::-webkit-scrollbar){html{scrollbar-color:rgb(var(--scrollbar-color-rgb));scrollbar-width:thin}}";
276
+ css += ":root{--scrollbar-width:max(.85vw,10px)}@media (prefers-color-scheme:light){:root{--scrollbar-color-rgb:0,0,0}}@media (prefers-color-scheme:dark){:root{--scrollbar-color-rgb:255,255,255}}*::-webkit-scrollbar{width:var(--scrollbar-width)!important;height:var(--scrollbar-width)!important}*::-webkit-scrollbar-track{background-color:transparent!important;border-radius:var(--scrollbar-width)!important;box-shadow:none!important}*::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 var(--scrollbar-width)!important;border-radius:var(--scrollbar-width)!important;border:calc(var(--scrollbar-width) * 2/9) solid transparent!important;background-clip:content-box;background-color:transparent!important;color:rgba(var(--scrollbar-color-rgb),30%)!important}*::-webkit-scrollbar-thumb:hover{color:rgba(var(--scrollbar-color-rgb),45%)!important}*::-webkit-scrollbar-thumb:active{color:rgba(var(--scrollbar-color-rgb),60%)!important}@supports not selector(::-webkit-scrollbar){html{scrollbar-color:rgb(var(--scrollbar-color-rgb));scrollbar-width:thin}}";
122
277
  }
123
- const js = `let overriddenStyle=document.createElement('style');overriddenStyle.innerHTML='${css}';document.body.append(overriddenStyle);document.body.classList.remove('platform-windows','platform-mac','platform-linux');`;
124
- win?.webContents.devToolsWebContents?.executeJavaScript(js);
278
+ const js = `${'function run(n){let d=document.createElement("style");d.innerHTML=n,document.body.append(d),["platform-windows","platform-mac","platform-linux"].forEach(t=>document.querySelectorAll(`.${t}`).forEach(o=>o.classList.remove(t))),l();const r=new MutationObserver(t=>{for(const o of t)if(o.type==="childList")for(let e=0;e<o.addedNodes.length;e++)o.addedNodes[e].classList.contains("editor-tooltip-host")&&l()});r.observe(document.body,{childList:!0});function l(){document.querySelectorAll(".editor-tooltip-host").forEach(t=>{if(t?.shadowRoot?.querySelectorAll(\'[data-key="overridden-dev-tools-font"]\').length===0){const o=document.createElement("style");o.setAttribute("data-key","overridden-dev-tools-font"),o.innerHTML=`${n}.cm-tooltip-autocomplete ul[role=listbox]{font-family:var(--mono)!important;}`,t.shadowRoot.append(o)}})}document.onclose=()=>r.disconnect()}'};run(\`${css}\`)`;
279
+ await win?.webContents.devToolsWebContents?.executeJavaScript(js);
125
280
  });
126
281
  }
127
282
  function getPathFromMain(...paths) {
128
- return isDev ? path__default.default.join(electron__default.default.app.getAppPath(), __EIU_ELECTRON_DIST_PATH__, "main", ...paths) : getPathFromAppNameAsar("main", ...paths);
283
+ return isDev ? path__default.default.join(electron2__default.default.app.getAppPath(), __EIU_ELECTRON_DIST_PATH__, "main", ...paths) : getPathFromAppNameAsar("main", ...paths);
129
284
  }
130
285
  function getPathFromPreload(...paths) {
131
- return isDev ? path__default.default.join(electron__default.default.app.getAppPath(), __EIU_ELECTRON_DIST_PATH__, "preload", ...paths) : getPathFromAppNameAsar("preload", ...paths);
286
+ return isDev ? path__default.default.join(electron2__default.default.app.getAppPath(), __EIU_ELECTRON_DIST_PATH__, "preload", ...paths) : getPathFromAppNameAsar("preload", ...paths);
132
287
  }
133
288
  function getPathFromPublic(...paths) {
134
- return isDev ? path__default.default.join(electron__default.default.app.getAppPath(), "public", ...paths) : getPathFromAppNameAsar("renderer", ...paths);
289
+ return isDev ? path__default.default.join(electron2__default.default.app.getAppPath(), "public", ...paths) : getPathFromAppNameAsar("renderer", ...paths);
135
290
  }
136
291
  function getPathFromEntryAsar(...paths) {
137
- return path__default.default.join(electron__default.default.app.getAppPath(), __EIU_ENTRY_DIST_PATH__, ...paths);
292
+ return path__default.default.join(electron2__default.default.app.getAppPath(), __EIU_ENTRY_DIST_PATH__, ...paths);
138
293
  }
139
294
  function handleUnexpectedErrors(callback) {
140
295
  process.on("uncaughtException", callback);
141
296
  process.on("unhandledRejection", callback);
142
297
  }
143
-
144
- // src/utils/version.ts
145
- function parseVersion(version) {
146
- const match = /^(\d+)\.(\d+)\.(\d+)(?:-([a-z0-9.-]+))?/i.exec(version);
147
- if (!match) {
148
- throw new TypeError(`invalid version: ${version}`);
149
- }
150
- const [major, minor, patch] = match.slice(1, 4).map(Number);
151
- const ret = {
152
- major,
153
- minor,
154
- patch,
155
- stage: "",
156
- stageVersion: -1
157
- };
158
- if (match[4]) {
159
- let [stage, _v] = match[4].split(".");
160
- ret.stage = stage;
161
- ret.stageVersion = Number(_v) || -1;
162
- }
163
- if (Number.isNaN(major) || Number.isNaN(minor) || Number.isNaN(patch) || Number.isNaN(ret.stageVersion)) {
164
- throw new TypeError(`Invalid version: ${version}`);
165
- }
166
- return ret;
167
- }
168
- function compareStrings(str1, str2) {
169
- if (str1 === "") {
170
- return str2 !== "";
171
- } else if (str2 === "") {
172
- return true;
173
- }
174
- return str1 < str2;
175
- }
176
- function defaultIsLowerVersion(oldVer, newVer) {
177
- const oldV = parseVersion(oldVer);
178
- const newV = parseVersion(newVer);
179
- for (let key of Object.keys(oldV)) {
180
- if (key === "stage" && compareStrings(oldV[key], newV[key])) {
181
- return true;
182
- } else if (oldV[key] !== newV[key]) {
183
- return oldV[key] < newV[key];
184
- }
185
- }
186
- return false;
187
- }
188
- var is = (j) => !!(j && j.minimumVersion && j.signature && j.version);
189
- function isUpdateJSON(json) {
190
- return is(json) && is(json?.beta);
191
- }
192
- function defaultVersionJsonGenerator(existingJson, signature, version, minimumVersion) {
193
- existingJson.beta = {
194
- version,
195
- minimumVersion,
196
- signature
197
- };
198
- if (!parseVersion(version).stage) {
199
- existingJson.version = version;
200
- existingJson.minimumVersion = minimumVersion;
201
- existingJson.signature = signature;
298
+ function reloadOnPreloadScriptChanged() {
299
+ if (isDev) {
300
+ process.on("message", (msg) => {
301
+ if (msg === "electron-vite&type=hot-reload") {
302
+ for (const window of electron2__default.default.BrowserWindow.getAllWindows()) {
303
+ window.reload();
304
+ }
305
+ }
306
+ });
202
307
  }
203
- return existingJson;
204
308
  }
205
309
  async function defaultZipFile(buffer) {
206
310
  return new Promise((resolve, reject) => {
@@ -216,6 +320,9 @@ async function defaultUnzipFile(buffer) {
216
320
  exports.aesDecrypt = aesDecrypt;
217
321
  exports.aesEncrypt = aesEncrypt;
218
322
  exports.beautifyDevTools = beautifyDevTools;
323
+ exports.defaultDownloadAsar = defaultDownloadAsar;
324
+ exports.defaultDownloadJSON = defaultDownloadJSON;
325
+ exports.defaultDownloadUpdateJSON = defaultDownloadUpdateJSON;
219
326
  exports.defaultIsLowerVersion = defaultIsLowerVersion;
220
327
  exports.defaultSignature = defaultSignature;
221
328
  exports.defaultUnzipFile = defaultUnzipFile;
@@ -223,8 +330,10 @@ exports.defaultVerifySignature = defaultVerifySignature;
223
330
  exports.defaultVersionJsonGenerator = defaultVersionJsonGenerator;
224
331
  exports.defaultZipFile = defaultZipFile;
225
332
  exports.disableHWAccForWin7 = disableHWAccForWin7;
333
+ exports.downloadUtil = downloadUtil;
226
334
  exports.getAppVersion = getAppVersion;
227
335
  exports.getEntryVersion = getEntryVersion;
336
+ exports.getHeader = getHeader;
228
337
  exports.getPathFromAppNameAsar = getPathFromAppNameAsar;
229
338
  exports.getPathFromEntryAsar = getPathFromEntryAsar;
230
339
  exports.getPathFromMain = getPathFromMain;
@@ -240,6 +349,7 @@ exports.isUpdateJSON = isUpdateJSON;
240
349
  exports.isWin = isWin;
241
350
  exports.loadPage = loadPage;
242
351
  exports.parseVersion = parseVersion;
352
+ exports.reloadOnPreloadScriptChanged = reloadOnPreloadScriptChanged;
243
353
  exports.requireNative = requireNative;
244
354
  exports.restartApp = restartApp;
245
355
  exports.setAppUserModelId = setAppUserModelId;
package/dist/utils.d.cts CHANGED
@@ -1,6 +1,8 @@
1
- export { b as aesDecrypt, a as aesEncrypt, d as defaultSignature, f as defaultUnzipFile, c as defaultVerifySignature, e as defaultZipFile, h as hashBuffer } from './zip-DQdr8pFv.cjs';
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-BQS8qbGA.cjs';
2
2
  import { BrowserWindow } from 'electron';
3
- export { U as UpdateInfo, a as UpdateJSON, V as Version, d as defaultIsLowerVersion, b as defaultVersionJsonGenerator, i as isUpdateJSON, p as parseVersion } from './version-Bl_0oO5f.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-C5M2xRjF.cjs';
4
+ import '@subframe7536/type-utils';
5
+ import 'node:url';
4
6
 
5
7
  /**
6
8
  * Compile time dev check
@@ -88,6 +90,7 @@ interface BeautifyDevToolsOptions {
88
90
  * Beautify devtools' font and scrollbar
89
91
  * @param win target window
90
92
  * @param options sans font family, mono font family and scrollbar
93
+ * @see https://github.com/electron/electron/issues/42055
91
94
  */
92
95
  declare function beautifyDevTools(win: BrowserWindow, options: BeautifyDevToolsOptions): void;
93
96
  /**
@@ -115,5 +118,6 @@ declare function getPathFromEntryAsar(...paths: string[]): string;
115
118
  * @param callback callback function
116
119
  */
117
120
  declare function handleUnexpectedErrors(callback: (err: unknown) => void): void;
121
+ declare function reloadOnPreloadScriptChanged(): void;
118
122
 
119
- export { beautifyDevTools, disableHWAccForWin7, getAppVersion, getEntryVersion, getPathFromAppNameAsar, getPathFromEntryAsar, getPathFromMain, getPathFromPreload, getPathFromPublic, handleUnexpectedErrors, importNative, isDev, isLinux, isMac, isWin, loadPage, requireNative, restartApp, setAppUserModelId, setPortableAppDataPath, singleInstance };
123
+ export { beautifyDevTools, disableHWAccForWin7, getAppVersion, getEntryVersion, getPathFromAppNameAsar, getPathFromEntryAsar, getPathFromMain, getPathFromPreload, getPathFromPublic, handleUnexpectedErrors, importNative, isDev, isLinux, isMac, isWin, loadPage, reloadOnPreloadScriptChanged, requireNative, restartApp, setAppUserModelId, setPortableAppDataPath, singleInstance };
package/dist/utils.d.ts CHANGED
@@ -1,6 +1,8 @@
1
- export { b as aesDecrypt, a as aesEncrypt, d as defaultSignature, f as defaultUnzipFile, c as defaultVerifySignature, e as defaultZipFile, h as hashBuffer } from './zip-DQdr8pFv.js';
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-DbfskMQi.js';
2
2
  import { BrowserWindow } from 'electron';
3
- export { U as UpdateInfo, a as UpdateJSON, V as Version, d as defaultIsLowerVersion, b as defaultVersionJsonGenerator, i as isUpdateJSON, p as parseVersion } from './version-Bl_0oO5f.js';
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-C5M2xRjF.js';
4
+ import '@subframe7536/type-utils';
5
+ import 'node:url';
4
6
 
5
7
  /**
6
8
  * Compile time dev check
@@ -88,6 +90,7 @@ interface BeautifyDevToolsOptions {
88
90
  * Beautify devtools' font and scrollbar
89
91
  * @param win target window
90
92
  * @param options sans font family, mono font family and scrollbar
93
+ * @see https://github.com/electron/electron/issues/42055
91
94
  */
92
95
  declare function beautifyDevTools(win: BrowserWindow, options: BeautifyDevToolsOptions): void;
93
96
  /**
@@ -115,5 +118,6 @@ declare function getPathFromEntryAsar(...paths: string[]): string;
115
118
  * @param callback callback function
116
119
  */
117
120
  declare function handleUnexpectedErrors(callback: (err: unknown) => void): void;
121
+ declare function reloadOnPreloadScriptChanged(): void;
118
122
 
119
- export { beautifyDevTools, disableHWAccForWin7, getAppVersion, getEntryVersion, getPathFromAppNameAsar, getPathFromEntryAsar, getPathFromMain, getPathFromPreload, getPathFromPublic, handleUnexpectedErrors, importNative, isDev, isLinux, isMac, isWin, loadPage, requireNative, restartApp, setAppUserModelId, setPortableAppDataPath, singleInstance };
123
+ export { beautifyDevTools, disableHWAccForWin7, getAppVersion, getEntryVersion, getPathFromAppNameAsar, getPathFromEntryAsar, getPathFromMain, getPathFromPreload, getPathFromPublic, handleUnexpectedErrors, importNative, isDev, isLinux, isMac, isWin, loadPage, reloadOnPreloadScriptChanged, requireNative, restartApp, setAppUserModelId, setPortableAppDataPath, singleInstance };
package/dist/utils.js CHANGED
@@ -1,3 +1,3 @@
1
- export { beautifyDevTools, disableHWAccForWin7, getAppVersion, getEntryVersion, getPathFromAppNameAsar, getPathFromEntryAsar, getPathFromMain, getPathFromPreload, getPathFromPublic, handleUnexpectedErrors, importNative, isDev, isLinux, isMac, isWin, loadPage, requireNative, restartApp, setAppUserModelId, setPortableAppDataPath, singleInstance } from './chunk-JI27JWJN.js';
2
- export { aesDecrypt, aesEncrypt, defaultSignature, defaultUnzipFile, defaultVerifySignature, defaultZipFile, hashBuffer } from './chunk-XGWQQVIZ.js';
1
+ export { beautifyDevTools, disableHWAccForWin7, getAppVersion, getEntryVersion, getPathFromAppNameAsar, getPathFromEntryAsar, getPathFromMain, getPathFromPreload, getPathFromPublic, handleUnexpectedErrors, importNative, isDev, isLinux, isMac, isWin, loadPage, reloadOnPreloadScriptChanged, requireNative, restartApp, setAppUserModelId, setPortableAppDataPath, singleInstance } from './chunk-K4N2OHNS.js';
2
+ export { aesDecrypt, aesEncrypt, defaultDownloadAsar, defaultDownloadJSON, defaultDownloadUpdateJSON, defaultSignature, defaultUnzipFile, defaultVerifySignature, defaultZipFile, downloadUtil, getHeader, hashBuffer } from './chunk-D7NXTCQW.js';
3
3
  export { defaultIsLowerVersion, defaultVersionJsonGenerator, isUpdateJSON, parseVersion } from './chunk-AAAM44NW.js';
package/dist/vite.d.ts CHANGED
@@ -170,20 +170,19 @@ interface GeneratorOverrideFunctions {
170
170
  * Custom signature generate function
171
171
  * @param buffer file buffer
172
172
  * @param privateKey private key
173
- * @param cert certificate string, **EOL must be '\n'**
173
+ * @param cert certificate string, **EOL must be `\n`**
174
174
  * @param version current version
175
175
  */
176
176
  generateSignature?: (buffer: Buffer, privateKey: string, cert: string, version: string) => Promisable<string>;
177
177
  /**
178
- * Custom generate version json function
178
+ * Custom generate update json function
179
179
  * @param existingJson The existing JSON object.
180
180
  * @param buffer file buffer
181
181
  * @param signature generated signature
182
182
  * @param version current version
183
183
  * @param minVersion The minimum version
184
- * @returns The updated version json
185
184
  */
186
- generateVersionJson?: (existingJson: UpdateJSON, signature: string, version: string, minVersion: string) => Promisable<UpdateJSON>;
185
+ generateUpdateJson?: (existingJson: UpdateJSON, signature: string, version: string, minVersion: string) => Promisable<UpdateJSON>;
187
186
  /**
188
187
  * Custom generate zip file buffer
189
188
  * @param buffer source buffer
package/dist/vite.js CHANGED
@@ -1,5 +1,5 @@
1
- import { readableSize, copyAndSkipIfExist } from './chunk-TPTWE33H.js';
2
- import { isUpdateJSON, defaultVersionJsonGenerator } from './chunk-LR7LR5WG.js';
1
+ import { copyAndSkipIfExist, readableSize } from './chunk-TPTWE33H.js';
2
+ import { defaultVersionJsonGenerator, isUpdateJSON } from './chunk-LR7LR5WG.js';
3
3
  export { convertLiteral } from './chunk-LR7LR5WG.js';
4
4
  import { log, id } from './chunk-5NKEXGI3.js';
5
5
  import fs2 from 'node:fs';
@@ -33,14 +33,14 @@ async function buildAsar({
33
33
  log.info(`Build update asar to '${gzipPath}' [${readableSize(buf.length)}]`, { timestamp: true });
34
34
  return buf;
35
35
  }
36
- async function buildVersion({
36
+ async function buildUpdateJson({
37
37
  versionPath,
38
38
  privateKey,
39
39
  cert,
40
40
  version,
41
41
  minimumVersion,
42
42
  generateSignature,
43
- generateVersionJson
43
+ generateUpdateJson
44
44
  }, asarBuffer) {
45
45
  let _json = {
46
46
  beta: {
@@ -64,12 +64,12 @@ async function buildVersion({
64
64
  }
65
65
  }
66
66
  const sig = await generateSignature(asarBuffer, privateKey, cert, version);
67
- _json = await generateVersionJson(_json, sig, version, minimumVersion);
67
+ _json = await generateUpdateJson(_json, sig, version, minimumVersion);
68
68
  if (!isUpdateJSON(_json)) {
69
- throw new Error("Invalid version info");
69
+ throw new Error("Invalid update json");
70
70
  }
71
71
  fs2.writeFileSync(versionPath, JSON.stringify(_json, null, 2));
72
- log.info(`build version info to '${versionPath}'`, { timestamp: true });
72
+ log.info(`build update json to '${versionPath}'`, { timestamp: true });
73
73
  }
74
74
  async function buildEntry({
75
75
  sourcemap,
@@ -202,7 +202,7 @@ function parseOptions(pkg, sourcemap = false, minify = false, options = {}) {
202
202
  overrideGenerator: {
203
203
  generateGzipFile = defaultZipFile,
204
204
  generateSignature = defaultSignature,
205
- generateVersionJson = defaultVersionJsonGenerator
205
+ generateUpdateJson = defaultVersionJsonGenerator
206
206
  } = {}
207
207
  } = options;
208
208
  const buildAsarOption = {
@@ -226,7 +226,7 @@ function parseOptions(pkg, sourcemap = false, minify = false, options = {}) {
226
226
  return false;
227
227
  }
228
228
  if (!external) {
229
- return void 0;
229
+ return undefined;
230
230
  }
231
231
  if (typeof external === "string") {
232
232
  return source === external;
@@ -251,7 +251,7 @@ function parseOptions(pkg, sourcemap = false, minify = false, options = {}) {
251
251
  cert,
252
252
  versionPath,
253
253
  generateSignature,
254
- generateVersionJson
254
+ generateUpdateJson
255
255
  };
256
256
  return { buildAsarOption, buildEntryOption, buildVersionOption, postBuild, cert };
257
257
  }
@@ -309,16 +309,16 @@ async function electronWithUpdater(options) {
309
309
  } = options;
310
310
  if (!pkg || !pkg.version || !pkg.name || !pkg.main) {
311
311
  log.error("package.json not found or invalid", { timestamp: true });
312
- return void 0;
312
+ return undefined;
313
313
  }
314
314
  const isESM = pkg.type === "module";
315
- let bytecodeOptions = typeof bytecode === "object" ? bytecode : bytecode === true ? { enable: true } : void 0;
315
+ let bytecodeOptions = typeof bytecode === "object" ? bytecode : bytecode === true ? { enable: true } : undefined;
316
316
  if (isESM && bytecodeOptions?.enable) {
317
317
  (await import('./constant-ME27JB5D.js')).bytecodeLog.warn(
318
318
  '`bytecodePlugin` does not support ES module, please remove "type": "module" in package.json',
319
319
  { timestamp: true }
320
320
  );
321
- bytecodeOptions = void 0;
321
+ bytecodeOptions = undefined;
322
322
  }
323
323
  const {
324
324
  buildAsarOption,
@@ -388,7 +388,7 @@ async function electronWithUpdater(options) {
388
388
  external: (src) => src.startsWith("node:") || Object.keys("dependencies" in pkg ? pkg.dependencies : {}).includes(src) || src === "original-fs",
389
389
  treeshake: true
390
390
  };
391
- const esmShimPlugin = isESM ? (await import('./esm-4S4XCVEW.js')).esm() : void 0;
391
+ const esmShimPlugin = isESM ? (await import('./esm-4S4XCVEW.js')).esm() : undefined;
392
392
  const electronPluginOptions = {
393
393
  main: {
394
394
  entry: _main.files,
@@ -407,7 +407,7 @@ async function electronWithUpdater(options) {
407
407
  vite: mergeConfig(
408
408
  {
409
409
  plugins: [
410
- !isBuild && useNotBundle ? notBundle() : void 0,
410
+ !isBuild && useNotBundle ? notBundle() : undefined,
411
411
  bytecodeOptions && await import('./bytecode-R2B4KTMV.js').then((m) => m.bytecodePlugin("main", bytecodeOptions)),
412
412
  esmShimPlugin
413
413
  ],
@@ -443,13 +443,13 @@ async function electronWithUpdater(options) {
443
443
  if (!buildVersionJson && !isCI) {
444
444
  log.warn("No `buildVersionJson` option setup, skip build version json. Only build in CI by default", { timestamp: true });
445
445
  } else {
446
- await buildVersion(buildVersionOption, buffer);
446
+ await buildUpdateJson(buildVersionOption, buffer);
447
447
  }
448
448
  }
449
449
  }
450
450
  ],
451
451
  build: {
452
- sourcemap: sourcemap ? "inline" : void 0,
452
+ sourcemap: sourcemap ? "inline" : undefined,
453
453
  minify,
454
454
  outDir: `${buildAsarOption.electronDistPath}/preload`,
455
455
  rollupOptions
@@ -0,0 +1,70 @@
1
+ import { Arrayable } from '@subframe7536/type-utils';
2
+ import { a as UpdateJSON, D as DownloadingInfo } from './types-C5M2xRjF.cjs';
3
+ import { IncomingMessage } from 'electron';
4
+
5
+ declare function hashBuffer(data: string | Buffer, length: number): Buffer;
6
+ declare function aesEncrypt(plainText: string, key: Buffer, iv: Buffer): string;
7
+ /**
8
+ * Default function to generate asar signature, returns generated signature
9
+ * @param buffer file buffer
10
+ * @param privateKey primary key
11
+ * @param cert certificate
12
+ * @param version target version
13
+ */
14
+ declare function defaultSignature(buffer: Buffer, privateKey: string, cert: string, version: string): string;
15
+ declare function aesDecrypt(encryptedText: string, key: Buffer, iv: Buffer): string;
16
+ /**
17
+ * Default function to verify asar signature,
18
+ * if signature is valid, returns the version, otherwise returns `undefined`
19
+ * @param buffer file buffer
20
+ * @param version target version
21
+ * @param signature signature
22
+ * @param cert certificate
23
+ */
24
+ declare function defaultVerifySignature(buffer: Buffer, version: string, signature: string, cert: string): boolean;
25
+
26
+ /**
27
+ * Safe get value from header
28
+ * @param headers response header
29
+ * @param key target header key
30
+ */
31
+ declare function getHeader(headers: Record<string, Arrayable<string>>, key: any): any;
32
+ declare function downloadUtil<T>(url: string, headers: Record<string, any>, signal: AbortSignal, onResponse: (resp: IncomingMessage, resolve: (data: T) => void, reject: (e: any) => void) => void): Promise<T>;
33
+ type ResolveDataFn = (data: string, resolve: (data: any) => void, reject: (e: any) => void) => void;
34
+ /**
35
+ * Default function to download json and parse to UpdateJson
36
+ * @param url target url
37
+ * @param headers extra headers
38
+ * @param signal abort signal
39
+ * @param resolveData on resolve
40
+ */
41
+ declare function defaultDownloadJSON<T>(url: string, headers: Record<string, any>, signal: AbortSignal, resolveData?: ResolveDataFn): Promise<T>;
42
+ /**
43
+ * Default function to download json and parse to UpdateJson
44
+ * @param url target url
45
+ * @param headers extra headers
46
+ * @param signal abort signal
47
+ */
48
+ declare function defaultDownloadUpdateJSON(url: string, headers: Record<string, any>, signal: AbortSignal): Promise<UpdateJSON>;
49
+ /**
50
+ * Default function to download asar buffer,
51
+ * get total size from `Content-Length` header
52
+ * @param url target url
53
+ * @param headers extra headers
54
+ * @param signal abort signal
55
+ * @param onDownloading on downloading callback
56
+ */
57
+ declare function defaultDownloadAsar(url: string, headers: Record<string, any>, signal: AbortSignal, onDownloading?: (progress: DownloadingInfo) => void): Promise<Buffer>;
58
+
59
+ /**
60
+ * Default function to compress file using brotli
61
+ * @param buffer uncompressed file buffer
62
+ */
63
+ declare function defaultZipFile(buffer: Buffer): Promise<Buffer>;
64
+ /**
65
+ * Default function to decompress file using brotli
66
+ * @param buffer compressed file buffer
67
+ */
68
+ declare function defaultUnzipFile(buffer: Buffer): Promise<Buffer>;
69
+
70
+ export { aesEncrypt as a, aesDecrypt as b, defaultVerifySignature as c, defaultSignature as d, downloadUtil as e, defaultDownloadJSON as f, getHeader as g, hashBuffer as h, defaultDownloadUpdateJSON as i, defaultDownloadAsar as j, defaultZipFile as k, defaultUnzipFile as l };