@lynker-desktop/electron-sdk 0.0.4-alpha.8 → 0.0.5-alpha.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/common/index.d.ts +6 -0
- package/common/index.d.ts.map +1 -1
- package/esm/common/index.d.ts +6 -0
- package/esm/common/index.d.ts.map +1 -1
- package/esm/main/index.d.ts +30 -5
- package/esm/main/index.d.ts.map +1 -1
- package/esm/main/index.js +188 -19
- package/esm/main/index.js.map +1 -1
- package/esm/preload/index.js +2 -1
- package/esm/preload/index.js.map +1 -1
- package/esm/renderer/index.d.ts +21 -3
- package/esm/renderer/index.d.ts.map +1 -1
- package/esm/renderer/index.js +45 -4
- package/esm/renderer/index.js.map +1 -1
- package/esm/types/index.d.ts +62 -0
- package/esm/types/index.d.ts.map +1 -0
- package/main/index.d.ts +30 -5
- package/main/index.d.ts.map +1 -1
- package/main/index.js +191 -18
- package/main/index.js.map +1 -1
- package/package.json +18 -17
- package/preload/index.js +1 -0
- package/preload/index.js.map +1 -1
- package/renderer/index.d.ts +21 -3
- package/renderer/index.d.ts.map +1 -1
- package/renderer/index.js +45 -4
- package/renderer/index.js.map +1 -1
package/common/index.d.ts
CHANGED
package/common/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/common/index.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,gBAAgB,CAAC,EAAE,GAAG,CAAC;KACxB;CACF"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/common/index.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,gBAAgB,CAAC,EAAE,GAAG,CAAC;KACxB;CACF;AAED,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,CAAC"}
|
package/esm/common/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,gBAAgB,CAAC,EAAE,GAAG,CAAC;KACxB;CACF"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,gBAAgB,CAAC,EAAE,GAAG,CAAC;KACxB;CACF;AAED,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,CAAC"}
|
package/esm/main/index.d.ts
CHANGED
|
@@ -1,23 +1,48 @@
|
|
|
1
|
+
import type { WebContents } from 'electron';
|
|
2
|
+
import * as ipc from '@lynker-desktop/electron-ipc/main';
|
|
1
3
|
import * as windowManager from '@lynker-desktop/electron-window-manager/main';
|
|
2
|
-
import {
|
|
4
|
+
import type { ServeOptions } from '../common';
|
|
3
5
|
export declare let isInitialized: boolean;
|
|
4
|
-
interface SDK_TYPE {
|
|
6
|
+
export interface SDK_TYPE {
|
|
7
|
+
ipc: typeof ipc.mainIPC;
|
|
5
8
|
windowManager: windowManager.WindowsManager;
|
|
6
9
|
getPreload: () => string;
|
|
7
10
|
}
|
|
8
11
|
/**
|
|
9
12
|
* 初始化
|
|
13
|
+
* @param protocol 唤起协议 例:dgz
|
|
10
14
|
* @param preload 预加载js 必须传
|
|
15
|
+
* @param loadingViewUrl 窗口管理默认loading页面
|
|
11
16
|
* @returns
|
|
12
17
|
*/
|
|
13
|
-
export declare const initialize: (
|
|
18
|
+
export declare const initialize: (options: {
|
|
19
|
+
protocol: string;
|
|
20
|
+
preload: string;
|
|
21
|
+
loadingViewUrl?: string;
|
|
22
|
+
errorViewUrl?: string;
|
|
23
|
+
serveOptions?: ServeOptions;
|
|
24
|
+
}) => SDK_TYPE;
|
|
14
25
|
/** 后续再优化 */
|
|
15
|
-
export declare const getSDK: () =>
|
|
26
|
+
export declare const getSDK: () => SDK_TYPE;
|
|
27
|
+
/**
|
|
28
|
+
* 注册唤起
|
|
29
|
+
*/
|
|
30
|
+
export declare const registerProtocol: (protocol: string) => void;
|
|
31
|
+
/**
|
|
32
|
+
* 注册协议
|
|
33
|
+
* @param options
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
export declare const serve: (options: ServeOptions) => Promise<unknown>;
|
|
16
37
|
/**
|
|
17
38
|
* @electron/remote/main enable方法
|
|
18
39
|
* @param webContents
|
|
19
40
|
* @returns
|
|
20
41
|
*/
|
|
21
42
|
export declare const enable: (webContents: WebContents) => void;
|
|
22
|
-
export
|
|
43
|
+
export declare function getRandomUUID(key?: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* 获取定制Session
|
|
46
|
+
*/
|
|
47
|
+
export declare const getCustomSession: () => Electron.Session;
|
|
23
48
|
//# sourceMappingURL=index.d.ts.map
|
package/esm/main/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/main/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/main/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAS3C,OAAO,KAAK,GAAG,MAAM,mCAAmC,CAAA;AAGxD,OAAO,KAAK,aAAa,MAAM,8CAA8C,CAAA;AAG7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAM9C,eAAO,IAAI,aAAa,SAAQ,CAAC;AAGjC,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC,cAAc,CAAC;IAC5C,UAAU,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,YAAa;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,CAAA;CAAE,KAAG,QA2BxJ,CAAA;AAED,YAAY;AACZ,eAAO,MAAM,MAAM,QAAO,QAOzB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,aAGT,MAAM,SAoDtB,CAAC;AAEL;;;;GAIG;AACH,eAAO,MAAM,KAAK,YAAa,YAAY,qBA2E1C,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,gBAAiB,WAAW,SAA+B,CAAC;AAE/E,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAwB,GAAG,MAAM,CAiBnE;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAnPF,SAAU,OAmPyB,CAAC"}
|
package/esm/main/index.js
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { promisify } from 'node:util';
|
|
4
|
+
import electron, { app } from 'electron';
|
|
5
|
+
import md5 from 'md5';
|
|
6
|
+
import { v5 } from 'uuid';
|
|
7
|
+
import lodash from 'lodash';
|
|
1
8
|
import * as remote from '@electron/remote/main';
|
|
2
9
|
import * as ipc from '@lynker-desktop/electron-ipc/main';
|
|
3
10
|
import * as logs from '@lynker-desktop/electron-logs/main';
|
|
@@ -12,31 +19,38 @@ if (!remote.isInitialized()) {
|
|
|
12
19
|
let isInitialized = false;
|
|
13
20
|
/**
|
|
14
21
|
* 初始化
|
|
22
|
+
* @param protocol 唤起协议 例:dgz
|
|
15
23
|
* @param preload 预加载js 必须传
|
|
24
|
+
* @param loadingViewUrl 窗口管理默认loading页面
|
|
16
25
|
* @returns
|
|
17
26
|
*/
|
|
18
|
-
const initialize = (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
// @ts-ignore
|
|
22
|
-
global['__GLBOAL_ELECTRON_SDK__'] = {};
|
|
23
|
-
ipc.initialize();
|
|
24
|
-
logs.initialize();
|
|
25
|
-
tabsBrowser.initialize(preload);
|
|
26
|
-
const wm = windowManager.initialize(preload);
|
|
27
|
-
windowModal.initialize(preload);
|
|
28
|
-
windowTooltip.initialize(preload);
|
|
29
|
-
// @ts-ignore
|
|
30
|
-
global['__GLBOAL_ELECTRON_SDK__'].windowManager = wm;
|
|
31
|
-
// @ts-ignore
|
|
32
|
-
global['__GLBOAL_ELECTRON_SDK__'].getPreload = () => preload;
|
|
27
|
+
const initialize = (options) => {
|
|
28
|
+
const { protocol, preload, loadingViewUrl, serveOptions, errorViewUrl } = options;
|
|
29
|
+
if (isInitialized) {
|
|
33
30
|
// @ts-ignore
|
|
34
31
|
return global['__GLBOAL_ELECTRON_SDK__'];
|
|
35
32
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
isInitialized = true;
|
|
34
|
+
ipc.initialize();
|
|
35
|
+
logs.initialize();
|
|
36
|
+
tabsBrowser.initialize(preload);
|
|
37
|
+
const wm = windowManager.initialize(preload, loadingViewUrl, errorViewUrl);
|
|
38
|
+
windowModal.initialize(preload);
|
|
39
|
+
windowTooltip.initialize(preload);
|
|
40
|
+
if (protocol) {
|
|
41
|
+
registerProtocol(protocol);
|
|
42
|
+
}
|
|
43
|
+
if (serveOptions && serveOptions.length) {
|
|
44
|
+
serve(serveOptions);
|
|
39
45
|
}
|
|
46
|
+
class SDK {
|
|
47
|
+
}
|
|
48
|
+
SDK.ipc = ipc.mainIPC;
|
|
49
|
+
SDK.windowManager = wm;
|
|
50
|
+
SDK.getPreload = () => preload;
|
|
51
|
+
// @ts-ignore
|
|
52
|
+
global['__GLBOAL_ELECTRON_SDK__'] = SDK;
|
|
53
|
+
return SDK;
|
|
40
54
|
};
|
|
41
55
|
/** 后续再优化 */
|
|
42
56
|
const getSDK = () => {
|
|
@@ -47,12 +61,167 @@ const getSDK = () => {
|
|
|
47
61
|
// @ts-ignore
|
|
48
62
|
return global['__GLBOAL_ELECTRON_SDK__'];
|
|
49
63
|
};
|
|
64
|
+
/**
|
|
65
|
+
* 注册唤起
|
|
66
|
+
*/
|
|
67
|
+
const registerProtocol = (() => {
|
|
68
|
+
let isRegister = false;
|
|
69
|
+
let launchOptions = ``;
|
|
70
|
+
return (protocol) => {
|
|
71
|
+
if (isRegister) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
isRegister = true;
|
|
75
|
+
if (process.defaultApp) {
|
|
76
|
+
if (process.argv.length >= 2) {
|
|
77
|
+
app.setAsDefaultProtocolClient(protocol, process.execPath, [path.resolve(lodash.get(process, `argv[1]`, ''))]);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
app.setAsDefaultProtocolClient(protocol);
|
|
82
|
+
}
|
|
83
|
+
const handleUrl = (url) => {
|
|
84
|
+
launchOptions = `${url}`;
|
|
85
|
+
ipc.mainIPC.invokeAllRenderer('__GLOBAL_CHANGE_LAUNCH_OPTIONS__', url);
|
|
86
|
+
};
|
|
87
|
+
function handleArgv(argv) {
|
|
88
|
+
const prefix = `${protocol}:`;
|
|
89
|
+
const offset = app?.isPackaged ? 1 : 2;
|
|
90
|
+
const url = argv.find((arg, i) => i >= offset && arg.startsWith(prefix));
|
|
91
|
+
if (url)
|
|
92
|
+
handleUrl(url);
|
|
93
|
+
}
|
|
94
|
+
handleArgv(process.argv);
|
|
95
|
+
app.on('second-instance', (event, argv) => {
|
|
96
|
+
console.info(event);
|
|
97
|
+
if (process.platform === 'win32') {
|
|
98
|
+
// Windows
|
|
99
|
+
handleArgv(argv);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
// macOS
|
|
103
|
+
app.on('open-url', (event, urlStr) => {
|
|
104
|
+
console.info(event);
|
|
105
|
+
handleUrl(urlStr);
|
|
106
|
+
});
|
|
107
|
+
app.on("open-url", (_event, url) => {
|
|
108
|
+
handleUrl(url);
|
|
109
|
+
});
|
|
110
|
+
ipc.mainIPC.handleRenderer('__GLOBAL_GET_LAUNCH_OPTIONS__', async () => {
|
|
111
|
+
return launchOptions;
|
|
112
|
+
});
|
|
113
|
+
ipc.mainIPC.handleRenderer('__GLOBAL_DEL_LAUNCH_OPTIONS__', async () => {
|
|
114
|
+
launchOptions = ``;
|
|
115
|
+
return launchOptions;
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
})();
|
|
119
|
+
/**
|
|
120
|
+
* 注册协议
|
|
121
|
+
* @param options
|
|
122
|
+
* @returns
|
|
123
|
+
*/
|
|
124
|
+
const serve = (options) => {
|
|
125
|
+
if (!options.length) {
|
|
126
|
+
throw new Error('请传入配置');
|
|
127
|
+
}
|
|
128
|
+
const stat = promisify(fs.stat);
|
|
129
|
+
// See https://cs.chromium.org/chromium/src/net/base/net_error_list.h
|
|
130
|
+
const FILE_NOT_FOUND = -6;
|
|
131
|
+
const getPath = async (path_) => {
|
|
132
|
+
try {
|
|
133
|
+
const result = await stat(path_);
|
|
134
|
+
if (result.isFile()) {
|
|
135
|
+
return path_;
|
|
136
|
+
}
|
|
137
|
+
if (result.isDirectory()) {
|
|
138
|
+
return getPath(path.join(path_, 'index.html'));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (_) { }
|
|
142
|
+
};
|
|
143
|
+
const createHandler = (item) => {
|
|
144
|
+
return async (request, callback) => {
|
|
145
|
+
const indexPath = path.join(item.directory, 'index.html');
|
|
146
|
+
const filePath = path.join(item.directory, decodeURIComponent(new URL(request.url).pathname));
|
|
147
|
+
const resolvedPath = await getPath(filePath);
|
|
148
|
+
const fileExtension = path.extname(filePath);
|
|
149
|
+
if (resolvedPath || !fileExtension || fileExtension === '.html' || fileExtension === '.asar') {
|
|
150
|
+
callback({
|
|
151
|
+
path: resolvedPath || indexPath
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
callback({ error: FILE_NOT_FOUND });
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
options = options.map((item) => {
|
|
160
|
+
return {
|
|
161
|
+
...item,
|
|
162
|
+
isCorsEnabled: !!item?.isCorsEnabled,
|
|
163
|
+
scheme: item?.scheme || 'app',
|
|
164
|
+
directory: path.resolve(electron.app.getAppPath(), item.directory),
|
|
165
|
+
};
|
|
166
|
+
});
|
|
167
|
+
electron.protocol.registerSchemesAsPrivileged(options.map((item) => {
|
|
168
|
+
return {
|
|
169
|
+
scheme: item.scheme,
|
|
170
|
+
privileges: {
|
|
171
|
+
bypassCSP: true,
|
|
172
|
+
standard: true,
|
|
173
|
+
secure: true,
|
|
174
|
+
allowServiceWorkers: true,
|
|
175
|
+
supportFetchAPI: true,
|
|
176
|
+
corsEnabled: item.isCorsEnabled || false,
|
|
177
|
+
stream: true,
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
}));
|
|
181
|
+
return new Promise((resolve, reject) => {
|
|
182
|
+
try {
|
|
183
|
+
electron.app.on('ready', () => {
|
|
184
|
+
options.forEach((item) => {
|
|
185
|
+
const handler = createHandler(item);
|
|
186
|
+
const session = item.partition ? electron.session.fromPartition(item.partition) : electron.session.defaultSession;
|
|
187
|
+
session.protocol.registerFileProtocol(item.scheme, handler);
|
|
188
|
+
});
|
|
189
|
+
resolve(true);
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
reject(error);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
};
|
|
50
197
|
/**
|
|
51
198
|
* @electron/remote/main enable方法
|
|
52
199
|
* @param webContents
|
|
53
200
|
* @returns
|
|
54
201
|
*/
|
|
55
202
|
const enable = (webContents) => remote.enable(webContents);
|
|
203
|
+
function getRandomUUID(key = `${Date.now()}`) {
|
|
204
|
+
let webcrypto;
|
|
205
|
+
let randomValue = Math?.random()?.toString()?.replace('0.', '');
|
|
206
|
+
try {
|
|
207
|
+
if (!webcrypto && !!window && window?.crypto) {
|
|
208
|
+
webcrypto = window.crypto;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
const ar = webcrypto.getRandomValues(new Uint8Array(12));
|
|
215
|
+
randomValue = `${md5(ar)}` || randomValue;
|
|
216
|
+
}
|
|
217
|
+
catch (error) { }
|
|
218
|
+
const uuid = v5(`${JSON.stringify(key)}_${Date.now()}_${randomValue}`, v5.URL);
|
|
219
|
+
return uuid;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* 获取定制Session
|
|
223
|
+
*/
|
|
224
|
+
const getCustomSession = windowManager.getCustomSession;
|
|
56
225
|
|
|
57
|
-
export { enable, getSDK, initialize, isInitialized };
|
|
226
|
+
export { enable, getCustomSession, getRandomUUID, getSDK, initialize, isInitialized, registerProtocol, serve };
|
|
58
227
|
//# sourceMappingURL=index.js.map
|
package/esm/main/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/main/index.ts"],"sourcesContent":["import * as remote from '@electron/remote/main'\nimport * as ipc from '@lynker-desktop/electron-ipc/main'\nimport * as logs from '@lynker-desktop/electron-logs/main'\nimport * as tabsBrowser from '@lynker-desktop/electron-tabs-browser/main'\nimport * as windowManager from '@lynker-desktop/electron-window-manager/main'\nimport * as windowModal from '@lynker-desktop/electron-window-modal/main'\nimport * as windowTooltip from '@lynker-desktop/electron-window-tooltip/main'\nimport { WebContents } from 'electron'\n\nif (!remote.isInitialized()) {\n remote.initialize();\n}\n\nexport let isInitialized = false;\n\ninterface SDK_TYPE {\n windowManager: windowManager.WindowsManager,\n getPreload: () => string;\n}\n\n/**\n * 初始化\n * @param preload 预加载js 必须传\n * @returns\n */\nexport const initialize = (preload: string): SDK_TYPE => {\n if (!isInitialized) {\n isInitialized = true;\n // @ts-ignore\n global['__GLBOAL_ELECTRON_SDK__'] = {};\n ipc.initialize();\n logs.initialize();\n tabsBrowser.initialize(preload);\n const wm = windowManager.initialize(preload);\n windowModal.initialize(preload);\n windowTooltip.initialize(preload);\n // @ts-ignore\n global['__GLBOAL_ELECTRON_SDK__'].windowManager = wm;\n // @ts-ignore\n global['__GLBOAL_ELECTRON_SDK__'].getPreload = () => preload;\n // @ts-ignore\n return global['__GLBOAL_ELECTRON_SDK__'];\n } else {\n // @ts-ignore\n return global['__GLBOAL_ELECTRON_SDK__'];\n }\n}\n\n/** 后续再优化 */\nexport const getSDK = () => {\n // @ts-ignore\n if (!global['__GLBOAL_ELECTRON_SDK__']) {\n throw '请在ready前先调用initialize'\n }\n // @ts-ignore\n return global['__GLBOAL_ELECTRON_SDK__'];\n}\n\n/**\n * @electron/remote/main enable方法\n * @param webContents\n * @returns\n */\nexport const enable = (webContents: WebContents) => remote.enable(webContents);\n"],"names":[],"mappings":";;;;;;;;AASA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE;IAC3B,MAAM,CAAC,UAAU,EAAE,CAAC;AACtB,CAAC;AAEM,IAAI,aAAa,GAAG,MAAM;AAOjC;;;;AAIG;AACU,MAAA,UAAU,GAAG,CAAC,OAAe,KAAc;IACtD,IAAI,CAAC,aAAa,EAAE;QAClB,aAAa,GAAG,IAAI,CAAC;;AAErB,QAAA,MAAM,CAAC,yBAAyB,CAAC,GAAG,EAAE,CAAC;QACvC,GAAG,CAAC,UAAU,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAA,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,EAAE,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7C,QAAA,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAChC,QAAA,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;;AAElC,QAAA,MAAM,CAAC,yBAAyB,CAAC,CAAC,aAAa,GAAG,EAAE,CAAC;;QAErD,MAAM,CAAC,yBAAyB,CAAC,CAAC,UAAU,GAAG,MAAM,OAAO,CAAC;;AAE7D,QAAA,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;KAC1C;SAAM;;AAEL,QAAA,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;KAC1C;AACH,EAAC;AAED;AACO,MAAM,MAAM,GAAG,MAAK;;AAEzB,IAAA,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE;AACtC,QAAA,MAAM,uBAAuB,CAAA;KAC9B;;AAED,IAAA,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAC3C,EAAC;AAED;;;;AAIG;AACI,MAAM,MAAM,GAAG,CAAC,WAAwB,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/main/index.ts"],"sourcesContent":["import type { WebContents } from 'electron'\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport {promisify} from 'node:util';\nimport electron, { app } from 'electron';\nimport md5 from 'md5';\nimport { v5 as uuidv5 } from 'uuid';\nimport lodash from 'lodash';\nimport * as remote from '@electron/remote/main'\nimport * as ipc from '@lynker-desktop/electron-ipc/main'\nimport * as logs from '@lynker-desktop/electron-logs/main'\nimport * as tabsBrowser from '@lynker-desktop/electron-tabs-browser/main'\nimport * as windowManager from '@lynker-desktop/electron-window-manager/main'\nimport * as windowModal from '@lynker-desktop/electron-window-modal/main'\nimport * as windowTooltip from '@lynker-desktop/electron-window-tooltip/main'\nimport type { ServeOptions } from '../common';\n\nif (!remote.isInitialized()) {\n remote.initialize();\n}\n\nexport let isInitialized = false;\n\n\nexport interface SDK_TYPE {\n ipc: typeof ipc.mainIPC;\n windowManager: windowManager.WindowsManager,\n getPreload: () => string;\n}\n\n/**\n * 初始化\n * @param protocol 唤起协议 例:dgz\n * @param preload 预加载js 必须传\n * @param loadingViewUrl 窗口管理默认loading页面\n * @returns\n */\nexport const initialize = (options: { protocol: string, preload: string, loadingViewUrl?: string, errorViewUrl?: string, serveOptions?: ServeOptions }): SDK_TYPE => {\n const {protocol, preload, loadingViewUrl, serveOptions, errorViewUrl} = options;\n if (isInitialized) {\n // @ts-ignore\n return global['__GLBOAL_ELECTRON_SDK__'];\n }\n isInitialized = true;\n ipc.initialize();\n logs.initialize();\n tabsBrowser.initialize(preload);\n const wm = windowManager.initialize(preload, loadingViewUrl, errorViewUrl);\n windowModal.initialize(preload);\n windowTooltip.initialize(preload);\n if (protocol) {\n registerProtocol(protocol);\n }\n if (serveOptions && serveOptions.length) {\n serve(serveOptions);\n }\n class SDK {\n static ipc = ipc.mainIPC;\n static windowManager = wm;\n static getPreload = () => preload;\n }\n // @ts-ignore\n global['__GLBOAL_ELECTRON_SDK__'] = SDK;\n return SDK;\n}\n\n/** 后续再优化 */\nexport const getSDK = (): SDK_TYPE => {\n // @ts-ignore\n if (!global['__GLBOAL_ELECTRON_SDK__']) {\n throw '请在ready前先调用initialize'\n }\n // @ts-ignore\n return global['__GLBOAL_ELECTRON_SDK__'];\n}\n\n/**\n * 注册唤起\n */\nexport const registerProtocol = (() => {\n let isRegister = false;\n let launchOptions = ``;\n return (protocol: string) => {\n if (isRegister) {\n return;\n }\n isRegister = true;\n if (process.defaultApp) {\n if (process.argv.length >= 2) {\n app.setAsDefaultProtocolClient(protocol, process.execPath, [path.resolve(lodash.get(process, `argv[1]`, ''))]);\n }\n } else {\n app.setAsDefaultProtocolClient(protocol);\n }\n const handleUrl = (url: string) => {\n launchOptions = `${url}`;\n ipc.mainIPC.invokeAllRenderer('__GLOBAL_CHANGE_LAUNCH_OPTIONS__', url)\n };\n\n function handleArgv(argv: string[]) {\n const prefix = `${protocol}:`;\n const offset = app?.isPackaged ? 1 : 2;\n const url = argv.find((arg, i) => i >= offset && arg.startsWith(prefix));\n if (url) handleUrl(url);\n }\n\n handleArgv(process.argv);\n\n app.on('second-instance', (event, argv) => {\n console.info(event)\n if (process.platform === 'win32') {\n // Windows\n handleArgv(argv);\n }\n });\n\n // macOS\n app.on('open-url', (event, urlStr) => {\n console.info(event)\n handleUrl(urlStr);\n });\n\n\n app.on(\"open-url\", (_event, url) => {\n handleUrl(url);\n });\n ipc.mainIPC.handleRenderer('__GLOBAL_GET_LAUNCH_OPTIONS__', async () => {\n return launchOptions;\n })\n ipc.mainIPC.handleRenderer('__GLOBAL_DEL_LAUNCH_OPTIONS__', async () => {\n launchOptions = ``;\n return launchOptions;\n })\n }\n})();\n\n/**\n * 注册协议\n * @param options\n * @returns\n */\nexport const serve = (options: ServeOptions) => {\n if (!options.length) {\n\t\tthrow new Error('请传入配置');\n\t}\n const stat = promisify(fs.stat);\n\n // See https://cs.chromium.org/chromium/src/net/base/net_error_list.h\n const FILE_NOT_FOUND = -6;\n\n const getPath: any = async (path_: string) => {\n try {\n const result = await stat(path_);\n\n if (result.isFile()) {\n return path_;\n }\n\n if (result.isDirectory()) {\n return getPath(path.join(path_, 'index.html'));\n }\n } catch (_) {}\n };\n\n const createHandler = (item: any) => {\n return async (request: any, callback: any) => {\n const indexPath = path.join(item.directory, 'index.html');\n const filePath = path.join(item.directory, decodeURIComponent(new URL(request.url).pathname));\n const resolvedPath = await getPath(filePath);\n const fileExtension = path.extname(filePath);\n\n if (resolvedPath || !fileExtension || fileExtension === '.html' || fileExtension === '.asar') {\n callback({\n path: resolvedPath || indexPath\n });\n } else {\n callback({error: FILE_NOT_FOUND});\n }\n }\n };\n\toptions = options.map((item) => {\n\t\treturn {\n\t\t\t...item,\n\t\t\tisCorsEnabled: !!item?.isCorsEnabled,\n\t\t\tscheme: item?.scheme || 'app',\n\t\t\tdirectory: path.resolve(electron.app.getAppPath(), item.directory),\n\t\t}\n\t})\n\telectron.protocol.registerSchemesAsPrivileged(options.map((item) => {\n\t\treturn {\n\t\t\tscheme: item.scheme,\n\t\t\tprivileges: {\n bypassCSP: true,\n\t\t\t\tstandard: true,\n\t\t\t\tsecure: true,\n\t\t\t\tallowServiceWorkers: true,\n\t\t\t\tsupportFetchAPI: true,\n\t\t\t\tcorsEnabled: item.isCorsEnabled || false,\n stream: true,\n\t\t\t}\n\t\t}\n\t}));\n\treturn new Promise((resolve, reject) => {\n\t\ttry {\n\t\t\telectron.app.on('ready', () => {\n\t\t\t\toptions.forEach((item) => {\n\t\t\t\t\tconst handler = createHandler(item);\n\t\t\t\t\tconst session = item.partition ? electron.session.fromPartition(item.partition) : electron.session.defaultSession;\n\t\t\t\t\tsession.protocol.registerFileProtocol(item.scheme, handler);\n\t\t\t\t})\n\t\t\t\tresolve(true)\n\t\t\t});\n\t\t} catch (error) {\n\t\t\treject(error)\n\t\t}\n\t})\n}\n\n/**\n * @electron/remote/main enable方法\n * @param webContents\n * @returns\n */\nexport const enable = (webContents: WebContents) => remote.enable(webContents);\n\nexport function getRandomUUID(key: string = `${Date.now()}`): string {\n let webcrypto!: Crypto;\n let randomValue = Math?.random()?.toString()?.replace('0.', '');\n try {\n if (!webcrypto && !!window && window?.crypto) {\n webcrypto = window.crypto;\n }\n } catch (error) {console.log}\n try {\n const ar = webcrypto.getRandomValues(new Uint8Array(12));\n randomValue = `${md5(ar)}` || randomValue;\n } catch (error) {}\n const uuid = uuidv5(\n `${JSON.stringify(key)}_${Date.now()}_${randomValue}`,\n uuidv5.URL,\n );\n return uuid;\n}\n\n/**\n * 获取定制Session\n */\nexport const getCustomSession = windowManager.getCustomSession;\n"],"names":["uuidv5"],"mappings":"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"}
|
package/esm/preload/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { contextBridge } from 'electron';
|
|
1
|
+
import { ipcRenderer, contextBridge } from 'electron';
|
|
2
2
|
import remote from '@electron/remote/renderer';
|
|
3
3
|
import '@lynker-desktop/electron-ipc/preload';
|
|
4
4
|
import '@lynker-desktop/electron-logs/preload';
|
|
@@ -15,6 +15,7 @@ if (window.__ELECTRON_SDK__) {
|
|
|
15
15
|
else {
|
|
16
16
|
try {
|
|
17
17
|
const preload = {
|
|
18
|
+
ipcRenderer: ipcRenderer,
|
|
18
19
|
remote: remote,
|
|
19
20
|
};
|
|
20
21
|
// @ts-ignore
|
package/esm/preload/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/src/preload/index.ts"],"sourcesContent":["import { contextBridge } from 'electron';\nimport remote from '@electron/remote/renderer';\nimport '@lynker-desktop/electron-ipc/preload';\nimport '@lynker-desktop/electron-logs/preload';\nimport '@lynker-desktop/electron-tabs-browser/preload';\nimport '@lynker-desktop/electron-window-manager/preload';\nimport '@lynker-desktop/electron-window-modal/preload';\nimport '@lynker-desktop/electron-window-tooltip/preload';\n\n// @ts-ignore\nif (window.__ELECTRON_SDK__) {\n // eslint-disable-next-line no-console\n console.log('electron-sdk Electron preload has already been run');\n} else {\n try {\n const preload = {\n remote: remote,\n }\n // @ts-ignore\n window.__ELECTRON_SDK__ = preload;\n if (contextBridge) {\n try {\n // This will fail if contextIsolation is not enabled\n contextBridge.exposeInMainWorld('__ELECTRON_SDK__', preload);\n } catch (error) {\n // console.error(error)\n }\n\n }\n }\n catch (e) {\n console.error(e)\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AASA;AACA,IAAI,MAAM,CAAC,gBAAgB,EAAE;;AAE3B,IAAA,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;AACpE,CAAC;KAAM;AACL,IAAA,IAAI;AACF,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,MAAM,EAAE,MAAM;SACf,CAAA;;AAED,QAAA,MAAM,CAAC,gBAAgB,GAAG,OAAO,CAAC;QAClC,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI;;AAEF,gBAAA,aAAa,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;aAC9D;YAAC,OAAO,KAAK,EAAE;;aAEf;SAEF;KACF;IACD,OAAO,CAAC,EAAE;AACR,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACjB;AACH"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/src/preload/index.ts"],"sourcesContent":["import { contextBridge, ipcRenderer } from 'electron';\nimport remote from '@electron/remote/renderer';\nimport '@lynker-desktop/electron-ipc/preload';\nimport '@lynker-desktop/electron-logs/preload';\nimport '@lynker-desktop/electron-tabs-browser/preload';\nimport '@lynker-desktop/electron-window-manager/preload';\nimport '@lynker-desktop/electron-window-modal/preload';\nimport '@lynker-desktop/electron-window-tooltip/preload';\n\n// @ts-ignore\nif (window.__ELECTRON_SDK__) {\n // eslint-disable-next-line no-console\n console.log('electron-sdk Electron preload has already been run');\n} else {\n try {\n const preload = {\n ipcRenderer: ipcRenderer,\n remote: remote,\n }\n // @ts-ignore\n window.__ELECTRON_SDK__ = preload;\n if (contextBridge) {\n try {\n // This will fail if contextIsolation is not enabled\n contextBridge.exposeInMainWorld('__ELECTRON_SDK__', preload);\n } catch (error) {\n // console.error(error)\n }\n\n }\n }\n catch (e) {\n console.error(e)\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AASA;AACA,IAAI,MAAM,CAAC,gBAAgB,EAAE;;AAE3B,IAAA,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;AACpE,CAAC;KAAM;AACL,IAAA,IAAI;AACF,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,MAAM,EAAE,MAAM;SACf,CAAA;;AAED,QAAA,MAAM,CAAC,gBAAgB,GAAG,OAAO,CAAC;QAClC,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI;;AAEF,gBAAA,aAAa,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;aAC9D;YAAC,OAAO,KAAK,EAAE;;aAEf;SAEF;KACF;IACD,OAAO,CAAC,EAAE;AACR,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACjB;AACH"}
|
package/esm/renderer/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type RemoteType from '@electron/remote';
|
|
2
|
+
import EventEmitter from 'events';
|
|
2
3
|
import ipc from '@lynker-desktop/electron-ipc/renderer';
|
|
3
4
|
import tabsBrowser from '@lynker-desktop/electron-tabs-browser/renderer';
|
|
4
5
|
import windowManager from '@lynker-desktop/electron-window-manager/renderer';
|
|
5
6
|
import windowModal from '@lynker-desktop/electron-window-modal/renderer';
|
|
6
7
|
import windowTooltip from '@lynker-desktop/electron-window-tooltip/renderer';
|
|
7
|
-
declare class SDK {
|
|
8
|
+
declare class SDK extends EventEmitter {
|
|
8
9
|
remote: typeof RemoteType;
|
|
9
10
|
ipc: typeof ipc.RendererIPC;
|
|
10
11
|
log: (level: import("@lynker-desktop/electron-logs/common").Level, ...logs: any[]) => void;
|
|
@@ -13,6 +14,22 @@ declare class SDK {
|
|
|
13
14
|
windowModal: typeof windowModal;
|
|
14
15
|
windowTooltip: typeof windowTooltip;
|
|
15
16
|
tabsBrowser: typeof tabsBrowser;
|
|
17
|
+
constructor();
|
|
18
|
+
/**
|
|
19
|
+
* 获取启动/唤起参数
|
|
20
|
+
*/
|
|
21
|
+
getLaunchOptions: () => Promise<any>;
|
|
22
|
+
/**
|
|
23
|
+
* 清除启动/唤起参数
|
|
24
|
+
* @returns
|
|
25
|
+
*/
|
|
26
|
+
delLaunchOptions: () => Promise<any>;
|
|
27
|
+
/**
|
|
28
|
+
* 监听桌面端唤起
|
|
29
|
+
* @param callback
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
onLaunchOptions: (callback: (options: string) => void) => Promise<() => this>;
|
|
16
33
|
/**
|
|
17
34
|
* 生成随机uuid
|
|
18
35
|
* @param key
|
|
@@ -20,6 +37,7 @@ declare class SDK {
|
|
|
20
37
|
*/
|
|
21
38
|
getRandomUUID(key?: string): string;
|
|
22
39
|
}
|
|
23
|
-
|
|
24
|
-
|
|
40
|
+
/** 临时写法,后期用rollup生成umd包 */
|
|
41
|
+
declare const core: SDK;
|
|
42
|
+
export default core;
|
|
25
43
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAA;AAC9C,OAAO,YAAY,MAAM,QAAQ,CAAC;AAGlC,OAAO,GAAG,MAAM,uCAAuC,CAAA;AAEvD,OAAO,WAAW,MAAM,gDAAgD,CAAA;AACxE,OAAO,aAAa,MAAM,kDAAkD,CAAA;AAC5E,OAAO,WAAW,MAAM,gDAAgD,CAAA;AACxE,OAAO,aAAa,MAAM,kDAAkD,CAAA;AAY5E,cAAM,GAAI,SAAQ,YAAY;IAC5B,MAAM,EAAkB,OAAO,UAAU,CAAC;IAC1C,GAAG,yBAAmB;IACtB,GAAG,wFAAY;IACf,UAAU,wBAAmB;IAC7B,aAAa,uBAAiB;IAC9B,WAAW,qBAAe;IAC1B,aAAa,uBAAiB;IAC9B,WAAW,qBAAe;;IAe1B;;OAEG;IACH,gBAAgB,qBAGf;IAED;;;OAGG;IACH,gBAAgB,qBAGf;IAED;;;;OAIG;IACH,eAAe,aAAoB,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,yBAM3D;IAED;;;;OAIG;IACH,aAAa,CAAC,GAAG,GAAE,MAAwB,GAAG,MAAM;CAkBrD;AACD,2BAA2B;AAE3B,QAAA,MAAM,IAAI,KAA8C,CAAC;AACzD,eAAe,IAAI,CAAC"}
|
package/esm/renderer/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import EventEmitter from 'events';
|
|
1
2
|
import md5 from 'md5';
|
|
2
3
|
import { v5 } from 'uuid';
|
|
3
4
|
import ipc from '@lynker-desktop/electron-ipc/renderer';
|
|
@@ -13,12 +14,13 @@ function getRemote() {
|
|
|
13
14
|
return window?.__ELECTRON_SDK__?.remote || window?.require('@electron/remote');
|
|
14
15
|
}
|
|
15
16
|
catch (error) {
|
|
16
|
-
console.error('
|
|
17
|
+
console.error('当前非桌面端环境, 请在桌面端中调用');
|
|
17
18
|
return {};
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
|
-
class SDK {
|
|
21
|
+
class SDK extends EventEmitter {
|
|
21
22
|
constructor() {
|
|
23
|
+
super();
|
|
22
24
|
this.remote = getRemote();
|
|
23
25
|
this.ipc = ipc.RendererIPC;
|
|
24
26
|
this.log = logs.log;
|
|
@@ -27,6 +29,43 @@ class SDK {
|
|
|
27
29
|
this.windowModal = windowModal;
|
|
28
30
|
this.windowTooltip = windowTooltip;
|
|
29
31
|
this.tabsBrowser = tabsBrowser;
|
|
32
|
+
/**
|
|
33
|
+
* 获取启动/唤起参数
|
|
34
|
+
*/
|
|
35
|
+
this.getLaunchOptions = async () => {
|
|
36
|
+
const options = await this.ipc.invokeMain(`__GLOBAL_GET_LAUNCH_OPTIONS__`);
|
|
37
|
+
return options;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* 清除启动/唤起参数
|
|
41
|
+
* @returns
|
|
42
|
+
*/
|
|
43
|
+
this.delLaunchOptions = async () => {
|
|
44
|
+
const options = await this.ipc.invokeMain(`__GLOBAL_DEL_LAUNCH_OPTIONS__`);
|
|
45
|
+
return options;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* 监听桌面端唤起
|
|
49
|
+
* @param callback
|
|
50
|
+
* @returns
|
|
51
|
+
*/
|
|
52
|
+
this.onLaunchOptions = async (callback) => {
|
|
53
|
+
const onCallback = (data) => {
|
|
54
|
+
callback(data);
|
|
55
|
+
};
|
|
56
|
+
this.on('launch-options-change', onCallback);
|
|
57
|
+
return () => this.off('launch-options-change', onCallback);
|
|
58
|
+
};
|
|
59
|
+
try {
|
|
60
|
+
/** 监听桌面端唤起 */
|
|
61
|
+
this.ipc.handleRenderer('__GLOBAL_CHANGE_LAUNCH_OPTIONS__', async (data) => {
|
|
62
|
+
this.emit('launch-options-change', `${data}`);
|
|
63
|
+
return 'OK';
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
console.error('当前非桌面端环境, 请在桌面端中调用');
|
|
68
|
+
}
|
|
30
69
|
}
|
|
31
70
|
/**
|
|
32
71
|
* 生成随机uuid
|
|
@@ -52,7 +91,9 @@ class SDK {
|
|
|
52
91
|
return uuid;
|
|
53
92
|
}
|
|
54
93
|
}
|
|
55
|
-
|
|
94
|
+
/** 临时写法,后期用rollup生成umd包 */
|
|
95
|
+
// @ts-ignore
|
|
96
|
+
const core = window['__ELECTRON_SDK_CORE__'] = new SDK();
|
|
56
97
|
|
|
57
|
-
export {
|
|
98
|
+
export { core as default };
|
|
58
99
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/renderer/index.ts"],"sourcesContent":["import type RemoteType from '@electron/remote'\
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/renderer/index.ts"],"sourcesContent":["import type RemoteType from '@electron/remote'\nimport EventEmitter from 'events';\nimport md5 from 'md5';\nimport { v5 as uuidv5 } from 'uuid';\nimport ipc from '@lynker-desktop/electron-ipc/renderer'\nimport logs from '@lynker-desktop/electron-logs/renderer'\nimport tabsBrowser from '@lynker-desktop/electron-tabs-browser/renderer'\nimport windowManager from '@lynker-desktop/electron-window-manager/renderer'\nimport windowModal from '@lynker-desktop/electron-window-modal/renderer'\nimport windowTooltip from '@lynker-desktop/electron-window-tooltip/renderer'\n\nfunction getRemote() {\n try {\n // @ts-ignore\n return window?.__ELECTRON_SDK__?.remote || window?.require('@electron/remote')\n } catch (error) {\n console.error('当前非桌面端环境, 请在桌面端中调用');\n return {} as typeof RemoteType;\n }\n}\n\nclass SDK extends EventEmitter {\n remote = getRemote() as typeof RemoteType;\n ipc = ipc.RendererIPC;\n log = logs.log;\n getLogPath = logs.getLogPath;\n windowManager = windowManager;\n windowModal = windowModal;\n windowTooltip = windowTooltip;\n tabsBrowser = tabsBrowser;\n\n constructor() {\n super();\n try {\n /** 监听桌面端唤起 */\n this.ipc.handleRenderer('__GLOBAL_CHANGE_LAUNCH_OPTIONS__', async (data) => {\n this.emit('launch-options-change', `${data}`);\n return 'OK';\n });\n } catch (error) {\n console.error('当前非桌面端环境, 请在桌面端中调用');\n }\n }\n\n /**\n * 获取启动/唤起参数\n */\n getLaunchOptions = async () => {\n const options = await this.ipc.invokeMain(`__GLOBAL_GET_LAUNCH_OPTIONS__`);\n return options;\n }\n\n /**\n * 清除启动/唤起参数\n * @returns\n */\n delLaunchOptions = async () => {\n const options = await this.ipc.invokeMain(`__GLOBAL_DEL_LAUNCH_OPTIONS__`);\n return options;\n }\n\n /**\n * 监听桌面端唤起\n * @param callback\n * @returns\n */\n onLaunchOptions = async (callback: (options: string) => void) => {\n const onCallback = (data: string) => {\n callback(data);\n }\n this.on('launch-options-change', onCallback);\n return () => this.off('launch-options-change', onCallback);\n }\n\n /**\n * 生成随机uuid\n * @param key\n * @returns\n */\n getRandomUUID(key: string = `${Date.now()}`): string {\n let webcrypto!: Crypto;\n let randomValue = Math?.random()?.toString()?.replace('0.', '');\n try {\n if (!webcrypto && !!window && window?.crypto) {\n webcrypto = window.crypto;\n }\n } catch (error) {console.log}\n try {\n const ar = webcrypto.getRandomValues(new Uint8Array(12));\n randomValue = `${md5(ar)}` || randomValue;\n } catch (error) {}\n const uuid = uuidv5(\n `${JSON.stringify(key)}_${Date.now()}_${randomValue}`,\n uuidv5.URL,\n );\n return uuid;\n }\n}\n/** 临时写法,后期用rollup生成umd包 */\n// @ts-ignore\nconst core = window['__ELECTRON_SDK_CORE__'] = new SDK();\nexport default core;\n"],"names":["uuidv5"],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { WindowsManager } from '@lynker-desktop/electron-window-manager/main';
|
|
2
|
+
import type { mainIPC } from '@lynker-desktop/electron-ipc/main';
|
|
3
|
+
/**
|
|
4
|
+
* 全局变量类型声明
|
|
5
|
+
*/
|
|
6
|
+
declare global {
|
|
7
|
+
interface Window {
|
|
8
|
+
__ELECTRON_SDK__?: any;
|
|
9
|
+
}
|
|
10
|
+
var __GLBOAL_ELECTRON_SDK__: any;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* SDK 初始化选项
|
|
14
|
+
*/
|
|
15
|
+
export interface InitializeOptions {
|
|
16
|
+
/** 唤起协议,例如:dgz */
|
|
17
|
+
protocol: string;
|
|
18
|
+
/** 预加载脚本路径 */
|
|
19
|
+
preload: string;
|
|
20
|
+
/** 窗口管理默认loading页面URL */
|
|
21
|
+
loadingViewUrl?: string;
|
|
22
|
+
/** 错误页面URL */
|
|
23
|
+
errorViewUrl?: string;
|
|
24
|
+
/** 自定义协议配置 */
|
|
25
|
+
serveOptions?: ServeOptions;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 自定义协议配置
|
|
29
|
+
*/
|
|
30
|
+
export type ServeOptions = Array<{
|
|
31
|
+
/** 目录路径 */
|
|
32
|
+
directory: string;
|
|
33
|
+
/** 协议名称 */
|
|
34
|
+
scheme: string;
|
|
35
|
+
/** 是否启用CORS */
|
|
36
|
+
isCorsEnabled?: boolean;
|
|
37
|
+
/** 会话分区 */
|
|
38
|
+
partition?: string;
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* SDK 类型定义
|
|
42
|
+
*/
|
|
43
|
+
export interface SDK {
|
|
44
|
+
/** IPC 通信实例 */
|
|
45
|
+
ipc: typeof mainIPC;
|
|
46
|
+
/** 窗口管理器实例 */
|
|
47
|
+
windowManager: WindowsManager;
|
|
48
|
+
/** 获取预加载脚本路径 */
|
|
49
|
+
getPreload: () => string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 协议处理函数类型
|
|
53
|
+
*/
|
|
54
|
+
export type ProtocolHandler = (request: Electron.ProtocolRequest, callback: (response: string | Electron.ProtocolResponse) => void) => void;
|
|
55
|
+
/**
|
|
56
|
+
* 文件路径解析结果类型
|
|
57
|
+
*/
|
|
58
|
+
export type PathResolution = {
|
|
59
|
+
path?: string;
|
|
60
|
+
error?: number;
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAEjE;;GAEG;AACH,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,gBAAgB,CAAC,EAAE,GAAG,CAAC;KACxB;IAED,IAAI,uBAAuB,EAAE,GAAG,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,kBAAkB;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc;IACd,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC;IAC/B,WAAW;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,eAAe;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,GAAG;IAClB,eAAe;IACf,GAAG,EAAE,OAAO,OAAO,CAAC;IACpB,cAAc;IACd,aAAa,EAAE,cAAc,CAAC;IAC9B,gBAAgB;IAChB,UAAU,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,eAAe,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC,gBAAgB,KAAK,IAAI,KAAK,IAAI,CAAC;AAE5I;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
|
package/main/index.d.ts
CHANGED
|
@@ -1,23 +1,48 @@
|
|
|
1
|
+
import type { WebContents } from 'electron';
|
|
2
|
+
import * as ipc from '@lynker-desktop/electron-ipc/main';
|
|
1
3
|
import * as windowManager from '@lynker-desktop/electron-window-manager/main';
|
|
2
|
-
import {
|
|
4
|
+
import type { ServeOptions } from '../common';
|
|
3
5
|
export declare let isInitialized: boolean;
|
|
4
|
-
interface SDK_TYPE {
|
|
6
|
+
export interface SDK_TYPE {
|
|
7
|
+
ipc: typeof ipc.mainIPC;
|
|
5
8
|
windowManager: windowManager.WindowsManager;
|
|
6
9
|
getPreload: () => string;
|
|
7
10
|
}
|
|
8
11
|
/**
|
|
9
12
|
* 初始化
|
|
13
|
+
* @param protocol 唤起协议 例:dgz
|
|
10
14
|
* @param preload 预加载js 必须传
|
|
15
|
+
* @param loadingViewUrl 窗口管理默认loading页面
|
|
11
16
|
* @returns
|
|
12
17
|
*/
|
|
13
|
-
export declare const initialize: (
|
|
18
|
+
export declare const initialize: (options: {
|
|
19
|
+
protocol: string;
|
|
20
|
+
preload: string;
|
|
21
|
+
loadingViewUrl?: string;
|
|
22
|
+
errorViewUrl?: string;
|
|
23
|
+
serveOptions?: ServeOptions;
|
|
24
|
+
}) => SDK_TYPE;
|
|
14
25
|
/** 后续再优化 */
|
|
15
|
-
export declare const getSDK: () =>
|
|
26
|
+
export declare const getSDK: () => SDK_TYPE;
|
|
27
|
+
/**
|
|
28
|
+
* 注册唤起
|
|
29
|
+
*/
|
|
30
|
+
export declare const registerProtocol: (protocol: string) => void;
|
|
31
|
+
/**
|
|
32
|
+
* 注册协议
|
|
33
|
+
* @param options
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
export declare const serve: (options: ServeOptions) => Promise<unknown>;
|
|
16
37
|
/**
|
|
17
38
|
* @electron/remote/main enable方法
|
|
18
39
|
* @param webContents
|
|
19
40
|
* @returns
|
|
20
41
|
*/
|
|
21
42
|
export declare const enable: (webContents: WebContents) => void;
|
|
22
|
-
export
|
|
43
|
+
export declare function getRandomUUID(key?: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* 获取定制Session
|
|
46
|
+
*/
|
|
47
|
+
export declare const getCustomSession: () => Electron.Session;
|
|
23
48
|
//# sourceMappingURL=index.d.ts.map
|
package/main/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/main/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/main/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAS3C,OAAO,KAAK,GAAG,MAAM,mCAAmC,CAAA;AAGxD,OAAO,KAAK,aAAa,MAAM,8CAA8C,CAAA;AAG7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAM9C,eAAO,IAAI,aAAa,SAAQ,CAAC;AAGjC,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC,cAAc,CAAC;IAC5C,UAAU,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,YAAa;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,CAAA;CAAE,KAAG,QA2BxJ,CAAA;AAED,YAAY;AACZ,eAAO,MAAM,MAAM,QAAO,QAOzB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,aAGT,MAAM,SAoDtB,CAAC;AAEL;;;;GAIG;AACH,eAAO,MAAM,KAAK,YAAa,YAAY,qBA2E1C,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,gBAAiB,WAAW,SAA+B,CAAC;AAE/E,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAwB,GAAG,MAAM,CAiBnE;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAnPF,SAAU,OAmPyB,CAAC"}
|
package/main/index.js
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
const fs = require('node:fs');
|
|
2
|
+
const path = require('node:path');
|
|
3
|
+
const node_util = require('node:util');
|
|
4
|
+
const electron = require('electron');
|
|
5
|
+
const md5 = require('md5');
|
|
6
|
+
const uuid = require('uuid');
|
|
7
|
+
const lodash = require('lodash');
|
|
1
8
|
const remote = require('@electron/remote/main');
|
|
2
9
|
const ipc = require('@lynker-desktop/electron-ipc/main');
|
|
3
10
|
const logs = require('@lynker-desktop/electron-logs/main');
|
|
@@ -31,31 +38,38 @@ if (!remote__namespace.isInitialized()) {
|
|
|
31
38
|
exports.isInitialized = false;
|
|
32
39
|
/**
|
|
33
40
|
* 初始化
|
|
41
|
+
* @param protocol 唤起协议 例:dgz
|
|
34
42
|
* @param preload 预加载js 必须传
|
|
43
|
+
* @param loadingViewUrl 窗口管理默认loading页面
|
|
35
44
|
* @returns
|
|
36
45
|
*/
|
|
37
|
-
const initialize = (
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
// @ts-ignore
|
|
41
|
-
global['__GLBOAL_ELECTRON_SDK__'] = {};
|
|
42
|
-
ipc__namespace.initialize();
|
|
43
|
-
logs__namespace.initialize();
|
|
44
|
-
tabsBrowser__namespace.initialize(preload);
|
|
45
|
-
const wm = windowManager__namespace.initialize(preload);
|
|
46
|
-
windowModal__namespace.initialize(preload);
|
|
47
|
-
windowTooltip__namespace.initialize(preload);
|
|
48
|
-
// @ts-ignore
|
|
49
|
-
global['__GLBOAL_ELECTRON_SDK__'].windowManager = wm;
|
|
50
|
-
// @ts-ignore
|
|
51
|
-
global['__GLBOAL_ELECTRON_SDK__'].getPreload = () => preload;
|
|
46
|
+
const initialize = (options) => {
|
|
47
|
+
const { protocol, preload, loadingViewUrl, serveOptions, errorViewUrl } = options;
|
|
48
|
+
if (exports.isInitialized) {
|
|
52
49
|
// @ts-ignore
|
|
53
50
|
return global['__GLBOAL_ELECTRON_SDK__'];
|
|
54
51
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
52
|
+
exports.isInitialized = true;
|
|
53
|
+
ipc__namespace.initialize();
|
|
54
|
+
logs__namespace.initialize();
|
|
55
|
+
tabsBrowser__namespace.initialize(preload);
|
|
56
|
+
const wm = windowManager__namespace.initialize(preload, loadingViewUrl, errorViewUrl);
|
|
57
|
+
windowModal__namespace.initialize(preload);
|
|
58
|
+
windowTooltip__namespace.initialize(preload);
|
|
59
|
+
if (protocol) {
|
|
60
|
+
registerProtocol(protocol);
|
|
61
|
+
}
|
|
62
|
+
if (serveOptions && serveOptions.length) {
|
|
63
|
+
serve(serveOptions);
|
|
58
64
|
}
|
|
65
|
+
class SDK {
|
|
66
|
+
}
|
|
67
|
+
SDK.ipc = ipc__namespace.mainIPC;
|
|
68
|
+
SDK.windowManager = wm;
|
|
69
|
+
SDK.getPreload = () => preload;
|
|
70
|
+
// @ts-ignore
|
|
71
|
+
global['__GLBOAL_ELECTRON_SDK__'] = SDK;
|
|
72
|
+
return SDK;
|
|
59
73
|
};
|
|
60
74
|
/** 后续再优化 */
|
|
61
75
|
const getSDK = () => {
|
|
@@ -66,14 +80,173 @@ const getSDK = () => {
|
|
|
66
80
|
// @ts-ignore
|
|
67
81
|
return global['__GLBOAL_ELECTRON_SDK__'];
|
|
68
82
|
};
|
|
83
|
+
/**
|
|
84
|
+
* 注册唤起
|
|
85
|
+
*/
|
|
86
|
+
const registerProtocol = (() => {
|
|
87
|
+
let isRegister = false;
|
|
88
|
+
let launchOptions = ``;
|
|
89
|
+
return (protocol) => {
|
|
90
|
+
if (isRegister) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
isRegister = true;
|
|
94
|
+
if (process.defaultApp) {
|
|
95
|
+
if (process.argv.length >= 2) {
|
|
96
|
+
electron.app.setAsDefaultProtocolClient(protocol, process.execPath, [path.resolve(lodash.get(process, `argv[1]`, ''))]);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
electron.app.setAsDefaultProtocolClient(protocol);
|
|
101
|
+
}
|
|
102
|
+
const handleUrl = (url) => {
|
|
103
|
+
launchOptions = `${url}`;
|
|
104
|
+
ipc__namespace.mainIPC.invokeAllRenderer('__GLOBAL_CHANGE_LAUNCH_OPTIONS__', url);
|
|
105
|
+
};
|
|
106
|
+
function handleArgv(argv) {
|
|
107
|
+
const prefix = `${protocol}:`;
|
|
108
|
+
const offset = electron.app?.isPackaged ? 1 : 2;
|
|
109
|
+
const url = argv.find((arg, i) => i >= offset && arg.startsWith(prefix));
|
|
110
|
+
if (url)
|
|
111
|
+
handleUrl(url);
|
|
112
|
+
}
|
|
113
|
+
handleArgv(process.argv);
|
|
114
|
+
electron.app.on('second-instance', (event, argv) => {
|
|
115
|
+
console.info(event);
|
|
116
|
+
if (process.platform === 'win32') {
|
|
117
|
+
// Windows
|
|
118
|
+
handleArgv(argv);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
// macOS
|
|
122
|
+
electron.app.on('open-url', (event, urlStr) => {
|
|
123
|
+
console.info(event);
|
|
124
|
+
handleUrl(urlStr);
|
|
125
|
+
});
|
|
126
|
+
electron.app.on("open-url", (_event, url) => {
|
|
127
|
+
handleUrl(url);
|
|
128
|
+
});
|
|
129
|
+
ipc__namespace.mainIPC.handleRenderer('__GLOBAL_GET_LAUNCH_OPTIONS__', async () => {
|
|
130
|
+
return launchOptions;
|
|
131
|
+
});
|
|
132
|
+
ipc__namespace.mainIPC.handleRenderer('__GLOBAL_DEL_LAUNCH_OPTIONS__', async () => {
|
|
133
|
+
launchOptions = ``;
|
|
134
|
+
return launchOptions;
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
})();
|
|
138
|
+
/**
|
|
139
|
+
* 注册协议
|
|
140
|
+
* @param options
|
|
141
|
+
* @returns
|
|
142
|
+
*/
|
|
143
|
+
const serve = (options) => {
|
|
144
|
+
if (!options.length) {
|
|
145
|
+
throw new Error('请传入配置');
|
|
146
|
+
}
|
|
147
|
+
const stat = node_util.promisify(fs.stat);
|
|
148
|
+
// See https://cs.chromium.org/chromium/src/net/base/net_error_list.h
|
|
149
|
+
const FILE_NOT_FOUND = -6;
|
|
150
|
+
const getPath = async (path_) => {
|
|
151
|
+
try {
|
|
152
|
+
const result = await stat(path_);
|
|
153
|
+
if (result.isFile()) {
|
|
154
|
+
return path_;
|
|
155
|
+
}
|
|
156
|
+
if (result.isDirectory()) {
|
|
157
|
+
return getPath(path.join(path_, 'index.html'));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (_) { }
|
|
161
|
+
};
|
|
162
|
+
const createHandler = (item) => {
|
|
163
|
+
return async (request, callback) => {
|
|
164
|
+
const indexPath = path.join(item.directory, 'index.html');
|
|
165
|
+
const filePath = path.join(item.directory, decodeURIComponent(new URL(request.url).pathname));
|
|
166
|
+
const resolvedPath = await getPath(filePath);
|
|
167
|
+
const fileExtension = path.extname(filePath);
|
|
168
|
+
if (resolvedPath || !fileExtension || fileExtension === '.html' || fileExtension === '.asar') {
|
|
169
|
+
callback({
|
|
170
|
+
path: resolvedPath || indexPath
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
callback({ error: FILE_NOT_FOUND });
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
options = options.map((item) => {
|
|
179
|
+
return {
|
|
180
|
+
...item,
|
|
181
|
+
isCorsEnabled: !!item?.isCorsEnabled,
|
|
182
|
+
scheme: item?.scheme || 'app',
|
|
183
|
+
directory: path.resolve(electron.app.getAppPath(), item.directory),
|
|
184
|
+
};
|
|
185
|
+
});
|
|
186
|
+
electron.protocol.registerSchemesAsPrivileged(options.map((item) => {
|
|
187
|
+
return {
|
|
188
|
+
scheme: item.scheme,
|
|
189
|
+
privileges: {
|
|
190
|
+
bypassCSP: true,
|
|
191
|
+
standard: true,
|
|
192
|
+
secure: true,
|
|
193
|
+
allowServiceWorkers: true,
|
|
194
|
+
supportFetchAPI: true,
|
|
195
|
+
corsEnabled: item.isCorsEnabled || false,
|
|
196
|
+
stream: true,
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
}));
|
|
200
|
+
return new Promise((resolve, reject) => {
|
|
201
|
+
try {
|
|
202
|
+
electron.app.on('ready', () => {
|
|
203
|
+
options.forEach((item) => {
|
|
204
|
+
const handler = createHandler(item);
|
|
205
|
+
const session = item.partition ? electron.session.fromPartition(item.partition) : electron.session.defaultSession;
|
|
206
|
+
session.protocol.registerFileProtocol(item.scheme, handler);
|
|
207
|
+
});
|
|
208
|
+
resolve(true);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
reject(error);
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
};
|
|
69
216
|
/**
|
|
70
217
|
* @electron/remote/main enable方法
|
|
71
218
|
* @param webContents
|
|
72
219
|
* @returns
|
|
73
220
|
*/
|
|
74
221
|
const enable = (webContents) => remote__namespace.enable(webContents);
|
|
222
|
+
function getRandomUUID(key = `${Date.now()}`) {
|
|
223
|
+
let webcrypto;
|
|
224
|
+
let randomValue = Math?.random()?.toString()?.replace('0.', '');
|
|
225
|
+
try {
|
|
226
|
+
if (!webcrypto && !!window && window?.crypto) {
|
|
227
|
+
webcrypto = window.crypto;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
}
|
|
232
|
+
try {
|
|
233
|
+
const ar = webcrypto.getRandomValues(new Uint8Array(12));
|
|
234
|
+
randomValue = `${md5(ar)}` || randomValue;
|
|
235
|
+
}
|
|
236
|
+
catch (error) { }
|
|
237
|
+
const uuid$1 = uuid.v5(`${JSON.stringify(key)}_${Date.now()}_${randomValue}`, uuid.v5.URL);
|
|
238
|
+
return uuid$1;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* 获取定制Session
|
|
242
|
+
*/
|
|
243
|
+
const getCustomSession = windowManager__namespace.getCustomSession;
|
|
75
244
|
|
|
76
245
|
exports.enable = enable;
|
|
246
|
+
exports.getCustomSession = getCustomSession;
|
|
247
|
+
exports.getRandomUUID = getRandomUUID;
|
|
77
248
|
exports.getSDK = getSDK;
|
|
78
249
|
exports.initialize = initialize;
|
|
250
|
+
exports.registerProtocol = registerProtocol;
|
|
251
|
+
exports.serve = serve;
|
|
79
252
|
//# sourceMappingURL=index.js.map
|
package/main/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/src/main/index.ts"],"sourcesContent":["import * as remote from '@electron/remote/main'\nimport * as ipc from '@lynker-desktop/electron-ipc/main'\nimport * as logs from '@lynker-desktop/electron-logs/main'\nimport * as tabsBrowser from '@lynker-desktop/electron-tabs-browser/main'\nimport * as windowManager from '@lynker-desktop/electron-window-manager/main'\nimport * as windowModal from '@lynker-desktop/electron-window-modal/main'\nimport * as windowTooltip from '@lynker-desktop/electron-window-tooltip/main'\nimport { WebContents } from 'electron'\n\nif (!remote.isInitialized()) {\n remote.initialize();\n}\n\nexport let isInitialized = false;\n\ninterface SDK_TYPE {\n windowManager: windowManager.WindowsManager,\n getPreload: () => string;\n}\n\n/**\n * 初始化\n * @param preload 预加载js 必须传\n * @returns\n */\nexport const initialize = (preload: string): SDK_TYPE => {\n if (!isInitialized) {\n isInitialized = true;\n // @ts-ignore\n global['__GLBOAL_ELECTRON_SDK__'] = {};\n ipc.initialize();\n logs.initialize();\n tabsBrowser.initialize(preload);\n const wm = windowManager.initialize(preload);\n windowModal.initialize(preload);\n windowTooltip.initialize(preload);\n // @ts-ignore\n global['__GLBOAL_ELECTRON_SDK__'].windowManager = wm;\n // @ts-ignore\n global['__GLBOAL_ELECTRON_SDK__'].getPreload = () => preload;\n // @ts-ignore\n return global['__GLBOAL_ELECTRON_SDK__'];\n } else {\n // @ts-ignore\n return global['__GLBOAL_ELECTRON_SDK__'];\n }\n}\n\n/** 后续再优化 */\nexport const getSDK = () => {\n // @ts-ignore\n if (!global['__GLBOAL_ELECTRON_SDK__']) {\n throw '请在ready前先调用initialize'\n }\n // @ts-ignore\n return global['__GLBOAL_ELECTRON_SDK__'];\n}\n\n/**\n * @electron/remote/main enable方法\n * @param webContents\n * @returns\n */\nexport const enable = (webContents: WebContents) => remote.enable(webContents);\n"],"names":["remote","isInitialized","ipc","logs","tabsBrowser","windowManager","windowModal","windowTooltip"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,IAAI,CAACA,iBAAM,CAAC,aAAa,EAAE,EAAE;IAC3BA,iBAAM,CAAC,UAAU,EAAE,CAAC;AACtB,CAAC;AAEUC,qBAAa,GAAG,MAAM;AAOjC;;;;AAIG;AACU,MAAA,UAAU,GAAG,CAAC,OAAe,KAAc;IACtD,IAAI,CAACA,qBAAa,EAAE;QAClBA,qBAAa,GAAG,IAAI,CAAC;;AAErB,QAAA,MAAM,CAAC,yBAAyB,CAAC,GAAG,EAAE,CAAC;QACvCC,cAAG,CAAC,UAAU,EAAE,CAAC;QACjBC,eAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAAC,sBAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,EAAE,GAAGC,wBAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7C,QAAAC,sBAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAChC,QAAAC,wBAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;;AAElC,QAAA,MAAM,CAAC,yBAAyB,CAAC,CAAC,aAAa,GAAG,EAAE,CAAC;;QAErD,MAAM,CAAC,yBAAyB,CAAC,CAAC,UAAU,GAAG,MAAM,OAAO,CAAC;;AAE7D,QAAA,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;KAC1C;SAAM;;AAEL,QAAA,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;KAC1C;AACH,EAAC;AAED;AACO,MAAM,MAAM,GAAG,MAAK;;AAEzB,IAAA,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE;AACtC,QAAA,MAAM,uBAAuB,CAAA;KAC9B;;AAED,IAAA,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAC3C,EAAC;AAED;;;;AAIG;AACI,MAAM,MAAM,GAAG,CAAC,WAAwB,KAAKP,iBAAM,CAAC,MAAM,CAAC,WAAW;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/src/main/index.ts"],"sourcesContent":["import type { WebContents } from 'electron'\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport {promisify} from 'node:util';\nimport electron, { app } from 'electron';\nimport md5 from 'md5';\nimport { v5 as uuidv5 } from 'uuid';\nimport lodash from 'lodash';\nimport * as remote from '@electron/remote/main'\nimport * as ipc from '@lynker-desktop/electron-ipc/main'\nimport * as logs from '@lynker-desktop/electron-logs/main'\nimport * as tabsBrowser from '@lynker-desktop/electron-tabs-browser/main'\nimport * as windowManager from '@lynker-desktop/electron-window-manager/main'\nimport * as windowModal from '@lynker-desktop/electron-window-modal/main'\nimport * as windowTooltip from '@lynker-desktop/electron-window-tooltip/main'\nimport type { ServeOptions } from '../common';\n\nif (!remote.isInitialized()) {\n remote.initialize();\n}\n\nexport let isInitialized = false;\n\n\nexport interface SDK_TYPE {\n ipc: typeof ipc.mainIPC;\n windowManager: windowManager.WindowsManager,\n getPreload: () => string;\n}\n\n/**\n * 初始化\n * @param protocol 唤起协议 例:dgz\n * @param preload 预加载js 必须传\n * @param loadingViewUrl 窗口管理默认loading页面\n * @returns\n */\nexport const initialize = (options: { protocol: string, preload: string, loadingViewUrl?: string, errorViewUrl?: string, serveOptions?: ServeOptions }): SDK_TYPE => {\n const {protocol, preload, loadingViewUrl, serveOptions, errorViewUrl} = options;\n if (isInitialized) {\n // @ts-ignore\n return global['__GLBOAL_ELECTRON_SDK__'];\n }\n isInitialized = true;\n ipc.initialize();\n logs.initialize();\n tabsBrowser.initialize(preload);\n const wm = windowManager.initialize(preload, loadingViewUrl, errorViewUrl);\n windowModal.initialize(preload);\n windowTooltip.initialize(preload);\n if (protocol) {\n registerProtocol(protocol);\n }\n if (serveOptions && serveOptions.length) {\n serve(serveOptions);\n }\n class SDK {\n static ipc = ipc.mainIPC;\n static windowManager = wm;\n static getPreload = () => preload;\n }\n // @ts-ignore\n global['__GLBOAL_ELECTRON_SDK__'] = SDK;\n return SDK;\n}\n\n/** 后续再优化 */\nexport const getSDK = (): SDK_TYPE => {\n // @ts-ignore\n if (!global['__GLBOAL_ELECTRON_SDK__']) {\n throw '请在ready前先调用initialize'\n }\n // @ts-ignore\n return global['__GLBOAL_ELECTRON_SDK__'];\n}\n\n/**\n * 注册唤起\n */\nexport const registerProtocol = (() => {\n let isRegister = false;\n let launchOptions = ``;\n return (protocol: string) => {\n if (isRegister) {\n return;\n }\n isRegister = true;\n if (process.defaultApp) {\n if (process.argv.length >= 2) {\n app.setAsDefaultProtocolClient(protocol, process.execPath, [path.resolve(lodash.get(process, `argv[1]`, ''))]);\n }\n } else {\n app.setAsDefaultProtocolClient(protocol);\n }\n const handleUrl = (url: string) => {\n launchOptions = `${url}`;\n ipc.mainIPC.invokeAllRenderer('__GLOBAL_CHANGE_LAUNCH_OPTIONS__', url)\n };\n\n function handleArgv(argv: string[]) {\n const prefix = `${protocol}:`;\n const offset = app?.isPackaged ? 1 : 2;\n const url = argv.find((arg, i) => i >= offset && arg.startsWith(prefix));\n if (url) handleUrl(url);\n }\n\n handleArgv(process.argv);\n\n app.on('second-instance', (event, argv) => {\n console.info(event)\n if (process.platform === 'win32') {\n // Windows\n handleArgv(argv);\n }\n });\n\n // macOS\n app.on('open-url', (event, urlStr) => {\n console.info(event)\n handleUrl(urlStr);\n });\n\n\n app.on(\"open-url\", (_event, url) => {\n handleUrl(url);\n });\n ipc.mainIPC.handleRenderer('__GLOBAL_GET_LAUNCH_OPTIONS__', async () => {\n return launchOptions;\n })\n ipc.mainIPC.handleRenderer('__GLOBAL_DEL_LAUNCH_OPTIONS__', async () => {\n launchOptions = ``;\n return launchOptions;\n })\n }\n})();\n\n/**\n * 注册协议\n * @param options\n * @returns\n */\nexport const serve = (options: ServeOptions) => {\n if (!options.length) {\n\t\tthrow new Error('请传入配置');\n\t}\n const stat = promisify(fs.stat);\n\n // See https://cs.chromium.org/chromium/src/net/base/net_error_list.h\n const FILE_NOT_FOUND = -6;\n\n const getPath: any = async (path_: string) => {\n try {\n const result = await stat(path_);\n\n if (result.isFile()) {\n return path_;\n }\n\n if (result.isDirectory()) {\n return getPath(path.join(path_, 'index.html'));\n }\n } catch (_) {}\n };\n\n const createHandler = (item: any) => {\n return async (request: any, callback: any) => {\n const indexPath = path.join(item.directory, 'index.html');\n const filePath = path.join(item.directory, decodeURIComponent(new URL(request.url).pathname));\n const resolvedPath = await getPath(filePath);\n const fileExtension = path.extname(filePath);\n\n if (resolvedPath || !fileExtension || fileExtension === '.html' || fileExtension === '.asar') {\n callback({\n path: resolvedPath || indexPath\n });\n } else {\n callback({error: FILE_NOT_FOUND});\n }\n }\n };\n\toptions = options.map((item) => {\n\t\treturn {\n\t\t\t...item,\n\t\t\tisCorsEnabled: !!item?.isCorsEnabled,\n\t\t\tscheme: item?.scheme || 'app',\n\t\t\tdirectory: path.resolve(electron.app.getAppPath(), item.directory),\n\t\t}\n\t})\n\telectron.protocol.registerSchemesAsPrivileged(options.map((item) => {\n\t\treturn {\n\t\t\tscheme: item.scheme,\n\t\t\tprivileges: {\n bypassCSP: true,\n\t\t\t\tstandard: true,\n\t\t\t\tsecure: true,\n\t\t\t\tallowServiceWorkers: true,\n\t\t\t\tsupportFetchAPI: true,\n\t\t\t\tcorsEnabled: item.isCorsEnabled || false,\n stream: true,\n\t\t\t}\n\t\t}\n\t}));\n\treturn new Promise((resolve, reject) => {\n\t\ttry {\n\t\t\telectron.app.on('ready', () => {\n\t\t\t\toptions.forEach((item) => {\n\t\t\t\t\tconst handler = createHandler(item);\n\t\t\t\t\tconst session = item.partition ? electron.session.fromPartition(item.partition) : electron.session.defaultSession;\n\t\t\t\t\tsession.protocol.registerFileProtocol(item.scheme, handler);\n\t\t\t\t})\n\t\t\t\tresolve(true)\n\t\t\t});\n\t\t} catch (error) {\n\t\t\treject(error)\n\t\t}\n\t})\n}\n\n/**\n * @electron/remote/main enable方法\n * @param webContents\n * @returns\n */\nexport const enable = (webContents: WebContents) => remote.enable(webContents);\n\nexport function getRandomUUID(key: string = `${Date.now()}`): string {\n let webcrypto!: Crypto;\n let randomValue = Math?.random()?.toString()?.replace('0.', '');\n try {\n if (!webcrypto && !!window && window?.crypto) {\n webcrypto = window.crypto;\n }\n } catch (error) {console.log}\n try {\n const ar = webcrypto.getRandomValues(new Uint8Array(12));\n randomValue = `${md5(ar)}` || randomValue;\n } catch (error) {}\n const uuid = uuidv5(\n `${JSON.stringify(key)}_${Date.now()}_${randomValue}`,\n uuidv5.URL,\n );\n return uuid;\n}\n\n/**\n * 获取定制Session\n */\nexport const getCustomSession = windowManager.getCustomSession;\n"],"names":["remote","isInitialized","ipc","logs","tabsBrowser","windowManager","windowModal","windowTooltip","app","promisify","uuid","uuidv5"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,IAAI,CAACA,iBAAM,CAAC,aAAa,EAAE,EAAE;IAC3BA,iBAAM,CAAC,UAAU,EAAE,CAAC;AACtB,CAAC;AAEUC,qBAAa,GAAG,MAAM;AASjC;;;;;;AAMG;AACU,MAAA,UAAU,GAAG,CAAC,OAA2H,KAAc;AAClK,IAAA,MAAM,EAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAC,GAAG,OAAO,CAAC;IAChF,IAAIA,qBAAa,EAAE;;AAEjB,QAAA,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;KAC1C;IACDA,qBAAa,GAAG,IAAI,CAAC;IACrBC,cAAG,CAAC,UAAU,EAAE,CAAC;IACjBC,eAAI,CAAC,UAAU,EAAE,CAAC;AAClB,IAAAC,sBAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAChC,IAAA,MAAM,EAAE,GAAGC,wBAAa,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;AAC3E,IAAAC,sBAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAChC,IAAAC,wBAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,QAAQ,EAAE;QACZ,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KAC5B;AACD,IAAA,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,EAAE;QACvC,KAAK,CAAC,YAAY,CAAC,CAAC;KACrB;AACD,IAAA,MAAM,GAAG,CAAA;;AACA,IAAA,GAAA,CAAA,GAAG,GAAGL,cAAG,CAAC,OAAO,CAAC;IAClB,GAAa,CAAA,aAAA,GAAG,EAAE,CAAC;AACnB,IAAA,GAAA,CAAA,UAAU,GAAI,MAAM,OAAO,CAAC;;AAGrC,IAAA,MAAM,CAAC,yBAAyB,CAAC,GAAG,GAAG,CAAC;AACxC,IAAA,OAAO,GAAG,CAAC;AACb,EAAC;AAED;AACO,MAAM,MAAM,GAAG,MAAe;;AAEnC,IAAA,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE;AACtC,QAAA,MAAM,uBAAuB,CAAA;KAC9B;;AAED,IAAA,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAC3C,EAAC;AAED;;AAEG;AACU,MAAA,gBAAgB,GAAG,CAAC,MAAK;IACpC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,aAAa,GAAG,CAAA,CAAE,CAAC;IACvB,OAAO,CAAC,QAAgB,KAAI;QAC1B,IAAI,UAAU,EAAE;YACd,OAAO;SACR;QACD,UAAU,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;gBAC5BM,YAAG,CAAC,0BAA0B,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA,OAAA,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAChH;SACF;aAAM;AACL,YAAAA,YAAG,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;SAC1C;AACD,QAAA,MAAM,SAAS,GAAG,CAAC,GAAW,KAAI;AAChC,YAAA,aAAa,GAAG,CAAA,EAAG,GAAG,CAAA,CAAE,CAAC;YACzBN,cAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAA;AACxE,SAAC,CAAC;QAEF,SAAS,UAAU,CAAC,IAAc,EAAA;AAChC,YAAA,MAAM,MAAM,GAAG,CAAG,EAAA,QAAQ,GAAG,CAAC;AAC9B,YAAA,MAAM,MAAM,GAAGM,YAAG,EAAE,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACzE,YAAA,IAAI,GAAG;gBAAE,SAAS,CAAC,GAAG,CAAC,CAAC;SACzB;AAED,QAAA,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEzBA,YAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,IAAI,KAAI;AACxC,YAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACnB,YAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;;gBAEhC,UAAU,CAAC,IAAI,CAAC,CAAC;aAClB;AACH,SAAC,CAAC,CAAC;;QAGHA,YAAG,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAI;AACnC,YAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACnB,SAAS,CAAC,MAAM,CAAC,CAAC;AACpB,SAAC,CAAC,CAAC;QAGHA,YAAG,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAI;YACjC,SAAS,CAAC,GAAG,CAAC,CAAC;AACjB,SAAC,CAAC,CAAC;QACHN,cAAG,CAAC,OAAO,CAAC,cAAc,CAAC,+BAA+B,EAAE,YAAW;AACrE,YAAA,OAAO,aAAa,CAAC;AACvB,SAAC,CAAC,CAAA;QACFA,cAAG,CAAC,OAAO,CAAC,cAAc,CAAC,+BAA+B,EAAE,YAAW;YACrE,aAAa,GAAG,EAAE,CAAC;AACnB,YAAA,OAAO,aAAa,CAAC;AACvB,SAAC,CAAC,CAAA;AACJ,KAAC,CAAA;AACH,CAAC,IAAI;AAEL;;;;AAIG;AACU,MAAA,KAAK,GAAG,CAAC,OAAqB,KAAI;AAC7C,IAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACrB,QAAA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;KACzB;IACA,MAAM,IAAI,GAAGO,mBAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;;AAGhC,IAAA,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC;AAE1B,IAAA,MAAM,OAAO,GAAQ,OAAO,KAAa,KAAI;AAC3C,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;AAEjC,YAAA,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE;AACnB,gBAAA,OAAO,KAAK,CAAC;aACd;AAED,YAAA,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE;gBACxB,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;aAChD;SACF;AAAC,QAAA,OAAO,CAAC,EAAE,GAAE;AAChB,KAAC,CAAC;AAEF,IAAA,MAAM,aAAa,GAAG,CAAC,IAAS,KAAI;AAClC,QAAA,OAAO,OAAO,OAAY,EAAE,QAAa,KAAI;AAC3C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9F,YAAA,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE7C,YAAA,IAAI,YAAY,IAAI,CAAC,aAAa,IAAI,aAAa,KAAK,OAAO,IAAI,aAAa,KAAK,OAAO,EAAE;AAC5F,gBAAA,QAAQ,CAAC;oBACP,IAAI,EAAE,YAAY,IAAI,SAAS;AAChC,iBAAA,CAAC,CAAC;aACJ;iBAAM;AACL,gBAAA,QAAQ,CAAC,EAAC,KAAK,EAAE,cAAc,EAAC,CAAC,CAAC;aACnC;AACH,SAAC,CAAA;AACH,KAAC,CAAC;IACH,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;QAC9B,OAAO;AACN,YAAA,GAAG,IAAI;AACP,YAAA,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa;AACpC,YAAA,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK;AAC7B,YAAA,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC;SAClE,CAAA;AACF,KAAC,CAAC,CAAA;AACF,IAAA,QAAQ,CAAC,QAAQ,CAAC,2BAA2B,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;QAClE,OAAO;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,YAAA,UAAU,EAAE;AACP,gBAAA,SAAS,EAAE,IAAI;AACnB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,mBAAmB,EAAE,IAAI;AACzB,gBAAA,eAAe,EAAE,IAAI;AACrB,gBAAA,WAAW,EAAE,IAAI,CAAC,aAAa,IAAI,KAAK;AACpC,gBAAA,MAAM,EAAE,IAAI;AAChB,aAAA;SACD,CAAA;KACD,CAAC,CAAC,CAAC;IACJ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACtC,QAAA,IAAI;YACH,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAK;AAC7B,gBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACxB,oBAAA,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;oBACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC;oBAClH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC7D,iBAAC,CAAC,CAAA;gBACF,OAAO,CAAC,IAAI,CAAC,CAAA;AACd,aAAC,CAAC,CAAC;SACH;QAAC,OAAO,KAAK,EAAE;YACf,MAAM,CAAC,KAAK,CAAC,CAAA;SACb;AACF,KAAC,CAAC,CAAA;AACH,EAAC;AAED;;;;AAIG;AACI,MAAM,MAAM,GAAG,CAAC,WAAwB,KAAKT,iBAAM,CAAC,MAAM,CAAC,WAAW,EAAE;AAEzE,SAAU,aAAa,CAAC,GAAA,GAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAE,CAAA,EAAA;AACzD,IAAA,IAAI,SAAkB,CAAC;AACvB,IAAA,IAAI,WAAW,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAChE,IAAA,IAAI;QACF,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,EAAE,MAAM,EAAE;AAC5C,YAAA,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;SAC3B;KACF;IAAC,OAAO,KAAK,EAAE;KAAa;AAC7B,IAAA,IAAI;AACF,QAAA,MAAM,EAAE,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QACzD,WAAW,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA,CAAE,IAAI,WAAW,CAAC;KAC3C;AAAC,IAAA,OAAO,KAAK,EAAE,GAAE;IAClB,MAAMU,MAAI,GAAGC,OAAM,CACjB,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,EACrDA,OAAM,CAAC,GAAG,CACX,CAAC;AACF,IAAA,OAAOD,MAAI,CAAC;AACd,CAAC;AAED;;AAEG;AACU,MAAA,gBAAgB,GAAGL,wBAAa,CAAC;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lynker-desktop/electron-sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5-alpha.0",
|
|
4
4
|
"description": "electron-sdk",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"electron",
|
|
@@ -15,21 +15,24 @@
|
|
|
15
15
|
".": {
|
|
16
16
|
"node": {
|
|
17
17
|
"require": "./index.js",
|
|
18
|
-
"import": "./
|
|
18
|
+
"import": "./index.js"
|
|
19
19
|
},
|
|
20
|
-
"default": "./
|
|
20
|
+
"default": "./index.js"
|
|
21
21
|
},
|
|
22
22
|
"./main": {
|
|
23
23
|
"require": "./main/index.js",
|
|
24
|
-
"import": "./
|
|
24
|
+
"import": "./main/index.js",
|
|
25
|
+
"default": "./main/index.js"
|
|
25
26
|
},
|
|
26
27
|
"./renderer": {
|
|
27
28
|
"require": "./renderer/index.js",
|
|
28
|
-
"import": "./
|
|
29
|
+
"import": "./renderer/index.js",
|
|
30
|
+
"default": "./renderer/index.js"
|
|
29
31
|
},
|
|
30
32
|
"./preload": {
|
|
31
33
|
"require": "./preload/index.js",
|
|
32
|
-
"import": "./
|
|
34
|
+
"import": "./preload/index.js",
|
|
35
|
+
"default": "./preload/index.js"
|
|
33
36
|
}
|
|
34
37
|
},
|
|
35
38
|
"author": "",
|
|
@@ -46,19 +49,17 @@
|
|
|
46
49
|
"dev:renderer": "cd example/renderer && npm run dev",
|
|
47
50
|
"dev:main": "npm run build && electron --inspect=8888 example/main.js"
|
|
48
51
|
},
|
|
49
|
-
"engines": {
|
|
50
|
-
"node": ">=18.18.0",
|
|
51
|
-
"pnpm": "9.6.0"
|
|
52
|
-
},
|
|
52
|
+
"engines": {},
|
|
53
53
|
"packageManager": "pnpm@9.6.0",
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"@electron/remote": "^2.1.2",
|
|
56
|
-
"@lynker-desktop/electron-ipc": "0.0.4-alpha.
|
|
57
|
-
"@lynker-desktop/electron-logs": "0.0.4-alpha.
|
|
58
|
-
"@lynker-desktop/electron-tabs-browser": "0.0.4-alpha.
|
|
59
|
-
"@lynker-desktop/electron-window-manager": "0.0.
|
|
60
|
-
"@lynker-desktop/electron-window-modal": "0.0.
|
|
61
|
-
"@lynker-desktop/electron-window-tooltip": "0.0.
|
|
56
|
+
"@lynker-desktop/electron-ipc": "0.0.4-alpha.75",
|
|
57
|
+
"@lynker-desktop/electron-logs": "0.0.4-alpha.76",
|
|
58
|
+
"@lynker-desktop/electron-tabs-browser": "0.0.4-alpha.75",
|
|
59
|
+
"@lynker-desktop/electron-window-manager": "0.0.5-alpha.0",
|
|
60
|
+
"@lynker-desktop/electron-window-modal": "0.0.5-alpha.0",
|
|
61
|
+
"@lynker-desktop/electron-window-tooltip": "0.0.5-alpha.0",
|
|
62
|
+
"events": "^3.3.0",
|
|
62
63
|
"lodash": "^4.17.21",
|
|
63
64
|
"md5": "^2.3.0",
|
|
64
65
|
"uuid": "^10.0.0"
|
|
@@ -90,5 +91,5 @@
|
|
|
90
91
|
"tslib": "^2.6.3",
|
|
91
92
|
"typescript": "^5.5.3"
|
|
92
93
|
},
|
|
93
|
-
"gitHead": "
|
|
94
|
+
"gitHead": "cf9e79c19fadf502a33e42ee77bd939912e5579d"
|
|
94
95
|
}
|
package/preload/index.js
CHANGED
package/preload/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/src/preload/index.ts"],"sourcesContent":["import { contextBridge } from 'electron';\nimport remote from '@electron/remote/renderer';\nimport '@lynker-desktop/electron-ipc/preload';\nimport '@lynker-desktop/electron-logs/preload';\nimport '@lynker-desktop/electron-tabs-browser/preload';\nimport '@lynker-desktop/electron-window-manager/preload';\nimport '@lynker-desktop/electron-window-modal/preload';\nimport '@lynker-desktop/electron-window-tooltip/preload';\n\n// @ts-ignore\nif (window.__ELECTRON_SDK__) {\n // eslint-disable-next-line no-console\n console.log('electron-sdk Electron preload has already been run');\n} else {\n try {\n const preload = {\n remote: remote,\n }\n // @ts-ignore\n window.__ELECTRON_SDK__ = preload;\n if (contextBridge) {\n try {\n // This will fail if contextIsolation is not enabled\n contextBridge.exposeInMainWorld('__ELECTRON_SDK__', preload);\n } catch (error) {\n // console.error(error)\n }\n\n }\n }\n catch (e) {\n console.error(e)\n }\n}\n"],"names":["contextBridge"],"mappings":";;;;;;;;;AASA;AACA,IAAI,MAAM,CAAC,gBAAgB,EAAE;;AAE3B,IAAA,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;AACpE,CAAC;KAAM;AACL,IAAA,IAAI;AACF,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,MAAM,EAAE,MAAM;SACf,CAAA;;AAED,QAAA,MAAM,CAAC,gBAAgB,GAAG,OAAO,CAAC;QAClC,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/src/preload/index.ts"],"sourcesContent":["import { contextBridge, ipcRenderer } from 'electron';\nimport remote from '@electron/remote/renderer';\nimport '@lynker-desktop/electron-ipc/preload';\nimport '@lynker-desktop/electron-logs/preload';\nimport '@lynker-desktop/electron-tabs-browser/preload';\nimport '@lynker-desktop/electron-window-manager/preload';\nimport '@lynker-desktop/electron-window-modal/preload';\nimport '@lynker-desktop/electron-window-tooltip/preload';\n\n// @ts-ignore\nif (window.__ELECTRON_SDK__) {\n // eslint-disable-next-line no-console\n console.log('electron-sdk Electron preload has already been run');\n} else {\n try {\n const preload = {\n ipcRenderer: ipcRenderer,\n remote: remote,\n }\n // @ts-ignore\n window.__ELECTRON_SDK__ = preload;\n if (contextBridge) {\n try {\n // This will fail if contextIsolation is not enabled\n contextBridge.exposeInMainWorld('__ELECTRON_SDK__', preload);\n } catch (error) {\n // console.error(error)\n }\n\n }\n }\n catch (e) {\n console.error(e)\n }\n}\n"],"names":["ipcRenderer","contextBridge"],"mappings":";;;;;;;;;AASA;AACA,IAAI,MAAM,CAAC,gBAAgB,EAAE;;AAE3B,IAAA,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;AACpE,CAAC;KAAM;AACL,IAAA,IAAI;AACF,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,WAAW,EAAEA,oBAAW;AACxB,YAAA,MAAM,EAAE,MAAM;SACf,CAAA;;AAED,QAAA,MAAM,CAAC,gBAAgB,GAAG,OAAO,CAAC;QAClC,IAAIC,sBAAa,EAAE;AACjB,YAAA,IAAI;;AAEF,gBAAAA,sBAAa,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;aAC9D;YAAC,OAAO,KAAK,EAAE;;aAEf;SAEF;KACF;IACD,OAAO,CAAC,EAAE;AACR,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACjB;AACH;;"}
|
package/renderer/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type RemoteType from '@electron/remote';
|
|
2
|
+
import EventEmitter from 'events';
|
|
2
3
|
import ipc from '@lynker-desktop/electron-ipc/renderer';
|
|
3
4
|
import tabsBrowser from '@lynker-desktop/electron-tabs-browser/renderer';
|
|
4
5
|
import windowManager from '@lynker-desktop/electron-window-manager/renderer';
|
|
5
6
|
import windowModal from '@lynker-desktop/electron-window-modal/renderer';
|
|
6
7
|
import windowTooltip from '@lynker-desktop/electron-window-tooltip/renderer';
|
|
7
|
-
declare class SDK {
|
|
8
|
+
declare class SDK extends EventEmitter {
|
|
8
9
|
remote: typeof RemoteType;
|
|
9
10
|
ipc: typeof ipc.RendererIPC;
|
|
10
11
|
log: (level: import("@lynker-desktop/electron-logs/common").Level, ...logs: any[]) => void;
|
|
@@ -13,6 +14,22 @@ declare class SDK {
|
|
|
13
14
|
windowModal: typeof windowModal;
|
|
14
15
|
windowTooltip: typeof windowTooltip;
|
|
15
16
|
tabsBrowser: typeof tabsBrowser;
|
|
17
|
+
constructor();
|
|
18
|
+
/**
|
|
19
|
+
* 获取启动/唤起参数
|
|
20
|
+
*/
|
|
21
|
+
getLaunchOptions: () => Promise<any>;
|
|
22
|
+
/**
|
|
23
|
+
* 清除启动/唤起参数
|
|
24
|
+
* @returns
|
|
25
|
+
*/
|
|
26
|
+
delLaunchOptions: () => Promise<any>;
|
|
27
|
+
/**
|
|
28
|
+
* 监听桌面端唤起
|
|
29
|
+
* @param callback
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
onLaunchOptions: (callback: (options: string) => void) => Promise<() => this>;
|
|
16
33
|
/**
|
|
17
34
|
* 生成随机uuid
|
|
18
35
|
* @param key
|
|
@@ -20,6 +37,7 @@ declare class SDK {
|
|
|
20
37
|
*/
|
|
21
38
|
getRandomUUID(key?: string): string;
|
|
22
39
|
}
|
|
23
|
-
|
|
24
|
-
|
|
40
|
+
/** 临时写法,后期用rollup生成umd包 */
|
|
41
|
+
declare const core: SDK;
|
|
42
|
+
export default core;
|
|
25
43
|
//# sourceMappingURL=index.d.ts.map
|
package/renderer/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAA;AAC9C,OAAO,YAAY,MAAM,QAAQ,CAAC;AAGlC,OAAO,GAAG,MAAM,uCAAuC,CAAA;AAEvD,OAAO,WAAW,MAAM,gDAAgD,CAAA;AACxE,OAAO,aAAa,MAAM,kDAAkD,CAAA;AAC5E,OAAO,WAAW,MAAM,gDAAgD,CAAA;AACxE,OAAO,aAAa,MAAM,kDAAkD,CAAA;AAY5E,cAAM,GAAI,SAAQ,YAAY;IAC5B,MAAM,EAAkB,OAAO,UAAU,CAAC;IAC1C,GAAG,yBAAmB;IACtB,GAAG,wFAAY;IACf,UAAU,wBAAmB;IAC7B,aAAa,uBAAiB;IAC9B,WAAW,qBAAe;IAC1B,aAAa,uBAAiB;IAC9B,WAAW,qBAAe;;IAe1B;;OAEG;IACH,gBAAgB,qBAGf;IAED;;;OAGG;IACH,gBAAgB,qBAGf;IAED;;;;OAIG;IACH,eAAe,aAAoB,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,yBAM3D;IAED;;;;OAIG;IACH,aAAa,CAAC,GAAG,GAAE,MAAwB,GAAG,MAAM;CAkBrD;AACD,2BAA2B;AAE3B,QAAA,MAAM,IAAI,KAA8C,CAAC;AACzD,eAAe,IAAI,CAAC"}
|
package/renderer/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const EventEmitter = require('events');
|
|
1
2
|
const md5 = require('md5');
|
|
2
3
|
const uuid = require('uuid');
|
|
3
4
|
const ipc = require('@lynker-desktop/electron-ipc/renderer');
|
|
@@ -13,12 +14,13 @@ function getRemote() {
|
|
|
13
14
|
return window?.__ELECTRON_SDK__?.remote || window?.require('@electron/remote');
|
|
14
15
|
}
|
|
15
16
|
catch (error) {
|
|
16
|
-
console.error('
|
|
17
|
+
console.error('当前非桌面端环境, 请在桌面端中调用');
|
|
17
18
|
return {};
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
|
-
class SDK {
|
|
21
|
+
class SDK extends EventEmitter {
|
|
21
22
|
constructor() {
|
|
23
|
+
super();
|
|
22
24
|
this.remote = getRemote();
|
|
23
25
|
this.ipc = ipc.RendererIPC;
|
|
24
26
|
this.log = logs.log;
|
|
@@ -27,6 +29,43 @@ class SDK {
|
|
|
27
29
|
this.windowModal = windowModal;
|
|
28
30
|
this.windowTooltip = windowTooltip;
|
|
29
31
|
this.tabsBrowser = tabsBrowser;
|
|
32
|
+
/**
|
|
33
|
+
* 获取启动/唤起参数
|
|
34
|
+
*/
|
|
35
|
+
this.getLaunchOptions = async () => {
|
|
36
|
+
const options = await this.ipc.invokeMain(`__GLOBAL_GET_LAUNCH_OPTIONS__`);
|
|
37
|
+
return options;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* 清除启动/唤起参数
|
|
41
|
+
* @returns
|
|
42
|
+
*/
|
|
43
|
+
this.delLaunchOptions = async () => {
|
|
44
|
+
const options = await this.ipc.invokeMain(`__GLOBAL_DEL_LAUNCH_OPTIONS__`);
|
|
45
|
+
return options;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* 监听桌面端唤起
|
|
49
|
+
* @param callback
|
|
50
|
+
* @returns
|
|
51
|
+
*/
|
|
52
|
+
this.onLaunchOptions = async (callback) => {
|
|
53
|
+
const onCallback = (data) => {
|
|
54
|
+
callback(data);
|
|
55
|
+
};
|
|
56
|
+
this.on('launch-options-change', onCallback);
|
|
57
|
+
return () => this.off('launch-options-change', onCallback);
|
|
58
|
+
};
|
|
59
|
+
try {
|
|
60
|
+
/** 监听桌面端唤起 */
|
|
61
|
+
this.ipc.handleRenderer('__GLOBAL_CHANGE_LAUNCH_OPTIONS__', async (data) => {
|
|
62
|
+
this.emit('launch-options-change', `${data}`);
|
|
63
|
+
return 'OK';
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
console.error('当前非桌面端环境, 请在桌面端中调用');
|
|
68
|
+
}
|
|
30
69
|
}
|
|
31
70
|
/**
|
|
32
71
|
* 生成随机uuid
|
|
@@ -52,7 +91,9 @@ class SDK {
|
|
|
52
91
|
return uuid$1;
|
|
53
92
|
}
|
|
54
93
|
}
|
|
55
|
-
|
|
94
|
+
/** 临时写法,后期用rollup生成umd包 */
|
|
95
|
+
// @ts-ignore
|
|
96
|
+
const core = window['__ELECTRON_SDK_CORE__'] = new SDK();
|
|
56
97
|
|
|
57
|
-
module.exports =
|
|
98
|
+
module.exports = core;
|
|
58
99
|
//# sourceMappingURL=index.js.map
|
package/renderer/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/src/renderer/index.ts"],"sourcesContent":["import type RemoteType from '@electron/remote'\
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/src/renderer/index.ts"],"sourcesContent":["import type RemoteType from '@electron/remote'\nimport EventEmitter from 'events';\nimport md5 from 'md5';\nimport { v5 as uuidv5 } from 'uuid';\nimport ipc from '@lynker-desktop/electron-ipc/renderer'\nimport logs from '@lynker-desktop/electron-logs/renderer'\nimport tabsBrowser from '@lynker-desktop/electron-tabs-browser/renderer'\nimport windowManager from '@lynker-desktop/electron-window-manager/renderer'\nimport windowModal from '@lynker-desktop/electron-window-modal/renderer'\nimport windowTooltip from '@lynker-desktop/electron-window-tooltip/renderer'\n\nfunction getRemote() {\n try {\n // @ts-ignore\n return window?.__ELECTRON_SDK__?.remote || window?.require('@electron/remote')\n } catch (error) {\n console.error('当前非桌面端环境, 请在桌面端中调用');\n return {} as typeof RemoteType;\n }\n}\n\nclass SDK extends EventEmitter {\n remote = getRemote() as typeof RemoteType;\n ipc = ipc.RendererIPC;\n log = logs.log;\n getLogPath = logs.getLogPath;\n windowManager = windowManager;\n windowModal = windowModal;\n windowTooltip = windowTooltip;\n tabsBrowser = tabsBrowser;\n\n constructor() {\n super();\n try {\n /** 监听桌面端唤起 */\n this.ipc.handleRenderer('__GLOBAL_CHANGE_LAUNCH_OPTIONS__', async (data) => {\n this.emit('launch-options-change', `${data}`);\n return 'OK';\n });\n } catch (error) {\n console.error('当前非桌面端环境, 请在桌面端中调用');\n }\n }\n\n /**\n * 获取启动/唤起参数\n */\n getLaunchOptions = async () => {\n const options = await this.ipc.invokeMain(`__GLOBAL_GET_LAUNCH_OPTIONS__`);\n return options;\n }\n\n /**\n * 清除启动/唤起参数\n * @returns\n */\n delLaunchOptions = async () => {\n const options = await this.ipc.invokeMain(`__GLOBAL_DEL_LAUNCH_OPTIONS__`);\n return options;\n }\n\n /**\n * 监听桌面端唤起\n * @param callback\n * @returns\n */\n onLaunchOptions = async (callback: (options: string) => void) => {\n const onCallback = (data: string) => {\n callback(data);\n }\n this.on('launch-options-change', onCallback);\n return () => this.off('launch-options-change', onCallback);\n }\n\n /**\n * 生成随机uuid\n * @param key\n * @returns\n */\n getRandomUUID(key: string = `${Date.now()}`): string {\n let webcrypto!: Crypto;\n let randomValue = Math?.random()?.toString()?.replace('0.', '');\n try {\n if (!webcrypto && !!window && window?.crypto) {\n webcrypto = window.crypto;\n }\n } catch (error) {console.log}\n try {\n const ar = webcrypto.getRandomValues(new Uint8Array(12));\n randomValue = `${md5(ar)}` || randomValue;\n } catch (error) {}\n const uuid = uuidv5(\n `${JSON.stringify(key)}_${Date.now()}_${randomValue}`,\n uuidv5.URL,\n );\n return uuid;\n }\n}\n/** 临时写法,后期用rollup生成umd包 */\n// @ts-ignore\nconst core = window['__ELECTRON_SDK_CORE__'] = new SDK();\nexport default core;\n"],"names":["uuid","uuidv5"],"mappings":"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"}
|