@lynker-desktop/electron-sdk 0.0.4-alpha.3 → 0.0.4-alpha.30

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.
@@ -1,10 +1,41 @@
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
4
  export declare let isInitialized: boolean;
3
- interface SDK_TYPE {
5
+ export interface SDK_TYPE {
6
+ ipc: typeof ipc.mainIPC;
4
7
  windowManager: windowManager.WindowsManager;
8
+ getPreload: () => string;
5
9
  }
6
- export declare const initialize: (preload: string) => SDK_TYPE;
10
+ /**
11
+ * 初始化
12
+ * @param preload 预加载js 必须传
13
+ * @param loadingViewUrl 窗口管理默认loading页面
14
+ * @returns
15
+ */
16
+ export declare const initialize: (preload: string, loadingViewUrl?: string) => SDK_TYPE;
7
17
  /** 后续再优化 */
8
- export declare const getSDK: () => any;
9
- export {};
18
+ export declare const getSDK: () => SDK_TYPE;
19
+ /**
20
+ * 注册唤起
21
+ */
22
+ export declare const registerProtocol: () => (protocol: string) => void;
23
+ /**
24
+ * 注册协议
25
+ * @param options
26
+ * @returns
27
+ */
28
+ export declare const serve: (options: Array<{
29
+ directory: string;
30
+ scheme: string;
31
+ isCorsEnabled?: boolean;
32
+ partition?: string;
33
+ }>) => Promise<unknown>;
34
+ /**
35
+ * @electron/remote/main enable方法
36
+ * @param webContents
37
+ * @returns
38
+ */
39
+ export declare const enable: (webContents: WebContents) => void;
40
+ export declare function getRandomUUID(key?: string): string;
10
41
  //# 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;AAQ7E,eAAO,IAAI,aAAa,SAAQ,CAAC;AAEjC,UAAU,QAAQ;IAChB,aAAa,EAAE,aAAa,CAAC,cAAc,CAAA;CAC5C;AAKD,eAAO,MAAM,UAAU,YAAa,MAAM,KAAG,QAmB5C,CAAA;AACD,YAAY;AACZ,eAAO,MAAM,MAAM,WAOlB,CAAA"}
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;AAQ7E,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;;;;;GAKG;AACH,eAAO,MAAM,UAAU,YAAa,MAAM,mBAAmB,MAAM,KAAG,QAoBrE,CAAA;AAED,YAAY;AACZ,eAAO,MAAM,MAAM,QAAO,QAOzB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,mBAGT,MAAM,SAwBxB,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,KAAK,YAAa,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,qBA0ErH,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,gBAAiB,WAAW,SAA+B,CAAC;AAE/E,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAwB,GAAG,MAAM,CAiBnE"}
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';
@@ -10,26 +17,32 @@ if (!remote.isInitialized()) {
10
17
  remote.initialize();
11
18
  }
12
19
  let isInitialized = false;
13
- const initialize = (preload) => {
14
- if (!isInitialized) {
15
- isInitialized = true;
16
- // @ts-ignore
17
- global['__GLBOAL_ELECTRON_SDK__'] = {};
18
- ipc.initialize();
19
- logs.initialize();
20
- tabsBrowser.initialize(preload);
21
- const wm = windowManager.initialize(preload);
22
- windowModal.initialize(preload);
23
- windowTooltip.initialize(preload);
24
- // @ts-ignore
25
- global['__GLBOAL_ELECTRON_SDK__'].windowManager = wm;
20
+ /**
21
+ * 初始化
22
+ * @param preload 预加载js 必须传
23
+ * @param loadingViewUrl 窗口管理默认loading页面
24
+ * @returns
25
+ */
26
+ const initialize = (preload, loadingViewUrl) => {
27
+ if (isInitialized) {
26
28
  // @ts-ignore
27
29
  return global['__GLBOAL_ELECTRON_SDK__'];
28
30
  }
29
- else {
30
- // @ts-ignore
31
- return global['__GLBOAL_ELECTRON_SDK__'];
31
+ isInitialized = true;
32
+ ipc.initialize();
33
+ logs.initialize();
34
+ tabsBrowser.initialize(preload);
35
+ const wm = windowManager.initialize(preload, loadingViewUrl);
36
+ windowModal.initialize(preload);
37
+ windowTooltip.initialize(preload);
38
+ class SDK {
32
39
  }
40
+ SDK.ipc = ipc.mainIPC;
41
+ SDK.windowManager = wm;
42
+ SDK.getPreload = () => preload;
43
+ // @ts-ignore
44
+ global['__GLBOAL_ELECTRON_SDK__'] = SDK;
45
+ return SDK;
33
46
  };
34
47
  /** 后续再优化 */
35
48
  const getSDK = () => {
@@ -40,6 +53,139 @@ const getSDK = () => {
40
53
  // @ts-ignore
41
54
  return global['__GLBOAL_ELECTRON_SDK__'];
42
55
  };
56
+ /**
57
+ * 注册唤起
58
+ */
59
+ const registerProtocol = (() => {
60
+ let isRegister = false;
61
+ let launchOptions = ``;
62
+ return (protocol) => {
63
+ if (isRegister) {
64
+ return;
65
+ }
66
+ isRegister = true;
67
+ if (process.defaultApp) {
68
+ if (process.argv.length >= 2) {
69
+ app.setAsDefaultProtocolClient(protocol, process.execPath, [path.resolve(lodash.get(process, `argv[1]`, ''))]);
70
+ }
71
+ }
72
+ else {
73
+ app.setAsDefaultProtocolClient(protocol);
74
+ }
75
+ app.on("open-url", (_event, url) => {
76
+ launchOptions = `${url}`;
77
+ ipc.mainIPC.invokeAllRenderer('__GLOBAL_CHANGE_LAUNCH_OPTIONS__', launchOptions);
78
+ });
79
+ ipc.mainIPC.handleRenderer('__GLOBAL_GET_LAUNCH_OPTIONS__', async () => {
80
+ return launchOptions;
81
+ });
82
+ ipc.mainIPC.handleRenderer('__GLOBAL_DEL_LAUNCH_OPTIONS__', async () => {
83
+ launchOptions = ``;
84
+ return launchOptions;
85
+ });
86
+ };
87
+ });
88
+ /**
89
+ * 注册协议
90
+ * @param options
91
+ * @returns
92
+ */
93
+ const serve = (options) => {
94
+ if (!options.length) {
95
+ throw new Error('请传入配置');
96
+ }
97
+ const stat = promisify(fs.stat);
98
+ // See https://cs.chromium.org/chromium/src/net/base/net_error_list.h
99
+ const FILE_NOT_FOUND = -6;
100
+ const getPath = async (path_) => {
101
+ try {
102
+ const result = await stat(path_);
103
+ if (result.isFile()) {
104
+ return path_;
105
+ }
106
+ if (result.isDirectory()) {
107
+ return getPath(path.join(path_, 'index.html'));
108
+ }
109
+ }
110
+ catch (_) { }
111
+ };
112
+ const createHandler = (item) => {
113
+ return async (request, callback) => {
114
+ const indexPath = path.join(item.directory, 'index.html');
115
+ const filePath = path.join(item.directory, decodeURIComponent(new URL(request.url).pathname));
116
+ const resolvedPath = await getPath(filePath);
117
+ const fileExtension = path.extname(filePath);
118
+ if (resolvedPath || !fileExtension || fileExtension === '.html' || fileExtension === '.asar') {
119
+ callback({
120
+ path: resolvedPath || indexPath
121
+ });
122
+ }
123
+ else {
124
+ callback({ error: FILE_NOT_FOUND });
125
+ }
126
+ };
127
+ };
128
+ options = options.map((item) => {
129
+ return {
130
+ ...item,
131
+ isCorsEnabled: item.isCorsEnabled || false,
132
+ scheme: item.scheme || 'app',
133
+ directory: path.resolve(electron.app.getAppPath(), item.directory),
134
+ };
135
+ });
136
+ electron.protocol.registerSchemesAsPrivileged(options.map((item) => {
137
+ return {
138
+ scheme: item.scheme,
139
+ privileges: {
140
+ bypassCSP: true,
141
+ standard: true,
142
+ secure: true,
143
+ allowServiceWorkers: true,
144
+ supportFetchAPI: true,
145
+ corsEnabled: item.isCorsEnabled || false,
146
+ }
147
+ };
148
+ }));
149
+ return new Promise((resolve, reject) => {
150
+ try {
151
+ electron.app.on('ready', () => {
152
+ options.forEach((item) => {
153
+ const handler = createHandler(item);
154
+ const session = item.partition ? electron.session.fromPartition(item.partition) : electron.session.defaultSession;
155
+ session.protocol.registerFileProtocol(item.scheme, handler);
156
+ });
157
+ resolve(true);
158
+ });
159
+ }
160
+ catch (error) {
161
+ reject(error);
162
+ }
163
+ });
164
+ };
165
+ /**
166
+ * @electron/remote/main enable方法
167
+ * @param webContents
168
+ * @returns
169
+ */
170
+ const enable = (webContents) => remote.enable(webContents);
171
+ function getRandomUUID(key = `${Date.now()}`) {
172
+ let webcrypto;
173
+ let randomValue = Math?.random()?.toString()?.replace('0.', '');
174
+ try {
175
+ if (!webcrypto && !!window && window?.crypto) {
176
+ webcrypto = window.crypto;
177
+ }
178
+ }
179
+ catch (error) {
180
+ }
181
+ try {
182
+ const ar = webcrypto.getRandomValues(new Uint8Array(12));
183
+ randomValue = `${md5(ar)}` || randomValue;
184
+ }
185
+ catch (error) { }
186
+ const uuid = v5(`${JSON.stringify(key)}_${Date.now()}_${randomValue}`, v5.URL);
187
+ return uuid;
188
+ }
43
189
 
44
- export { getSDK, initialize, isInitialized };
190
+ export { enable, getRandomUUID, getSDK, initialize, isInitialized, registerProtocol, serve };
45
191
  //# 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'\n\nif (!remote.isInitialized()) {\n remote.initialize();\n}\n\nexport let isInitialized = false;\n\ninterface SDK_TYPE {\n windowManager: windowManager.WindowsManager\n}\n\n// @ts-ignore\nglobal['__GLBOAL_ELECTRON_SDK__'] as SDK_TYPE;\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 return global['__GLBOAL_ELECTRON_SDK__'];\n } else {\n // @ts-ignore\n return global['__GLBOAL_ELECTRON_SDK__'];\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"],"names":[],"mappings":";;;;;;;;AAQA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE;IAC3B,MAAM,CAAC,UAAU,EAAE,CAAC;AACtB,CAAC;AAEM,IAAI,aAAa,GAAG,MAAM;AASpB,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;;AAErD,QAAA,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;KAC1C;SAAM;;AAEL,QAAA,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;KAC1C;AACH,EAAC;AACD;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;;;;"}
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'\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 preload 预加载js 必须传\n * @param loadingViewUrl 窗口管理默认loading页面\n * @returns\n */\nexport const initialize = (preload: string, loadingViewUrl?: string): SDK_TYPE => {\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);\n windowModal.initialize(preload);\n windowTooltip.initialize(preload);\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 app.on(\"open-url\", (_event, url) => {\n launchOptions = `${url}`;\n ipc.mainIPC.invokeAllRenderer('__GLOBAL_CHANGE_LAUNCH_OPTIONS__', launchOptions)\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: Array<{directory: string, scheme: string, isCorsEnabled?: boolean, partition?: string}>) => {\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 || false,\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\t\t\t\tbypassCSP: 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\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"],"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":";;;;;;;;;;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,oBAAoB,CAAC,CAAC;AACpC,QAAA,OAAO,EAAwB,CAAC;KACjC;AACH,CAAC;AAED,MAAM,GAAI,SAAQ,YAAY,CAAA;AAU5B,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;QAVV,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;AAe1B;;AAEG;QACH,IAAgB,CAAA,gBAAA,GAAG,YAAW;YAC5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAA+B,6BAAA,CAAA,CAAC,CAAC;AAC3E,YAAA,OAAO,OAAO,CAAC;AACjB,SAAC,CAAA;AAED;;;AAGG;QACH,IAAgB,CAAA,gBAAA,GAAG,YAAW;YAC5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAA+B,6BAAA,CAAA,CAAC,CAAC;AAC3E,YAAA,OAAO,OAAO,CAAC;AACjB,SAAC,CAAA;AAED;;;;AAIG;AACH,QAAA,IAAA,CAAA,eAAe,GAAG,OAAO,QAAmC,KAAK;AAC/D,YAAA,MAAM,UAAU,GAAG,CAAC,IAAY,KAAI;gBAClC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjB,aAAC,CAAA;AACD,YAAA,IAAI,CAAC,EAAE,CAAC,uBAAuB,EAAE,UAAU,CAAC,CAAC;YAC7C,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,UAAU,CAAC,CAAC;AAC7D,SAAC,CAAA;AAvCC,QAAA,IAAI;;YAEF,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,kCAAkC,EAAE,OAAO,IAAI,KAAI;gBACzE,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAG,EAAA,IAAI,CAAE,CAAA,CAAC,CAAC;AAC9C,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC,CAAC;SACJ;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;SACrC;KACF;AAgCD;;;;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;AACD;AACA;AACM,MAAA,IAAI,GAAG,MAAM,CAAC,uBAAuB,CAAC,GAAG,IAAI,GAAG;;;;"}
package/main/index.d.ts CHANGED
@@ -1,10 +1,41 @@
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
4
  export declare let isInitialized: boolean;
3
- interface SDK_TYPE {
5
+ export interface SDK_TYPE {
6
+ ipc: typeof ipc.mainIPC;
4
7
  windowManager: windowManager.WindowsManager;
8
+ getPreload: () => string;
5
9
  }
6
- export declare const initialize: (preload: string) => SDK_TYPE;
10
+ /**
11
+ * 初始化
12
+ * @param preload 预加载js 必须传
13
+ * @param loadingViewUrl 窗口管理默认loading页面
14
+ * @returns
15
+ */
16
+ export declare const initialize: (preload: string, loadingViewUrl?: string) => SDK_TYPE;
7
17
  /** 后续再优化 */
8
- export declare const getSDK: () => any;
9
- export {};
18
+ export declare const getSDK: () => SDK_TYPE;
19
+ /**
20
+ * 注册唤起
21
+ */
22
+ export declare const registerProtocol: () => (protocol: string) => void;
23
+ /**
24
+ * 注册协议
25
+ * @param options
26
+ * @returns
27
+ */
28
+ export declare const serve: (options: Array<{
29
+ directory: string;
30
+ scheme: string;
31
+ isCorsEnabled?: boolean;
32
+ partition?: string;
33
+ }>) => Promise<unknown>;
34
+ /**
35
+ * @electron/remote/main enable方法
36
+ * @param webContents
37
+ * @returns
38
+ */
39
+ export declare const enable: (webContents: WebContents) => void;
40
+ export declare function getRandomUUID(key?: string): string;
10
41
  //# 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;AAQ7E,eAAO,IAAI,aAAa,SAAQ,CAAC;AAEjC,UAAU,QAAQ;IAChB,aAAa,EAAE,aAAa,CAAC,cAAc,CAAA;CAC5C;AAKD,eAAO,MAAM,UAAU,YAAa,MAAM,KAAG,QAmB5C,CAAA;AACD,YAAY;AACZ,eAAO,MAAM,MAAM,WAOlB,CAAA"}
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;AAQ7E,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;;;;;GAKG;AACH,eAAO,MAAM,UAAU,YAAa,MAAM,mBAAmB,MAAM,KAAG,QAoBrE,CAAA;AAED,YAAY;AACZ,eAAO,MAAM,MAAM,QAAO,QAOzB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,mBAGT,MAAM,SAwBxB,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,KAAK,YAAa,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,qBA0ErH,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,gBAAiB,WAAW,SAA+B,CAAC;AAE/E,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAwB,GAAG,MAAM,CAiBnE"}
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');
@@ -29,26 +36,32 @@ if (!remote__namespace.isInitialized()) {
29
36
  remote__namespace.initialize();
30
37
  }
31
38
  exports.isInitialized = false;
32
- const initialize = (preload) => {
33
- if (!exports.isInitialized) {
34
- exports.isInitialized = true;
35
- // @ts-ignore
36
- global['__GLBOAL_ELECTRON_SDK__'] = {};
37
- ipc__namespace.initialize();
38
- logs__namespace.initialize();
39
- tabsBrowser__namespace.initialize(preload);
40
- const wm = windowManager__namespace.initialize(preload);
41
- windowModal__namespace.initialize(preload);
42
- windowTooltip__namespace.initialize(preload);
43
- // @ts-ignore
44
- global['__GLBOAL_ELECTRON_SDK__'].windowManager = wm;
39
+ /**
40
+ * 初始化
41
+ * @param preload 预加载js 必须传
42
+ * @param loadingViewUrl 窗口管理默认loading页面
43
+ * @returns
44
+ */
45
+ const initialize = (preload, loadingViewUrl) => {
46
+ if (exports.isInitialized) {
45
47
  // @ts-ignore
46
48
  return global['__GLBOAL_ELECTRON_SDK__'];
47
49
  }
48
- else {
49
- // @ts-ignore
50
- return global['__GLBOAL_ELECTRON_SDK__'];
50
+ exports.isInitialized = true;
51
+ ipc__namespace.initialize();
52
+ logs__namespace.initialize();
53
+ tabsBrowser__namespace.initialize(preload);
54
+ const wm = windowManager__namespace.initialize(preload, loadingViewUrl);
55
+ windowModal__namespace.initialize(preload);
56
+ windowTooltip__namespace.initialize(preload);
57
+ class SDK {
51
58
  }
59
+ SDK.ipc = ipc__namespace.mainIPC;
60
+ SDK.windowManager = wm;
61
+ SDK.getPreload = () => preload;
62
+ // @ts-ignore
63
+ global['__GLBOAL_ELECTRON_SDK__'] = SDK;
64
+ return SDK;
52
65
  };
53
66
  /** 后续再优化 */
54
67
  const getSDK = () => {
@@ -59,7 +72,144 @@ const getSDK = () => {
59
72
  // @ts-ignore
60
73
  return global['__GLBOAL_ELECTRON_SDK__'];
61
74
  };
75
+ /**
76
+ * 注册唤起
77
+ */
78
+ const registerProtocol = (() => {
79
+ let isRegister = false;
80
+ let launchOptions = ``;
81
+ return (protocol) => {
82
+ if (isRegister) {
83
+ return;
84
+ }
85
+ isRegister = true;
86
+ if (process.defaultApp) {
87
+ if (process.argv.length >= 2) {
88
+ electron.app.setAsDefaultProtocolClient(protocol, process.execPath, [path.resolve(lodash.get(process, `argv[1]`, ''))]);
89
+ }
90
+ }
91
+ else {
92
+ electron.app.setAsDefaultProtocolClient(protocol);
93
+ }
94
+ electron.app.on("open-url", (_event, url) => {
95
+ launchOptions = `${url}`;
96
+ ipc__namespace.mainIPC.invokeAllRenderer('__GLOBAL_CHANGE_LAUNCH_OPTIONS__', launchOptions);
97
+ });
98
+ ipc__namespace.mainIPC.handleRenderer('__GLOBAL_GET_LAUNCH_OPTIONS__', async () => {
99
+ return launchOptions;
100
+ });
101
+ ipc__namespace.mainIPC.handleRenderer('__GLOBAL_DEL_LAUNCH_OPTIONS__', async () => {
102
+ launchOptions = ``;
103
+ return launchOptions;
104
+ });
105
+ };
106
+ });
107
+ /**
108
+ * 注册协议
109
+ * @param options
110
+ * @returns
111
+ */
112
+ const serve = (options) => {
113
+ if (!options.length) {
114
+ throw new Error('请传入配置');
115
+ }
116
+ const stat = node_util.promisify(fs.stat);
117
+ // See https://cs.chromium.org/chromium/src/net/base/net_error_list.h
118
+ const FILE_NOT_FOUND = -6;
119
+ const getPath = async (path_) => {
120
+ try {
121
+ const result = await stat(path_);
122
+ if (result.isFile()) {
123
+ return path_;
124
+ }
125
+ if (result.isDirectory()) {
126
+ return getPath(path.join(path_, 'index.html'));
127
+ }
128
+ }
129
+ catch (_) { }
130
+ };
131
+ const createHandler = (item) => {
132
+ return async (request, callback) => {
133
+ const indexPath = path.join(item.directory, 'index.html');
134
+ const filePath = path.join(item.directory, decodeURIComponent(new URL(request.url).pathname));
135
+ const resolvedPath = await getPath(filePath);
136
+ const fileExtension = path.extname(filePath);
137
+ if (resolvedPath || !fileExtension || fileExtension === '.html' || fileExtension === '.asar') {
138
+ callback({
139
+ path: resolvedPath || indexPath
140
+ });
141
+ }
142
+ else {
143
+ callback({ error: FILE_NOT_FOUND });
144
+ }
145
+ };
146
+ };
147
+ options = options.map((item) => {
148
+ return {
149
+ ...item,
150
+ isCorsEnabled: item.isCorsEnabled || false,
151
+ scheme: item.scheme || 'app',
152
+ directory: path.resolve(electron.app.getAppPath(), item.directory),
153
+ };
154
+ });
155
+ electron.protocol.registerSchemesAsPrivileged(options.map((item) => {
156
+ return {
157
+ scheme: item.scheme,
158
+ privileges: {
159
+ bypassCSP: true,
160
+ standard: true,
161
+ secure: true,
162
+ allowServiceWorkers: true,
163
+ supportFetchAPI: true,
164
+ corsEnabled: item.isCorsEnabled || false,
165
+ }
166
+ };
167
+ }));
168
+ return new Promise((resolve, reject) => {
169
+ try {
170
+ electron.app.on('ready', () => {
171
+ options.forEach((item) => {
172
+ const handler = createHandler(item);
173
+ const session = item.partition ? electron.session.fromPartition(item.partition) : electron.session.defaultSession;
174
+ session.protocol.registerFileProtocol(item.scheme, handler);
175
+ });
176
+ resolve(true);
177
+ });
178
+ }
179
+ catch (error) {
180
+ reject(error);
181
+ }
182
+ });
183
+ };
184
+ /**
185
+ * @electron/remote/main enable方法
186
+ * @param webContents
187
+ * @returns
188
+ */
189
+ const enable = (webContents) => remote__namespace.enable(webContents);
190
+ function getRandomUUID(key = `${Date.now()}`) {
191
+ let webcrypto;
192
+ let randomValue = Math?.random()?.toString()?.replace('0.', '');
193
+ try {
194
+ if (!webcrypto && !!window && window?.crypto) {
195
+ webcrypto = window.crypto;
196
+ }
197
+ }
198
+ catch (error) {
199
+ }
200
+ try {
201
+ const ar = webcrypto.getRandomValues(new Uint8Array(12));
202
+ randomValue = `${md5(ar)}` || randomValue;
203
+ }
204
+ catch (error) { }
205
+ const uuid$1 = uuid.v5(`${JSON.stringify(key)}_${Date.now()}_${randomValue}`, uuid.v5.URL);
206
+ return uuid$1;
207
+ }
62
208
 
209
+ exports.enable = enable;
210
+ exports.getRandomUUID = getRandomUUID;
63
211
  exports.getSDK = getSDK;
64
212
  exports.initialize = initialize;
213
+ exports.registerProtocol = registerProtocol;
214
+ exports.serve = serve;
65
215
  //# 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'\n\nif (!remote.isInitialized()) {\n remote.initialize();\n}\n\nexport let isInitialized = false;\n\ninterface SDK_TYPE {\n windowManager: windowManager.WindowsManager\n}\n\n// @ts-ignore\nglobal['__GLBOAL_ELECTRON_SDK__'] as SDK_TYPE;\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 return global['__GLBOAL_ELECTRON_SDK__'];\n } else {\n // @ts-ignore\n return global['__GLBOAL_ELECTRON_SDK__'];\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"],"names":["remote","isInitialized","ipc","logs","tabsBrowser","windowManager","windowModal","windowTooltip"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,IAAI,CAACA,iBAAM,CAAC,aAAa,EAAE,EAAE;IAC3BA,iBAAM,CAAC,UAAU,EAAE,CAAC;AACtB,CAAC;AAEUC,qBAAa,GAAG,MAAM;AASpB,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;;AAErD,QAAA,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;KAC1C;SAAM;;AAEL,QAAA,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;KAC1C;AACH,EAAC;AACD;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;;;;;"}
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'\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 preload 预加载js 必须传\n * @param loadingViewUrl 窗口管理默认loading页面\n * @returns\n */\nexport const initialize = (preload: string, loadingViewUrl?: string): SDK_TYPE => {\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);\n windowModal.initialize(preload);\n windowTooltip.initialize(preload);\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 app.on(\"open-url\", (_event, url) => {\n launchOptions = `${url}`;\n ipc.mainIPC.invokeAllRenderer('__GLOBAL_CHANGE_LAUNCH_OPTIONS__', launchOptions)\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: Array<{directory: string, scheme: string, isCorsEnabled?: boolean, partition?: string}>) => {\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 || false,\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\t\t\t\tbypassCSP: 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\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"],"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.3",
3
+ "version": "0.0.4-alpha.30",
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": "",
@@ -48,17 +51,18 @@
48
51
  },
49
52
  "engines": {
50
53
  "node": ">=18.18.0",
51
- "pnpm": "9.6.0"
54
+ "pnpm": ">=9.6.0"
52
55
  },
53
56
  "packageManager": "pnpm@9.6.0",
54
57
  "dependencies": {
55
58
  "@electron/remote": "^2.1.2",
56
- "@lynker-desktop/electron-ipc": "0.0.4-alpha.3",
57
- "@lynker-desktop/electron-logs": "0.0.4-alpha.3",
58
- "@lynker-desktop/electron-tabs-browser": "0.0.4-alpha.3",
59
- "@lynker-desktop/electron-window-manager": "0.0.4-alpha.3",
60
- "@lynker-desktop/electron-window-modal": "0.0.4-alpha.3",
61
- "@lynker-desktop/electron-window-tooltip": "0.0.4-alpha.3",
59
+ "@lynker-desktop/electron-ipc": "0.0.4-alpha.30",
60
+ "@lynker-desktop/electron-logs": "0.0.4-alpha.30",
61
+ "@lynker-desktop/electron-tabs-browser": "0.0.4-alpha.30",
62
+ "@lynker-desktop/electron-window-manager": "0.0.4-alpha.30",
63
+ "@lynker-desktop/electron-window-modal": "0.0.4-alpha.30",
64
+ "@lynker-desktop/electron-window-tooltip": "0.0.4-alpha.30",
65
+ "events": "^3.3.0",
62
66
  "lodash": "^4.17.21",
63
67
  "md5": "^2.3.0",
64
68
  "uuid": "^10.0.0"
@@ -90,5 +94,5 @@
90
94
  "tslib": "^2.6.3",
91
95
  "typescript": "^5.5.3"
92
96
  },
93
- "gitHead": "21c4e7412b278629fa632756ae95413c42ea9876"
97
+ "gitHead": "62c28357d74a83700fc8457d8a0e546f5acd09db"
94
98
  }
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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"}