@itwin/core-electron 5.5.0-dev.2 → 5.5.0-dev.4

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 CHANGED
@@ -1,6 +1,13 @@
1
1
  # Change Log - @itwin/core-electron
2
2
 
3
- This log was last generated on Thu, 20 Nov 2025 22:31:49 GMT and should not be manually modified.
3
+ This log was last generated on Tue, 02 Dec 2025 23:11:57 GMT and should not be manually modified.
4
+
5
+ ## 5.4.0
6
+ Tue, 02 Dec 2025 21:22:25 GMT
7
+
8
+ ### Updates
9
+
10
+ - Add support for Node.js 24
4
11
 
5
12
  ## 5.3.3
6
13
  Thu, 20 Nov 2025 22:30:37 GMT
@@ -1 +1 @@
1
- {"version":3,"file":"ElectronBackend.js","sourceRoot":"","sources":["../../src/ElectronBackend.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;;;;;;;;;;;AAE/F,yDAAuC","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\nexport * from \"./backend/ElectronHost\";\n"]}
1
+ {"version":3,"file":"ElectronBackend.js","sourceRoot":"","sources":["../../src/ElectronBackend.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;;;;;;;;;;;AAE/F,yDAAuC","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\nexport * from \"./backend/ElectronHost\";\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ElectronFrontend.js","sourceRoot":"","sources":["../../src/ElectronFrontend.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;;;;;;;;;;;AAE/F,yDAAuC","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\nexport * from \"./frontend/ElectronApp\";\n"]}
1
+ {"version":3,"file":"ElectronFrontend.js","sourceRoot":"","sources":["../../src/ElectronFrontend.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;;;;;;;;;;;AAE/F,yDAAuC","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\nexport * from \"./frontend/ElectronApp\";\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ElectronPreload.js","sourceRoot":"","sources":["../../../src/backend/ElectronPreload.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AAE/F,uCAAsD;AAGtD;;;GAGG;AAEH,SAAS,WAAW,CAAC,OAAe;IAClC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,+HAA+H;AAC/H,MAAM,WAAW,GAAqB;IACpC,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW;QAClC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,sBAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,WAAW,CAAC,OAAe,EAAE,QAA0B;QACrD,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,sBAAW,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IACD,cAAc,CAAC,OAAe,EAAE,QAA0B;QACxD,sBAAW,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,OAAe,EAAE,QAA0B;QAC9C,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,sBAAW,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,GAAG,IAAW;QAC1C,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,sBAAW,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;CACF,CAAC;AAEF,qGAAqG;AACrG,wBAAa,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC","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 { contextBridge, ipcRenderer } from \"electron\";\nimport type { ElectronListener, ITwinElectronApi } from \"../common/ITwinElectronApi\";\n\n/**\n * This file is loaded as an Electron preload script\n * (see https://www.electronjs.org/docs/api/browser-window#class-browserwindow) from ElectronMain.ts\n */\n\nfunction checkPrefix(channel: string) {\n if (!channel.startsWith(\"itwin.\"))\n throw new Error(`illegal channel name '${channel}'`);\n}\n\n/** the implementation of the private api between the frontend (renderer) and backend (main) iTwin.js processes in Electron. */\nconst frontendApi: ITwinElectronApi = {\n send(channel: string, ...data: any[]) {\n checkPrefix(channel);\n ipcRenderer.send(channel, ...data);\n },\n addListener(channel: string, listener: ElectronListener) {\n checkPrefix(channel);\n ipcRenderer.addListener(channel, listener);\n },\n removeListener(channel: string, listener: ElectronListener) {\n ipcRenderer.removeListener(channel, listener);\n },\n once(channel: string, listener: ElectronListener) {\n checkPrefix(channel);\n ipcRenderer.once(channel, listener);\n },\n async invoke(channel: string, ...data: any[]): Promise<any> {\n checkPrefix(channel);\n return ipcRenderer.invoke(channel, ...data);\n },\n};\n\n// this adds the frontendApi object under the name `window.itwinjs` in the frontend Electron process.\ncontextBridge.exposeInMainWorld(\"itwinjs\", frontendApi);\n"]}
1
+ {"version":3,"file":"ElectronPreload.js","sourceRoot":"","sources":["../../../src/backend/ElectronPreload.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AAE/F,uCAAsD;AAGtD;;;GAGG;AAEH,SAAS,WAAW,CAAC,OAAe;IAClC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,+HAA+H;AAC/H,MAAM,WAAW,GAAqB;IACpC,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW;QAClC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,sBAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,WAAW,CAAC,OAAe,EAAE,QAA0B;QACrD,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,sBAAW,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IACD,cAAc,CAAC,OAAe,EAAE,QAA0B;QACxD,sBAAW,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,OAAe,EAAE,QAA0B;QAC9C,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,sBAAW,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,GAAG,IAAW;QAC1C,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,sBAAW,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;CACF,CAAC;AAEF,qGAAqG;AACrG,wBAAa,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC","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 { contextBridge, ipcRenderer } from \"electron\";\r\nimport type { ElectronListener, ITwinElectronApi } from \"../common/ITwinElectronApi\";\r\n\r\n/**\r\n * This file is loaded as an Electron preload script\r\n * (see https://www.electronjs.org/docs/api/browser-window#class-browserwindow) from ElectronMain.ts\r\n */\r\n\r\nfunction checkPrefix(channel: string) {\r\n if (!channel.startsWith(\"itwin.\"))\r\n throw new Error(`illegal channel name '${channel}'`);\r\n}\r\n\r\n/** the implementation of the private api between the frontend (renderer) and backend (main) iTwin.js processes in Electron. */\r\nconst frontendApi: ITwinElectronApi = {\r\n send(channel: string, ...data: any[]) {\r\n checkPrefix(channel);\r\n ipcRenderer.send(channel, ...data);\r\n },\r\n addListener(channel: string, listener: ElectronListener) {\r\n checkPrefix(channel);\r\n ipcRenderer.addListener(channel, listener);\r\n },\r\n removeListener(channel: string, listener: ElectronListener) {\r\n ipcRenderer.removeListener(channel, listener);\r\n },\r\n once(channel: string, listener: ElectronListener) {\r\n checkPrefix(channel);\r\n ipcRenderer.once(channel, listener);\r\n },\r\n async invoke(channel: string, ...data: any[]): Promise<any> {\r\n checkPrefix(channel);\r\n return ipcRenderer.invoke(channel, ...data);\r\n },\r\n};\r\n\r\n// this adds the frontendApi object under the name `window.itwinjs` in the frontend Electron process.\r\ncontextBridge.exposeInMainWorld(\"itwinjs\", frontendApi);\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ElectronIpcInterface.js","sourceRoot":"","sources":["../../../src/common/ElectronIpcInterface.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAIH,gBAAgB;AACH,QAAA,kBAAkB,GAAG;IAChC,aAAa,EAAE,yBAAyB;CAChC,CAAC","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/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { AsyncMethodsOf } from \"@itwin/core-bentley\";\n\n/** @internal */\nexport const electronIpcStrings = {\n dialogChannel: \"itwinjs-electron/dialog\",\n} as const;\n\n/** Asynchronous methods of dialog module in an Electron app.\n * @beta\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `Electron.Dialog` from `electron` instead.\n */\nexport type DialogModuleMethod = AsyncMethodsOf<Electron.Dialog>;\n"]}
1
+ {"version":3,"file":"ElectronIpcInterface.js","sourceRoot":"","sources":["../../../src/common/ElectronIpcInterface.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAIH,gBAAgB;AACH,QAAA,kBAAkB,GAAG;IAChC,aAAa,EAAE,yBAAyB;CAChC,CAAC","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/** @packageDocumentation\r\n * @module RpcInterface\r\n */\r\n\r\nimport { AsyncMethodsOf } from \"@itwin/core-bentley\";\r\n\r\n/** @internal */\r\nexport const electronIpcStrings = {\r\n dialogChannel: \"itwinjs-electron/dialog\",\r\n} as const;\r\n\r\n/** Asynchronous methods of dialog module in an Electron app.\r\n * @beta\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `Electron.Dialog` from `electron` instead.\r\n */\r\nexport type DialogModuleMethod = AsyncMethodsOf<Electron.Dialog>;\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ElectronIpcTransport.js","sourceRoot":"","sources":["../../../src/common/ElectronIpcTransport.ts"],"names":[],"mappings":"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","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 { BentleyError, BentleyStatus, ProcessDetector } from \"@itwin/core-bentley\";\nimport {\n IModelError, iTwinChannel, RpcPushChannel, RpcPushConnection, RpcRequestFulfillment, RpcSerializedValue, SerializedRpcRequest,\n} from \"@itwin/core-common\";\nimport { ElectronPushConnection, ElectronPushTransport } from \"./ElectronPush\";\nimport { ElectronRpcConfiguration } from \"./ElectronRpcManager\";\nimport { ElectronRpcProtocol } from \"./ElectronRpcProtocol\";\nimport { ElectronRpcRequest } from \"./ElectronRpcRequest\";\n\nconst OBJECTS_CHANNEL = iTwinChannel(\"rpc.objects\");\nconst DATA_CHANNEL = iTwinChannel(\"rpc.data\");\n\ninterface PartialPayload { id: string, index: number, data: Uint8Array }\n\n/** @internal */\nexport interface IpcTransportMessage { id: string, parameters?: RpcSerializedValue, result?: RpcSerializedValue }\n\n/** @internal */\nexport abstract class ElectronIpcTransport<TIn extends IpcTransportMessage = IpcTransportMessage, TOut extends IpcTransportMessage = IpcTransportMessage> {\n private _partials: Map<string, { message: TIn, received: number } | PartialPayload[]>;\n private _removeListeners: VoidFunction[] = [];\n protected _protocol: ElectronRpcProtocol;\n\n public get protocol() { return this._protocol; }\n\n public sendRequest(request: SerializedRpcRequest) {\n const value = this._extractValue(request);\n this._send(request, value);\n }\n\n public constructor(protocol: ElectronRpcProtocol) {\n this._protocol = protocol;\n this._partials = new Map();\n this._setupDataChannel();\n this._setupObjectsChannel();\n this.setupPush();\n }\n\n protected setupPush() { }\n\n private _setupDataChannel() {\n const removeListener = this.protocol.ipcSocket.addListener(DATA_CHANNEL, async (evt: any, chunk: PartialPayload) => {\n let pending = this._partials.get(chunk.id);\n if (!pending) {\n pending = [];\n this._partials.set(chunk.id, pending);\n }\n\n if (Array.isArray(pending)) {\n pending.push(chunk);\n } else {\n ++pending.received;\n\n const value = this._extractValue(pending.message);\n value.data[chunk.index] = chunk.data;\n\n if (pending.received === (value.chunks || 0)) {\n this.handleComplete(pending.message.id, evt);\n }\n }\n });\n this._removeListeners.push(removeListener);\n }\n\n private _setupObjectsChannel() {\n const removeListener = this.protocol.ipcSocket.addListener(OBJECTS_CHANNEL, async (evt: any, message: TIn) => {\n const pending = this._partials.get(message.id);\n if (pending && !Array.isArray(pending)) {\n throw new IModelError(BentleyStatus.ERROR, `Message already received for id \"${message.id}\".`);\n }\n\n const partial = { message, received: 0 };\n this._partials.set(message.id, partial);\n const value = this._extractValue(partial.message);\n\n if (pending && Array.isArray(pending)) {\n for (const chunk of pending) {\n ++partial.received;\n value.data[chunk.index] = chunk.data;\n }\n }\n\n if (partial.received === (value.chunks || 0)) {\n this.handleComplete(message.id, evt);\n }\n });\n this._removeListeners.push(removeListener);\n }\n\n private _extractValue(t: IpcTransportMessage): RpcSerializedValue {\n if (t.parameters) {\n return t.parameters;\n }\n\n if (t.result) {\n return t.result;\n }\n\n throw new IModelError(BentleyStatus.ERROR, \"Unknown value type.\");\n }\n\n private _send(message: IpcTransportMessage, value: RpcSerializedValue, evt?: any) {\n const chunks = value.data;\n if (chunks.length) {\n value.chunks = chunks.length;\n value.data = [];\n }\n\n this.performSend(OBJECTS_CHANNEL, message, evt);\n\n for (let index = 0; index !== chunks.length; ++index) {\n const chunk: PartialPayload = { id: message.id, index, data: chunks[index] };\n this.performSend(DATA_CHANNEL, chunk, evt);\n }\n }\n\n protected performSend(channel: string, message: any, evt: any) {\n (evt ? evt.sender : this.protocol.ipcSocket).send(channel, message);\n }\n\n protected abstract handleComplete(id: string, evt: any): void;\n\n /** @internal */\n public sendResponse(message: TOut, evt: any) {\n const value = this._extractValue(message);\n this._send(message, value, evt);\n }\n\n protected loadMessage(id: string) {\n const partial = this._partials.get(id);\n if (!partial || Array.isArray(partial)) {\n throw new IModelError(BentleyStatus.ERROR, `Incomplete transmission for id \"${id}\".`);\n }\n\n this._partials.delete(id);\n return partial.message;\n }\n\n public cleanup() {\n this._removeListeners.forEach((removeListener) => removeListener());\n }\n}\n\n/** @internal */\nexport class FrontendIpcTransport extends ElectronIpcTransport<RpcRequestFulfillment> {\n private _pushTransport?: ElectronPushTransport;\n\n protected override setupPush() {\n const pushTransport = new ElectronPushTransport(this);\n this._pushTransport = pushTransport;\n RpcPushChannel.setup(pushTransport);\n }\n\n protected async handleComplete(id: string) {\n const message = this.loadMessage(id);\n\n if (this._pushTransport && this._pushTransport.consume(message)) {\n return;\n }\n\n const protocol = this._protocol;\n const request = protocol.requests.get(message.id) as ElectronRpcRequest;\n request.notifyResponse(message);\n }\n}\n\n/** @internal */\nexport class BackendIpcTransport extends ElectronIpcTransport<SerializedRpcRequest, RpcRequestFulfillment> {\n private _browserWindow: any;\n\n protected override setupPush() {\n RpcPushConnection.for = (channel, client) => new ElectronPushConnection(channel, client, this);\n RpcPushChannel.enabled = true;\n }\n\n protected async handleComplete(id: string, evt: any) {\n const message = this.loadMessage(id);\n\n let response: RpcRequestFulfillment;\n try {\n const protocol = this._protocol;\n response = await protocol.fulfill(message);\n } catch (err) {\n response = await RpcRequestFulfillment.forUnknownError(message, err);\n }\n\n const raw = response.rawResult;\n response.rawResult = undefined; // Otherwise, it will be serialized in IPC layer and large responses will then crash the app\n this.sendResponse(response, evt);\n response.rawResult = raw;\n }\n\n protected override performSend(channel: string, message: any, evt: any) {\n if (evt) {\n return super.performSend(channel, message, evt);\n }\n\n this._requireBrowserWindow();\n const target = ElectronRpcConfiguration.targetWindowId;\n const windows = target ? [this._browserWindow.fromId(target)] : this._browserWindow.getAllWindows();\n windows.forEach((window: any) => window.webContents.send(channel, message));\n }\n\n private _requireBrowserWindow() {\n if (this._browserWindow) {\n return;\n }\n\n try { // Wrapping require in a try/catch signals to webpack that this is only an optional dependency\n this._browserWindow = require(\"electron\").BrowserWindow; // eslint-disable-line @typescript-eslint/no-require-imports\n } catch (err) {\n throw new IModelError(BentleyStatus.ERROR, `Error requiring electron`, () => BentleyError.getErrorProps(err));\n }\n }\n}\n\nlet transport: ElectronIpcTransport | undefined;\n\n/** @internal */\nexport function initializeIpc(protocol: ElectronRpcProtocol) {\n if (transport && transport.protocol !== protocol) {\n transport.cleanup();\n transport = undefined;\n }\n\n if (undefined === transport)\n transport = ProcessDetector.isElectronAppFrontend ? new FrontendIpcTransport(protocol) : new BackendIpcTransport(protocol);\n\n return transport;\n}\n"]}
1
+ {"version":3,"file":"ElectronIpcTransport.js","sourceRoot":"","sources":["../../../src/common/ElectronIpcTransport.ts"],"names":[],"mappings":"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","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 { BentleyError, BentleyStatus, ProcessDetector } from \"@itwin/core-bentley\";\r\nimport {\r\n IModelError, iTwinChannel, RpcPushChannel, RpcPushConnection, RpcRequestFulfillment, RpcSerializedValue, SerializedRpcRequest,\r\n} from \"@itwin/core-common\";\r\nimport { ElectronPushConnection, ElectronPushTransport } from \"./ElectronPush\";\r\nimport { ElectronRpcConfiguration } from \"./ElectronRpcManager\";\r\nimport { ElectronRpcProtocol } from \"./ElectronRpcProtocol\";\r\nimport { ElectronRpcRequest } from \"./ElectronRpcRequest\";\r\n\r\nconst OBJECTS_CHANNEL = iTwinChannel(\"rpc.objects\");\r\nconst DATA_CHANNEL = iTwinChannel(\"rpc.data\");\r\n\r\ninterface PartialPayload { id: string, index: number, data: Uint8Array }\r\n\r\n/** @internal */\r\nexport interface IpcTransportMessage { id: string, parameters?: RpcSerializedValue, result?: RpcSerializedValue }\r\n\r\n/** @internal */\r\nexport abstract class ElectronIpcTransport<TIn extends IpcTransportMessage = IpcTransportMessage, TOut extends IpcTransportMessage = IpcTransportMessage> {\r\n private _partials: Map<string, { message: TIn, received: number } | PartialPayload[]>;\r\n private _removeListeners: VoidFunction[] = [];\r\n protected _protocol: ElectronRpcProtocol;\r\n\r\n public get protocol() { return this._protocol; }\r\n\r\n public sendRequest(request: SerializedRpcRequest) {\r\n const value = this._extractValue(request);\r\n this._send(request, value);\r\n }\r\n\r\n public constructor(protocol: ElectronRpcProtocol) {\r\n this._protocol = protocol;\r\n this._partials = new Map();\r\n this._setupDataChannel();\r\n this._setupObjectsChannel();\r\n this.setupPush();\r\n }\r\n\r\n protected setupPush() { }\r\n\r\n private _setupDataChannel() {\r\n const removeListener = this.protocol.ipcSocket.addListener(DATA_CHANNEL, async (evt: any, chunk: PartialPayload) => {\r\n let pending = this._partials.get(chunk.id);\r\n if (!pending) {\r\n pending = [];\r\n this._partials.set(chunk.id, pending);\r\n }\r\n\r\n if (Array.isArray(pending)) {\r\n pending.push(chunk);\r\n } else {\r\n ++pending.received;\r\n\r\n const value = this._extractValue(pending.message);\r\n value.data[chunk.index] = chunk.data;\r\n\r\n if (pending.received === (value.chunks || 0)) {\r\n this.handleComplete(pending.message.id, evt);\r\n }\r\n }\r\n });\r\n this._removeListeners.push(removeListener);\r\n }\r\n\r\n private _setupObjectsChannel() {\r\n const removeListener = this.protocol.ipcSocket.addListener(OBJECTS_CHANNEL, async (evt: any, message: TIn) => {\r\n const pending = this._partials.get(message.id);\r\n if (pending && !Array.isArray(pending)) {\r\n throw new IModelError(BentleyStatus.ERROR, `Message already received for id \"${message.id}\".`);\r\n }\r\n\r\n const partial = { message, received: 0 };\r\n this._partials.set(message.id, partial);\r\n const value = this._extractValue(partial.message);\r\n\r\n if (pending && Array.isArray(pending)) {\r\n for (const chunk of pending) {\r\n ++partial.received;\r\n value.data[chunk.index] = chunk.data;\r\n }\r\n }\r\n\r\n if (partial.received === (value.chunks || 0)) {\r\n this.handleComplete(message.id, evt);\r\n }\r\n });\r\n this._removeListeners.push(removeListener);\r\n }\r\n\r\n private _extractValue(t: IpcTransportMessage): RpcSerializedValue {\r\n if (t.parameters) {\r\n return t.parameters;\r\n }\r\n\r\n if (t.result) {\r\n return t.result;\r\n }\r\n\r\n throw new IModelError(BentleyStatus.ERROR, \"Unknown value type.\");\r\n }\r\n\r\n private _send(message: IpcTransportMessage, value: RpcSerializedValue, evt?: any) {\r\n const chunks = value.data;\r\n if (chunks.length) {\r\n value.chunks = chunks.length;\r\n value.data = [];\r\n }\r\n\r\n this.performSend(OBJECTS_CHANNEL, message, evt);\r\n\r\n for (let index = 0; index !== chunks.length; ++index) {\r\n const chunk: PartialPayload = { id: message.id, index, data: chunks[index] };\r\n this.performSend(DATA_CHANNEL, chunk, evt);\r\n }\r\n }\r\n\r\n protected performSend(channel: string, message: any, evt: any) {\r\n (evt ? evt.sender : this.protocol.ipcSocket).send(channel, message);\r\n }\r\n\r\n protected abstract handleComplete(id: string, evt: any): void;\r\n\r\n /** @internal */\r\n public sendResponse(message: TOut, evt: any) {\r\n const value = this._extractValue(message);\r\n this._send(message, value, evt);\r\n }\r\n\r\n protected loadMessage(id: string) {\r\n const partial = this._partials.get(id);\r\n if (!partial || Array.isArray(partial)) {\r\n throw new IModelError(BentleyStatus.ERROR, `Incomplete transmission for id \"${id}\".`);\r\n }\r\n\r\n this._partials.delete(id);\r\n return partial.message;\r\n }\r\n\r\n public cleanup() {\r\n this._removeListeners.forEach((removeListener) => removeListener());\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class FrontendIpcTransport extends ElectronIpcTransport<RpcRequestFulfillment> {\r\n private _pushTransport?: ElectronPushTransport;\r\n\r\n protected override setupPush() {\r\n const pushTransport = new ElectronPushTransport(this);\r\n this._pushTransport = pushTransport;\r\n RpcPushChannel.setup(pushTransport);\r\n }\r\n\r\n protected async handleComplete(id: string) {\r\n const message = this.loadMessage(id);\r\n\r\n if (this._pushTransport && this._pushTransport.consume(message)) {\r\n return;\r\n }\r\n\r\n const protocol = this._protocol;\r\n const request = protocol.requests.get(message.id) as ElectronRpcRequest;\r\n request.notifyResponse(message);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class BackendIpcTransport extends ElectronIpcTransport<SerializedRpcRequest, RpcRequestFulfillment> {\r\n private _browserWindow: any;\r\n\r\n protected override setupPush() {\r\n RpcPushConnection.for = (channel, client) => new ElectronPushConnection(channel, client, this);\r\n RpcPushChannel.enabled = true;\r\n }\r\n\r\n protected async handleComplete(id: string, evt: any) {\r\n const message = this.loadMessage(id);\r\n\r\n let response: RpcRequestFulfillment;\r\n try {\r\n const protocol = this._protocol;\r\n response = await protocol.fulfill(message);\r\n } catch (err) {\r\n response = await RpcRequestFulfillment.forUnknownError(message, err);\r\n }\r\n\r\n const raw = response.rawResult;\r\n response.rawResult = undefined; // Otherwise, it will be serialized in IPC layer and large responses will then crash the app\r\n this.sendResponse(response, evt);\r\n response.rawResult = raw;\r\n }\r\n\r\n protected override performSend(channel: string, message: any, evt: any) {\r\n if (evt) {\r\n return super.performSend(channel, message, evt);\r\n }\r\n\r\n this._requireBrowserWindow();\r\n const target = ElectronRpcConfiguration.targetWindowId;\r\n const windows = target ? [this._browserWindow.fromId(target)] : this._browserWindow.getAllWindows();\r\n windows.forEach((window: any) => window.webContents.send(channel, message));\r\n }\r\n\r\n private _requireBrowserWindow() {\r\n if (this._browserWindow) {\r\n return;\r\n }\r\n\r\n try { // Wrapping require in a try/catch signals to webpack that this is only an optional dependency\r\n this._browserWindow = require(\"electron\").BrowserWindow; // eslint-disable-line @typescript-eslint/no-require-imports\r\n } catch (err) {\r\n throw new IModelError(BentleyStatus.ERROR, `Error requiring electron`, () => BentleyError.getErrorProps(err));\r\n }\r\n }\r\n}\r\n\r\nlet transport: ElectronIpcTransport | undefined;\r\n\r\n/** @internal */\r\nexport function initializeIpc(protocol: ElectronRpcProtocol) {\r\n if (transport && transport.protocol !== protocol) {\r\n transport.cleanup();\r\n transport = undefined;\r\n }\r\n\r\n if (undefined === transport)\r\n transport = ProcessDetector.isElectronAppFrontend ? new FrontendIpcTransport(protocol) : new BackendIpcTransport(protocol);\r\n\r\n return transport;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ElectronPush.js","sourceRoot":"","sources":["../../../src/common/ElectronPush.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,oDAA+H;AAG/H,MAAM,IAAI,GAAG,UAAU,CAAC;AAExB,gBAAgB;AAChB,MAAa,qBAAsB,SAAQ,8BAAgB;IACjD,IAAI,CAAuB;IAC3B,KAAK,GAAW,CAAC,CAAC,CAAC;IAE3B,IAAW,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAExC,YAAmB,GAAyB;QAC1C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAEM,OAAO,CAAC,QAA+B;QAC5C,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE7B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,WAAW,GAAG,2BAAa,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnF,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAzBD,sDAyBC;AAED,gBAAgB;AAChB,MAAa,sBAA0B,SAAQ,+BAAoB;IACzD,IAAI,CAAsB;IAC1B,KAAK,GAAW,CAAC,CAAC,CAAC;IAE3B,YAAmB,OAA0B,EAAE,MAAe,EAAE,GAAwB;QACtF,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAgB;QAChC,MAAM,MAAM,GAAG,2BAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACxE,MAAM,WAAW,GAA0B,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9I,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC;CACF;AAdD,wDAcC","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 { RpcMarshaling, RpcPushChannel, RpcPushConnection, RpcPushTransport, RpcRequestFulfillment } from \"@itwin/core-common\";\nimport { BackendIpcTransport, FrontendIpcTransport } from \"./ElectronIpcTransport\";\n\nconst PUSH = \"__push__\";\n\n/** @internal */\nexport class ElectronPushTransport extends RpcPushTransport {\n private _ipc: FrontendIpcTransport;\n private _last: number = -1;\n\n public get last() { return this._last; }\n\n public constructor(ipc: FrontendIpcTransport) {\n super();\n this._ipc = ipc;\n }\n\n public consume(response: RpcRequestFulfillment): boolean {\n if (response.interfaceName !== PUSH) {\n return false;\n }\n\n this._last = response.status;\n\n if (this.onMessage) {\n const messageData = RpcMarshaling.deserialize(this._ipc.protocol, response.result);\n this.onMessage(response.id, messageData);\n }\n\n return true;\n }\n}\n\n/** @internal */\nexport class ElectronPushConnection<T> extends RpcPushConnection<T> {\n private _ipc: BackendIpcTransport;\n private _next: number = -1;\n\n public constructor(channel: RpcPushChannel<T>, client: unknown, ipc: BackendIpcTransport) {\n super(channel, client);\n this._ipc = ipc;\n }\n\n public async send(messageData: any) {\n const result = RpcMarshaling.serialize(this._ipc.protocol, messageData);\n const fulfillment: RpcRequestFulfillment = { result, rawResult: messageData, interfaceName: PUSH, id: this.channel.id, status: ++this._next };\n this._ipc.sendResponse(fulfillment, undefined);\n }\n}\n"]}
1
+ {"version":3,"file":"ElectronPush.js","sourceRoot":"","sources":["../../../src/common/ElectronPush.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,oDAA+H;AAG/H,MAAM,IAAI,GAAG,UAAU,CAAC;AAExB,gBAAgB;AAChB,MAAa,qBAAsB,SAAQ,8BAAgB;IACjD,IAAI,CAAuB;IAC3B,KAAK,GAAW,CAAC,CAAC,CAAC;IAE3B,IAAW,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAExC,YAAmB,GAAyB;QAC1C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAEM,OAAO,CAAC,QAA+B;QAC5C,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE7B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,WAAW,GAAG,2BAAa,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnF,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAzBD,sDAyBC;AAED,gBAAgB;AAChB,MAAa,sBAA0B,SAAQ,+BAAoB;IACzD,IAAI,CAAsB;IAC1B,KAAK,GAAW,CAAC,CAAC,CAAC;IAE3B,YAAmB,OAA0B,EAAE,MAAe,EAAE,GAAwB;QACtF,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAgB;QAChC,MAAM,MAAM,GAAG,2BAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACxE,MAAM,WAAW,GAA0B,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9I,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC;CACF;AAdD,wDAcC","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 { RpcMarshaling, RpcPushChannel, RpcPushConnection, RpcPushTransport, RpcRequestFulfillment } from \"@itwin/core-common\";\r\nimport { BackendIpcTransport, FrontendIpcTransport } from \"./ElectronIpcTransport\";\r\n\r\nconst PUSH = \"__push__\";\r\n\r\n/** @internal */\r\nexport class ElectronPushTransport extends RpcPushTransport {\r\n private _ipc: FrontendIpcTransport;\r\n private _last: number = -1;\r\n\r\n public get last() { return this._last; }\r\n\r\n public constructor(ipc: FrontendIpcTransport) {\r\n super();\r\n this._ipc = ipc;\r\n }\r\n\r\n public consume(response: RpcRequestFulfillment): boolean {\r\n if (response.interfaceName !== PUSH) {\r\n return false;\r\n }\r\n\r\n this._last = response.status;\r\n\r\n if (this.onMessage) {\r\n const messageData = RpcMarshaling.deserialize(this._ipc.protocol, response.result);\r\n this.onMessage(response.id, messageData);\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ElectronPushConnection<T> extends RpcPushConnection<T> {\r\n private _ipc: BackendIpcTransport;\r\n private _next: number = -1;\r\n\r\n public constructor(channel: RpcPushChannel<T>, client: unknown, ipc: BackendIpcTransport) {\r\n super(channel, client);\r\n this._ipc = ipc;\r\n }\r\n\r\n public async send(messageData: any) {\r\n const result = RpcMarshaling.serialize(this._ipc.protocol, messageData);\r\n const fulfillment: RpcRequestFulfillment = { result, rawResult: messageData, interfaceName: PUSH, id: this.channel.id, status: ++this._next };\r\n this._ipc.sendResponse(fulfillment, undefined);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ElectronRpcManager.js","sourceRoot":"","sources":["../../../src/common/ElectronRpcManager.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,oDAAuJ;AACvJ,+DAA4D;AAE5D;;GAEG;AACH,MAAsB,wBAAyB,SAAQ,8BAAgB;IAE9D,MAAM,CAAC,cAAc,CAAU;CAIvC;AAND,4DAMC;AAED;;GAEG;AACH,MAAa,kBAAmB,SAAQ,wBAAU;IAChD,yEAAyE;IAClE,MAAM,CAAC,kBAAkB,CAAC,WAA8B,EAAE,UAAqC;QACpG,OAAO,kBAAkB,CAAC,qBAAqB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC3E,CAAC;IAED,wEAAwE;IACjE,MAAM,CAAC,iBAAiB,CAAC,UAA4B,EAAE,UAAqC;QACjG,OAAO,kBAAkB,CAAC,qBAAqB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,SAAoB,EAAE,IAA+B;QACxF,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAM,SAAQ,wBAAwB;YAC5C,UAAU,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC;YAC9B,QAAQ,GAAwB,IAAI,yCAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;SACjF,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,8BAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,QAAQ,GAAG,8BAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjD,8BAAgB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAEhD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,wEAAwE;IACjE,MAAM,CAAC,iBAAiB;QAC7B,OAAO,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;IACjD,CAAC;IAEO,MAAM,CAAC,kBAAkB;QAC/B,MAAM,WAAW,GAAG,yBAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAE3D,KAAK,MAAM,CAAC,EAAE,YAAY,CAAC,IAAI,WAAW,EAAE,CAAC;YAC3C,wBAAU,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;CACF;AAxCD,gDAwCC","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 { IpcSocket, IpcSocketBackend, IpcSocketFrontend, RpcConfiguration, RpcInterfaceDefinition, RpcManager, RpcRegistry } from \"@itwin/core-common\";\nimport { ElectronRpcProtocol } from \"./ElectronRpcProtocol\";\n\n/** RPC interface configuration for an Electron-based application.\n * @internal\n */\nexport abstract class ElectronRpcConfiguration extends RpcConfiguration {\n\n public static targetWindowId?: number;\n\n /** The protocol of the configuration. */\n public abstract override protocol: ElectronRpcProtocol;\n}\n\n/** Coordinates usage of RPC interfaces for an Electron-based application.\n * @internal\n */\nexport class ElectronRpcManager extends RpcManager {\n /** Initializes ElectronRpcManager for the frontend of an application. */\n public static initializeFrontend(ipcFrontend: IpcSocketFrontend, interfaces?: RpcInterfaceDefinition[]): ElectronRpcConfiguration {\n return ElectronRpcManager.performInitialization(ipcFrontend, interfaces);\n }\n\n /** Initializes ElectronRpcManager for the backend of an application. */\n public static initializeBackend(ipcBackend: IpcSocketBackend, interfaces?: RpcInterfaceDefinition[]): ElectronRpcConfiguration {\n return ElectronRpcManager.performInitialization(ipcBackend, interfaces);\n }\n\n private static performInitialization(ipcSocket: IpcSocket, rpcs?: RpcInterfaceDefinition[]): ElectronRpcConfiguration {\n const interfaces = rpcs ?? [];\n const config = class extends ElectronRpcConfiguration {\n public interfaces = () => interfaces;\n public protocol: ElectronRpcProtocol = new ElectronRpcProtocol(this, ipcSocket);\n };\n\n for (const def of interfaces) {\n RpcConfiguration.assign(def, () => config);\n }\n\n const instance = RpcConfiguration.obtain(config);\n RpcConfiguration.initializeInterfaces(instance);\n\n return instance;\n }\n\n /** Terminates ElectronRpcManager for the frontend of an application. */\n public static terminateFrontend() {\n return ElectronRpcManager.performTermination();\n }\n\n private static performTermination() {\n const definitions = RpcRegistry.instance.definitionClasses;\n\n for (const [, interfaceDef] of definitions) {\n RpcManager.terminateInterface(interfaceDef);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ElectronRpcManager.js","sourceRoot":"","sources":["../../../src/common/ElectronRpcManager.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,oDAAuJ;AACvJ,+DAA4D;AAE5D;;GAEG;AACH,MAAsB,wBAAyB,SAAQ,8BAAgB;IAE9D,MAAM,CAAC,cAAc,CAAU;CAIvC;AAND,4DAMC;AAED;;GAEG;AACH,MAAa,kBAAmB,SAAQ,wBAAU;IAChD,yEAAyE;IAClE,MAAM,CAAC,kBAAkB,CAAC,WAA8B,EAAE,UAAqC;QACpG,OAAO,kBAAkB,CAAC,qBAAqB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC3E,CAAC;IAED,wEAAwE;IACjE,MAAM,CAAC,iBAAiB,CAAC,UAA4B,EAAE,UAAqC;QACjG,OAAO,kBAAkB,CAAC,qBAAqB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,SAAoB,EAAE,IAA+B;QACxF,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAM,SAAQ,wBAAwB;YAC5C,UAAU,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC;YAC9B,QAAQ,GAAwB,IAAI,yCAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;SACjF,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,8BAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,QAAQ,GAAG,8BAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjD,8BAAgB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAEhD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,wEAAwE;IACjE,MAAM,CAAC,iBAAiB;QAC7B,OAAO,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;IACjD,CAAC;IAEO,MAAM,CAAC,kBAAkB;QAC/B,MAAM,WAAW,GAAG,yBAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAE3D,KAAK,MAAM,CAAC,EAAE,YAAY,CAAC,IAAI,WAAW,EAAE,CAAC;YAC3C,wBAAU,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;CACF;AAxCD,gDAwCC","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 { IpcSocket, IpcSocketBackend, IpcSocketFrontend, RpcConfiguration, RpcInterfaceDefinition, RpcManager, RpcRegistry } from \"@itwin/core-common\";\r\nimport { ElectronRpcProtocol } from \"./ElectronRpcProtocol\";\r\n\r\n/** RPC interface configuration for an Electron-based application.\r\n * @internal\r\n */\r\nexport abstract class ElectronRpcConfiguration extends RpcConfiguration {\r\n\r\n public static targetWindowId?: number;\r\n\r\n /** The protocol of the configuration. */\r\n public abstract override protocol: ElectronRpcProtocol;\r\n}\r\n\r\n/** Coordinates usage of RPC interfaces for an Electron-based application.\r\n * @internal\r\n */\r\nexport class ElectronRpcManager extends RpcManager {\r\n /** Initializes ElectronRpcManager for the frontend of an application. */\r\n public static initializeFrontend(ipcFrontend: IpcSocketFrontend, interfaces?: RpcInterfaceDefinition[]): ElectronRpcConfiguration {\r\n return ElectronRpcManager.performInitialization(ipcFrontend, interfaces);\r\n }\r\n\r\n /** Initializes ElectronRpcManager for the backend of an application. */\r\n public static initializeBackend(ipcBackend: IpcSocketBackend, interfaces?: RpcInterfaceDefinition[]): ElectronRpcConfiguration {\r\n return ElectronRpcManager.performInitialization(ipcBackend, interfaces);\r\n }\r\n\r\n private static performInitialization(ipcSocket: IpcSocket, rpcs?: RpcInterfaceDefinition[]): ElectronRpcConfiguration {\r\n const interfaces = rpcs ?? [];\r\n const config = class extends ElectronRpcConfiguration {\r\n public interfaces = () => interfaces;\r\n public protocol: ElectronRpcProtocol = new ElectronRpcProtocol(this, ipcSocket);\r\n };\r\n\r\n for (const def of interfaces) {\r\n RpcConfiguration.assign(def, () => config);\r\n }\r\n\r\n const instance = RpcConfiguration.obtain(config);\r\n RpcConfiguration.initializeInterfaces(instance);\r\n\r\n return instance;\r\n }\r\n\r\n /** Terminates ElectronRpcManager for the frontend of an application. */\r\n public static terminateFrontend() {\r\n return ElectronRpcManager.performTermination();\r\n }\r\n\r\n private static performTermination() {\r\n const definitions = RpcRegistry.instance.definitionClasses;\r\n\r\n for (const [, interfaceDef] of definitions) {\r\n RpcManager.terminateInterface(interfaceDef);\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ElectronRpcProtocol.js","sourceRoot":"","sources":["../../../src/common/ElectronRpcProtocol.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAoD;AACpD,oDAA+G;AAC/G,iEAAkG;AAElG,6DAA0D;AAE1D;;GAEG;AACH,MAAa,mBAAoB,SAAQ,yBAAW;IAC3C,MAAM,CAAC,SAAS,GAAqC,IAAI,GAAG,EAAE,CAAC;IAC/D,SAAS,CAAY;IAE5B,+CAA+C;IAC/B,WAAW,GAAG,uCAAkB,CAAC;IAEjD,8DAA8D;IAC9C,sBAAsB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;IAE1D,gBAAgB;IACT,QAAQ,GAAoC,IAAI,GAAG,EAAE,CAAC;IAE7D,gBAAgB;IACA,SAAS,CAAiE;IAE1F,uCAAuC;IACvC,YAAmB,aAAuC,EAAE,SAAoB;QAC9E,KAAK,CAAC,aAAa,CAAC,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAA,oCAAa,EAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,gBAAgB;IACA,sBAAsB,CAAC,UAAkC,EAAE,OAAqB;QAC9F,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,gBAAgB;IACA,oBAAoB,CAAC,UAAkC,EAAE,KAAmB;QAC1F,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,gBAAgB;IACA,qBAAqB,CAAC,UAAkC,EAAE,OAAqB;QAC7F,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAED,gBAAgB;IACA,mBAAmB,CAAC,UAAkC,EAAE,KAAmB;QACzF,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAEO,iBAAiB,CAAC,UAAkC;QAC1D,IAAI,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC;YAC7D,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,kBAAkB,UAAU,CAAC,aAAa,2CAA2C,CAAC,CAAC;QAEpI,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAEO,cAAc,CAAC,UAAkC;QACvD,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACjE,CAAC;;AApDH,kDAqDC","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/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { BentleyStatus } from \"@itwin/core-bentley\";\nimport { IModelError, IpcSocket, RpcInterface, RpcInterfaceDefinition, RpcProtocol } from \"@itwin/core-common\";\nimport { ElectronIpcTransport, initializeIpc, IpcTransportMessage } from \"./ElectronIpcTransport\";\nimport { ElectronRpcConfiguration } from \"./ElectronRpcManager\";\nimport { ElectronRpcRequest } from \"./ElectronRpcRequest\";\n\n/** RPC interface protocol for an Electron-based application.\n * @internal\n */\nexport class ElectronRpcProtocol extends RpcProtocol {\n public static instances: Map<string, ElectronRpcProtocol> = new Map();\n public ipcSocket: IpcSocket;\n\n /** The RPC request class for this protocol. */\n public readonly requestType = ElectronRpcRequest;\n\n /** Specifies where to break large binary request payloads. */\n public override transferChunkThreshold = 48 * 1024 * 1024;\n\n /** @internal */\n public requests: Map<string, ElectronRpcRequest> = new Map();\n\n /** @internal */\n public readonly transport: ElectronIpcTransport<IpcTransportMessage, IpcTransportMessage>;\n\n /** Constructs an Electron protocol. */\n public constructor(configuration: ElectronRpcConfiguration, ipcSocket: IpcSocket) {\n super(configuration);\n this.ipcSocket = ipcSocket;\n this.transport = initializeIpc(this);\n }\n\n /** @internal */\n public override onRpcClientInitialized(definition: RpcInterfaceDefinition, _client: RpcInterface): void {\n this.registerInterface(definition);\n }\n\n /** @internal */\n public override onRpcImplInitialized(definition: RpcInterfaceDefinition, _impl: RpcInterface): void {\n this.registerInterface(definition);\n }\n\n /** @internal */\n public override onRpcClientTerminated(definition: RpcInterfaceDefinition, _client: RpcInterface): void {\n this.purgeInterface(definition);\n }\n\n /** @internal */\n public override onRpcImplTerminated(definition: RpcInterfaceDefinition, _impl: RpcInterface): void {\n this.purgeInterface(definition);\n }\n\n private registerInterface(definition: RpcInterfaceDefinition) {\n if (ElectronRpcProtocol.instances.has(definition.interfaceName))\n throw new IModelError(BentleyStatus.ERROR, `RPC interface \"${definition.interfaceName}\"\" is already associated with a protocol.`);\n\n ElectronRpcProtocol.instances.set(definition.interfaceName, this);\n }\n\n private purgeInterface(definition: RpcInterfaceDefinition) {\n ElectronRpcProtocol.instances.delete(definition.interfaceName);\n }\n}\n"]}
1
+ {"version":3,"file":"ElectronRpcProtocol.js","sourceRoot":"","sources":["../../../src/common/ElectronRpcProtocol.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAoD;AACpD,oDAA+G;AAC/G,iEAAkG;AAElG,6DAA0D;AAE1D;;GAEG;AACH,MAAa,mBAAoB,SAAQ,yBAAW;IAC3C,MAAM,CAAC,SAAS,GAAqC,IAAI,GAAG,EAAE,CAAC;IAC/D,SAAS,CAAY;IAE5B,+CAA+C;IAC/B,WAAW,GAAG,uCAAkB,CAAC;IAEjD,8DAA8D;IAC9C,sBAAsB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;IAE1D,gBAAgB;IACT,QAAQ,GAAoC,IAAI,GAAG,EAAE,CAAC;IAE7D,gBAAgB;IACA,SAAS,CAAiE;IAE1F,uCAAuC;IACvC,YAAmB,aAAuC,EAAE,SAAoB;QAC9E,KAAK,CAAC,aAAa,CAAC,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAA,oCAAa,EAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,gBAAgB;IACA,sBAAsB,CAAC,UAAkC,EAAE,OAAqB;QAC9F,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,gBAAgB;IACA,oBAAoB,CAAC,UAAkC,EAAE,KAAmB;QAC1F,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,gBAAgB;IACA,qBAAqB,CAAC,UAAkC,EAAE,OAAqB;QAC7F,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAED,gBAAgB;IACA,mBAAmB,CAAC,UAAkC,EAAE,KAAmB;QACzF,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAEO,iBAAiB,CAAC,UAAkC;QAC1D,IAAI,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC;YAC7D,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,kBAAkB,UAAU,CAAC,aAAa,2CAA2C,CAAC,CAAC;QAEpI,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAEO,cAAc,CAAC,UAAkC;QACvD,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACjE,CAAC;;AApDH,kDAqDC","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/** @packageDocumentation\r\n * @module RpcInterface\r\n */\r\n\r\nimport { BentleyStatus } from \"@itwin/core-bentley\";\r\nimport { IModelError, IpcSocket, RpcInterface, RpcInterfaceDefinition, RpcProtocol } from \"@itwin/core-common\";\r\nimport { ElectronIpcTransport, initializeIpc, IpcTransportMessage } from \"./ElectronIpcTransport\";\r\nimport { ElectronRpcConfiguration } from \"./ElectronRpcManager\";\r\nimport { ElectronRpcRequest } from \"./ElectronRpcRequest\";\r\n\r\n/** RPC interface protocol for an Electron-based application.\r\n * @internal\r\n */\r\nexport class ElectronRpcProtocol extends RpcProtocol {\r\n public static instances: Map<string, ElectronRpcProtocol> = new Map();\r\n public ipcSocket: IpcSocket;\r\n\r\n /** The RPC request class for this protocol. */\r\n public readonly requestType = ElectronRpcRequest;\r\n\r\n /** Specifies where to break large binary request payloads. */\r\n public override transferChunkThreshold = 48 * 1024 * 1024;\r\n\r\n /** @internal */\r\n public requests: Map<string, ElectronRpcRequest> = new Map();\r\n\r\n /** @internal */\r\n public readonly transport: ElectronIpcTransport<IpcTransportMessage, IpcTransportMessage>;\r\n\r\n /** Constructs an Electron protocol. */\r\n public constructor(configuration: ElectronRpcConfiguration, ipcSocket: IpcSocket) {\r\n super(configuration);\r\n this.ipcSocket = ipcSocket;\r\n this.transport = initializeIpc(this);\r\n }\r\n\r\n /** @internal */\r\n public override onRpcClientInitialized(definition: RpcInterfaceDefinition, _client: RpcInterface): void {\r\n this.registerInterface(definition);\r\n }\r\n\r\n /** @internal */\r\n public override onRpcImplInitialized(definition: RpcInterfaceDefinition, _impl: RpcInterface): void {\r\n this.registerInterface(definition);\r\n }\r\n\r\n /** @internal */\r\n public override onRpcClientTerminated(definition: RpcInterfaceDefinition, _client: RpcInterface): void {\r\n this.purgeInterface(definition);\r\n }\r\n\r\n /** @internal */\r\n public override onRpcImplTerminated(definition: RpcInterfaceDefinition, _impl: RpcInterface): void {\r\n this.purgeInterface(definition);\r\n }\r\n\r\n private registerInterface(definition: RpcInterfaceDefinition) {\r\n if (ElectronRpcProtocol.instances.has(definition.interfaceName))\r\n throw new IModelError(BentleyStatus.ERROR, `RPC interface \"${definition.interfaceName}\"\" is already associated with a protocol.`);\r\n\r\n ElectronRpcProtocol.instances.set(definition.interfaceName, this);\r\n }\r\n\r\n private purgeInterface(definition: RpcInterfaceDefinition) {\r\n ElectronRpcProtocol.instances.delete(definition.interfaceName);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ElectronRpcRequest.js","sourceRoot":"","sources":["../../../src/common/ElectronRpcRequest.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,oDAAyF;AAGzF,gBAAgB;AAChB,MAAa,kBAAmB,SAAQ,wBAAU;IACxC,IAAI,GAA4B,GAAG,EAAE,CAAC,SAAS,CAAC;IAChD,YAAY,GAAsC,SAAS,CAAC;IAEpE,0DAA0D;IACjC,QAAQ,GAAwB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAe,CAAC;IAEnG,yBAAyB;IACf,KAAK,CAAC,IAAI;QAClB,IAAI,CAAC;YACH,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;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,8BAAgB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC,CAAC,uDAAuD;QAC1I,CAAC;QAED,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACrC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB;IACf,KAAK,CAAC,IAAI;QAClB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;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;IACD,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1B,CAAC;CACF;AAhDD,gDAgDC","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/** @internal */\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 {\n this.protocol.events.raiseEvent(RpcProtocolEvent.ConnectionErrorReceived, this); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n\n return new Promise<number>((resolve) => {\n this._res = resolve;\n });\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[Symbol.dispose]() {\n this.protocol.requests.delete(this.id);\n super[Symbol.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,gBAAgB;AAChB,MAAa,kBAAmB,SAAQ,wBAAU;IACxC,IAAI,GAA4B,GAAG,EAAE,CAAC,SAAS,CAAC;IAChD,YAAY,GAAsC,SAAS,CAAC;IAEpE,0DAA0D;IACjC,QAAQ,GAAwB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAe,CAAC;IAEnG,yBAAyB;IACf,KAAK,CAAC,IAAI;QAClB,IAAI,CAAC;YACH,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;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,8BAAgB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC,CAAC,uDAAuD;QAC1I,CAAC;QAED,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACrC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB;IACf,KAAK,CAAC,IAAI;QAClB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;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;IACD,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1B,CAAC;CACF;AAhDD,gDAgDC","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/** @internal */\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 {\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.ConnectionErrorReceived, this); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n\r\n return new Promise<number>((resolve) => {\r\n this._res = resolve;\r\n });\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[Symbol.dispose]() {\r\n this.protocol.requests.delete(this.id);\r\n super[Symbol.dispose]();\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ITwinElectronApi.js","sourceRoot":"","sources":["../../../src/common/ITwinElectronApi.ts"],"names":[],"mappings":";AAAA;;;+FAG+F","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\n/** @packageDocumentation\n * @module RpcInterface\n */\n\n/** These methods are stored on `window.itwinjs` */\nexport interface ITwinElectronApi {\n addListener: (channel: string, listener: ElectronListener) => void;\n removeListener: (channel: string, listener: ElectronListener) => void;\n invoke: (channel: string, ...data: any[]) => Promise<any>;\n once: (channel: string, listener: ElectronListener) => void;\n send: (channel: string, ...data: any[]) => void; // only valid for render -> main\n}\n\nexport type ElectronListener = (event: any, ...args: any[]) => void;\n"]}
1
+ {"version":3,"file":"ITwinElectronApi.js","sourceRoot":"","sources":["../../../src/common/ITwinElectronApi.ts"],"names":[],"mappings":";AAAA;;;+FAG+F","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\n/** @packageDocumentation\r\n * @module RpcInterface\r\n */\r\n\r\n/** These methods are stored on `window.itwinjs` */\r\nexport interface ITwinElectronApi {\r\n addListener: (channel: string, listener: ElectronListener) => void;\r\n removeListener: (channel: string, listener: ElectronListener) => void;\r\n invoke: (channel: string, ...data: any[]) => Promise<any>;\r\n once: (channel: string, listener: ElectronListener) => void;\r\n send: (channel: string, ...data: any[]) => void; // only valid for render -> main\r\n}\r\n\r\nexport type ElectronListener = (event: any, ...args: any[]) => void;\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"core-electron.js","sourceRoot":"","sources":["../../src/core-electron.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;;;;;;;;;;;AAE/F,sDAAsD;AACtD,0EAA0E;AAC1E,iCAAiC;AAEjC,yDAAuC;AACvC,gEAA8C;AAC9C,yDAAuC;AAEvC;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG","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\n// THIS FILE EXISTS ONLY FOR DOCUMENTATION GENERATION.\n// It imports both frontend and backend code, which is not legal anywhere.\n// Do not import it in real code!\n\nexport * from \"./backend/ElectronHost\";\nexport * from \"./common/ElectronIpcInterface\";\nexport * from \"./frontend/ElectronApp\";\n\n/** @docs-package-description\n *\n * The core-electron package contains the electron utilities to write an iTwin.js application based on Electron.\n */\n\n/**\n * @docs-group-description Renderer\n * For use in the Electron renderer process\n */\n\n/**\n * @docs-group-description Main\n * For use in the Electron main process\n */\n\n/**\n * @docs-group-description RpcInterface\n * Functionality facilitate electron RPC\n */\n"]}
1
+ {"version":3,"file":"core-electron.js","sourceRoot":"","sources":["../../src/core-electron.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;;;;;;;;;;;AAE/F,sDAAsD;AACtD,0EAA0E;AAC1E,iCAAiC;AAEjC,yDAAuC;AACvC,gEAA8C;AAC9C,yDAAuC;AAEvC;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG","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\n// THIS FILE EXISTS ONLY FOR DOCUMENTATION GENERATION.\r\n// It imports both frontend and backend code, which is not legal anywhere.\r\n// Do not import it in real code!\r\n\r\nexport * from \"./backend/ElectronHost\";\r\nexport * from \"./common/ElectronIpcInterface\";\r\nexport * from \"./frontend/ElectronApp\";\r\n\r\n/** @docs-package-description\r\n *\r\n * The core-electron package contains the electron utilities to write an iTwin.js application based on Electron.\r\n */\r\n\r\n/**\r\n * @docs-group-description Renderer\r\n * For use in the Electron renderer process\r\n */\r\n\r\n/**\r\n * @docs-group-description Main\r\n * For use in the Electron main process\r\n */\r\n\r\n/**\r\n * @docs-group-description RpcInterface\r\n * Functionality facilitate electron RPC\r\n */\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ElectronApp.js","sourceRoot":"","sources":["../../../src/frontend/ElectronApp.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,sDAAsD;AAEtD,wDAAyF;AAEzF,yEAAoE;AACpE,qEAAkE;AASlE;;GAEG;AACH,MAAM,WAAW;IACP,IAAI,CAAiC;IACtC,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,iEAAiE;QACjE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC;IAChE,CAAC;CACF;AAKD;;;GAGG;AACH,MAAa,WAAW;IACd,MAAM,CAAC,IAAI,CAAe;IAC3B,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,CAAC;YAClB,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,uDAAuD;QAC3I,CAAC;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,4DAA4D;IACrD,MAAM,CAAC,SAAS,GAAG,sBAAM,CAAC,oBAAoB,CAAkB,yCAAkB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;;AA1BzH,kCA2BC","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\n/** @packageDocumentation\n * @module Renderer\n */\n\nimport { ProcessDetector } from \"@itwin/core-bentley\";\nimport { IpcListener, IpcSocketFrontend } from \"@itwin/core-common\";\nimport { _callIpcChannel, IpcApp, NativeApp, NativeAppOpts } from \"@itwin/core-frontend\";\nimport type { IpcRenderer } from \"electron\";\nimport { electronIpcStrings } from \"../common/ElectronIpcInterface\";\nimport { ElectronRpcManager } from \"../common/ElectronRpcManager\";\nimport type { ITwinElectronApi } from \"../common/ITwinElectronApi\";\n\ndeclare global {\n interface Window {\n itwinjs: ITwinElectronApi;\n }\n}\n\n/**\n * Frontend Ipc support for Electron apps.\n */\nclass ElectronIpc implements IpcSocketFrontend {\n private _api: ITwinElectronApi | IpcRenderer;\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 // eslint-disable-next-line @typescript-eslint/no-require-imports\n this._api = window.itwinjs ?? require(\"electron\").ipcRenderer;\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); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n await NativeApp.startup(this._ipc!, opts);\n }\n\n public static async shutdown() {\n this._ipc = undefined;\n await NativeApp.shutdown();\n ElectronRpcManager.terminateFrontend();\n }\n\n /** Proxy object for calling methods of `Electron.Dialog` */\n public static dialogIpc = IpcApp.makeIpcFunctionProxy<Electron.Dialog>(electronIpcStrings.dialogChannel, \"callDialog\");\n}\n"]}
1
+ {"version":3,"file":"ElectronApp.js","sourceRoot":"","sources":["../../../src/frontend/ElectronApp.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,sDAAsD;AAEtD,wDAAyF;AAEzF,yEAAoE;AACpE,qEAAkE;AASlE;;GAEG;AACH,MAAM,WAAW;IACP,IAAI,CAAiC;IACtC,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,iEAAiE;QACjE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC;IAChE,CAAC;CACF;AAKD;;;GAGG;AACH,MAAa,WAAW;IACd,MAAM,CAAC,IAAI,CAAe;IAC3B,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,CAAC;YAClB,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,uDAAuD;QAC3I,CAAC;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,4DAA4D;IACrD,MAAM,CAAC,SAAS,GAAG,sBAAM,CAAC,oBAAoB,CAAkB,yCAAkB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;;AA1BzH,kCA2BC","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\n/** @packageDocumentation\r\n * @module Renderer\r\n */\r\n\r\nimport { ProcessDetector } from \"@itwin/core-bentley\";\r\nimport { IpcListener, IpcSocketFrontend } from \"@itwin/core-common\";\r\nimport { _callIpcChannel, IpcApp, NativeApp, NativeAppOpts } from \"@itwin/core-frontend\";\r\nimport type { IpcRenderer } from \"electron\";\r\nimport { electronIpcStrings } 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-require-imports\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 @typescript-eslint/no-deprecated\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 /** Proxy object for calling methods of `Electron.Dialog` */\r\n public static dialogIpc = IpcApp.makeIpcFunctionProxy<Electron.Dialog>(electronIpcStrings.dialogChannel, \"callDialog\");\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/core-electron",
3
- "version": "5.5.0-dev.2",
3
+ "version": "5.5.0-dev.4",
4
4
  "description": "iTwin.js ElectronHost and ElectronApp",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -19,10 +19,10 @@
19
19
  },
20
20
  "peerDependencies": {
21
21
  "electron": "^35.0.0 || ^36.0.0 || ^37.0.0 || ^38.0.0 || ^39.0.0",
22
- "@itwin/core-backend": "5.5.0-dev.2",
23
- "@itwin/core-common": "5.5.0-dev.2",
24
- "@itwin/core-bentley": "5.5.0-dev.2",
25
- "@itwin/core-frontend": "5.5.0-dev.2"
22
+ "@itwin/core-backend": "5.5.0-dev.4",
23
+ "@itwin/core-common": "5.5.0-dev.4",
24
+ "@itwin/core-bentley": "5.5.0-dev.4",
25
+ "@itwin/core-frontend": "5.5.0-dev.4"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@itwin/eslint-plugin": "5.2.2-dev.2",
@@ -40,12 +40,12 @@
40
40
  "typescript": "~5.6.2",
41
41
  "webpack": "^5.97.1",
42
42
  "webpack-cli": "^5.0.1",
43
- "@itwin/build-tools": "5.5.0-dev.2",
44
- "@itwin/certa": "5.5.0-dev.2",
45
- "@itwin/core-common": "5.5.0-dev.2",
46
- "@itwin/core-bentley": "5.5.0-dev.2",
47
- "@itwin/core-backend": "5.5.0-dev.2",
48
- "@itwin/core-frontend": "5.5.0-dev.2"
43
+ "@itwin/build-tools": "5.5.0-dev.4",
44
+ "@itwin/core-common": "5.5.0-dev.4",
45
+ "@itwin/core-backend": "5.5.0-dev.4",
46
+ "@itwin/core-frontend": "5.5.0-dev.4",
47
+ "@itwin/core-bentley": "5.5.0-dev.4",
48
+ "@itwin/certa": "5.5.0-dev.4"
49
49
  },
50
50
  "dependencies": {
51
51
  "@openid/appauth": "^1.3.2",