@lynker-desktop/electron-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,126 @@
1
+ # ELECTRON-SDK : 基础JSSDK
2
+
3
+ ## 1. 整体架构
4
+ ![整体架构](./doc/img.png)
5
+
6
+ ## 开发
7
+ > 项目clone下来后
8
+
9
+ ### 1. 项目根目录运行 `pnpm clean`
10
+
11
+ ### 2. 进入相关子包中开发
12
+ > 每个子包中和主包中都有`example/renderer` 都需要手动`pnpm install` 添加依赖
13
+
14
+
15
+ > 项目中每个窗口暂时先开启 `nodeIntegration`, 后序再做优化
16
+
17
+ ```
18
+ webPreferences: {
19
+ nodeIntegration: true,
20
+ webSecurity: false,
21
+ /**
22
+ * fix
23
+ * https://github.com/electron/electron/pull/20307
24
+ */
25
+ contextIsolation: false,
26
+ preload: path.join(__dirname, '../preload/index.js')
27
+ }
28
+ ```
29
+
30
+ ## 2. 何时使用
31
+
32
+ ### 主进程
33
+ ```javascript
34
+ const { app } = require('electron');
35
+ const {getSDK, initialize} = require('@lynker-desktop/electron-sdk/main');
36
+ /** 要先注入js */
37
+ const preload = path.join(__dirname, './preload/index.js');
38
+ /** 必须在主进程中初始化,并传入preload 然后才能从渲染器中使用 */
39
+ initialize(preload)
40
+
41
+ app.on('ready', async () => {
42
+ const win = getSDK().windowManager.create({
43
+ name: '主窗口',
44
+ url: 'http://localhost:8000',
45
+ })
46
+ });
47
+ ```
48
+
49
+ ### preload
50
+ ```javascript
51
+ require('@lynker-desktop/electron-sdk/preload');
52
+ ```
53
+
54
+ ### 渲染进程
55
+ ```javascript
56
+ import jssdk from '@lynker-desktop/electron-sdk/renderer';
57
+ jssdk.log('info', '我是测试')
58
+ ```
59
+
60
+ ## 3. api文档
61
+
62
+ ### 主进程
63
+ | 属性 | 说明 | 类型 | 演示 |
64
+ | --- | --- | --- | --- |
65
+ | | | | |
66
+
67
+ ### 渲染进程 -
68
+ #### 1. 日志 `jssdk.log`
69
+ | 属性 | 说明 | 类型 | 演示 |
70
+ | --- | --- | --- | --- |
71
+ | log | 日志保存本地 `type = info log error success` | function | `jssdk.log(type, 'demo')` |
72
+ | getLogPath | 获取本地日志目录 | function | `await jssdk.getLogPath()` |
73
+
74
+ #### 2. IPC通信 `jssdk.ipc`
75
+ | 属性 | 说明 | 类型 | 演示 |
76
+ | --- | --- | --- | --- |
77
+ | invokeMainOnce | 发送一次性给主进程消息 | function | `const data = await ipc.invokeMainOnce(channel, 'hello')` |
78
+ | invokeMain | 发送给主进程消息 | function | `const data = await ipc.invokeMain(channel, 'hello')` |
79
+ | handleMainOnce | 处理一次性主进程发送过来的消息 | function | `ipc.handleMainOnce(i => { return 'word' })` |
80
+ | handleMain | 处理主进程发送过来的消息 | function | `ipc.handleMain(i => { return 'word' })` |
81
+ | invokeRenderer | 发送给渲染进程消息 | function | `const data = await ipc.invokeRenderer(channel, 'hello')` |
82
+ | invokeRendererByWinId | 发送给指定渲染进程消息 | function | `const data = await ipc.invokeRendererByWinId(1, channel, 'hello')` |
83
+ | handleRendererOnce | 处理一次性渲染进程发送过来的消息 | function | `ipc.handleRendererOnce(i => { return 'word' })` |
84
+ | handleRenderer | 处理渲染进程发送过来的消息 | function | `ipc.handleRenderer(i => { return 'word' })` |
85
+ | getCurrentWebContentId | 获取当前渲染进程id | function | `const winid = await ipc.getCurrentWebContentId()` |
86
+
87
+ #### 3. 窗口池管理 `jssdk.windowManager`
88
+ | 属性 | 说明 | 类型 | 演示 |
89
+ | --- | --- | --- | --- |
90
+ | create | 创建窗口 | function | `const data = await windowManager.create({name: '测试', url: 'https://baidu.com'})` |
91
+ | get | 获取窗口 | function | `const data = await windowManager.get('测试')` |
92
+ | getById | 以id获取窗口 | function | `const data = await windowManager.getById(1)` |
93
+ | getAll | 获取所有窗口 | function | `const data = await windowManager.getAll()` |
94
+ | close | 关闭窗口 | function | `const data = await windowManager.close('测试')` |
95
+ | closeById | 以id关闭窗口 | function | `const data = await windowManager.closeById(1)` |
96
+
97
+ #### 4. 窗口弹窗 `jssdk.windowModal`
98
+ | 属性 | 说明 | 类型 | 演示 |
99
+ | --- | --- | --- | --- |
100
+ | modal | 创建窗口 | function | `const data = await windowModal.modal({ width: 300, height: 300, content: 'http://localhost:8000/modal', onHide: (i, data) => { alert(JSON.stringify(data)) }, })` |
101
+ | onCancel | 弹窗 cancel回调 | function | `onCancel('cancel')` |
102
+ | onOk | 弹窗 ok回调 | function | `onOk('ok')` |
103
+
104
+ #### 5. 窗口提示 `jssdk.windowTooltip`
105
+ | 属性 | 说明 | 类型 | 演示 |
106
+ | --- | --- | --- | --- |
107
+ | tippy | 创建窗口 | function | `jssdk.windowTooltip.tippy('#tooltip', { placement: 'bottom', width: 120, height: 50, content: 'http://localhost:8000/tooltip' });` |
108
+
109
+ #### 6. tabs浏览器提示 `jssdk.tabsBrowser`
110
+
111
+ > 默认在control页面和tab页面的bv在调用`closeTab`如操作自已当前页面可不传`idOrTabName`和`tabsName`
112
+
113
+ | 属性 | 说明 | 类型 | 演示 |
114
+ | --- | --- | --- | --- |
115
+ | create | 创建tabs浏览器 | function | `jssdk.tabsBrowser.create('测试', {tabPosition: 'top', controlPanel: 'http://localhost:8000/control', controlSize: 50, top: 100, startPageName: '第一页', startPage: 'https://google.com', debug: true,})` |
116
+ | close | 创建tabs浏览器 | function | `jssdk.tabsBrowser.close('测试')` |
117
+ | moveTabs | 独立 | function | `jssdk.tabsBrowser.moveTabs(win_id)` |
118
+ | rollbackTabs | 返回 | function | `jssdk.tabsBrowser.rollbackTabs()` |
119
+ | openTab | 打开tab | function | `jssdk.tabsBrowser.openTab('测试Tab1', { url: 'https://baidu.com'}, '测试')` |
120
+ | closeTab | 打开tab | function | `jssdk.tabsBrowser.closeTab('测试Tab1', '测试')` |
121
+ | reloadTab | 刷新tab | function | `jssdk.tabsBrowser.reloadTab('测试Tab2', '测试')` |
122
+ | sendChangeURL | 设置tab url | function | `jssdk.tabsBrowser.sendChangeURL('https://github.com/', '测试Tab2', '测试')` |
123
+ | onActiveUpdate | 监听活动的id | function | `jssdk.tabsBrowser.onActiveUpdate((v) => {console.log(v)})` |
124
+ | onTabsUpdate | 监听Tabs栏变化 | function | `jssdk.tabsBrowser.onTabsUpdate((tabs) => {console.log(tabs)})` |
125
+ | onWinChange | 监听当前挂载windows | function | `jssdk.tabsBrowser.onWinChange((win) => {console.log(win)})` |
126
+ | sendControlReady | 当`controlPanel`页面完成加载后主动调用(必须) | function | `jssdk.tabsBrowser.sendControlReady()` |
@@ -0,0 +1,6 @@
1
+ declare global {
2
+ interface Window {
3
+ __ELECTRON_SDK__?: any;
4
+ }
5
+ }
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,6 @@
1
+ declare global {
2
+ interface Window {
3
+ __ELECTRON_SDK__?: any;
4
+ }
5
+ }
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
package/esm/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC"}
package/esm/index.js ADDED
@@ -0,0 +1,5 @@
1
+ throw new Error(`electron 对主进程和渲染进程使用不同的代码:
2
+ 在electron主进程中, 你应该导入“@lynker-desktop/electron-logs/main”
3
+ 在electron渲染过程中, 你应该导入“@lynker-desktop/electron-logs/renderer”
4
+ `);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["throw new Error(`electron 对主进程和渲染进程使用不同的代码: \n在electron主进程中, 你应该导入“@lynker-desktop/electron-logs/main” \n在electron渲染过程中, 你应该导入“@lynker-desktop/electron-logs/renderer”\n`);\n\nexport {};"],"names":[],"mappings":"AAAA,MAAM,IAAI,KAAK,CAAC,CAAA;;;AAGf,CAAA,CAAC"}
@@ -0,0 +1,10 @@
1
+ import * as windowManager from '@lynker-desktop/electron-window-manager/main';
2
+ export declare let isInitialized: boolean;
3
+ interface SDK_TYPE {
4
+ windowManager: windowManager.WindowsManager;
5
+ }
6
+ export declare const initialize: (preload: string) => SDK_TYPE;
7
+ /** 后续再优化 */
8
+ export declare const getSDK: () => any;
9
+ export {};
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,45 @@
1
+ import * as remote from '@electron/remote/main';
2
+ import * as ipc from '@lynker-desktop/electron-ipc/main';
3
+ import * as logs from '@lynker-desktop/electron-logs/main';
4
+ import * as tabsBrowser from '@lynker-desktop/electron-tabs-browser/main';
5
+ import * as windowManager from '@lynker-desktop/electron-window-manager/main';
6
+ import * as windowModal from '@lynker-desktop/electron-window-modal/main';
7
+ import * as windowTooltip from '@lynker-desktop/electron-window-tooltip/main';
8
+
9
+ if (!remote.isInitialized()) {
10
+ remote.initialize();
11
+ }
12
+ 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;
26
+ // @ts-ignore
27
+ return global['__GLBOAL_ELECTRON_SDK__'];
28
+ }
29
+ else {
30
+ // @ts-ignore
31
+ return global['__GLBOAL_ELECTRON_SDK__'];
32
+ }
33
+ };
34
+ /** 后续再优化 */
35
+ const getSDK = () => {
36
+ // @ts-ignore
37
+ if (!global['__GLBOAL_ELECTRON_SDK__']) {
38
+ throw '请在ready前先调用initialize';
39
+ }
40
+ // @ts-ignore
41
+ return global['__GLBOAL_ELECTRON_SDK__'];
42
+ };
43
+
44
+ export { getSDK, initialize, isInitialized };
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;;;;"}
@@ -0,0 +1 @@
1
+ {"type": "module"}
@@ -0,0 +1,36 @@
1
+ import { contextBridge } from 'electron';
2
+ import remote from '@electron/remote/renderer';
3
+ import '@lynker-desktop/electron-ipc/preload';
4
+ import '@lynker-desktop/electron-logs/preload';
5
+ import '@lynker-desktop/electron-tabs-browser/preload';
6
+ import '@lynker-desktop/electron-window-manager/preload';
7
+ import '@lynker-desktop/electron-window-modal/preload';
8
+ import '@lynker-desktop/electron-window-tooltip/preload';
9
+
10
+ // @ts-ignore
11
+ if (window.__ELECTRON_SDK__) {
12
+ // eslint-disable-next-line no-console
13
+ console.log('electron-sdk Electron preload has already been run');
14
+ }
15
+ else {
16
+ try {
17
+ const preload = {
18
+ remote: remote,
19
+ };
20
+ // @ts-ignore
21
+ window.__ELECTRON_SDK__ = preload;
22
+ if (contextBridge) {
23
+ try {
24
+ // This will fail if contextIsolation is not enabled
25
+ contextBridge.exposeInMainWorld('__ELECTRON_SDK__', preload);
26
+ }
27
+ catch (error) {
28
+ // console.error(error)
29
+ }
30
+ }
31
+ }
32
+ catch (e) {
33
+ console.error(e);
34
+ }
35
+ }
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
@@ -0,0 +1,25 @@
1
+ import type RemoteType from '@electron/remote';
2
+ import ipc from '@lynker-desktop/electron-ipc/renderer';
3
+ import tabsBrowser from '@lynker-desktop/electron-tabs-browser/renderer';
4
+ import windowManager from '@lynker-desktop/electron-window-manager/renderer';
5
+ import windowModal from '@lynker-desktop/electron-window-modal/renderer';
6
+ import windowTooltip from '@lynker-desktop/electron-window-tooltip/renderer';
7
+ declare class SDK {
8
+ remote: typeof RemoteType;
9
+ ipc: typeof ipc.RendererIPC;
10
+ log: (level: import("packages/electron-logs/common").Level, ...logs: any[]) => void;
11
+ getLogPath: () => Promise<string>;
12
+ windowManager: typeof windowManager;
13
+ windowModal: typeof windowModal;
14
+ windowTooltip: typeof windowTooltip;
15
+ tabsBrowser: typeof tabsBrowser;
16
+ /**
17
+ * 生成随机uuid
18
+ * @param key
19
+ * @returns
20
+ */
21
+ getRandomUUID(key?: string): string;
22
+ }
23
+ declare const _default: SDK;
24
+ export default _default;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,iFAAY;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"}
@@ -0,0 +1,58 @@
1
+ import md5 from 'md5';
2
+ import { v5 } from 'uuid';
3
+ import ipc from '@lynker-desktop/electron-ipc/renderer';
4
+ import logs from '@lynker-desktop/electron-logs/renderer';
5
+ import tabsBrowser from '@lynker-desktop/electron-tabs-browser/renderer';
6
+ import windowManager from '@lynker-desktop/electron-window-manager/renderer';
7
+ import windowModal from '@lynker-desktop/electron-window-modal/renderer';
8
+ import windowTooltip from '@lynker-desktop/electron-window-tooltip/renderer';
9
+
10
+ function getRemote() {
11
+ try {
12
+ // @ts-ignore
13
+ return window?.__ELECTRON_SDK__?.remote || window?.require('@electron/remote');
14
+ }
15
+ catch (error) {
16
+ console.error('getIpc error: ', error);
17
+ return {};
18
+ }
19
+ }
20
+ class SDK {
21
+ constructor() {
22
+ this.remote = getRemote();
23
+ this.ipc = ipc.RendererIPC;
24
+ this.log = logs.log;
25
+ this.getLogPath = logs.getLogPath;
26
+ this.windowManager = windowManager;
27
+ this.windowModal = windowModal;
28
+ this.windowTooltip = windowTooltip;
29
+ this.tabsBrowser = tabsBrowser;
30
+ }
31
+ /**
32
+ * 生成随机uuid
33
+ * @param key
34
+ * @returns
35
+ */
36
+ getRandomUUID(key = `${Date.now()}`) {
37
+ let webcrypto;
38
+ let randomValue = Math?.random()?.toString()?.replace('0.', '');
39
+ try {
40
+ if (!webcrypto && !!window && window?.crypto) {
41
+ webcrypto = window.crypto;
42
+ }
43
+ }
44
+ catch (error) {
45
+ }
46
+ try {
47
+ const ar = webcrypto.getRandomValues(new Uint8Array(12));
48
+ randomValue = `${md5(ar)}` || randomValue;
49
+ }
50
+ catch (error) { }
51
+ const uuid = v5(`${JSON.stringify(key)}_${Date.now()}_${randomValue}`, v5.URL);
52
+ return uuid;
53
+ }
54
+ }
55
+ const index = new SDK();
56
+
57
+ export { index as default };
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;;;;"}
package/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC"}
package/index.js ADDED
@@ -0,0 +1,5 @@
1
+ throw new Error(`electron 对主进程和渲染进程使用不同的代码:
2
+ 在electron主进程中, 你应该导入“@lynker-desktop/electron-logs/main”
3
+ 在electron渲染过程中, 你应该导入“@lynker-desktop/electron-logs/renderer”
4
+ `);
5
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["src/src/index.ts"],"sourcesContent":["throw new Error(`electron 对主进程和渲染进程使用不同的代码: \n在electron主进程中, 你应该导入“@lynker-desktop/electron-logs/main” \n在electron渲染过程中, 你应该导入“@lynker-desktop/electron-logs/renderer”\n`);\n\nexport {};"],"names":[],"mappings":"AAAA,MAAM,IAAI,KAAK,CAAC,CAAA;;;AAGf,CAAA,CAAC;;"}
@@ -0,0 +1,10 @@
1
+ import * as windowManager from '@lynker-desktop/electron-window-manager/main';
2
+ export declare let isInitialized: boolean;
3
+ interface SDK_TYPE {
4
+ windowManager: windowManager.WindowsManager;
5
+ }
6
+ export declare const initialize: (preload: string) => SDK_TYPE;
7
+ /** 后续再优化 */
8
+ export declare const getSDK: () => any;
9
+ export {};
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
package/main/index.js ADDED
@@ -0,0 +1,65 @@
1
+ const remote = require('@electron/remote/main');
2
+ const ipc = require('@lynker-desktop/electron-ipc/main');
3
+ const logs = require('@lynker-desktop/electron-logs/main');
4
+ const tabsBrowser = require('@lynker-desktop/electron-tabs-browser/main');
5
+ const windowManager = require('@lynker-desktop/electron-window-manager/main');
6
+ const windowModal = require('@lynker-desktop/electron-window-modal/main');
7
+ const windowTooltip = require('@lynker-desktop/electron-window-tooltip/main');
8
+
9
+ function _interopNamespaceDefault(e) {
10
+ const n = Object.create(null);
11
+ if (e) {
12
+ for (const k in e) {
13
+ n[k] = e[k];
14
+ }
15
+ }
16
+ n.default = e;
17
+ return n;
18
+ }
19
+
20
+ const remote__namespace = /*#__PURE__*/_interopNamespaceDefault(remote);
21
+ const ipc__namespace = /*#__PURE__*/_interopNamespaceDefault(ipc);
22
+ const logs__namespace = /*#__PURE__*/_interopNamespaceDefault(logs);
23
+ const tabsBrowser__namespace = /*#__PURE__*/_interopNamespaceDefault(tabsBrowser);
24
+ const windowManager__namespace = /*#__PURE__*/_interopNamespaceDefault(windowManager);
25
+ const windowModal__namespace = /*#__PURE__*/_interopNamespaceDefault(windowModal);
26
+ const windowTooltip__namespace = /*#__PURE__*/_interopNamespaceDefault(windowTooltip);
27
+
28
+ if (!remote__namespace.isInitialized()) {
29
+ remote__namespace.initialize();
30
+ }
31
+ 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;
45
+ // @ts-ignore
46
+ return global['__GLBOAL_ELECTRON_SDK__'];
47
+ }
48
+ else {
49
+ // @ts-ignore
50
+ return global['__GLBOAL_ELECTRON_SDK__'];
51
+ }
52
+ };
53
+ /** 后续再优化 */
54
+ const getSDK = () => {
55
+ // @ts-ignore
56
+ if (!global['__GLBOAL_ELECTRON_SDK__']) {
57
+ throw '请在ready前先调用initialize';
58
+ }
59
+ // @ts-ignore
60
+ return global['__GLBOAL_ELECTRON_SDK__'];
61
+ };
62
+
63
+ exports.getSDK = getSDK;
64
+ exports.initialize = initialize;
65
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;;;;;"}
package/package.json ADDED
@@ -0,0 +1,97 @@
1
+ {
2
+ "name": "@lynker-desktop/electron-sdk",
3
+ "version": "1.0.0",
4
+ "description": "electron-sdk",
5
+ "keywords": [
6
+ "electron",
7
+ "browser",
8
+ "tab"
9
+ ],
10
+ "types": "./index.d.ts",
11
+ "main": "./index.js",
12
+ "module": "./esm/main/index.js",
13
+ "browser": "./esm/renderer/index.js",
14
+ "exports": {
15
+ ".": {
16
+ "node": {
17
+ "require": "./index.js",
18
+ "import": "./esm/main/index.js"
19
+ },
20
+ "default": "./esm/renderer/index.js"
21
+ },
22
+ "./main": {
23
+ "require": "./main/index.js",
24
+ "import": "./esm/main/index.js"
25
+ },
26
+ "./renderer": {
27
+ "require": "./renderer/index.js",
28
+ "import": "./esm/renderer/index.js"
29
+ },
30
+ "./preload": {
31
+ "require": "./preload/index.js",
32
+ "import": "./esm/preload/index.js"
33
+ }
34
+ },
35
+ "author": "",
36
+ "license": "MIT",
37
+ "repository": {
38
+ "type": "git",
39
+ "url": ""
40
+ },
41
+ "engines": {
42
+ "node": ">=18.18.0",
43
+ "pnpm": "9.6.0"
44
+ },
45
+ "dependencies": {
46
+ "@electron/remote": "^2.1.2",
47
+ "lodash": "^4.17.21",
48
+ "md5": "^2.3.0",
49
+ "uuid": "^10.0.0",
50
+ "@lynker-desktop/electron-ipc": "0.0.2",
51
+ "@lynker-desktop/electron-logs": "0.0.2",
52
+ "@lynker-desktop/electron-tabs-browser": "0.0.2",
53
+ "@lynker-desktop/electron-window-modal": "0.0.2",
54
+ "@lynker-desktop/electron-window-manager": "0.0.2",
55
+ "@lynker-desktop/electron-window-tooltip": "0.0.2"
56
+ },
57
+ "devDependencies": {
58
+ "@babel/core": "^7.24.9",
59
+ "@rollup/plugin-babel": "^6.0.4",
60
+ "@rollup/plugin-commonjs": "^26.0.1",
61
+ "@rollup/plugin-json": "^6.1.0",
62
+ "@rollup/plugin-node-resolve": "^15.2.3",
63
+ "@rollup/plugin-replace": "^5.0.7",
64
+ "@rollup/plugin-typescript": "^11.1.6",
65
+ "@types/lodash": "^4.17.7",
66
+ "@types/md5": "^2.3.5",
67
+ "@types/uuid": "^10.0.0",
68
+ "classnames": "^2.2.6",
69
+ "concurrently": "^8.2.2",
70
+ "electron": "24.8.8",
71
+ "file-url": "^2.0.2",
72
+ "fs-extra": "^11.2.0",
73
+ "lerna": "8.1.8",
74
+ "lodash.merge": "^4.6.2",
75
+ "react": "^16.8.6",
76
+ "react-dom": "^16.8.6",
77
+ "rimraf": "^6.0.1",
78
+ "rollup": "^4.18.1",
79
+ "rollup-obfuscator": "^4.1.1",
80
+ "rollup-plugin-multi-input": "^1.4.2",
81
+ "rollup-plugin-node-builtins": "^2.1.2",
82
+ "tslib": "^2.6.3",
83
+ "typescript": "^5.5.3"
84
+ },
85
+ "scripts": {
86
+ "postinstall": "",
87
+ "clean": "lerna clean -y && pnpm install && npx lerna run build && npm run build",
88
+ "lerna": "lerna -h",
89
+ "lerna:bootstrap": "npx lerna bootstrap",
90
+ "lerna:build": "npx lerna run build",
91
+ "lerna:publish": "pnpm publish --access public",
92
+ "build": "npx lerna run build && rollup -c --bundleConfigAsCjs ",
93
+ "dev": "concurrently \"npm run dev:renderer\" \"node ./scripts/dev.js\"",
94
+ "dev:renderer": "cd example/renderer && npm run dev",
95
+ "dev:main": "npm run build && electron --inspect=8888 example/main.js"
96
+ }
97
+ }
@@ -0,0 +1,36 @@
1
+ const electron = require('electron');
2
+ const remote = require('@electron/remote/renderer');
3
+ require('@lynker-desktop/electron-ipc/preload');
4
+ require('@lynker-desktop/electron-logs/preload');
5
+ require('@lynker-desktop/electron-tabs-browser/preload');
6
+ require('@lynker-desktop/electron-window-manager/preload');
7
+ require('@lynker-desktop/electron-window-modal/preload');
8
+ require('@lynker-desktop/electron-window-tooltip/preload');
9
+
10
+ // @ts-ignore
11
+ if (window.__ELECTRON_SDK__) {
12
+ // eslint-disable-next-line no-console
13
+ console.log('electron-sdk Electron preload has already been run');
14
+ }
15
+ else {
16
+ try {
17
+ const preload = {
18
+ remote: remote,
19
+ };
20
+ // @ts-ignore
21
+ window.__ELECTRON_SDK__ = preload;
22
+ if (electron.contextBridge) {
23
+ try {
24
+ // This will fail if contextIsolation is not enabled
25
+ electron.contextBridge.exposeInMainWorld('__ELECTRON_SDK__', preload);
26
+ }
27
+ catch (error) {
28
+ // console.error(error)
29
+ }
30
+ }
31
+ }
32
+ catch (e) {
33
+ console.error(e);
34
+ }
35
+ }
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;;"}
@@ -0,0 +1,25 @@
1
+ import type RemoteType from '@electron/remote';
2
+ import ipc from '@lynker-desktop/electron-ipc/renderer';
3
+ import tabsBrowser from '@lynker-desktop/electron-tabs-browser/renderer';
4
+ import windowManager from '@lynker-desktop/electron-window-manager/renderer';
5
+ import windowModal from '@lynker-desktop/electron-window-modal/renderer';
6
+ import windowTooltip from '@lynker-desktop/electron-window-tooltip/renderer';
7
+ declare class SDK {
8
+ remote: typeof RemoteType;
9
+ ipc: typeof ipc.RendererIPC;
10
+ log: (level: import("packages/electron-logs/common").Level, ...logs: any[]) => void;
11
+ getLogPath: () => Promise<string>;
12
+ windowManager: typeof windowManager;
13
+ windowModal: typeof windowModal;
14
+ windowTooltip: typeof windowTooltip;
15
+ tabsBrowser: typeof tabsBrowser;
16
+ /**
17
+ * 生成随机uuid
18
+ * @param key
19
+ * @returns
20
+ */
21
+ getRandomUUID(key?: string): string;
22
+ }
23
+ declare const _default: SDK;
24
+ export default _default;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,iFAAY;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"}
@@ -0,0 +1,58 @@
1
+ const md5 = require('md5');
2
+ const uuid = require('uuid');
3
+ const ipc = require('@lynker-desktop/electron-ipc/renderer');
4
+ const logs = require('@lynker-desktop/electron-logs/renderer');
5
+ const tabsBrowser = require('@lynker-desktop/electron-tabs-browser/renderer');
6
+ const windowManager = require('@lynker-desktop/electron-window-manager/renderer');
7
+ const windowModal = require('@lynker-desktop/electron-window-modal/renderer');
8
+ const windowTooltip = require('@lynker-desktop/electron-window-tooltip/renderer');
9
+
10
+ function getRemote() {
11
+ try {
12
+ // @ts-ignore
13
+ return window?.__ELECTRON_SDK__?.remote || window?.require('@electron/remote');
14
+ }
15
+ catch (error) {
16
+ console.error('getIpc error: ', error);
17
+ return {};
18
+ }
19
+ }
20
+ class SDK {
21
+ constructor() {
22
+ this.remote = getRemote();
23
+ this.ipc = ipc.RendererIPC;
24
+ this.log = logs.log;
25
+ this.getLogPath = logs.getLogPath;
26
+ this.windowManager = windowManager;
27
+ this.windowModal = windowModal;
28
+ this.windowTooltip = windowTooltip;
29
+ this.tabsBrowser = tabsBrowser;
30
+ }
31
+ /**
32
+ * 生成随机uuid
33
+ * @param key
34
+ * @returns
35
+ */
36
+ getRandomUUID(key = `${Date.now()}`) {
37
+ let webcrypto;
38
+ let randomValue = Math?.random()?.toString()?.replace('0.', '');
39
+ try {
40
+ if (!webcrypto && !!window && window?.crypto) {
41
+ webcrypto = window.crypto;
42
+ }
43
+ }
44
+ catch (error) {
45
+ }
46
+ try {
47
+ const ar = webcrypto.getRandomValues(new Uint8Array(12));
48
+ randomValue = `${md5(ar)}` || randomValue;
49
+ }
50
+ catch (error) { }
51
+ const uuid$1 = uuid.v5(`${JSON.stringify(key)}_${Date.now()}_${randomValue}`, uuid.v5.URL);
52
+ return uuid$1;
53
+ }
54
+ }
55
+ const index = new SDK();
56
+
57
+ module.exports = index;
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;;;;"}