@itwin/core-electron 3.0.0-dev.84 → 3.0.0-dev.88

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 +1 @@
1
- {"version":3,"file":"ElectronRpcRequest.js","sourceRoot":"","sources":["../../../src/common/ElectronRpcRequest.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,oDAAyF;AAGzF,YAAY;AACZ,MAAa,kBAAmB,SAAQ,wBAAU;IAAlD;;QACU,SAAI,GAA4B,GAAG,EAAE,CAAC,SAAS,CAAC;QAChD,iBAAY,GAAsC,SAAS,CAAC;QAEpE,0DAA0D;QACjC,aAAQ,GAAwB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAe,CAAC;IAyCrG,CAAC;IAvCC,yBAAyB;IACf,KAAK,CAAC,IAAI;QAClB,IAAI;YACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SAC9C;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,8BAAgB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;SACjF;QAED,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,yBAAyB;IACf,KAAK,CAAC,IAAI;QAClB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACtD;QAED,OAAO,WAAW,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,kCAAkC;IACxB,SAAS,CAAC,KAAa,EAAE,MAAc;QAC/C,oBAAoB;IACtB,CAAC;IAED,gBAAgB;IACT,cAAc,CAAC,WAAkC;QACtD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,gBAAgB;IACA,OAAO;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;CACF;AA9CD,gDA8CC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { RpcProtocolEvent, RpcRequest, RpcRequestFulfillment } from \"@itwin/core-common\";\nimport { ElectronRpcProtocol } from \"./ElectronRpcProtocol\";\n\n/** @beta */\nexport class ElectronRpcRequest extends RpcRequest {\n private _res: (value: number) => void = () => undefined;\n private _fulfillment: RpcRequestFulfillment | undefined = undefined;\n\n /** Convenience access to the protocol of this request. */\n public override readonly protocol: ElectronRpcProtocol = this.client.configuration.protocol as any;\n\n /** Sends the request. */\n protected async send() {\n try {\n this.protocol.requests.set(this.id, this);\n const request = await this.protocol.serialize(this);\n this.protocol.transport.sendRequest(request);\n } catch (e) {\n this.protocol.events.raiseEvent(RpcProtocolEvent.ConnectionErrorReceived, this);\n }\n\n return new Promise<number>((resolve) => { this._res = resolve; });\n }\n\n /** Loads the request. */\n protected async load() {\n const fulfillment = this._fulfillment;\n if (!fulfillment) {\n throw new Error(\"No request fulfillment available.\");\n }\n\n return fulfillment.result;\n }\n\n /** Sets request header values. */\n protected setHeader(_name: string, _value: string): void {\n // No implementation\n }\n\n /** @internal */\n public notifyResponse(fulfillment: RpcRequestFulfillment) {\n this._fulfillment = fulfillment;\n this._res(fulfillment.status);\n }\n\n /** @internal */\n public override dispose() {\n this.protocol.requests.delete(this.id);\n super.dispose();\n }\n}\n"]}
1
+ {"version":3,"file":"ElectronRpcRequest.js","sourceRoot":"","sources":["../../../src/common/ElectronRpcRequest.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,oDAAyF;AAGzF,YAAY;AACZ,MAAa,kBAAmB,SAAQ,wBAAU;IAAlD;;QACU,SAAI,GAA4B,GAAG,EAAE,CAAC,SAAS,CAAC;QAChD,iBAAY,GAAsC,SAAS,CAAC;QAEpE,0DAA0D;QACjC,aAAQ,GAAwB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAe,CAAC;IAyCrG,CAAC;IAvCC,yBAAyB;IACf,KAAK,CAAC,IAAI;QAClB,IAAI;YACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SAC9C;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,8BAAgB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;SACjF;QAED,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,yBAAyB;IACf,KAAK,CAAC,IAAI;QAClB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACtD;QAED,OAAO,WAAW,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,kCAAkC;IACxB,SAAS,CAAC,KAAa,EAAE,MAAc;QAC/C,oBAAoB;IACtB,CAAC;IAED,gBAAgB;IACT,cAAc,CAAC,WAAkC;QACtD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,gBAAgB;IACA,OAAO;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;CACF;AA9CD,gDA8CC","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\n\r\nimport { RpcProtocolEvent, RpcRequest, RpcRequestFulfillment } from \"@itwin/core-common\";\r\nimport { ElectronRpcProtocol } from \"./ElectronRpcProtocol\";\r\n\r\n/** @beta */\r\nexport class ElectronRpcRequest extends RpcRequest {\r\n private _res: (value: number) => void = () => undefined;\r\n private _fulfillment: RpcRequestFulfillment | undefined = undefined;\r\n\r\n /** Convenience access to the protocol of this request. */\r\n public override readonly protocol: ElectronRpcProtocol = this.client.configuration.protocol as any;\r\n\r\n /** Sends the request. */\r\n protected async send() {\r\n try {\r\n this.protocol.requests.set(this.id, this);\r\n const request = await this.protocol.serialize(this);\r\n this.protocol.transport.sendRequest(request);\r\n } catch (e) {\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.ConnectionErrorReceived, this);\r\n }\r\n\r\n return new Promise<number>((resolve) => { this._res = resolve; });\r\n }\r\n\r\n /** Loads the request. */\r\n protected async load() {\r\n const fulfillment = this._fulfillment;\r\n if (!fulfillment) {\r\n throw new Error(\"No request fulfillment available.\");\r\n }\r\n\r\n return fulfillment.result;\r\n }\r\n\r\n /** Sets request header values. */\r\n protected setHeader(_name: string, _value: string): void {\r\n // No implementation\r\n }\r\n\r\n /** @internal */\r\n public notifyResponse(fulfillment: RpcRequestFulfillment) {\r\n this._fulfillment = fulfillment;\r\n this._res(fulfillment.status);\r\n }\r\n\r\n /** @internal */\r\n public override dispose() {\r\n this.protocol.requests.delete(this.id);\r\n super.dispose();\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ElectronApp.js","sourceRoot":"","sources":["../../../src/frontend/ElectronApp.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,sDAAyF;AAEzF,wDAAwE;AAExE,qEAAkE;AAElE;;GAEG;AACH,MAAM,WAAW;IAef;;QACE,sJAAsJ;QACtJ,iGAAiG;QACjG,IAAI,CAAC,IAAI,GAAG,MAAC,MAAc,CAAC,OAAO,mCAAI,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,yDAAyD;IACnI,CAAC;IAjBM,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;CAMF;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,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,0CAAE,aAAa,CAAC,CAAC;SAClF;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;IAC7B,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAA4C,UAAa,EAAE,GAAG,IAAoC;QAC9H,OAAO,sBAAM,CAAC,cAAc,CAAC,eAAe,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAA0C,CAAC;IACxI,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,SAAS,CAA2C,UAAa,EAAE,GAAG,IAAmC;QAC3H,OAAO,sBAAM,CAAC,cAAc,CAAC,eAAe,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAyC,CAAC;IACtI,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAyC,UAAa,EAAE,GAAG,IAAiC;QACrH,OAAO,sBAAM,CAAC,cAAc,CAAC,eAAe,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,CAAuC,CAAC;IAClI,CAAC;CACF;AAhDD,kCAgDC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { AsyncMethodsOf, ProcessDetector, PromiseReturnType } from \"@itwin/core-bentley\";\nimport { IpcListener, IpcSocketFrontend } from \"@itwin/core-common\";\nimport { IpcApp, NativeApp, NativeAppOpts } from \"@itwin/core-frontend\";\nimport { ITwinElectronApi } from \"../backend/ElectronPreload\";\nimport { ElectronRpcManager } from \"../common/ElectronRpcManager\";\n\n/**\n * Frontend Ipc support for Electron apps.\n */\nclass ElectronIpc implements IpcSocketFrontend {\n private _api: ITwinElectronApi;\n public addListener(channelName: string, listener: IpcListener) {\n this._api.addListener(channelName, listener);\n return () => this._api.removeListener(channelName, listener);\n }\n public removeListener(channelName: string, listener: IpcListener) {\n this._api.removeListener(channelName, listener);\n }\n public send(channel: string, ...data: any[]) {\n this._api.send(channel, ...data);\n }\n public async invoke(channel: string, ...args: any[]) {\n return this._api.invoke(channel, ...args);\n }\n constructor() {\n // use the methods on window.itwinjs exposed by ElectronPreload.ts, or ipcRenderer directly if running with nodeIntegration=true (**only** for tests).\n // Note that `require(\"electron\")` doesn't work with nodeIntegration=false - that's what it stops\n this._api = (window as any).itwinjs ?? require(\"electron\").ipcRenderer; // eslint-disable-line @typescript-eslint/no-var-requires\n }\n}\n\n/** @beta */\nexport type ElectronAppOpts = NativeAppOpts;\n\n/**\n * Frontend of an Electron App.\n * @beta\n */\nexport class ElectronApp {\n private static _ipc?: ElectronIpc;\n public static get isValid(): boolean { return undefined !== this._ipc; }\n\n /**\n * Start the frontend of an Electron application.\n * @param opts Options for your ElectronApp\n * @note This method must only be called from the frontend of an Electron app (i.e. when [ProcessDetector.isElectronAppFrontend]($bentley) is `true`).\n */\n public static async startup(opts?: ElectronAppOpts) {\n if (!ProcessDetector.isElectronAppFrontend)\n throw new Error(\"Not running under Electron\");\n if (!this.isValid) {\n this._ipc = new ElectronIpc();\n ElectronRpcManager.initializeFrontend(this._ipc, opts?.iModelApp?.rpcInterfaces);\n }\n await NativeApp.startup(this._ipc!, opts);\n }\n\n public static async shutdown() {\n this._ipc = undefined;\n await NativeApp.shutdown();\n }\n\n /**\n * Call an asynchronous method in the [Electron.Dialog](https://www.electronjs.org/docs/api/dialog) interface from a previously initialized ElectronFrontend.\n * @param methodName the name of the method to call\n * @param args arguments to method\n */\n public static async callDialog<T extends AsyncMethodsOf<Electron.Dialog>>(methodName: T, ...args: Parameters<Electron.Dialog[T]>) {\n return IpcApp.callIpcChannel(\"electron-safe\", \"callElectron\", \"dialog\", methodName, ...args) as PromiseReturnType<Electron.Dialog[T]>;\n }\n /**\n * Call an asynchronous method in the [Electron.shell](https://www.electronjs.org/docs/api/shell) interface from a previously initialized ElectronFrontend.\n * @param methodName the name of the method to call\n * @param args arguments to method\n */\n public static async callShell<T extends AsyncMethodsOf<Electron.Shell>>(methodName: T, ...args: Parameters<Electron.Shell[T]>) {\n return IpcApp.callIpcChannel(\"electron-safe\", \"callElectron\", \"shell\", methodName, ...args) as PromiseReturnType<Electron.Shell[T]>;\n }\n /**\n * Call an asynchronous method in the [Electron.app](https://www.electronjs.org/docs/api/app) interface from a previously initialized ElectronFrontend.\n * @param methodName the name of the method to call\n * @param args arguments to method\n */\n public static async callApp<T extends AsyncMethodsOf<Electron.App>>(methodName: T, ...args: Parameters<Electron.App[T]>) {\n return IpcApp.callIpcChannel(\"electron-safe\", \"callElectron\", \"app\", methodName, ...args) as PromiseReturnType<Electron.App[T]>;\n }\n}\n"]}
1
+ {"version":3,"file":"ElectronApp.js","sourceRoot":"","sources":["../../../src/frontend/ElectronApp.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,sDAAyF;AAEzF,wDAAwE;AAExE,qEAAkE;AAElE;;GAEG;AACH,MAAM,WAAW;IAef;;QACE,sJAAsJ;QACtJ,iGAAiG;QACjG,IAAI,CAAC,IAAI,GAAG,MAAC,MAAc,CAAC,OAAO,mCAAI,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,yDAAyD;IACnI,CAAC;IAjBM,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;CAMF;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,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,0CAAE,aAAa,CAAC,CAAC;SAClF;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;IAC7B,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAA4C,UAAa,EAAE,GAAG,IAAoC;QAC9H,OAAO,sBAAM,CAAC,cAAc,CAAC,eAAe,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAA0C,CAAC;IACxI,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,SAAS,CAA2C,UAAa,EAAE,GAAG,IAAmC;QAC3H,OAAO,sBAAM,CAAC,cAAc,CAAC,eAAe,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAyC,CAAC;IACtI,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAyC,UAAa,EAAE,GAAG,IAAiC;QACrH,OAAO,sBAAM,CAAC,cAAc,CAAC,eAAe,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,CAAuC,CAAC;IAClI,CAAC;CACF;AAhDD,kCAgDC","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 { AsyncMethodsOf, 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 { ITwinElectronApi } from \"../backend/ElectronPreload\";\r\nimport { ElectronRpcManager } from \"../common/ElectronRpcManager\";\r\n\r\n/**\r\n * Frontend Ipc support for Electron apps.\r\n */\r\nclass ElectronIpc implements IpcSocketFrontend {\r\n private _api: ITwinElectronApi;\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 this._api = (window as any).itwinjs ?? require(\"electron\").ipcRenderer; // eslint-disable-line @typescript-eslint/no-var-requires\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);\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 }\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 */\r\n public static async callDialog<T extends AsyncMethodsOf<Electron.Dialog>>(methodName: T, ...args: Parameters<Electron.Dialog[T]>) {\r\n return IpcApp.callIpcChannel(\"electron-safe\", \"callElectron\", \"dialog\", methodName, ...args) as PromiseReturnType<Electron.Dialog[T]>;\r\n }\r\n /**\r\n * Call an asynchronous method in the [Electron.shell](https://www.electronjs.org/docs/api/shell) 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 */\r\n public static async callShell<T extends AsyncMethodsOf<Electron.Shell>>(methodName: T, ...args: Parameters<Electron.Shell[T]>) {\r\n return IpcApp.callIpcChannel(\"electron-safe\", \"callElectron\", \"shell\", methodName, ...args) as PromiseReturnType<Electron.Shell[T]>;\r\n }\r\n /**\r\n * Call an asynchronous method in the [Electron.app](https://www.electronjs.org/docs/api/app) 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 */\r\n public static async callApp<T extends AsyncMethodsOf<Electron.App>>(methodName: T, ...args: Parameters<Electron.App[T]>) {\r\n return IpcApp.callIpcChannel(\"electron-safe\", \"callElectron\", \"app\", methodName, ...args) as PromiseReturnType<Electron.App[T]>;\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/core-electron",
3
- "version": "3.0.0-dev.84",
3
+ "version": "3.0.0-dev.88",
4
4
  "description": "iTwin.js ElectronHost and ElectronApp",
5
5
  "license": "MIT",
6
6
  "engines": {
@@ -20,23 +20,23 @@
20
20
  "url": "http://www.bentley.com"
21
21
  },
22
22
  "peerDependencies": {
23
- "@itwin/core-bentley": "^3.0.0-dev.84",
24
- "@itwin/core-backend": "^3.0.0-dev.84",
25
- "@itwin/core-common": "^3.0.0-dev.84",
26
- "@itwin/core-frontend": "^3.0.0-dev.84",
27
- "@bentley/itwin-client": "^3.0.0-dev.84",
28
- "@itwin/presentation-common": "^3.0.0-dev.84",
23
+ "@itwin/core-bentley": "^3.0.0-dev.88",
24
+ "@itwin/core-backend": "^3.0.0-dev.88",
25
+ "@itwin/core-common": "^3.0.0-dev.88",
26
+ "@itwin/core-frontend": "^3.0.0-dev.88",
27
+ "@bentley/itwin-client": "^3.0.0-dev.88",
28
+ "@itwin/presentation-common": "^3.0.0-dev.88",
29
29
  "electron": "^14.0.0"
30
30
  },
31
31
  "devDependencies": {
32
- "@itwin/core-bentley": "3.0.0-dev.84",
33
- "@itwin/build-tools": "3.0.0-dev.84",
34
- "@itwin/eslint-plugin": "3.0.0-dev.84",
35
- "@itwin/core-backend": "3.0.0-dev.84",
36
- "@itwin/core-common": "3.0.0-dev.84",
37
- "@itwin/core-frontend": "3.0.0-dev.84",
38
- "@bentley/itwin-client": "3.0.0-dev.84",
39
- "@itwin/presentation-common": "3.0.0-dev.84",
32
+ "@itwin/core-bentley": "3.0.0-dev.88",
33
+ "@itwin/build-tools": "3.0.0-dev.88",
34
+ "@itwin/eslint-plugin": "3.0.0-dev.88",
35
+ "@itwin/core-backend": "3.0.0-dev.88",
36
+ "@itwin/core-common": "3.0.0-dev.88",
37
+ "@itwin/core-frontend": "3.0.0-dev.88",
38
+ "@bentley/itwin-client": "3.0.0-dev.88",
39
+ "@itwin/presentation-common": "3.0.0-dev.88",
40
40
  "@types/node": "14.14.31",
41
41
  "electron": "^14.0.0",
42
42
  "eslint": "^7.11.0",