@itwin/core-electron 4.0.0-dev.7 → 4.0.0-dev.70
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/CHANGELOG.md +22 -7
- package/lib/cjs/ElectronBackend.d.ts +1 -1
- package/lib/cjs/ElectronBackend.js +21 -17
- package/lib/cjs/ElectronBackend.js.map +1 -1
- package/lib/cjs/ElectronFrontend.d.ts +1 -1
- package/lib/cjs/ElectronFrontend.js +21 -17
- package/lib/cjs/ElectronFrontend.js.map +1 -1
- package/lib/cjs/__DOC_ONLY__.d.ts +3 -3
- package/lib/cjs/__DOC_ONLY__.js +26 -22
- package/lib/cjs/__DOC_ONLY__.js.map +1 -1
- package/lib/cjs/backend/ElectronHost.d.ts +104 -104
- package/lib/cjs/backend/ElectronHost.d.ts.map +1 -1
- package/lib/cjs/backend/ElectronHost.js +240 -243
- package/lib/cjs/backend/ElectronHost.js.map +1 -1
- package/lib/cjs/backend/ElectronPreload.d.ts +1 -1
- package/lib/cjs/backend/ElectronPreload.js +39 -39
- package/lib/cjs/common/ElectronIpcInterface.d.ts +7 -7
- package/lib/cjs/common/ElectronIpcInterface.d.ts.map +1 -1
- package/lib/cjs/common/ElectronIpcInterface.js +5 -5
- package/lib/cjs/common/ElectronIpcTransport.d.ts +44 -44
- package/lib/cjs/common/ElectronIpcTransport.js +186 -186
- package/lib/cjs/common/ElectronIpcTransport.js.map +1 -1
- package/lib/cjs/common/ElectronManagerLoggerCategory.d.ts +10 -10
- package/lib/cjs/common/ElectronManagerLoggerCategory.js +18 -18
- package/lib/cjs/common/ElectronPush.d.ts +20 -20
- package/lib/cjs/common/ElectronPush.js +48 -48
- package/lib/cjs/common/ElectronPush.js.map +1 -1
- package/lib/cjs/common/ElectronRpcManager.d.ts +26 -26
- package/lib/cjs/common/ElectronRpcManager.js +65 -65
- package/lib/cjs/common/ElectronRpcManager.js.map +1 -1
- package/lib/cjs/common/ElectronRpcProtocol.d.ts +34 -34
- package/lib/cjs/common/ElectronRpcProtocol.js +58 -58
- package/lib/cjs/common/ElectronRpcProtocol.js.map +1 -1
- package/lib/cjs/common/ElectronRpcRequest.d.ts +19 -19
- package/lib/cjs/common/ElectronRpcRequest.js +56 -56
- package/lib/cjs/common/ITwinElectronApi.d.ts +10 -10
- package/lib/cjs/common/ITwinElectronApi.d.ts.map +1 -1
- package/lib/cjs/common/ITwinElectronApi.js +6 -6
- package/lib/cjs/frontend/ElectronApp.d.ts +35 -35
- package/lib/cjs/frontend/ElectronApp.d.ts.map +1 -1
- package/lib/cjs/frontend/ElectronApp.js +73 -75
- package/lib/cjs/frontend/ElectronApp.js.map +1 -1
- package/package.json +26 -26
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*---------------------------------------------------------------------------------------------
|
|
3
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
-
*--------------------------------------------------------------------------------------------*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.ElectronRpcRequest = void 0;
|
|
8
|
-
const core_common_1 = require("@itwin/core-common");
|
|
9
|
-
/* eslint-disable deprecation/deprecation */
|
|
10
|
-
/** @internal */
|
|
11
|
-
class ElectronRpcRequest extends core_common_1.RpcRequest {
|
|
12
|
-
constructor() {
|
|
13
|
-
super(...arguments);
|
|
14
|
-
this._res = () => undefined;
|
|
15
|
-
this._fulfillment = undefined;
|
|
16
|
-
/** Convenience access to the protocol of this request. */
|
|
17
|
-
this.protocol = this.client.configuration.protocol;
|
|
18
|
-
}
|
|
19
|
-
/** Sends the request. */
|
|
20
|
-
async send() {
|
|
21
|
-
try {
|
|
22
|
-
this.protocol.requests.set(this.id, this);
|
|
23
|
-
const request = await this.protocol.serialize(this);
|
|
24
|
-
this.protocol.transport.sendRequest(request);
|
|
25
|
-
}
|
|
26
|
-
catch (e) {
|
|
27
|
-
this.protocol.events.raiseEvent(core_common_1.RpcProtocolEvent.ConnectionErrorReceived, this);
|
|
28
|
-
}
|
|
29
|
-
return new Promise((resolve) => {
|
|
30
|
-
this._res = resolve;
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
/** Loads the request. */
|
|
34
|
-
async load() {
|
|
35
|
-
const fulfillment = this._fulfillment;
|
|
36
|
-
if (!fulfillment) {
|
|
37
|
-
throw new Error("No request fulfillment available.");
|
|
38
|
-
}
|
|
39
|
-
return fulfillment.result;
|
|
40
|
-
}
|
|
41
|
-
/** Sets request header values. */
|
|
42
|
-
setHeader(_name, _value) {
|
|
43
|
-
// No implementation
|
|
44
|
-
}
|
|
45
|
-
/** @internal */
|
|
46
|
-
notifyResponse(fulfillment) {
|
|
47
|
-
this._fulfillment = fulfillment;
|
|
48
|
-
this._res(fulfillment.status);
|
|
49
|
-
}
|
|
50
|
-
/** @internal */
|
|
51
|
-
dispose() {
|
|
52
|
-
this.protocol.requests.delete(this.id);
|
|
53
|
-
super.dispose();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
exports.ElectronRpcRequest = ElectronRpcRequest;
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ElectronRpcRequest = void 0;
|
|
8
|
+
const core_common_1 = require("@itwin/core-common");
|
|
9
|
+
/* eslint-disable deprecation/deprecation */
|
|
10
|
+
/** @internal */
|
|
11
|
+
class ElectronRpcRequest extends core_common_1.RpcRequest {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this._res = () => undefined;
|
|
15
|
+
this._fulfillment = undefined;
|
|
16
|
+
/** Convenience access to the protocol of this request. */
|
|
17
|
+
this.protocol = this.client.configuration.protocol;
|
|
18
|
+
}
|
|
19
|
+
/** Sends the request. */
|
|
20
|
+
async send() {
|
|
21
|
+
try {
|
|
22
|
+
this.protocol.requests.set(this.id, this);
|
|
23
|
+
const request = await this.protocol.serialize(this);
|
|
24
|
+
this.protocol.transport.sendRequest(request);
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
this.protocol.events.raiseEvent(core_common_1.RpcProtocolEvent.ConnectionErrorReceived, this);
|
|
28
|
+
}
|
|
29
|
+
return new Promise((resolve) => {
|
|
30
|
+
this._res = resolve;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/** Loads the request. */
|
|
34
|
+
async load() {
|
|
35
|
+
const fulfillment = this._fulfillment;
|
|
36
|
+
if (!fulfillment) {
|
|
37
|
+
throw new Error("No request fulfillment available.");
|
|
38
|
+
}
|
|
39
|
+
return fulfillment.result;
|
|
40
|
+
}
|
|
41
|
+
/** Sets request header values. */
|
|
42
|
+
setHeader(_name, _value) {
|
|
43
|
+
// No implementation
|
|
44
|
+
}
|
|
45
|
+
/** @internal */
|
|
46
|
+
notifyResponse(fulfillment) {
|
|
47
|
+
this._fulfillment = fulfillment;
|
|
48
|
+
this._res(fulfillment.status);
|
|
49
|
+
}
|
|
50
|
+
/** @internal */
|
|
51
|
+
dispose() {
|
|
52
|
+
this.protocol.requests.delete(this.id);
|
|
53
|
+
super.dispose();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.ElectronRpcRequest = ElectronRpcRequest;
|
|
57
57
|
//# sourceMappingURL=ElectronRpcRequest.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { IpcRendererEvent } from "electron";
|
|
2
|
-
/** These methods are stored on `window.itwinjs` */
|
|
3
|
-
export interface ITwinElectronApi {
|
|
4
|
-
addListener: (channel: string, listener: ElectronListener) => void;
|
|
5
|
-
removeListener: (channel: string, listener: ElectronListener) => void;
|
|
6
|
-
invoke: (channel: string, ...data: any[]) => Promise<any>;
|
|
7
|
-
once: (channel: string, listener: (event: any, ...args: any[]) => void) => void;
|
|
8
|
-
send: (channel: string, ...data: any[]) => void;
|
|
9
|
-
}
|
|
10
|
-
export
|
|
1
|
+
import type { IpcRendererEvent } from "electron";
|
|
2
|
+
/** These methods are stored on `window.itwinjs` */
|
|
3
|
+
export interface ITwinElectronApi {
|
|
4
|
+
addListener: (channel: string, listener: ElectronListener) => void;
|
|
5
|
+
removeListener: (channel: string, listener: ElectronListener) => void;
|
|
6
|
+
invoke: (channel: string, ...data: any[]) => Promise<any>;
|
|
7
|
+
once: (channel: string, listener: (event: any, ...args: any[]) => void) => void;
|
|
8
|
+
send: (channel: string, ...data: any[]) => void;
|
|
9
|
+
}
|
|
10
|
+
export type ElectronListener = (event: IpcRendererEvent, ...args: any[]) => void;
|
|
11
11
|
//# sourceMappingURL=ITwinElectronApi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ITwinElectronApi.d.ts","sourceRoot":"","sources":["../../../src/common/ITwinElectronApi.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACnE,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACtE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;IAChF,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CACjD;AAED,
|
|
1
|
+
{"version":3,"file":"ITwinElectronApi.d.ts","sourceRoot":"","sources":["../../../src/common/ITwinElectronApi.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACnE,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACtE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;IAChF,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*---------------------------------------------------------------------------------------------
|
|
3
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
-
*--------------------------------------------------------------------------------------------*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
//# sourceMappingURL=ITwinElectronApi.js.map
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import { PromiseReturnType } from "@itwin/core-bentley";
|
|
2
|
-
import { NativeAppOpts } from "@itwin/core-frontend";
|
|
3
|
-
import { DialogModuleMethod } from "../common/ElectronIpcInterface";
|
|
4
|
-
import type { ITwinElectronApi } from "../common/ITwinElectronApi";
|
|
5
|
-
declare global {
|
|
6
|
-
interface Window {
|
|
7
|
-
itwinjs: ITwinElectronApi;
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
/** @beta */
|
|
11
|
-
export
|
|
12
|
-
/**
|
|
13
|
-
* Frontend of an Electron App.
|
|
14
|
-
* @beta
|
|
15
|
-
*/
|
|
16
|
-
export declare class ElectronApp {
|
|
17
|
-
private static _ipc?;
|
|
18
|
-
static get isValid(): boolean;
|
|
19
|
-
/**
|
|
20
|
-
* Start the frontend of an Electron application.
|
|
21
|
-
* @param opts Options for your ElectronApp
|
|
22
|
-
* @note This method must only be called from the frontend of an Electron app (i.e. when [ProcessDetector.isElectronAppFrontend]($bentley) is `true`).
|
|
23
|
-
*/
|
|
24
|
-
static startup(opts?: ElectronAppOpts): Promise<void>;
|
|
25
|
-
static shutdown(): Promise<void>;
|
|
26
|
-
/**
|
|
27
|
-
* Call an asynchronous method in the [Electron.Dialog](https://www.electronjs.org/docs/api/dialog) interface from a previously initialized ElectronFrontend.
|
|
28
|
-
* @param methodName the name of the method to call
|
|
29
|
-
* @param args arguments to method
|
|
30
|
-
* @deprecated in 3.x. use [[dialogIpc]]
|
|
31
|
-
*/
|
|
32
|
-
static callDialog<T extends DialogModuleMethod>(methodName: T, ...args: Parameters<Electron.Dialog[T]>): Promise<PromiseReturnType<Electron.Dialog[T]>>;
|
|
33
|
-
/** Proxy object for calling methods of `Electron.Dialog` */
|
|
34
|
-
static dialogIpc: import("@itwin/core-bentley").PickAsyncMethods<Electron.Dialog>;
|
|
35
|
-
}
|
|
1
|
+
import { PromiseReturnType } from "@itwin/core-bentley";
|
|
2
|
+
import { NativeAppOpts } from "@itwin/core-frontend";
|
|
3
|
+
import { DialogModuleMethod } from "../common/ElectronIpcInterface";
|
|
4
|
+
import type { ITwinElectronApi } from "../common/ITwinElectronApi";
|
|
5
|
+
declare global {
|
|
6
|
+
interface Window {
|
|
7
|
+
itwinjs: ITwinElectronApi;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/** @beta */
|
|
11
|
+
export type ElectronAppOpts = NativeAppOpts;
|
|
12
|
+
/**
|
|
13
|
+
* Frontend of an Electron App.
|
|
14
|
+
* @beta
|
|
15
|
+
*/
|
|
16
|
+
export declare class ElectronApp {
|
|
17
|
+
private static _ipc?;
|
|
18
|
+
static get isValid(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Start the frontend of an Electron application.
|
|
21
|
+
* @param opts Options for your ElectronApp
|
|
22
|
+
* @note This method must only be called from the frontend of an Electron app (i.e. when [ProcessDetector.isElectronAppFrontend]($bentley) is `true`).
|
|
23
|
+
*/
|
|
24
|
+
static startup(opts?: ElectronAppOpts): Promise<void>;
|
|
25
|
+
static shutdown(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Call an asynchronous method in the [Electron.Dialog](https://www.electronjs.org/docs/api/dialog) interface from a previously initialized ElectronFrontend.
|
|
28
|
+
* @param methodName the name of the method to call
|
|
29
|
+
* @param args arguments to method
|
|
30
|
+
* @deprecated in 3.x. use [[dialogIpc]]
|
|
31
|
+
*/
|
|
32
|
+
static callDialog<T extends DialogModuleMethod>(methodName: T, ...args: Parameters<Electron.Dialog[T]>): Promise<PromiseReturnType<Electron.Dialog[T]>>;
|
|
33
|
+
/** Proxy object for calling methods of `Electron.Dialog` */
|
|
34
|
+
static dialogIpc: import("@itwin/core-bentley").PickAsyncMethods<Electron.Dialog>;
|
|
35
|
+
}
|
|
36
36
|
//# sourceMappingURL=ElectronApp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElectronApp.d.ts","sourceRoot":"","sources":["../../../src/frontend/ElectronApp.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAAqB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAiB,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,OAAO,EAAE,gBAAgB,CAAC;KAC3B;CACF;AA4BD,YAAY;AACZ,
|
|
1
|
+
{"version":3,"file":"ElectronApp.d.ts","sourceRoot":"","sources":["../../../src/frontend/ElectronApp.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAAqB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAiB,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,OAAO,EAAE,gBAAgB,CAAC;KAC3B;CACF;AA4BD,YAAY;AACZ,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC;AAE5C;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAc;IAClC,WAAkB,OAAO,IAAI,OAAO,CAAoC;IAExE;;;;OAIG;WACiB,OAAO,CAAC,IAAI,CAAC,EAAE,eAAe;WAU9B,QAAQ;IAM5B;;;;;OAKG;WACiB,UAAU,CAAC,CAAC,SAAS,kBAAkB,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAInH,4DAA4D;IAC5D,OAAc,SAAS,kEAA6E;CACrG"}
|
|
@@ -1,76 +1,74 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ElectronApp = void 0;
|
|
4
|
-
/*---------------------------------------------------------------------------------------------
|
|
5
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
6
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
7
|
-
*--------------------------------------------------------------------------------------------*/
|
|
8
|
-
const core_bentley_1 = require("@itwin/core-bentley");
|
|
9
|
-
const core_frontend_1 = require("@itwin/core-frontend");
|
|
10
|
-
const ElectronIpcInterface_1 = require("../common/ElectronIpcInterface");
|
|
11
|
-
const ElectronRpcManager_1 = require("../common/ElectronRpcManager");
|
|
12
|
-
/**
|
|
13
|
-
* Frontend Ipc support for Electron apps.
|
|
14
|
-
*/
|
|
15
|
-
class ElectronIpc {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
this._api
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
this._api.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
*
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
*
|
|
45
|
-
* @
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (!
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
*
|
|
65
|
-
* @
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
exports.ElectronApp = ElectronApp;
|
|
74
|
-
/** Proxy object for calling methods of `Electron.Dialog` */
|
|
75
|
-
ElectronApp.dialogIpc = core_frontend_1.IpcApp.makeIpcFunctionProxy(ElectronIpcInterface_1.dialogChannel, "callDialog");
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ElectronApp = void 0;
|
|
4
|
+
/*---------------------------------------------------------------------------------------------
|
|
5
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
6
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
7
|
+
*--------------------------------------------------------------------------------------------*/
|
|
8
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
9
|
+
const core_frontend_1 = require("@itwin/core-frontend");
|
|
10
|
+
const ElectronIpcInterface_1 = require("../common/ElectronIpcInterface");
|
|
11
|
+
const ElectronRpcManager_1 = require("../common/ElectronRpcManager");
|
|
12
|
+
/**
|
|
13
|
+
* Frontend Ipc support for Electron apps.
|
|
14
|
+
*/
|
|
15
|
+
class ElectronIpc {
|
|
16
|
+
addListener(channelName, listener) {
|
|
17
|
+
this._api.addListener(channelName, listener);
|
|
18
|
+
return () => this._api.removeListener(channelName, listener);
|
|
19
|
+
}
|
|
20
|
+
removeListener(channelName, listener) {
|
|
21
|
+
this._api.removeListener(channelName, listener);
|
|
22
|
+
}
|
|
23
|
+
send(channel, ...data) {
|
|
24
|
+
this._api.send(channel, ...data);
|
|
25
|
+
}
|
|
26
|
+
async invoke(channel, ...args) {
|
|
27
|
+
return this._api.invoke(channel, ...args);
|
|
28
|
+
}
|
|
29
|
+
constructor() {
|
|
30
|
+
// use the methods on window.itwinjs exposed by ElectronPreload.ts, or ipcRenderer directly if running with nodeIntegration=true (**only** for tests).
|
|
31
|
+
// Note that `require("electron")` doesn't work with nodeIntegration=false - that's what it stops
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
33
|
+
this._api = window.itwinjs ?? require("electron").ipcRenderer;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Frontend of an Electron App.
|
|
38
|
+
* @beta
|
|
39
|
+
*/
|
|
40
|
+
class ElectronApp {
|
|
41
|
+
static get isValid() { return undefined !== this._ipc; }
|
|
42
|
+
/**
|
|
43
|
+
* Start the frontend of an Electron application.
|
|
44
|
+
* @param opts Options for your ElectronApp
|
|
45
|
+
* @note This method must only be called from the frontend of an Electron app (i.e. when [ProcessDetector.isElectronAppFrontend]($bentley) is `true`).
|
|
46
|
+
*/
|
|
47
|
+
static async startup(opts) {
|
|
48
|
+
if (!core_bentley_1.ProcessDetector.isElectronAppFrontend)
|
|
49
|
+
throw new Error("Not running under Electron");
|
|
50
|
+
if (!this.isValid) {
|
|
51
|
+
this._ipc = new ElectronIpc();
|
|
52
|
+
ElectronRpcManager_1.ElectronRpcManager.initializeFrontend(this._ipc, opts?.iModelApp?.rpcInterfaces); // eslint-disable-line deprecation/deprecation
|
|
53
|
+
}
|
|
54
|
+
await core_frontend_1.NativeApp.startup(this._ipc, opts);
|
|
55
|
+
}
|
|
56
|
+
static async shutdown() {
|
|
57
|
+
this._ipc = undefined;
|
|
58
|
+
await core_frontend_1.NativeApp.shutdown();
|
|
59
|
+
ElectronRpcManager_1.ElectronRpcManager.terminateFrontend();
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Call an asynchronous method in the [Electron.Dialog](https://www.electronjs.org/docs/api/dialog) interface from a previously initialized ElectronFrontend.
|
|
63
|
+
* @param methodName the name of the method to call
|
|
64
|
+
* @param args arguments to method
|
|
65
|
+
* @deprecated in 3.x. use [[dialogIpc]]
|
|
66
|
+
*/
|
|
67
|
+
static async callDialog(methodName, ...args) {
|
|
68
|
+
return core_frontend_1.IpcApp.callIpcChannel(ElectronIpcInterface_1.dialogChannel, "callDialog", methodName, ...args);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Proxy object for calling methods of `Electron.Dialog` */
|
|
72
|
+
ElectronApp.dialogIpc = core_frontend_1.IpcApp.makeIpcFunctionProxy(ElectronIpcInterface_1.dialogChannel, "callDialog");
|
|
73
|
+
exports.ElectronApp = ElectronApp;
|
|
76
74
|
//# sourceMappingURL=ElectronApp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElectronApp.js","sourceRoot":"","sources":["../../../src/frontend/ElectronApp.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,sDAAyE;AAEzE,wDAAwE;AAExE,yEAAmF;AACnF,qEAAkE;AASlE;;GAEG;AACH,MAAM,WAAW;
|
|
1
|
+
{"version":3,"file":"ElectronApp.js","sourceRoot":"","sources":["../../../src/frontend/ElectronApp.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,sDAAyE;AAEzE,wDAAwE;AAExE,yEAAmF;AACnF,qEAAkE;AASlE;;GAEG;AACH,MAAM,WAAW;IAER,WAAW,CAAC,WAAmB,EAAE,QAAqB;QAC3D,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC7C,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IACM,cAAc,CAAC,WAAmB,EAAE,QAAqB;QAC9D,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;IACM,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW;QACzC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACnC,CAAC;IACM,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,GAAG,IAAW;QACjD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC;IACD;QACE,sJAAsJ;QACtJ,iGAAiG;QACjG,8DAA8D;QAC9D,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC;IAChE,CAAC;CACF;AAKD;;;GAGG;AACH,MAAa,WAAW;IAEf,MAAM,KAAK,OAAO,KAAc,OAAO,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAExE;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAsB;QAChD,IAAI,CAAC,8BAAe,CAAC,qBAAqB;YACxC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,uCAAkB,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,8CAA8C;SACjI;QACD,MAAM,yBAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAK,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,QAAQ;QAC1B,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,MAAM,yBAAS,CAAC,QAAQ,EAAE,CAAC;QAC3B,uCAAkB,CAAC,iBAAiB,EAAE,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAA+B,UAAa,EAAE,GAAG,IAAoC;QACjH,OAAO,sBAAM,CAAC,cAAc,CAAC,oCAAa,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,IAAI,CAA0C,CAAC;IAC1H,CAAC;;AAED,4DAA4D;AAC9C,qBAAS,GAAG,sBAAM,CAAC,oBAAoB,CAAkB,oCAAa,EAAE,YAAY,CAAC,CAAC;AApCzF,kCAAW","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { ProcessDetector, PromiseReturnType } from \"@itwin/core-bentley\";\r\nimport { IpcListener, IpcSocketFrontend } from \"@itwin/core-common\";\r\nimport { IpcApp, NativeApp, NativeAppOpts } from \"@itwin/core-frontend\";\r\nimport type { IpcRenderer } from \"electron\";\r\nimport { dialogChannel, DialogModuleMethod } from \"../common/ElectronIpcInterface\";\r\nimport { ElectronRpcManager } from \"../common/ElectronRpcManager\";\r\nimport type { ITwinElectronApi } from \"../common/ITwinElectronApi\";\r\n\r\ndeclare global {\r\n interface Window {\r\n itwinjs: ITwinElectronApi;\r\n }\r\n}\r\n\r\n/**\r\n * Frontend Ipc support for Electron apps.\r\n */\r\nclass ElectronIpc implements IpcSocketFrontend {\r\n private _api: ITwinElectronApi | IpcRenderer;\r\n public addListener(channelName: string, listener: IpcListener) {\r\n this._api.addListener(channelName, listener);\r\n return () => this._api.removeListener(channelName, listener);\r\n }\r\n public removeListener(channelName: string, listener: IpcListener) {\r\n this._api.removeListener(channelName, listener);\r\n }\r\n public send(channel: string, ...data: any[]) {\r\n this._api.send(channel, ...data);\r\n }\r\n public async invoke(channel: string, ...args: any[]) {\r\n return this._api.invoke(channel, ...args);\r\n }\r\n constructor() {\r\n // use the methods on window.itwinjs exposed by ElectronPreload.ts, or ipcRenderer directly if running with nodeIntegration=true (**only** for tests).\r\n // Note that `require(\"electron\")` doesn't work with nodeIntegration=false - that's what it stops\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n this._api = window.itwinjs ?? require(\"electron\").ipcRenderer;\r\n }\r\n}\r\n\r\n/** @beta */\r\nexport type ElectronAppOpts = NativeAppOpts;\r\n\r\n/**\r\n * Frontend of an Electron App.\r\n * @beta\r\n */\r\nexport class ElectronApp {\r\n private static _ipc?: ElectronIpc;\r\n public static get isValid(): boolean { return undefined !== this._ipc; }\r\n\r\n /**\r\n * Start the frontend of an Electron application.\r\n * @param opts Options for your ElectronApp\r\n * @note This method must only be called from the frontend of an Electron app (i.e. when [ProcessDetector.isElectronAppFrontend]($bentley) is `true`).\r\n */\r\n public static async startup(opts?: ElectronAppOpts) {\r\n if (!ProcessDetector.isElectronAppFrontend)\r\n throw new Error(\"Not running under Electron\");\r\n if (!this.isValid) {\r\n this._ipc = new ElectronIpc();\r\n ElectronRpcManager.initializeFrontend(this._ipc, opts?.iModelApp?.rpcInterfaces); // eslint-disable-line deprecation/deprecation\r\n }\r\n await NativeApp.startup(this._ipc!, opts);\r\n }\r\n\r\n public static async shutdown() {\r\n this._ipc = undefined;\r\n await NativeApp.shutdown();\r\n ElectronRpcManager.terminateFrontend();\r\n }\r\n\r\n /**\r\n * Call an asynchronous method in the [Electron.Dialog](https://www.electronjs.org/docs/api/dialog) interface from a previously initialized ElectronFrontend.\r\n * @param methodName the name of the method to call\r\n * @param args arguments to method\r\n * @deprecated in 3.x. use [[dialogIpc]]\r\n */\r\n public static async callDialog<T extends DialogModuleMethod>(methodName: T, ...args: Parameters<Electron.Dialog[T]>) {\r\n return IpcApp.callIpcChannel(dialogChannel, \"callDialog\", methodName, ...args) as PromiseReturnType<Electron.Dialog[T]>;\r\n }\r\n\r\n /** Proxy object for calling methods of `Electron.Dialog` */\r\n public static dialogIpc = IpcApp.makeIpcFunctionProxy<Electron.Dialog>(dialogChannel, \"callDialog\");\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/core-electron",
|
|
3
|
-
"version": "4.0.0-dev.
|
|
3
|
+
"version": "4.0.0-dev.70",
|
|
4
4
|
"description": "iTwin.js ElectronHost and ElectronApp",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"engines": {
|
|
7
|
-
"node": "
|
|
7
|
+
"node": "^18.0.0"
|
|
8
8
|
},
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
11
|
-
"url": "https://github.com/iTwin/itwinjs-core
|
|
11
|
+
"url": "https://github.com/iTwin/itwinjs-core.git",
|
|
12
|
+
"directory": "core/electron"
|
|
12
13
|
},
|
|
13
14
|
"keywords": [
|
|
14
15
|
"Bentley",
|
|
@@ -20,33 +21,34 @@
|
|
|
20
21
|
"url": "http://www.bentley.com"
|
|
21
22
|
},
|
|
22
23
|
"peerDependencies": {
|
|
23
|
-
"@itwin/core-backend": "^4.0.0-dev.
|
|
24
|
-
"@itwin/core-bentley": "^4.0.0-dev.
|
|
25
|
-
"@itwin/core-common": "^4.0.0-dev.
|
|
26
|
-
"@itwin/core-frontend": "^4.0.0-dev.
|
|
27
|
-
"@itwin/presentation-common": "^4.0.0-dev.
|
|
28
|
-
"electron": "
|
|
24
|
+
"@itwin/core-backend": "^4.0.0-dev.70",
|
|
25
|
+
"@itwin/core-bentley": "^4.0.0-dev.70",
|
|
26
|
+
"@itwin/core-common": "^4.0.0-dev.70",
|
|
27
|
+
"@itwin/core-frontend": "^4.0.0-dev.70",
|
|
28
|
+
"@itwin/presentation-common": "^4.0.0-dev.70",
|
|
29
|
+
"electron": "^23.0.0"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
|
-
"@itwin/build-tools": "4.0.0-dev.
|
|
32
|
-
"@itwin/certa": "4.0.0-dev.
|
|
33
|
-
"@itwin/core-backend": "4.0.0-dev.
|
|
34
|
-
"@itwin/core-bentley": "4.0.0-dev.
|
|
35
|
-
"@itwin/core-common": "4.0.0-dev.
|
|
36
|
-
"@itwin/core-frontend": "4.0.0-dev.
|
|
37
|
-
"@itwin/eslint-plugin": "4.0.0-dev.
|
|
38
|
-
"@itwin/presentation-common": "4.0.0-dev.
|
|
32
|
+
"@itwin/build-tools": "4.0.0-dev.70",
|
|
33
|
+
"@itwin/certa": "4.0.0-dev.70",
|
|
34
|
+
"@itwin/core-backend": "4.0.0-dev.70",
|
|
35
|
+
"@itwin/core-bentley": "4.0.0-dev.70",
|
|
36
|
+
"@itwin/core-common": "4.0.0-dev.70",
|
|
37
|
+
"@itwin/core-frontend": "4.0.0-dev.70",
|
|
38
|
+
"@itwin/eslint-plugin": "^4.0.0-dev.32",
|
|
39
|
+
"@itwin/presentation-common": "4.0.0-dev.70",
|
|
39
40
|
"@types/chai": "4.3.1",
|
|
40
41
|
"@types/mocha": "^8.2.2",
|
|
41
|
-
"@types/node": "18.11.5",
|
|
42
|
+
"@types/node": "^18.11.5",
|
|
42
43
|
"chai": "^4.1.2",
|
|
43
|
-
"electron": "^
|
|
44
|
+
"electron": "^23.0.0",
|
|
44
45
|
"eslint": "^7.11.0",
|
|
45
46
|
"mocha": "^10.0.0",
|
|
46
47
|
"rimraf": "^3.0.2",
|
|
47
48
|
"source-map-loader": "^4.0.0",
|
|
48
|
-
"typescript": "~
|
|
49
|
-
"webpack": "^5.
|
|
49
|
+
"typescript": "~5.0.2",
|
|
50
|
+
"webpack": "^5.76.0",
|
|
51
|
+
"webpack-cli": "^5.0.1"
|
|
50
52
|
},
|
|
51
53
|
"dependencies": {
|
|
52
54
|
"@openid/appauth": "^1.2.6",
|
|
@@ -60,19 +62,17 @@
|
|
|
60
62
|
"extends": "plugin:@itwin/itwinjs-recommended"
|
|
61
63
|
},
|
|
62
64
|
"scripts": {
|
|
63
|
-
"build": "npm run -s build:cjs",
|
|
64
|
-
"build:ci": "npm run -s build",
|
|
65
|
+
"build": "npm run -s build:cjs && npm run -s webpack:test",
|
|
65
66
|
"build:cjs": "tsc 1>&2 --outDir lib/cjs",
|
|
66
67
|
"clean": "rimraf lib .rush/temp/package-deps*.json",
|
|
67
68
|
"docs": "betools docs --includes=../../generated-docs/extract --json=../../generated-docs/core/core-electron/file.json --tsIndexFile=./__DOC_ONLY__.ts --onlyJson",
|
|
68
69
|
"extract-api": "betools extract-api --entry=__DOC_ONLY__",
|
|
69
70
|
"lint": "eslint -f visualstudio \"./src/**/*.ts\" 1>&2",
|
|
70
71
|
"test": "",
|
|
71
|
-
"test:integration": "npm run test:integration:backend && npm run test:integration:frontend
|
|
72
|
+
"test:integration": "npm run test:integration:backend && npm run test:integration:frontend",
|
|
72
73
|
"test:integration:backend": "mocha --config src/test/backend/.mocharc.json",
|
|
73
|
-
"test:integration:frontend:ci": "npm run -s webpack:frontend-test && npm run test:integration:frontend",
|
|
74
74
|
"test:integration:frontend": "certa -r electron --config src/test/frontend/utils/certa.json",
|
|
75
|
-
"webpack:
|
|
75
|
+
"webpack:test": "webpack --config ./src/test/frontend/utils/webpack.config.js 1>&2",
|
|
76
76
|
"cover": ""
|
|
77
77
|
},
|
|
78
78
|
"readme": "# @itwin/core-electron\r\n\r\nCopyright © Bentley Systems, Incorporated. All rights reserved. See LICENSE.md for license terms and full copyright notice.\r\n\r\n## Description\r\n\r\nThe __@itwin/core-electron__ package contains the electron utilities to write an iTwin.js application based on Electron.\r\n\r\n## Documentation\r\n\r\nSee the [iTwin.js](https://www.itwinjs.org) documentation for more information.\r\n"
|