electron-incremental-update 3.0.0-beta.5 → 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 +338 -373
- package/dist/crypto-BSky88mL.cjs +259 -0
- package/dist/crypto-DZzMmoz2.mjs +164 -0
- package/dist/{download-BN4uMS4_.d.mts → download-BVmLiAvB.d.cts} +2 -2
- package/dist/download-BdX4fZYM.mjs +130 -0
- package/dist/{download-DO7iuxEJ.d.cts → download-GONr15zK.d.mts} +2 -2
- package/dist/download-KySXUyWC.cjs +165 -0
- package/dist/{electron-BJCk7uxG.mjs → electron-BrIF1urZ.mjs} +38 -13
- package/dist/electron-CaS0I3S2.cjs +346 -0
- package/dist/index.cjs +66 -34
- package/dist/index.d.cts +10 -13
- package/dist/index.d.mts +10 -13
- package/dist/index.mjs +62 -31
- package/dist/local-C5jw-7o5.mjs +105 -0
- package/dist/local-DbXBG1D9.cjs +118 -0
- package/dist/provider.cjs +24 -43
- package/dist/provider.d.cts +58 -20
- package/dist/provider.d.mts +58 -20
- package/dist/provider.mjs +12 -33
- package/dist/{types-BM9Jfu7q.d.cts → types-q78spjKB.d.cts} +22 -7
- package/dist/{types-DASqEPXE.d.mts → types-q78spjKB.d.mts} +22 -7
- package/dist/utils.cjs +22 -22
- package/dist/utils.d.cts +6 -6
- package/dist/utils.d.mts +6 -6
- package/dist/utils.mjs +4 -5
- package/dist/vite.d.mts +99 -110
- package/dist/vite.mjs +656 -732
- package/package.json +30 -35
- package/dist/electron-C-qmVhAt.cjs +0 -321
- package/dist/version--eVB2A7n.mjs +0 -72
- package/dist/version-aPrLuz_-.cjs +0 -129
- package/dist/zip-BCC7FAQ_.cjs +0 -264
- package/dist/zip-Dwm7s1C9.mjs +0 -185
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
const require_crypto = require("./crypto-BSky88mL.cjs");
|
|
2
|
+
let node_path = require("node:path");
|
|
3
|
+
node_path = require_crypto.__toESM(node_path, 1);
|
|
4
|
+
let node_fs_promises = require("node:fs/promises");
|
|
5
|
+
node_fs_promises = require_crypto.__toESM(node_fs_promises, 1);
|
|
6
|
+
//#region src/provider/base.ts
|
|
7
|
+
var BaseProvider = class {
|
|
8
|
+
name = "BaseProvider";
|
|
9
|
+
/**
|
|
10
|
+
* @inheritdoc
|
|
11
|
+
*/
|
|
12
|
+
isLowerVersion = require_crypto.defaultIsLowerVersion;
|
|
13
|
+
/**
|
|
14
|
+
* @inheritdoc
|
|
15
|
+
*/
|
|
16
|
+
verifySignature = require_crypto.defaultVerifySignature;
|
|
17
|
+
/**
|
|
18
|
+
* @inheritdoc
|
|
19
|
+
*/
|
|
20
|
+
decompressFile = require_crypto.defaultDecompressFile;
|
|
21
|
+
};
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/provider/local.ts
|
|
24
|
+
/**
|
|
25
|
+
* Update Provider for local development
|
|
26
|
+
* - download update json from `{baseDir}/{versionPath}`
|
|
27
|
+
* - download update asar from `{baseDir}/{name}-{version}.asar.br`
|
|
28
|
+
*
|
|
29
|
+
* This provider is useful for testing updates during development without
|
|
30
|
+
* needing to deploy to a remote server.
|
|
31
|
+
* @param options provider options
|
|
32
|
+
*/
|
|
33
|
+
var LocalDevProvider = class extends BaseProvider {
|
|
34
|
+
name = "LocalDevProvider";
|
|
35
|
+
verifySignature;
|
|
36
|
+
options;
|
|
37
|
+
constructor(options) {
|
|
38
|
+
super();
|
|
39
|
+
const resolvedOptions = {
|
|
40
|
+
chunkSize: 64 * 1024,
|
|
41
|
+
chunkDelay: 30,
|
|
42
|
+
...options
|
|
43
|
+
};
|
|
44
|
+
if (resolvedOptions.chunkSize <= 0) throw new Error("localDevUpdate.chunkSize must be greater than 0");
|
|
45
|
+
if (resolvedOptions.chunkDelay < 0) throw new Error("localDevUpdate.chunkDelay must be greater than or equal to 0");
|
|
46
|
+
this.options = resolvedOptions;
|
|
47
|
+
this.verifySignature = async function verifySignature() {
|
|
48
|
+
return true;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @inheritdoc
|
|
53
|
+
*/
|
|
54
|
+
async downloadJSON(name, versionPath, signal) {
|
|
55
|
+
signal.throwIfAborted();
|
|
56
|
+
const { beta, version, ...info } = await this.readJSON(versionPath);
|
|
57
|
+
const getURL = (ver) => node_path.default.join(this.options.baseDir, `${name}-${ver}.asar.br`);
|
|
58
|
+
return {
|
|
59
|
+
...info,
|
|
60
|
+
version,
|
|
61
|
+
url: getURL(version),
|
|
62
|
+
beta: {
|
|
63
|
+
...beta,
|
|
64
|
+
url: getURL(beta.version)
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* @inheritdoc
|
|
70
|
+
*/
|
|
71
|
+
async downloadAsar(info, signal, onDownloading) {
|
|
72
|
+
signal.throwIfAborted();
|
|
73
|
+
const fileBuffer = await node_fs_promises.default.readFile(info.url);
|
|
74
|
+
await this.emitProgress(fileBuffer, signal, onDownloading);
|
|
75
|
+
return fileBuffer;
|
|
76
|
+
}
|
|
77
|
+
async readJSON(versionPath) {
|
|
78
|
+
const fullPath = node_path.default.join(this.options.baseDir, versionPath);
|
|
79
|
+
const content = await node_fs_promises.default.readFile(fullPath, "utf-8");
|
|
80
|
+
const json = JSON.parse(content);
|
|
81
|
+
if (!require_crypto.isUpdateJSON(json)) throw new Error(`Invalid update json: ${content}`);
|
|
82
|
+
return json;
|
|
83
|
+
}
|
|
84
|
+
async emitProgress(fileBuffer, signal, onDownloading) {
|
|
85
|
+
if (!onDownloading) return;
|
|
86
|
+
const total = fileBuffer.length;
|
|
87
|
+
let transferred = 0;
|
|
88
|
+
let lastTime = Date.now();
|
|
89
|
+
while (transferred < total) {
|
|
90
|
+
signal.throwIfAborted();
|
|
91
|
+
const currentTime = Date.now();
|
|
92
|
+
const delta = Math.min(this.options.chunkSize, total - transferred);
|
|
93
|
+
transferred += delta;
|
|
94
|
+
onDownloading({
|
|
95
|
+
delta,
|
|
96
|
+
percent: Math.round(transferred / total * 100),
|
|
97
|
+
total,
|
|
98
|
+
transferred,
|
|
99
|
+
bps: Math.round(delta / Math.max(currentTime - lastTime, 1) * 1e3)
|
|
100
|
+
});
|
|
101
|
+
lastTime = currentTime;
|
|
102
|
+
if (transferred < total && this.options.chunkDelay > 0) await new Promise((resolve) => setTimeout(resolve, this.options.chunkDelay));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
//#endregion
|
|
107
|
+
Object.defineProperty(exports, "BaseProvider", {
|
|
108
|
+
enumerable: true,
|
|
109
|
+
get: function() {
|
|
110
|
+
return BaseProvider;
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
Object.defineProperty(exports, "LocalDevProvider", {
|
|
114
|
+
enumerable: true,
|
|
115
|
+
get: function() {
|
|
116
|
+
return LocalDevProvider;
|
|
117
|
+
}
|
|
118
|
+
});
|
package/dist/provider.cjs
CHANGED
|
@@ -1,27 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
const
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_local = require("./local-DbXBG1D9.cjs");
|
|
3
|
+
const require_download = require("./download-KySXUyWC.cjs");
|
|
3
4
|
let node_url = require("node:url");
|
|
4
|
-
|
|
5
|
-
//#region src/provider/base.ts
|
|
6
|
-
var BaseProvider = class {
|
|
7
|
-
name = "BaseProvider";
|
|
8
|
-
/**
|
|
9
|
-
* @inheritdoc
|
|
10
|
-
*/
|
|
11
|
-
isLowerVersion = require_version.defaultIsLowerVersion;
|
|
12
|
-
/**
|
|
13
|
-
* @inheritdoc
|
|
14
|
-
*/
|
|
15
|
-
verifySignaure = require_zip.defaultVerifySignature;
|
|
16
|
-
/**
|
|
17
|
-
* @inheritdoc
|
|
18
|
-
*/
|
|
19
|
-
unzipFile = require_zip.defaultUnzipFile;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
//#endregion
|
|
23
5
|
//#region src/provider/github/base.ts
|
|
24
|
-
var BaseGitHubProvider = class extends BaseProvider {
|
|
6
|
+
var BaseGitHubProvider = class extends require_local.BaseProvider {
|
|
7
|
+
options;
|
|
25
8
|
constructor(options) {
|
|
26
9
|
super();
|
|
27
10
|
this.options = options;
|
|
@@ -32,13 +15,13 @@ var BaseGitHubProvider = class extends BaseProvider {
|
|
|
32
15
|
set urlHandler(handler) {
|
|
33
16
|
this.options.urlHandler = handler;
|
|
34
17
|
}
|
|
35
|
-
async parseURL(
|
|
36
|
-
const url = new node_url.URL(`/${this.options.user}/${this.options.repo}/${
|
|
18
|
+
async parseURL(pathOrURL) {
|
|
19
|
+
const url = node_url.URL.canParse(pathOrURL) ? new node_url.URL(pathOrURL) : new node_url.URL(`/${this.options.user}/${this.options.repo}/${pathOrURL}`, "https://github.com");
|
|
37
20
|
return (await this.urlHandler?.(url) || url).toString();
|
|
38
21
|
}
|
|
39
22
|
async downloadJSON(name, versionPath, signal) {
|
|
40
|
-
const { beta, version, ...info } = await
|
|
41
|
-
const getURL = (ver) => this.parseURL(`releases/download/v${ver}/${name}-${ver}.asar.
|
|
23
|
+
const { beta, version, ...info } = await require_download.defaultDownloadUpdateJSON(await this.parseURL(await this.getVersionURL(versionPath, signal)), this.getHeaders("json"), signal);
|
|
24
|
+
const getURL = (ver) => this.parseURL(`releases/download/v${ver}/${name}-${ver}.asar.br`);
|
|
42
25
|
return {
|
|
43
26
|
...info,
|
|
44
27
|
version,
|
|
@@ -53,10 +36,9 @@ var BaseGitHubProvider = class extends BaseProvider {
|
|
|
53
36
|
* @inheritdoc
|
|
54
37
|
*/
|
|
55
38
|
async downloadAsar(info, signal, onDownloading) {
|
|
56
|
-
return await
|
|
39
|
+
return await require_download.defaultDownloadAsar(info.url, this.getHeaders("octet-stream"), signal, onDownloading);
|
|
57
40
|
}
|
|
58
41
|
};
|
|
59
|
-
|
|
60
42
|
//#endregion
|
|
61
43
|
//#region src/provider/github/api.ts
|
|
62
44
|
const ERROR_MSG = "Cannot find UpdateJSON in latest release";
|
|
@@ -83,20 +65,19 @@ var GitHubApiProvider = class extends BaseGitHubProvider {
|
|
|
83
65
|
*/
|
|
84
66
|
async getVersionURL(versionPath, signal) {
|
|
85
67
|
const basename = versionPath.slice(versionPath.lastIndexOf("/") + 1);
|
|
86
|
-
const data = await
|
|
68
|
+
const data = await require_download.defaultDownloadText(await this.parseURL(`https://api.github.com/repos/${this.options.user}/${this.options.repo}/releases?per_page=1`), this.getHeaders("vnd.github.v3+json"), signal, require_download.resolveJson);
|
|
87
69
|
const versionAssets = data[0]?.assets.find((asset) => asset.name === basename);
|
|
88
70
|
if (!versionAssets) throw new Error(`${ERROR_MSG}, ${"message" in data ? data.message : "please check the release assets"}`);
|
|
89
71
|
return versionAssets.browser_download_url;
|
|
90
72
|
}
|
|
91
73
|
};
|
|
92
|
-
|
|
93
74
|
//#endregion
|
|
94
75
|
//#region src/provider/github/atom.ts
|
|
95
76
|
/**
|
|
96
77
|
* Update Provider for Github repo
|
|
97
78
|
* - check update from `https://github.com/{user}/{repo}/releases.atom`
|
|
98
79
|
* - download update json from `https://github.com/{user}/{repo}/releases/download/v{version}/{versionPath}`
|
|
99
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
80
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
100
81
|
*
|
|
101
82
|
* you can setup `urlHandler` in options to modify url before request
|
|
102
83
|
* @param options provider options
|
|
@@ -113,20 +94,20 @@ var GitHubAtomProvider = class extends BaseGitHubProvider {
|
|
|
113
94
|
* @inheritdoc
|
|
114
95
|
*/
|
|
115
96
|
async getVersionURL(versionPath, signal) {
|
|
116
|
-
|
|
97
|
+
const tag = await require_download.defaultDownloadText(await this.parseURL(`releases.atom`), this.getHeaders("xml"), signal, (data, resolve, reject) => {
|
|
117
98
|
const result = data.match(/<entry>\s*<id>([^<]*\/)?([^/<]+)<\/id>/)?.[2];
|
|
118
99
|
if (result) resolve(result);
|
|
119
100
|
else reject("No tag matched");
|
|
120
|
-
})
|
|
101
|
+
});
|
|
102
|
+
return `releases/download/v${tag.startsWith("v") ? tag.slice(1) : tag}/${versionPath}`;
|
|
121
103
|
}
|
|
122
104
|
};
|
|
123
|
-
|
|
124
105
|
//#endregion
|
|
125
106
|
//#region src/provider/github/file.ts
|
|
126
107
|
/**
|
|
127
108
|
* Update Provider for Github repo
|
|
128
109
|
* - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
|
|
129
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
110
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
130
111
|
*
|
|
131
112
|
* you can setup `urlHandler` in options to modify url before request
|
|
132
113
|
* @param options provider options
|
|
@@ -147,16 +128,16 @@ var GitHubProvider = class extends BaseGitHubProvider {
|
|
|
147
128
|
return `raw/${this.options.branch}/${versionPath}`;
|
|
148
129
|
}
|
|
149
130
|
};
|
|
150
|
-
|
|
151
131
|
//#endregion
|
|
152
132
|
exports.BaseGitHubProvider = BaseGitHubProvider;
|
|
153
|
-
exports.BaseProvider = BaseProvider;
|
|
133
|
+
exports.BaseProvider = require_local.BaseProvider;
|
|
154
134
|
exports.GitHubApiProvider = GitHubApiProvider;
|
|
155
135
|
exports.GitHubAtomProvider = GitHubAtomProvider;
|
|
156
136
|
exports.GitHubProvider = GitHubProvider;
|
|
157
|
-
exports.
|
|
158
|
-
exports.
|
|
159
|
-
exports.
|
|
160
|
-
exports.
|
|
161
|
-
exports.
|
|
162
|
-
exports.
|
|
137
|
+
exports.LocalDevProvider = require_local.LocalDevProvider;
|
|
138
|
+
exports.defaultDownloadAsar = require_download.defaultDownloadAsar;
|
|
139
|
+
exports.defaultDownloadText = require_download.defaultDownloadText;
|
|
140
|
+
exports.defaultDownloadUpdateJSON = require_download.defaultDownloadUpdateJSON;
|
|
141
|
+
exports.downloadUtil = require_download.downloadUtil;
|
|
142
|
+
exports.getHeader = require_download.getHeader;
|
|
143
|
+
exports.resolveJson = require_download.resolveJson;
|
package/dist/provider.d.cts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-
|
|
1
|
+
import { a as VersionJSON, i as UpdateInfoWithURL, m as Promisable, n as IProvider, r as URLHandler, t as DownloadingInfo } 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
|
+
import { Buffer as Buffer$1 } from "node:buffer";
|
|
3
4
|
|
|
4
5
|
//#region src/provider/base.d.ts
|
|
5
6
|
declare abstract class BaseProvider implements IProvider {
|
|
@@ -11,15 +12,15 @@ declare abstract class BaseProvider implements IProvider {
|
|
|
11
12
|
/**
|
|
12
13
|
* @inheritdoc
|
|
13
14
|
*/
|
|
14
|
-
|
|
15
|
+
verifySignature: IProvider["verifySignature"];
|
|
15
16
|
/**
|
|
16
17
|
* @inheritdoc
|
|
17
18
|
*/
|
|
18
|
-
|
|
19
|
+
decompressFile: IProvider["decompressFile"];
|
|
19
20
|
/**
|
|
20
21
|
* @inheritdoc
|
|
21
22
|
*/
|
|
22
|
-
abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<
|
|
23
|
+
abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<VersionJSON>;
|
|
23
24
|
/**
|
|
24
25
|
* @inheritdoc
|
|
25
26
|
*/
|
|
@@ -41,13 +42,7 @@ interface BaseGitHubProviderOptions {
|
|
|
41
42
|
*/
|
|
42
43
|
extraHeaders?: Record<string, string>;
|
|
43
44
|
/**
|
|
44
|
-
* Custom url handler (
|
|
45
|
-
* @example
|
|
46
|
-
* (url) => {
|
|
47
|
-
* url.hostname = 'mirror.ghproxy.com'
|
|
48
|
-
* url.pathname = 'https://github.com' + url.pathname
|
|
49
|
-
* return url
|
|
50
|
-
* }
|
|
45
|
+
* Custom url handler ([some public CDN links](https://github.com/XIU2/UserScript/blob/master/GithubEnhanced-High-Speed-Download.user.js#L40)). See {@link URLHandler} for details.
|
|
51
46
|
*/
|
|
52
47
|
urlHandler?: URLHandler;
|
|
53
48
|
}
|
|
@@ -56,10 +51,10 @@ declare abstract class BaseGitHubProvider<T extends BaseGitHubProviderOptions =
|
|
|
56
51
|
constructor(options: T);
|
|
57
52
|
get urlHandler(): URLHandler | undefined;
|
|
58
53
|
set urlHandler(handler: URLHandler);
|
|
59
|
-
protected parseURL(
|
|
54
|
+
protected parseURL(pathOrURL: string): Promise<string>;
|
|
60
55
|
protected abstract getHeaders(accept: string): Record<string, string>;
|
|
61
56
|
protected abstract getVersionURL(versionPath: string, signal: AbortSignal): Promisable<string>;
|
|
62
|
-
downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<
|
|
57
|
+
downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<VersionJSON>;
|
|
63
58
|
/**
|
|
64
59
|
* @inheritdoc
|
|
65
60
|
*/
|
|
@@ -80,7 +75,7 @@ interface GitHubApiProviderOptions extends BaseGitHubProviderOptions {
|
|
|
80
75
|
* @param options provider options
|
|
81
76
|
*/
|
|
82
77
|
declare class GitHubApiProvider extends BaseGitHubProvider<GitHubApiProviderOptions> {
|
|
83
|
-
name: string;
|
|
78
|
+
override name: string;
|
|
84
79
|
protected getHeaders(accept: string): Record<string, string>;
|
|
85
80
|
/**
|
|
86
81
|
* @inheritdoc
|
|
@@ -93,13 +88,13 @@ declare class GitHubApiProvider extends BaseGitHubProvider<GitHubApiProviderOpti
|
|
|
93
88
|
* Update Provider for Github repo
|
|
94
89
|
* - check update from `https://github.com/{user}/{repo}/releases.atom`
|
|
95
90
|
* - download update json from `https://github.com/{user}/{repo}/releases/download/v{version}/{versionPath}`
|
|
96
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
91
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
97
92
|
*
|
|
98
93
|
* you can setup `urlHandler` in options to modify url before request
|
|
99
94
|
* @param options provider options
|
|
100
95
|
*/
|
|
101
96
|
declare class GitHubAtomProvider extends BaseGitHubProvider {
|
|
102
|
-
name: string;
|
|
97
|
+
override name: string;
|
|
103
98
|
protected getHeaders(accept: string): Record<string, string>;
|
|
104
99
|
/**
|
|
105
100
|
* @inheritdoc
|
|
@@ -118,16 +113,59 @@ interface GitHubProviderOptions extends BaseGitHubProviderOptions {
|
|
|
118
113
|
/**
|
|
119
114
|
* Update Provider for Github repo
|
|
120
115
|
* - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
|
|
121
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
116
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
122
117
|
*
|
|
123
118
|
* you can setup `urlHandler` in options to modify url before request
|
|
124
119
|
* @param options provider options
|
|
125
120
|
*/
|
|
126
121
|
declare class GitHubProvider extends BaseGitHubProvider<GitHubProviderOptions> {
|
|
127
|
-
name: string;
|
|
122
|
+
override name: string;
|
|
128
123
|
constructor(options: GitHubProviderOptions);
|
|
129
124
|
protected getHeaders(accept: string): Record<string, string>;
|
|
130
125
|
protected getVersionURL(versionPath: string): string;
|
|
131
126
|
}
|
|
132
127
|
//#endregion
|
|
133
|
-
|
|
128
|
+
//#region src/provider/local.d.ts
|
|
129
|
+
interface LocalDevProviderOptions {
|
|
130
|
+
/**
|
|
131
|
+
* Base directory for update files
|
|
132
|
+
*/
|
|
133
|
+
baseDir: string;
|
|
134
|
+
/**
|
|
135
|
+
* Local read chunk size for simulated download progress
|
|
136
|
+
* @default 64 * 1024
|
|
137
|
+
*/
|
|
138
|
+
chunkSize?: number;
|
|
139
|
+
/**
|
|
140
|
+
* Delay between chunks in milliseconds
|
|
141
|
+
* @default 30
|
|
142
|
+
*/
|
|
143
|
+
chunkDelay?: number;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Update Provider for local development
|
|
147
|
+
* - download update json from `{baseDir}/{versionPath}`
|
|
148
|
+
* - download update asar from `{baseDir}/{name}-{version}.asar.br`
|
|
149
|
+
*
|
|
150
|
+
* This provider is useful for testing updates during development without
|
|
151
|
+
* needing to deploy to a remote server.
|
|
152
|
+
* @param options provider options
|
|
153
|
+
*/
|
|
154
|
+
declare class LocalDevProvider extends BaseProvider {
|
|
155
|
+
override name: string;
|
|
156
|
+
override verifySignature: IProvider["verifySignature"];
|
|
157
|
+
private readonly options;
|
|
158
|
+
constructor(options: LocalDevProviderOptions);
|
|
159
|
+
/**
|
|
160
|
+
* @inheritdoc
|
|
161
|
+
*/
|
|
162
|
+
downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<VersionJSON>;
|
|
163
|
+
/**
|
|
164
|
+
* @inheritdoc
|
|
165
|
+
*/
|
|
166
|
+
downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer$1>;
|
|
167
|
+
private readJSON;
|
|
168
|
+
private emitProgress;
|
|
169
|
+
}
|
|
170
|
+
//#endregion
|
|
171
|
+
export { BaseGitHubProvider, BaseGitHubProviderOptions, BaseProvider, DownloadingInfo, GitHubApiProvider, GitHubApiProviderOptions, GitHubAtomProvider, GitHubProvider, GitHubProviderOptions, IProvider, LocalDevProvider, LocalDevProviderOptions, URLHandler, UpdateInfoWithURL, VersionJSON, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, downloadUtil, getHeader, resolveJson };
|
package/dist/provider.d.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-
|
|
1
|
+
import { a as VersionJSON, i as UpdateInfoWithURL, m as Promisable, n as IProvider, r as URLHandler, t as DownloadingInfo } 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
|
+
import { Buffer as Buffer$1 } from "node:buffer";
|
|
3
4
|
|
|
4
5
|
//#region src/provider/base.d.ts
|
|
5
6
|
declare abstract class BaseProvider implements IProvider {
|
|
@@ -11,15 +12,15 @@ declare abstract class BaseProvider implements IProvider {
|
|
|
11
12
|
/**
|
|
12
13
|
* @inheritdoc
|
|
13
14
|
*/
|
|
14
|
-
|
|
15
|
+
verifySignature: IProvider["verifySignature"];
|
|
15
16
|
/**
|
|
16
17
|
* @inheritdoc
|
|
17
18
|
*/
|
|
18
|
-
|
|
19
|
+
decompressFile: IProvider["decompressFile"];
|
|
19
20
|
/**
|
|
20
21
|
* @inheritdoc
|
|
21
22
|
*/
|
|
22
|
-
abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<
|
|
23
|
+
abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<VersionJSON>;
|
|
23
24
|
/**
|
|
24
25
|
* @inheritdoc
|
|
25
26
|
*/
|
|
@@ -41,13 +42,7 @@ interface BaseGitHubProviderOptions {
|
|
|
41
42
|
*/
|
|
42
43
|
extraHeaders?: Record<string, string>;
|
|
43
44
|
/**
|
|
44
|
-
* Custom url handler (
|
|
45
|
-
* @example
|
|
46
|
-
* (url) => {
|
|
47
|
-
* url.hostname = 'mirror.ghproxy.com'
|
|
48
|
-
* url.pathname = 'https://github.com' + url.pathname
|
|
49
|
-
* return url
|
|
50
|
-
* }
|
|
45
|
+
* Custom url handler ([some public CDN links](https://github.com/XIU2/UserScript/blob/master/GithubEnhanced-High-Speed-Download.user.js#L40)). See {@link URLHandler} for details.
|
|
51
46
|
*/
|
|
52
47
|
urlHandler?: URLHandler;
|
|
53
48
|
}
|
|
@@ -56,10 +51,10 @@ declare abstract class BaseGitHubProvider<T extends BaseGitHubProviderOptions =
|
|
|
56
51
|
constructor(options: T);
|
|
57
52
|
get urlHandler(): URLHandler | undefined;
|
|
58
53
|
set urlHandler(handler: URLHandler);
|
|
59
|
-
protected parseURL(
|
|
54
|
+
protected parseURL(pathOrURL: string): Promise<string>;
|
|
60
55
|
protected abstract getHeaders(accept: string): Record<string, string>;
|
|
61
56
|
protected abstract getVersionURL(versionPath: string, signal: AbortSignal): Promisable<string>;
|
|
62
|
-
downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<
|
|
57
|
+
downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<VersionJSON>;
|
|
63
58
|
/**
|
|
64
59
|
* @inheritdoc
|
|
65
60
|
*/
|
|
@@ -80,7 +75,7 @@ interface GitHubApiProviderOptions extends BaseGitHubProviderOptions {
|
|
|
80
75
|
* @param options provider options
|
|
81
76
|
*/
|
|
82
77
|
declare class GitHubApiProvider extends BaseGitHubProvider<GitHubApiProviderOptions> {
|
|
83
|
-
name: string;
|
|
78
|
+
override name: string;
|
|
84
79
|
protected getHeaders(accept: string): Record<string, string>;
|
|
85
80
|
/**
|
|
86
81
|
* @inheritdoc
|
|
@@ -93,13 +88,13 @@ declare class GitHubApiProvider extends BaseGitHubProvider<GitHubApiProviderOpti
|
|
|
93
88
|
* Update Provider for Github repo
|
|
94
89
|
* - check update from `https://github.com/{user}/{repo}/releases.atom`
|
|
95
90
|
* - download update json from `https://github.com/{user}/{repo}/releases/download/v{version}/{versionPath}`
|
|
96
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
91
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
97
92
|
*
|
|
98
93
|
* you can setup `urlHandler` in options to modify url before request
|
|
99
94
|
* @param options provider options
|
|
100
95
|
*/
|
|
101
96
|
declare class GitHubAtomProvider extends BaseGitHubProvider {
|
|
102
|
-
name: string;
|
|
97
|
+
override name: string;
|
|
103
98
|
protected getHeaders(accept: string): Record<string, string>;
|
|
104
99
|
/**
|
|
105
100
|
* @inheritdoc
|
|
@@ -118,16 +113,59 @@ interface GitHubProviderOptions extends BaseGitHubProviderOptions {
|
|
|
118
113
|
/**
|
|
119
114
|
* Update Provider for Github repo
|
|
120
115
|
* - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
|
|
121
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
116
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
122
117
|
*
|
|
123
118
|
* you can setup `urlHandler` in options to modify url before request
|
|
124
119
|
* @param options provider options
|
|
125
120
|
*/
|
|
126
121
|
declare class GitHubProvider extends BaseGitHubProvider<GitHubProviderOptions> {
|
|
127
|
-
name: string;
|
|
122
|
+
override name: string;
|
|
128
123
|
constructor(options: GitHubProviderOptions);
|
|
129
124
|
protected getHeaders(accept: string): Record<string, string>;
|
|
130
125
|
protected getVersionURL(versionPath: string): string;
|
|
131
126
|
}
|
|
132
127
|
//#endregion
|
|
133
|
-
|
|
128
|
+
//#region src/provider/local.d.ts
|
|
129
|
+
interface LocalDevProviderOptions {
|
|
130
|
+
/**
|
|
131
|
+
* Base directory for update files
|
|
132
|
+
*/
|
|
133
|
+
baseDir: string;
|
|
134
|
+
/**
|
|
135
|
+
* Local read chunk size for simulated download progress
|
|
136
|
+
* @default 64 * 1024
|
|
137
|
+
*/
|
|
138
|
+
chunkSize?: number;
|
|
139
|
+
/**
|
|
140
|
+
* Delay between chunks in milliseconds
|
|
141
|
+
* @default 30
|
|
142
|
+
*/
|
|
143
|
+
chunkDelay?: number;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Update Provider for local development
|
|
147
|
+
* - download update json from `{baseDir}/{versionPath}`
|
|
148
|
+
* - download update asar from `{baseDir}/{name}-{version}.asar.br`
|
|
149
|
+
*
|
|
150
|
+
* This provider is useful for testing updates during development without
|
|
151
|
+
* needing to deploy to a remote server.
|
|
152
|
+
* @param options provider options
|
|
153
|
+
*/
|
|
154
|
+
declare class LocalDevProvider extends BaseProvider {
|
|
155
|
+
override name: string;
|
|
156
|
+
override verifySignature: IProvider["verifySignature"];
|
|
157
|
+
private readonly options;
|
|
158
|
+
constructor(options: LocalDevProviderOptions);
|
|
159
|
+
/**
|
|
160
|
+
* @inheritdoc
|
|
161
|
+
*/
|
|
162
|
+
downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<VersionJSON>;
|
|
163
|
+
/**
|
|
164
|
+
* @inheritdoc
|
|
165
|
+
*/
|
|
166
|
+
downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer$1>;
|
|
167
|
+
private readJSON;
|
|
168
|
+
private emitProgress;
|
|
169
|
+
}
|
|
170
|
+
//#endregion
|
|
171
|
+
export { BaseGitHubProvider, BaseGitHubProviderOptions, BaseProvider, DownloadingInfo, GitHubApiProvider, GitHubApiProviderOptions, GitHubAtomProvider, GitHubProvider, GitHubProviderOptions, IProvider, LocalDevProvider, LocalDevProviderOptions, URLHandler, UpdateInfoWithURL, VersionJSON, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, downloadUtil, getHeader, resolveJson };
|
package/dist/provider.mjs
CHANGED
|
@@ -1,27 +1,9 @@
|
|
|
1
|
-
import { t as
|
|
2
|
-
import { a as
|
|
1
|
+
import { n as BaseProvider, t as LocalDevProvider } from "./local-C5jw-7o5.mjs";
|
|
2
|
+
import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-BdX4fZYM.mjs";
|
|
3
3
|
import { URL } from "node:url";
|
|
4
|
-
|
|
5
|
-
//#region src/provider/base.ts
|
|
6
|
-
var BaseProvider = class {
|
|
7
|
-
name = "BaseProvider";
|
|
8
|
-
/**
|
|
9
|
-
* @inheritdoc
|
|
10
|
-
*/
|
|
11
|
-
isLowerVersion = defaultIsLowerVersion;
|
|
12
|
-
/**
|
|
13
|
-
* @inheritdoc
|
|
14
|
-
*/
|
|
15
|
-
verifySignaure = defaultVerifySignature;
|
|
16
|
-
/**
|
|
17
|
-
* @inheritdoc
|
|
18
|
-
*/
|
|
19
|
-
unzipFile = defaultUnzipFile;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
//#endregion
|
|
23
4
|
//#region src/provider/github/base.ts
|
|
24
5
|
var BaseGitHubProvider = class extends BaseProvider {
|
|
6
|
+
options;
|
|
25
7
|
constructor(options) {
|
|
26
8
|
super();
|
|
27
9
|
this.options = options;
|
|
@@ -32,13 +14,13 @@ var BaseGitHubProvider = class extends BaseProvider {
|
|
|
32
14
|
set urlHandler(handler) {
|
|
33
15
|
this.options.urlHandler = handler;
|
|
34
16
|
}
|
|
35
|
-
async parseURL(
|
|
36
|
-
const url = new URL(`/${this.options.user}/${this.options.repo}/${
|
|
17
|
+
async parseURL(pathOrURL) {
|
|
18
|
+
const url = URL.canParse(pathOrURL) ? new URL(pathOrURL) : new URL(`/${this.options.user}/${this.options.repo}/${pathOrURL}`, "https://github.com");
|
|
37
19
|
return (await this.urlHandler?.(url) || url).toString();
|
|
38
20
|
}
|
|
39
21
|
async downloadJSON(name, versionPath, signal) {
|
|
40
22
|
const { beta, version, ...info } = await defaultDownloadUpdateJSON(await this.parseURL(await this.getVersionURL(versionPath, signal)), this.getHeaders("json"), signal);
|
|
41
|
-
const getURL = (ver) => this.parseURL(`releases/download/v${ver}/${name}-${ver}.asar.
|
|
23
|
+
const getURL = (ver) => this.parseURL(`releases/download/v${ver}/${name}-${ver}.asar.br`);
|
|
42
24
|
return {
|
|
43
25
|
...info,
|
|
44
26
|
version,
|
|
@@ -56,7 +38,6 @@ var BaseGitHubProvider = class extends BaseProvider {
|
|
|
56
38
|
return await defaultDownloadAsar(info.url, this.getHeaders("octet-stream"), signal, onDownloading);
|
|
57
39
|
}
|
|
58
40
|
};
|
|
59
|
-
|
|
60
41
|
//#endregion
|
|
61
42
|
//#region src/provider/github/api.ts
|
|
62
43
|
const ERROR_MSG = "Cannot find UpdateJSON in latest release";
|
|
@@ -89,14 +70,13 @@ var GitHubApiProvider = class extends BaseGitHubProvider {
|
|
|
89
70
|
return versionAssets.browser_download_url;
|
|
90
71
|
}
|
|
91
72
|
};
|
|
92
|
-
|
|
93
73
|
//#endregion
|
|
94
74
|
//#region src/provider/github/atom.ts
|
|
95
75
|
/**
|
|
96
76
|
* Update Provider for Github repo
|
|
97
77
|
* - check update from `https://github.com/{user}/{repo}/releases.atom`
|
|
98
78
|
* - download update json from `https://github.com/{user}/{repo}/releases/download/v{version}/{versionPath}`
|
|
99
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
79
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
100
80
|
*
|
|
101
81
|
* you can setup `urlHandler` in options to modify url before request
|
|
102
82
|
* @param options provider options
|
|
@@ -113,20 +93,20 @@ var GitHubAtomProvider = class extends BaseGitHubProvider {
|
|
|
113
93
|
* @inheritdoc
|
|
114
94
|
*/
|
|
115
95
|
async getVersionURL(versionPath, signal) {
|
|
116
|
-
|
|
96
|
+
const tag = await defaultDownloadText(await this.parseURL(`releases.atom`), this.getHeaders("xml"), signal, (data, resolve, reject) => {
|
|
117
97
|
const result = data.match(/<entry>\s*<id>([^<]*\/)?([^/<]+)<\/id>/)?.[2];
|
|
118
98
|
if (result) resolve(result);
|
|
119
99
|
else reject("No tag matched");
|
|
120
|
-
})
|
|
100
|
+
});
|
|
101
|
+
return `releases/download/v${tag.startsWith("v") ? tag.slice(1) : tag}/${versionPath}`;
|
|
121
102
|
}
|
|
122
103
|
};
|
|
123
|
-
|
|
124
104
|
//#endregion
|
|
125
105
|
//#region src/provider/github/file.ts
|
|
126
106
|
/**
|
|
127
107
|
* Update Provider for Github repo
|
|
128
108
|
* - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
|
|
129
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
109
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
130
110
|
*
|
|
131
111
|
* you can setup `urlHandler` in options to modify url before request
|
|
132
112
|
* @param options provider options
|
|
@@ -147,6 +127,5 @@ var GitHubProvider = class extends BaseGitHubProvider {
|
|
|
147
127
|
return `raw/${this.options.branch}/${versionPath}`;
|
|
148
128
|
}
|
|
149
129
|
};
|
|
150
|
-
|
|
151
130
|
//#endregion
|
|
152
|
-
export { BaseGitHubProvider, BaseProvider, GitHubApiProvider, GitHubAtomProvider, GitHubProvider, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, downloadUtil, getHeader, resolveJson };
|
|
131
|
+
export { BaseGitHubProvider, BaseProvider, GitHubApiProvider, GitHubAtomProvider, GitHubProvider, LocalDevProvider, defaultDownloadAsar, defaultDownloadText, defaultDownloadUpdateJSON, downloadUtil, getHeader, resolveJson };
|