@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 CHANGED
@@ -3,4 +3,10 @@ declare global {
3
3
  __ELECTRON_SDK__?: any;
4
4
  }
5
5
  }
6
+ export type ServeOptions = Array<{
7
+ directory: string;
8
+ scheme: string;
9
+ isCorsEnabled?: boolean;
10
+ partition?: string;
11
+ }>;
6
12
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -3,4 +3,10 @@ declare global {
3
3
  __ELECTRON_SDK__?: any;
4
4
  }
5
5
  }
6
+ export type ServeOptions = Array<{
7
+ directory: string;
8
+ scheme: string;
9
+ isCorsEnabled?: boolean;
10
+ partition?: string;
11
+ }>;
6
12
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -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 { WebContents } from 'electron';
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: (preload: string) => SDK_TYPE;
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: () => any;
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/main/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,aAAa,MAAM,8CAA8C,CAAA;AAG7E,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAMtC,eAAO,IAAI,aAAa,SAAQ,CAAC;AAEjC,UAAU,QAAQ;IAChB,aAAa,EAAE,aAAa,CAAC,cAAc,CAAC;IAC5C,UAAU,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,YAAa,MAAM,KAAG,QAqB5C,CAAA;AAED,YAAY;AACZ,eAAO,MAAM,MAAM,WAOlB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,gBAAiB,WAAW,SAA+B,CAAC"}
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 = (preload) => {
19
- if (!isInitialized) {
20
- isInitialized = true;
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
- else {
37
- // @ts-ignore
38
- return global['__GLBOAL_ELECTRON_SDK__'];
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
@@ -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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"}
@@ -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
@@ -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"}
@@ -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
- declare const _default: SDK;
24
- export default _default;
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;AAI9C,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,GAAG;IACP,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;IAC1B;;;;OAIG;IACH,aAAa,CAAC,GAAG,GAAE,MAAwB,GAAG,MAAM;CAkBrD;;AAED,wBAAyB"}
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"}
@@ -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('getIpc error: ', 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
- const index = new SDK();
94
+ /** 临时写法,后期用rollup生成umd包 */
95
+ // @ts-ignore
96
+ const core = window['__ELECTRON_SDK_CORE__'] = new SDK();
56
97
 
57
- export { index as default };
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'\n\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('getIpc error: ', error)\n return {} as typeof RemoteType;\n }\n}\n\nclass SDK {\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 * 生成随机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\nexport default new SDK();\n"],"names":["uuidv5"],"mappings":";;;;;;;;;AAWA,SAAS,SAAS,GAAA;AAChB,IAAA,IAAI;;AAEF,QAAA,OAAO,MAAM,EAAE,gBAAgB,EAAE,MAAM,IAAI,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;KAC/E;IAAC,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;AACtC,QAAA,OAAO,EAAwB,CAAC;KACjC;AACH,CAAC;AAED,MAAM,GAAG,CAAA;AAAT,IAAA,WAAA,GAAA;QACE,IAAM,CAAA,MAAA,GAAG,SAAS,EAAuB,CAAC;AAC1C,QAAA,IAAA,CAAA,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC;AACtB,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACf,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAC7B,IAAa,CAAA,aAAA,GAAG,aAAa,CAAC;QAC9B,IAAW,CAAA,WAAA,GAAG,WAAW,CAAC;QAC1B,IAAa,CAAA,aAAA,GAAG,aAAa,CAAC;QAC9B,IAAW,CAAA,WAAA,GAAG,WAAW,CAAC;KAwB3B;AAvBC;;;;AAIG;AACH,IAAA,aAAa,CAAC,GAAc,GAAA,CAAA,EAAG,IAAI,CAAC,GAAG,EAAE,CAAE,CAAA,EAAA;AACzC,QAAA,IAAI,SAAkB,CAAC;AACvB,QAAA,IAAI,WAAW,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAChE,QAAA,IAAI;YACF,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,EAAE,MAAM,EAAE;AAC5C,gBAAA,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;aAC3B;SACF;QAAC,OAAO,KAAK,EAAE;SAAa;AAC7B,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;YACzD,WAAW,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA,CAAE,IAAI,WAAW,CAAC;SAC3C;AAAC,QAAA,OAAO,KAAK,EAAE,GAAE;QAClB,MAAM,IAAI,GAAGA,EAAM,CACjB,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,EACrDA,EAAM,CAAC,GAAG,CACX,CAAC;AACF,QAAA,OAAO,IAAI,CAAC;KACb;AACF,CAAA;AAED,cAAe,IAAI,GAAG,EAAE;;;;"}
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 { WebContents } from 'electron';
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: (preload: string) => SDK_TYPE;
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: () => any;
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/main/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,aAAa,MAAM,8CAA8C,CAAA;AAG7E,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAMtC,eAAO,IAAI,aAAa,SAAQ,CAAC;AAEjC,UAAU,QAAQ;IAChB,aAAa,EAAE,aAAa,CAAC,cAAc,CAAC;IAC5C,UAAU,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,YAAa,MAAM,KAAG,QAqB5C,CAAA;AAED,YAAY;AACZ,eAAO,MAAM,MAAM,WAOlB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,gBAAiB,WAAW,SAA+B,CAAC"}
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 = (preload) => {
38
- if (!exports.isInitialized) {
39
- exports.isInitialized = true;
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
- else {
56
- // @ts-ignore
57
- return global['__GLBOAL_ELECTRON_SDK__'];
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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lynker-desktop/electron-sdk",
3
- "version": "0.0.4-alpha.8",
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": "./esm/main/index.js"
18
+ "import": "./index.js"
19
19
  },
20
- "default": "./esm/renderer/index.js"
20
+ "default": "./index.js"
21
21
  },
22
22
  "./main": {
23
23
  "require": "./main/index.js",
24
- "import": "./esm/main/index.js"
24
+ "import": "./main/index.js",
25
+ "default": "./main/index.js"
25
26
  },
26
27
  "./renderer": {
27
28
  "require": "./renderer/index.js",
28
- "import": "./esm/renderer/index.js"
29
+ "import": "./renderer/index.js",
30
+ "default": "./renderer/index.js"
29
31
  },
30
32
  "./preload": {
31
33
  "require": "./preload/index.js",
32
- "import": "./esm/preload/index.js"
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.8",
57
- "@lynker-desktop/electron-logs": "0.0.4-alpha.8",
58
- "@lynker-desktop/electron-tabs-browser": "0.0.4-alpha.8",
59
- "@lynker-desktop/electron-window-manager": "0.0.4-alpha.8",
60
- "@lynker-desktop/electron-window-modal": "0.0.4-alpha.8",
61
- "@lynker-desktop/electron-window-tooltip": "0.0.4-alpha.8",
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": "73411b2c5cf264ccfe50b96788992075aa6b6fcb"
94
+ "gitHead": "cf9e79c19fadf502a33e42ee77bd939912e5579d"
94
95
  }
package/preload/index.js CHANGED
@@ -15,6 +15,7 @@ if (window.__ELECTRON_SDK__) {
15
15
  else {
16
16
  try {
17
17
  const preload = {
18
+ ipcRenderer: electron.ipcRenderer,
18
19
  remote: remote,
19
20
  };
20
21
  // @ts-ignore
@@ -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,IAAIA,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;;"}
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;;"}
@@ -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
- declare const _default: SDK;
24
- export default _default;
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;AAI9C,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,GAAG;IACP,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;IAC1B;;;;OAIG;IACH,aAAa,CAAC,GAAG,GAAE,MAAwB,GAAG,MAAM;CAkBrD;;AAED,wBAAyB"}
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('getIpc error: ', 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
- const index = new SDK();
94
+ /** 临时写法,后期用rollup生成umd包 */
95
+ // @ts-ignore
96
+ const core = window['__ELECTRON_SDK_CORE__'] = new SDK();
56
97
 
57
- module.exports = index;
98
+ module.exports = core;
58
99
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/src/renderer/index.ts"],"sourcesContent":["import type RemoteType from '@electron/remote'\n\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('getIpc error: ', error)\n return {} as typeof RemoteType;\n }\n}\n\nclass SDK {\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 * 生成随机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\nexport default new SDK();\n"],"names":["uuid","uuidv5"],"mappings":";;;;;;;;;AAWA,SAAS,SAAS,GAAA;AAChB,IAAA,IAAI;;AAEF,QAAA,OAAO,MAAM,EAAE,gBAAgB,EAAE,MAAM,IAAI,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;KAC/E;IAAC,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;AACtC,QAAA,OAAO,EAAwB,CAAC;KACjC;AACH,CAAC;AAED,MAAM,GAAG,CAAA;AAAT,IAAA,WAAA,GAAA;QACE,IAAM,CAAA,MAAA,GAAG,SAAS,EAAuB,CAAC;AAC1C,QAAA,IAAA,CAAA,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC;AACtB,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACf,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAC7B,IAAa,CAAA,aAAA,GAAG,aAAa,CAAC;QAC9B,IAAW,CAAA,WAAA,GAAG,WAAW,CAAC;QAC1B,IAAa,CAAA,aAAA,GAAG,aAAa,CAAC;QAC9B,IAAW,CAAA,WAAA,GAAG,WAAW,CAAC;KAwB3B;AAvBC;;;;AAIG;AACH,IAAA,aAAa,CAAC,GAAc,GAAA,CAAA,EAAG,IAAI,CAAC,GAAG,EAAE,CAAE,CAAA,EAAA;AACzC,QAAA,IAAI,SAAkB,CAAC;AACvB,QAAA,IAAI,WAAW,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAChE,QAAA,IAAI;YACF,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,EAAE,MAAM,EAAE;AAC5C,gBAAA,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;aAC3B;SACF;QAAC,OAAO,KAAK,EAAE;SAAa;AAC7B,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;YACzD,WAAW,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA,CAAE,IAAI,WAAW,CAAC;SAC3C;AAAC,QAAA,OAAO,KAAK,EAAE,GAAE;QAClB,MAAMA,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,QAAA,OAAOD,MAAI,CAAC;KACb;AACF,CAAA;AAED,cAAe,IAAI,GAAG,EAAE;;;;"}
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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"}