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
@@ -0,0 +1,264 @@
1
+ const require_version = require('./version-aPrLuz_-.cjs');
2
+ let electron = require("electron");
3
+ let node_crypto = require("node:crypto");
4
+ node_crypto = require_version.__toESM(node_crypto);
5
+ let node_zlib = require("node:zlib");
6
+ node_zlib = require_version.__toESM(node_zlib);
7
+
8
+ //#region src/utils/crypto.ts
9
+ function hashBuffer(data, length) {
10
+ const hash = node_crypto.default.createHash("SHA256").update(data).digest("binary");
11
+ return Buffer.from(hash).subarray(0, length);
12
+ }
13
+ function aesEncrypt(plainText, key, iv) {
14
+ const cipher = node_crypto.default.createCipheriv("aes-256-cbc", key, iv);
15
+ return cipher.update(plainText, "utf8", "base64url") + cipher.final("base64url");
16
+ }
17
+ /**
18
+ * Default function to generate asar signature, returns generated signature
19
+ * @param buffer file buffer
20
+ * @param privateKey primary key
21
+ * @param cert certificate
22
+ * @param version target version
23
+ */
24
+ function defaultSignature(buffer, privateKey, cert, version) {
25
+ return aesEncrypt(`${node_crypto.default.createSign("RSA-SHA256").update(buffer).sign(node_crypto.default.createPrivateKey(privateKey), "base64")}%${version}`, hashBuffer(cert, 32), hashBuffer(buffer, 16));
26
+ }
27
+ function aesDecrypt(encryptedText, key, iv) {
28
+ const decipher = node_crypto.default.createDecipheriv("aes-256-cbc", key, iv);
29
+ return decipher.update(encryptedText, "base64url", "utf8") + decipher.final("utf8");
30
+ }
31
+ /**
32
+ * Default function to verify asar signature,
33
+ * if signature is valid, returns the version, otherwise returns `undefined`
34
+ * @param buffer file buffer
35
+ * @param version target version
36
+ * @param signature signature
37
+ * @param cert certificate
38
+ */
39
+ function defaultVerifySignature(buffer, version, signature, cert) {
40
+ try {
41
+ const [sig, ver] = aesDecrypt(signature, hashBuffer(cert, 32), hashBuffer(buffer, 16)).split("%");
42
+ if (ver !== version) return false;
43
+ return node_crypto.default.createVerify("RSA-SHA256").update(buffer).verify(cert, sig, "base64");
44
+ } catch {
45
+ return false;
46
+ }
47
+ }
48
+
49
+ //#endregion
50
+ //#region src/utils/download.ts
51
+ /**
52
+ * Safe get value from header
53
+ * @param headers response header
54
+ * @param key target header key
55
+ */
56
+ function getHeader(headers, key) {
57
+ const value = headers[key];
58
+ if (Array.isArray(value)) return value.length === 0 ? null : value[value.length - 1];
59
+ else return value;
60
+ }
61
+ async function downloadUtil(url, headers, onResponse) {
62
+ await electron.app.whenReady();
63
+ return new Promise((resolve, reject) => {
64
+ const request = electron.net.request({
65
+ cache: "no-cache",
66
+ headers,
67
+ method: "GET",
68
+ redirect: "follow",
69
+ url
70
+ });
71
+ request.on("response", (resp) => {
72
+ resp.on("aborted", () => reject(/* @__PURE__ */ new Error("Aborted")));
73
+ resp.on("error", reject);
74
+ onResponse(request, resp, resolve, reject);
75
+ });
76
+ request.on("error", reject);
77
+ request.end();
78
+ });
79
+ }
80
+ /**
81
+ * trim length to 5000
82
+ */
83
+ function trimData(data) {
84
+ return data.trim().slice(0, 5e3).replace(/\s+/g, " ");
85
+ }
86
+ const resolveJson = (data, resolve, reject) => {
87
+ try {
88
+ resolve(JSON.parse(data));
89
+ } catch {
90
+ reject(/* @__PURE__ */ new Error(`Invalid json, "${trimData(data)}"`));
91
+ }
92
+ };
93
+ /**
94
+ * Default function to download json and parse to UpdateJson
95
+ * @param url target url
96
+ * @param headers extra headers
97
+ * @param signal abort signal
98
+ * @param resolveData on resolve
99
+ */
100
+ async function defaultDownloadText(url, headers, signal, resolveData) {
101
+ return await downloadUtil(url, headers, (request, resp, resolve, reject) => {
102
+ let data = "";
103
+ resp.on("data", (chunk) => data += chunk);
104
+ resp.on("end", () => resolveData(data, resolve, reject));
105
+ signal.addEventListener("abort", () => {
106
+ request.abort();
107
+ data = null;
108
+ }, { once: true });
109
+ });
110
+ }
111
+ /**
112
+ * Default function to download json and parse to UpdateJson
113
+ * @param url target url
114
+ * @param headers extra headers
115
+ * @param signal abort signal
116
+ */
117
+ async function defaultDownloadUpdateJSON(url, headers, signal) {
118
+ return await defaultDownloadText(url, headers, signal, (data, resolve, reject) => {
119
+ try {
120
+ const json = JSON.parse(data);
121
+ if (require_version.isUpdateJSON(json)) resolve(json);
122
+ else throw Error;
123
+ } catch {
124
+ reject(/* @__PURE__ */ new Error(`Invalid update json, "${trimData(data)}"`));
125
+ }
126
+ });
127
+ }
128
+ /**
129
+ * Default function to download asar buffer,
130
+ * get total size from `Content-Length` header
131
+ * @param url target url
132
+ * @param headers extra headers
133
+ * @param signal abort signal
134
+ * @param onDownloading on downloading callback
135
+ */
136
+ async function defaultDownloadAsar(url, headers, signal, onDownloading) {
137
+ let transferred = 0;
138
+ let time = Date.now();
139
+ return await downloadUtil(url, headers, (request, resp, resolve) => {
140
+ const total = +getHeader(resp.headers, "content-length") || -1;
141
+ let data = [];
142
+ resp.on("data", (chunk) => {
143
+ const delta = chunk.length;
144
+ transferred += delta;
145
+ const current = Date.now();
146
+ onDownloading?.({
147
+ bps: delta / (current - time),
148
+ delta,
149
+ percent: total > 0 ? +(transferred / total).toFixed(2) * 100 : -1,
150
+ total,
151
+ transferred
152
+ });
153
+ time = current;
154
+ data.push(chunk);
155
+ });
156
+ resp.on("end", () => resolve(Buffer.concat(data)));
157
+ signal.addEventListener("abort", () => {
158
+ request.abort();
159
+ data.length = 0;
160
+ data = null;
161
+ }, { once: true });
162
+ });
163
+ }
164
+
165
+ //#endregion
166
+ //#region src/utils/zip.ts
167
+ /**
168
+ * Default function to compress file using brotli
169
+ * @param buffer uncompressed file buffer
170
+ */
171
+ async function defaultZipFile(buffer) {
172
+ return new Promise((resolve, reject) => {
173
+ node_zlib.default.brotliCompress(buffer, (err, buffer) => err ? reject(err) : resolve(buffer));
174
+ });
175
+ }
176
+ /**
177
+ * Default function to decompress file using brotli
178
+ * @param buffer compressed file buffer
179
+ */
180
+ async function defaultUnzipFile(buffer) {
181
+ return new Promise((resolve, reject) => {
182
+ node_zlib.default.brotliDecompress(buffer, (err, buffer) => err ? reject(err) : resolve(buffer));
183
+ });
184
+ }
185
+
186
+ //#endregion
187
+ Object.defineProperty(exports, 'aesDecrypt', {
188
+ enumerable: true,
189
+ get: function () {
190
+ return aesDecrypt;
191
+ }
192
+ });
193
+ Object.defineProperty(exports, 'aesEncrypt', {
194
+ enumerable: true,
195
+ get: function () {
196
+ return aesEncrypt;
197
+ }
198
+ });
199
+ Object.defineProperty(exports, 'defaultDownloadAsar', {
200
+ enumerable: true,
201
+ get: function () {
202
+ return defaultDownloadAsar;
203
+ }
204
+ });
205
+ Object.defineProperty(exports, 'defaultDownloadText', {
206
+ enumerable: true,
207
+ get: function () {
208
+ return defaultDownloadText;
209
+ }
210
+ });
211
+ Object.defineProperty(exports, 'defaultDownloadUpdateJSON', {
212
+ enumerable: true,
213
+ get: function () {
214
+ return defaultDownloadUpdateJSON;
215
+ }
216
+ });
217
+ Object.defineProperty(exports, 'defaultSignature', {
218
+ enumerable: true,
219
+ get: function () {
220
+ return defaultSignature;
221
+ }
222
+ });
223
+ Object.defineProperty(exports, 'defaultUnzipFile', {
224
+ enumerable: true,
225
+ get: function () {
226
+ return defaultUnzipFile;
227
+ }
228
+ });
229
+ Object.defineProperty(exports, 'defaultVerifySignature', {
230
+ enumerable: true,
231
+ get: function () {
232
+ return defaultVerifySignature;
233
+ }
234
+ });
235
+ Object.defineProperty(exports, 'defaultZipFile', {
236
+ enumerable: true,
237
+ get: function () {
238
+ return defaultZipFile;
239
+ }
240
+ });
241
+ Object.defineProperty(exports, 'downloadUtil', {
242
+ enumerable: true,
243
+ get: function () {
244
+ return downloadUtil;
245
+ }
246
+ });
247
+ Object.defineProperty(exports, 'getHeader', {
248
+ enumerable: true,
249
+ get: function () {
250
+ return getHeader;
251
+ }
252
+ });
253
+ Object.defineProperty(exports, 'hashBuffer', {
254
+ enumerable: true,
255
+ get: function () {
256
+ return hashBuffer;
257
+ }
258
+ });
259
+ Object.defineProperty(exports, 'resolveJson', {
260
+ enumerable: true,
261
+ get: function () {
262
+ return resolveJson;
263
+ }
264
+ });
@@ -0,0 +1,185 @@
1
+ import { r as isUpdateJSON } from "./version--eVB2A7n.mjs";
2
+ import { app, net } from "electron";
3
+ import crypto from "node:crypto";
4
+ import zlib from "node:zlib";
5
+
6
+ //#region src/utils/crypto.ts
7
+ function hashBuffer(data, length) {
8
+ const hash = crypto.createHash("SHA256").update(data).digest("binary");
9
+ return Buffer.from(hash).subarray(0, length);
10
+ }
11
+ function aesEncrypt(plainText, key, iv) {
12
+ const cipher = crypto.createCipheriv("aes-256-cbc", key, iv);
13
+ return cipher.update(plainText, "utf8", "base64url") + cipher.final("base64url");
14
+ }
15
+ /**
16
+ * Default function to generate asar signature, returns generated signature
17
+ * @param buffer file buffer
18
+ * @param privateKey primary key
19
+ * @param cert certificate
20
+ * @param version target version
21
+ */
22
+ function defaultSignature(buffer, privateKey, cert, version) {
23
+ return aesEncrypt(`${crypto.createSign("RSA-SHA256").update(buffer).sign(crypto.createPrivateKey(privateKey), "base64")}%${version}`, hashBuffer(cert, 32), hashBuffer(buffer, 16));
24
+ }
25
+ function aesDecrypt(encryptedText, key, iv) {
26
+ const decipher = crypto.createDecipheriv("aes-256-cbc", key, iv);
27
+ return decipher.update(encryptedText, "base64url", "utf8") + decipher.final("utf8");
28
+ }
29
+ /**
30
+ * Default function to verify asar signature,
31
+ * if signature is valid, returns the version, otherwise returns `undefined`
32
+ * @param buffer file buffer
33
+ * @param version target version
34
+ * @param signature signature
35
+ * @param cert certificate
36
+ */
37
+ function defaultVerifySignature(buffer, version, signature, cert) {
38
+ try {
39
+ const [sig, ver] = aesDecrypt(signature, hashBuffer(cert, 32), hashBuffer(buffer, 16)).split("%");
40
+ if (ver !== version) return false;
41
+ return crypto.createVerify("RSA-SHA256").update(buffer).verify(cert, sig, "base64");
42
+ } catch {
43
+ return false;
44
+ }
45
+ }
46
+
47
+ //#endregion
48
+ //#region src/utils/download.ts
49
+ /**
50
+ * Safe get value from header
51
+ * @param headers response header
52
+ * @param key target header key
53
+ */
54
+ function getHeader(headers, key) {
55
+ const value = headers[key];
56
+ if (Array.isArray(value)) return value.length === 0 ? null : value[value.length - 1];
57
+ else return value;
58
+ }
59
+ async function downloadUtil(url, headers, onResponse) {
60
+ await app.whenReady();
61
+ return new Promise((resolve, reject) => {
62
+ const request = net.request({
63
+ cache: "no-cache",
64
+ headers,
65
+ method: "GET",
66
+ redirect: "follow",
67
+ url
68
+ });
69
+ request.on("response", (resp) => {
70
+ resp.on("aborted", () => reject(/* @__PURE__ */ new Error("Aborted")));
71
+ resp.on("error", reject);
72
+ onResponse(request, resp, resolve, reject);
73
+ });
74
+ request.on("error", reject);
75
+ request.end();
76
+ });
77
+ }
78
+ /**
79
+ * trim length to 5000
80
+ */
81
+ function trimData(data) {
82
+ return data.trim().slice(0, 5e3).replace(/\s+/g, " ");
83
+ }
84
+ const resolveJson = (data, resolve, reject) => {
85
+ try {
86
+ resolve(JSON.parse(data));
87
+ } catch {
88
+ reject(/* @__PURE__ */ new Error(`Invalid json, "${trimData(data)}"`));
89
+ }
90
+ };
91
+ /**
92
+ * Default function to download json and parse to UpdateJson
93
+ * @param url target url
94
+ * @param headers extra headers
95
+ * @param signal abort signal
96
+ * @param resolveData on resolve
97
+ */
98
+ async function defaultDownloadText(url, headers, signal, resolveData) {
99
+ return await downloadUtil(url, headers, (request, resp, resolve, reject) => {
100
+ let data = "";
101
+ resp.on("data", (chunk) => data += chunk);
102
+ resp.on("end", () => resolveData(data, resolve, reject));
103
+ signal.addEventListener("abort", () => {
104
+ request.abort();
105
+ data = null;
106
+ }, { once: true });
107
+ });
108
+ }
109
+ /**
110
+ * Default function to download json and parse to UpdateJson
111
+ * @param url target url
112
+ * @param headers extra headers
113
+ * @param signal abort signal
114
+ */
115
+ async function defaultDownloadUpdateJSON(url, headers, signal) {
116
+ return await defaultDownloadText(url, headers, signal, (data, resolve, reject) => {
117
+ try {
118
+ const json = JSON.parse(data);
119
+ if (isUpdateJSON(json)) resolve(json);
120
+ else throw Error;
121
+ } catch {
122
+ reject(/* @__PURE__ */ new Error(`Invalid update json, "${trimData(data)}"`));
123
+ }
124
+ });
125
+ }
126
+ /**
127
+ * Default function to download asar buffer,
128
+ * get total size from `Content-Length` header
129
+ * @param url target url
130
+ * @param headers extra headers
131
+ * @param signal abort signal
132
+ * @param onDownloading on downloading callback
133
+ */
134
+ async function defaultDownloadAsar(url, headers, signal, onDownloading) {
135
+ let transferred = 0;
136
+ let time = Date.now();
137
+ return await downloadUtil(url, headers, (request, resp, resolve) => {
138
+ const total = +getHeader(resp.headers, "content-length") || -1;
139
+ let data = [];
140
+ resp.on("data", (chunk) => {
141
+ const delta = chunk.length;
142
+ transferred += delta;
143
+ const current = Date.now();
144
+ onDownloading?.({
145
+ bps: delta / (current - time),
146
+ delta,
147
+ percent: total > 0 ? +(transferred / total).toFixed(2) * 100 : -1,
148
+ total,
149
+ transferred
150
+ });
151
+ time = current;
152
+ data.push(chunk);
153
+ });
154
+ resp.on("end", () => resolve(Buffer.concat(data)));
155
+ signal.addEventListener("abort", () => {
156
+ request.abort();
157
+ data.length = 0;
158
+ data = null;
159
+ }, { once: true });
160
+ });
161
+ }
162
+
163
+ //#endregion
164
+ //#region src/utils/zip.ts
165
+ /**
166
+ * Default function to compress file using brotli
167
+ * @param buffer uncompressed file buffer
168
+ */
169
+ async function defaultZipFile(buffer) {
170
+ return new Promise((resolve, reject) => {
171
+ zlib.brotliCompress(buffer, (err, buffer) => err ? reject(err) : resolve(buffer));
172
+ });
173
+ }
174
+ /**
175
+ * Default function to decompress file using brotli
176
+ * @param buffer compressed file buffer
177
+ */
178
+ async function defaultUnzipFile(buffer) {
179
+ return new Promise((resolve, reject) => {
180
+ zlib.brotliDecompress(buffer, (err, buffer) => err ? reject(err) : resolve(buffer));
181
+ });
182
+ }
183
+
184
+ //#endregion
185
+ export { defaultDownloadUpdateJSON as a, resolveJson as c, defaultSignature as d, defaultVerifySignature as f, defaultDownloadText as i, aesDecrypt as l, defaultZipFile as n, downloadUtil as o, hashBuffer as p, defaultDownloadAsar as r, getHeader as s, defaultUnzipFile as t, aesEncrypt as u };
package/package.json CHANGED
@@ -1,39 +1,19 @@
1
1
  {
2
2
  "name": "electron-incremental-update",
3
- "type": "module",
4
- "version": "2.4.3",
3
+ "version": "3.0.0-beta.3",
5
4
  "description": "Electron incremental update tools with Vite plugin, support bytecode protection",
6
- "author": "subframe7536",
7
- "license": "MIT",
8
- "repository": {
9
- "type": "git",
10
- "url": "git+https://github.com/subframe7536/electron-incremental-update.git"
11
- },
12
5
  "keywords": [
6
+ "bytecode",
13
7
  "electron",
14
8
  "incremental update",
15
- "updater",
16
- "bytecode"
9
+ "updater"
17
10
  ],
18
- "exports": {
19
- ".": {
20
- "import": "./dist/index.js",
21
- "require": "./dist/index.cjs"
22
- },
23
- "./vite": {
24
- "import": "./dist/vite.js"
25
- },
26
- "./utils": {
27
- "import": "./dist/utils.js",
28
- "require": "./dist/utils.cjs"
29
- },
30
- "./provider": {
31
- "import": "./dist/provider.js",
32
- "require": "./dist/provider.cjs"
33
- }
11
+ "license": "MIT",
12
+ "author": "subframe7536",
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/subframe7536/electron-incremental-update.git"
34
16
  },
35
- "main": "dist/index.cjs",
36
- "module": "dist/index.js",
37
17
  "files": [
38
18
  "dist",
39
19
  "provider.d.ts",
@@ -43,54 +23,76 @@
43
23
  "vite.d.ts",
44
24
  "vite.js"
45
25
  ],
46
- "scripts": {
47
- "dev": "tsup --watch",
48
- "build": "tsup && node fix-module.cjs",
49
- "release": "pnpm test && pnpm run build && bumpp --all && npm publish",
50
- "test": "vitest --run",
51
- "test:dev": "vitest",
52
- "format": "eslint . --fix"
26
+ "type": "module",
27
+ "main": "./dist/index.cjs",
28
+ "module": "./dist/index.mjs",
29
+ "types": "./dist/index.d.cts",
30
+ "typesVersions": {
31
+ "*": {
32
+ "provider": [
33
+ "./dist/provider.d.mts"
34
+ ],
35
+ "utils": [
36
+ "./dist/utils.d.mts"
37
+ ]
38
+ }
39
+ },
40
+ "exports": {
41
+ ".": {
42
+ "require": "./dist/index.cjs",
43
+ "import": "./dist/index.mjs"
44
+ },
45
+ "./provider": {
46
+ "require": "./dist/provider.cjs",
47
+ "import": "./dist/provider.mjs"
48
+ },
49
+ "./utils": {
50
+ "require": "./dist/utils.cjs",
51
+ "import": "./dist/utils.mjs"
52
+ },
53
+ "./vite": "./dist/vite.mjs",
54
+ "./package.json": "./package.json"
53
55
  },
54
56
  "publishConfig": {
55
57
  "access": "public",
56
58
  "registry": "https://registry.npmjs.org/"
57
59
  },
58
- "peerDependencies": {
59
- "@electron/asar": "*"
60
+ "scripts": {
61
+ "dev": "tsdown --watch",
62
+ "build": "tsdown",
63
+ "play": "cd ./playground && vite",
64
+ "release": "bun run format && bun run lint && bun run test && bun run build && bumpp --all",
65
+ "test": "bun test",
66
+ "test:dev": "bun test --watch",
67
+ "format": "oxfmt",
68
+ "lint": "oxlint --fix",
69
+ "qa": "oxlint --fix && oxfmt && tsc --noEmit"
60
70
  },
61
71
  "dependencies": {
62
- "@babel/core": "^7.28.0",
63
72
  "@babel/plugin-transform-arrow-functions": "^7.27.1",
64
73
  "@babel/plugin-transform-template-literals": "^7.27.1",
65
- "@subframe7536/type-utils": "^0.2.0",
66
- "ci-info": "^4.3.0",
67
- "local-pkg": "^1.1.1",
68
- "magic-string": "^0.30.17",
69
- "selfsigned": "^3.0.1",
70
- "vite-plugin-electron": "^0.29.0"
74
+ "ci-info": "^4.3.1",
75
+ "local-pkg": "^1.1.2",
76
+ "magic-string": "^0.30.21",
77
+ "selfsigned": "^5.5.0"
71
78
  },
72
79
  "devDependencies": {
73
- "@subframe7536/eslint-config": "^1.3.1",
80
+ "@subframe7536/type-utils": "^0.2.0",
74
81
  "@types/babel__core": "^7.20.5",
75
- "@types/node": "^22.17.0",
76
- "@vitest/eslint-plugin": "^1.3.4",
77
- "bumpp": "^10.1.1",
78
- "electron": "36.2.0",
79
- "esbuild": "^0.25.8",
80
- "eslint": "^9.28.0",
81
- "tsup": "^8.5.0",
82
- "typescript": "^5.8.3",
83
- "vite": "^6.3.5",
84
- "vite-plugin-electron": "^0.29.0",
85
- "vitest": "^3.2.2"
82
+ "@types/bun": "^1.3.6",
83
+ "bumpp": "^10.4.0",
84
+ "electron": "39.2.7",
85
+ "oxfmt": "^0.26.0",
86
+ "oxlint": "^1.41.0",
87
+ "tsdown": "^0.20.0",
88
+ "typescript": "^5.9.3",
89
+ "vite": "^8.0.0-beta.9"
86
90
  },
87
- "pnpm": {
88
- "overrides": {
89
- "is-core-module": "npm:@nolyfill/is-core-module@^1.0.39"
90
- },
91
- "onlyBuiltDependencies": [
92
- "electron",
93
- "esbuild"
94
- ]
91
+ "peerDependencies": {
92
+ "@babel/core": "^7",
93
+ "@electron/asar": "*"
94
+ },
95
+ "overrides": {
96
+ "vite": "^8.0.0-beta.9"
95
97
  }
96
98
  }
@@ -1,70 +0,0 @@
1
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
- }) : x)(function(x) {
4
- if (typeof require !== "undefined") return require.apply(this, arguments);
5
- throw Error('Dynamic require of "' + x + '" is not supported');
6
- });
7
-
8
- // src/utils/version.ts
9
- function parseVersion(version) {
10
- const match = /^(\d+)\.(\d+)\.(\d+)(?:-([a-z0-9.-]+))?/i.exec(version);
11
- if (!match) {
12
- throw new TypeError(`invalid version: ${version}`);
13
- }
14
- const [major, minor, patch] = match.slice(1, 4).map(Number);
15
- const ret = {
16
- major,
17
- minor,
18
- patch,
19
- stage: "",
20
- stageVersion: -1
21
- };
22
- if (match[4]) {
23
- let [stage, _v] = match[4].split(".");
24
- ret.stage = stage;
25
- ret.stageVersion = Number(_v) || -1;
26
- }
27
- if (Number.isNaN(major) || Number.isNaN(minor) || Number.isNaN(patch) || Number.isNaN(ret.stageVersion)) {
28
- throw new TypeError(`Invalid version: ${version}`);
29
- }
30
- return ret;
31
- }
32
- function compareStrings(str1, str2) {
33
- if (str1 === "") {
34
- return str2 !== "";
35
- } else if (str2 === "") {
36
- return true;
37
- }
38
- return str1 < str2;
39
- }
40
- function defaultIsLowerVersion(oldVer, newVer) {
41
- const oldV = parseVersion(oldVer);
42
- const newV = parseVersion(newVer);
43
- for (let key of Object.keys(oldV)) {
44
- if (key === "stage" && compareStrings(oldV[key], newV[key])) {
45
- return true;
46
- } else if (oldV[key] !== newV[key]) {
47
- return oldV[key] < newV[key];
48
- }
49
- }
50
- return false;
51
- }
52
- var is = (j) => !!(j && j.minimumVersion && j.signature && j.version);
53
- function isUpdateJSON(json) {
54
- return is(json) && is(json?.beta);
55
- }
56
- function defaultVersionJsonGenerator(existingJson, signature, version, minimumVersion) {
57
- existingJson.beta = {
58
- version,
59
- minimumVersion,
60
- signature
61
- };
62
- if (!parseVersion(version).stage) {
63
- existingJson.version = version;
64
- existingJson.minimumVersion = minimumVersion;
65
- existingJson.signature = signature;
66
- }
67
- return existingJson;
68
- }
69
-
70
- export { __require, defaultIsLowerVersion, defaultVersionJsonGenerator, isUpdateJSON, parseVersion };