@itwin/core-electron 4.0.0-dev.51 → 4.0.0-dev.54

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.
Files changed (40) hide show
  1. package/lib/cjs/ElectronBackend.d.ts +1 -1
  2. package/lib/cjs/ElectronBackend.js +21 -17
  3. package/lib/cjs/ElectronBackend.js.map +1 -1
  4. package/lib/cjs/ElectronFrontend.d.ts +1 -1
  5. package/lib/cjs/ElectronFrontend.js +21 -17
  6. package/lib/cjs/ElectronFrontend.js.map +1 -1
  7. package/lib/cjs/__DOC_ONLY__.d.ts +3 -3
  8. package/lib/cjs/__DOC_ONLY__.js +26 -22
  9. package/lib/cjs/__DOC_ONLY__.js.map +1 -1
  10. package/lib/cjs/backend/ElectronHost.d.ts +104 -104
  11. package/lib/cjs/backend/ElectronHost.js +240 -240
  12. package/lib/cjs/backend/ElectronHost.js.map +1 -1
  13. package/lib/cjs/backend/ElectronPreload.d.ts +1 -1
  14. package/lib/cjs/backend/ElectronPreload.js +39 -39
  15. package/lib/cjs/common/ElectronIpcInterface.d.ts +7 -7
  16. package/lib/cjs/common/ElectronIpcInterface.d.ts.map +1 -1
  17. package/lib/cjs/common/ElectronIpcInterface.js +5 -5
  18. package/lib/cjs/common/ElectronIpcTransport.d.ts +44 -44
  19. package/lib/cjs/common/ElectronIpcTransport.js +186 -186
  20. package/lib/cjs/common/ElectronIpcTransport.js.map +1 -1
  21. package/lib/cjs/common/ElectronManagerLoggerCategory.d.ts +10 -10
  22. package/lib/cjs/common/ElectronManagerLoggerCategory.js +18 -18
  23. package/lib/cjs/common/ElectronPush.d.ts +20 -20
  24. package/lib/cjs/common/ElectronPush.js +48 -48
  25. package/lib/cjs/common/ElectronPush.js.map +1 -1
  26. package/lib/cjs/common/ElectronRpcManager.d.ts +26 -26
  27. package/lib/cjs/common/ElectronRpcManager.js +65 -65
  28. package/lib/cjs/common/ElectronRpcProtocol.d.ts +34 -34
  29. package/lib/cjs/common/ElectronRpcProtocol.js +58 -58
  30. package/lib/cjs/common/ElectronRpcProtocol.js.map +1 -1
  31. package/lib/cjs/common/ElectronRpcRequest.d.ts +19 -19
  32. package/lib/cjs/common/ElectronRpcRequest.js +56 -56
  33. package/lib/cjs/common/ITwinElectronApi.d.ts +10 -10
  34. package/lib/cjs/common/ITwinElectronApi.d.ts.map +1 -1
  35. package/lib/cjs/common/ITwinElectronApi.js +6 -6
  36. package/lib/cjs/frontend/ElectronApp.d.ts +35 -35
  37. package/lib/cjs/frontend/ElectronApp.d.ts.map +1 -1
  38. package/lib/cjs/frontend/ElectronApp.js +73 -73
  39. package/lib/cjs/frontend/ElectronApp.js.map +1 -1
  40. package/package.json +15 -15
@@ -1 +1 @@
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-var-requires\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
+ {"version":3,"file":"ElectronIpcTransport.js","sourceRoot":"","sources":["../../../src/common/ElectronIpcTransport.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,sDAAmF;AACnF,oDAE4B;AAC5B,iDAA+E;AAC/E,6DAAgE;AAIhE,MAAM,eAAe,GAAG,IAAA,0BAAY,EAAC,aAAa,CAAC,CAAC;AACpD,MAAM,YAAY,GAAG,IAAA,0BAAY,EAAC,UAAU,CAAC,CAAC;AAO9C,gBAAgB;AAChB,MAAsB,oBAAoB;IAKxC,IAAW,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAEzC,WAAW,CAAC,OAA6B;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,YAAmB,QAA6B;QAVxC,qBAAgB,GAAmB,EAAE,CAAC;QAW5C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAES,SAAS,KAAK,CAAC;IAEjB,iBAAiB;QACvB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,EAAE,GAAQ,EAAE,KAAqB,EAAE,EAAE;YACjH,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;aACvC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC1B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACrB;iBAAM;gBACL,EAAE,OAAO,CAAC,QAAQ,CAAC;gBAEnB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAClD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;gBAErC,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE;oBAC5C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;iBAC9C;aACF;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC;IAEO,oBAAoB;QAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,EAAE,GAAQ,EAAE,OAAY,EAAE,EAAE;YAC3G,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC/C,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACtC,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,oCAAoC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;aAChG;YAED,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAElD,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACrC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;oBAC3B,EAAE,OAAO,CAAC,QAAQ,CAAC;oBACnB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;iBACtC;aACF;YAED,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE;gBAC5C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;aACtC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC;IAEO,aAAa,CAAC,CAAsB;QAC1C,IAAI,CAAC,CAAC,UAAU,EAAE;YAChB,OAAO,CAAC,CAAC,UAAU,CAAC;SACrB;QAED,IAAI,CAAC,CAAC,MAAM,EAAE;YACZ,OAAO,CAAC,CAAC,MAAM,CAAC;SACjB;QAED,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;IACpE,CAAC;IAEO,KAAK,CAAC,OAA4B,EAAE,KAAyB,EAAE,GAAS;QAC9E,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;QAC1B,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC7B,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;SACjB;QAED,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAEhD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE;YACpD,MAAM,KAAK,GAAmB,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7E,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;SAC5C;IACH,CAAC;IAES,WAAW,CAAC,OAAe,EAAE,OAAY,EAAE,GAAQ;QAC3D,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAID,gBAAgB;IACT,YAAY,CAAC,OAAa,EAAE,GAAQ;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAES,WAAW,CAAC,EAAU;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACtC,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,mCAAmC,EAAE,IAAI,CAAC,CAAC;SACvF;QAED,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1B,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;IACtE,CAAC;CACF;AA3HD,oDA2HC;AAED,gBAAgB;AAChB,MAAa,oBAAqB,SAAQ,oBAA2C;IAGhE,SAAS;QAC1B,MAAM,aAAa,GAAG,IAAI,oCAAqB,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,4BAAc,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,EAAU;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC/D,OAAO;SACR;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAuB,CAAC;QACxE,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;CACF;AApBD,oDAoBC;AAED,gBAAgB;AAChB,MAAa,mBAAoB,SAAQ,oBAAiE;IAGrF,SAAS;QAC1B,+BAAiB,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,qCAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/F,4BAAc,CAAC,OAAO,GAAG,IAAI,CAAC;IAChC,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,EAAU,EAAE,GAAQ;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,QAA+B,CAAC;QACpC,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SAC5C;QAAC,OAAO,GAAG,EAAE;YACZ,QAAQ,GAAG,MAAM,mCAAqB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;SACtE;QAED,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC/B,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,4FAA4F;QAC5H,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACjC,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC;IAC3B,CAAC;IAEkB,WAAW,CAAC,OAAe,EAAE,OAAY,EAAE,GAAQ;QACpE,IAAI,GAAG,EAAE;YACP,OAAO,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;SACjD;QAED,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,6CAAwB,CAAC,cAAc,CAAC;QACvD,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QACpG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9E,CAAC;IAEO,qBAAqB;QAC3B,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,OAAO;SACR;QAED,IAAI,EAAE,8FAA8F;YAClG,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC,CAAC,yDAAyD;SACnH;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,0BAA0B,EAAE,GAAG,EAAE,CAAC,2BAAY,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;SAC/G;IACH,CAAC;CACF;AA/CD,kDA+CC;AAED,IAAI,SAA2C,CAAC;AAEhD,gBAAgB;AAChB,SAAgB,aAAa,CAAC,QAA6B;IACzD,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,EAAE;QAChD,SAAS,CAAC,OAAO,EAAE,CAAC;QACpB,SAAS,GAAG,SAAS,CAAC;KACvB;IAED,IAAI,SAAS,KAAK,SAAS;QACzB,SAAS,GAAG,8BAAe,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAE7H,OAAO,SAAS,CAAC;AACnB,CAAC;AAVD,sCAUC","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-var-requires\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,11 +1,11 @@
1
- /** @packageDocumentation
2
- * @module Logging
3
- */
4
- /** Logger categories used by this package
5
- * @note All logger categories in this package start with the `core-electron` prefix.
6
- * @see [Logger]($bentley)
7
- * @public
8
- */
9
- export declare enum ElectronManagerLoggerCategory {
10
- }
1
+ /** @packageDocumentation
2
+ * @module Logging
3
+ */
4
+ /** Logger categories used by this package
5
+ * @note All logger categories in this package start with the `core-electron` prefix.
6
+ * @see [Logger]($bentley)
7
+ * @public
8
+ */
9
+ export declare enum ElectronManagerLoggerCategory {
10
+ }
11
11
  //# sourceMappingURL=ElectronManagerLoggerCategory.d.ts.map
@@ -1,19 +1,19 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
- * See LICENSE.md in the project root for license terms and full copyright notice.
5
- *--------------------------------------------------------------------------------------------*/
6
- /** @packageDocumentation
7
- * @module Logging
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.ElectronManagerLoggerCategory = void 0;
11
- /** Logger categories used by this package
12
- * @note All logger categories in this package start with the `core-electron` prefix.
13
- * @see [Logger]($bentley)
14
- * @public
15
- */
16
- var ElectronManagerLoggerCategory;
17
- (function (ElectronManagerLoggerCategory) {
18
- })(ElectronManagerLoggerCategory = exports.ElectronManagerLoggerCategory || (exports.ElectronManagerLoggerCategory = {}));
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ /** @packageDocumentation
7
+ * @module Logging
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ElectronManagerLoggerCategory = void 0;
11
+ /** Logger categories used by this package
12
+ * @note All logger categories in this package start with the `core-electron` prefix.
13
+ * @see [Logger]($bentley)
14
+ * @public
15
+ */
16
+ var ElectronManagerLoggerCategory;
17
+ (function (ElectronManagerLoggerCategory) {
18
+ })(ElectronManagerLoggerCategory = exports.ElectronManagerLoggerCategory || (exports.ElectronManagerLoggerCategory = {}));
19
19
  //# sourceMappingURL=ElectronManagerLoggerCategory.js.map
@@ -1,21 +1,21 @@
1
- /** @packageDocumentation
2
- * @module RpcInterface
3
- */
4
- import { RpcPushChannel, RpcPushConnection, RpcPushTransport, RpcRequestFulfillment } from "@itwin/core-common";
5
- import { BackendIpcTransport, FrontendIpcTransport } from "./ElectronIpcTransport";
6
- /** @internal */
7
- export declare class ElectronPushTransport extends RpcPushTransport {
8
- private _ipc;
9
- private _last;
10
- get last(): number;
11
- constructor(ipc: FrontendIpcTransport);
12
- consume(response: RpcRequestFulfillment): boolean;
13
- }
14
- /** @internal */
15
- export declare class ElectronPushConnection<T> extends RpcPushConnection<T> {
16
- private _ipc;
17
- private _next;
18
- constructor(channel: RpcPushChannel<T>, client: unknown, ipc: BackendIpcTransport);
19
- send(messageData: any): Promise<void>;
20
- }
1
+ /** @packageDocumentation
2
+ * @module RpcInterface
3
+ */
4
+ import { RpcPushChannel, RpcPushConnection, RpcPushTransport, RpcRequestFulfillment } from "@itwin/core-common";
5
+ import { BackendIpcTransport, FrontendIpcTransport } from "./ElectronIpcTransport";
6
+ /** @internal */
7
+ export declare class ElectronPushTransport extends RpcPushTransport {
8
+ private _ipc;
9
+ private _last;
10
+ get last(): number;
11
+ constructor(ipc: FrontendIpcTransport);
12
+ consume(response: RpcRequestFulfillment): boolean;
13
+ }
14
+ /** @internal */
15
+ export declare class ElectronPushConnection<T> extends RpcPushConnection<T> {
16
+ private _ipc;
17
+ private _next;
18
+ constructor(channel: RpcPushChannel<T>, client: unknown, ipc: BackendIpcTransport);
19
+ send(messageData: any): Promise<void>;
20
+ }
21
21
  //# sourceMappingURL=ElectronPush.d.ts.map
@@ -1,49 +1,49 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
- * See LICENSE.md in the project root for license terms and full copyright notice.
5
- *--------------------------------------------------------------------------------------------*/
6
- /** @packageDocumentation
7
- * @module RpcInterface
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.ElectronPushConnection = exports.ElectronPushTransport = void 0;
11
- const core_common_1 = require("@itwin/core-common");
12
- /* eslint-disable deprecation/deprecation */
13
- const PUSH = "__push__";
14
- /** @internal */
15
- class ElectronPushTransport extends core_common_1.RpcPushTransport {
16
- constructor(ipc) {
17
- super();
18
- this._last = -1;
19
- this._ipc = ipc;
20
- }
21
- get last() { return this._last; }
22
- consume(response) {
23
- if (response.interfaceName !== PUSH) {
24
- return false;
25
- }
26
- this._last = response.status;
27
- if (this.onMessage) {
28
- const messageData = core_common_1.RpcMarshaling.deserialize(this._ipc.protocol, response.result);
29
- this.onMessage(response.id, messageData);
30
- }
31
- return true;
32
- }
33
- }
34
- exports.ElectronPushTransport = ElectronPushTransport;
35
- /** @internal */
36
- class ElectronPushConnection extends core_common_1.RpcPushConnection {
37
- constructor(channel, client, ipc) {
38
- super(channel, client);
39
- this._next = -1;
40
- this._ipc = ipc;
41
- }
42
- async send(messageData) {
43
- const result = await core_common_1.RpcMarshaling.serialize(this._ipc.protocol, messageData);
44
- const fulfillment = { result, rawResult: messageData, interfaceName: PUSH, id: this.channel.id, status: ++this._next };
45
- this._ipc.sendResponse(fulfillment, undefined);
46
- }
47
- }
48
- exports.ElectronPushConnection = ElectronPushConnection;
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ /** @packageDocumentation
7
+ * @module RpcInterface
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ElectronPushConnection = exports.ElectronPushTransport = void 0;
11
+ const core_common_1 = require("@itwin/core-common");
12
+ /* eslint-disable deprecation/deprecation */
13
+ const PUSH = "__push__";
14
+ /** @internal */
15
+ class ElectronPushTransport extends core_common_1.RpcPushTransport {
16
+ get last() { return this._last; }
17
+ constructor(ipc) {
18
+ super();
19
+ this._last = -1;
20
+ this._ipc = ipc;
21
+ }
22
+ consume(response) {
23
+ if (response.interfaceName !== PUSH) {
24
+ return false;
25
+ }
26
+ this._last = response.status;
27
+ if (this.onMessage) {
28
+ const messageData = core_common_1.RpcMarshaling.deserialize(this._ipc.protocol, response.result);
29
+ this.onMessage(response.id, messageData);
30
+ }
31
+ return true;
32
+ }
33
+ }
34
+ exports.ElectronPushTransport = ElectronPushTransport;
35
+ /** @internal */
36
+ class ElectronPushConnection extends core_common_1.RpcPushConnection {
37
+ constructor(channel, client, ipc) {
38
+ super(channel, client);
39
+ this._next = -1;
40
+ this._ipc = ipc;
41
+ }
42
+ async send(messageData) {
43
+ const result = await core_common_1.RpcMarshaling.serialize(this._ipc.protocol, messageData);
44
+ const fulfillment = { result, rawResult: messageData, interfaceName: PUSH, id: this.channel.id, status: ++this._next };
45
+ this._ipc.sendResponse(fulfillment, undefined);
46
+ }
47
+ }
48
+ exports.ElectronPushConnection = ElectronPushConnection;
49
49
  //# sourceMappingURL=ElectronPush.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ElectronPush.js","sourceRoot":"","sources":["../../../src/common/ElectronPush.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,oDAA+H;AAG/H,4CAA4C;AAE5C,MAAM,IAAI,GAAG,UAAU,CAAC;AAExB,gBAAgB;AAChB,MAAa,qBAAsB,SAAQ,8BAAgB;IAMzD,YAAmB,GAAyB;QAC1C,KAAK,EAAE,CAAC;QALF,UAAK,GAAW,CAAC,CAAC,CAAC;QAMzB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IALD,IAAW,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAOjC,OAAO,CAAC,QAA+B;QAC5C,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,EAAE;YACnC,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE7B,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,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;SAC1C;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAzBD,sDAyBC;AAED,gBAAgB;AAChB,MAAa,sBAA0B,SAAQ,+BAAoB;IAIjE,YAAmB,OAA0B,EAAE,MAAe,EAAE,GAAwB;QACtF,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAHjB,UAAK,GAAW,CAAC,CAAC,CAAC;QAIzB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAgB;QAChC,MAAM,MAAM,GAAG,MAAM,2BAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC9E,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/** @packageDocumentation\r\n * @module RpcInterface\r\n */\r\n\r\nimport { RpcMarshaling, RpcPushChannel, RpcPushConnection, RpcPushTransport, RpcRequestFulfillment } from \"@itwin/core-common\";\r\nimport { BackendIpcTransport, FrontendIpcTransport } from \"./ElectronIpcTransport\";\r\n\r\n/* eslint-disable deprecation/deprecation */\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 = await 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
+ {"version":3,"file":"ElectronPush.js","sourceRoot":"","sources":["../../../src/common/ElectronPush.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,oDAA+H;AAG/H,4CAA4C;AAE5C,MAAM,IAAI,GAAG,UAAU,CAAC;AAExB,gBAAgB;AAChB,MAAa,qBAAsB,SAAQ,8BAAgB;IAIzD,IAAW,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAExC,YAAmB,GAAyB;QAC1C,KAAK,EAAE,CAAC;QALF,UAAK,GAAW,CAAC,CAAC,CAAC;QAMzB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAEM,OAAO,CAAC,QAA+B;QAC5C,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,EAAE;YACnC,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE7B,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,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;SAC1C;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAzBD,sDAyBC;AAED,gBAAgB;AAChB,MAAa,sBAA0B,SAAQ,+BAAoB;IAIjE,YAAmB,OAA0B,EAAE,MAAe,EAAE,GAAwB;QACtF,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAHjB,UAAK,GAAW,CAAC,CAAC,CAAC;QAIzB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAgB;QAChC,MAAM,MAAM,GAAG,MAAM,2BAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC9E,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/** @packageDocumentation\r\n * @module RpcInterface\r\n */\r\n\r\nimport { RpcMarshaling, RpcPushChannel, RpcPushConnection, RpcPushTransport, RpcRequestFulfillment } from \"@itwin/core-common\";\r\nimport { BackendIpcTransport, FrontendIpcTransport } from \"./ElectronIpcTransport\";\r\n\r\n/* eslint-disable deprecation/deprecation */\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 = await 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,27 +1,27 @@
1
- /** @packageDocumentation
2
- * @module RpcInterface
3
- */
4
- import { IpcSocketBackend, IpcSocketFrontend, RpcConfiguration, RpcInterfaceDefinition, RpcManager } from "@itwin/core-common";
5
- import { ElectronRpcProtocol } from "./ElectronRpcProtocol";
6
- /** RPC interface configuration for an Electron-based application.
7
- * @internal
8
- */
9
- export declare abstract class ElectronRpcConfiguration extends RpcConfiguration {
10
- static targetWindowId?: number;
11
- /** The protocol of the configuration. */
12
- abstract protocol: ElectronRpcProtocol;
13
- }
14
- /** Coordinates usage of RPC interfaces for an Electron-based application.
15
- * @internal
16
- */
17
- export declare class ElectronRpcManager extends RpcManager {
18
- /** Initializes ElectronRpcManager for the frontend of an application. */
19
- static initializeFrontend(ipcFrontend: IpcSocketFrontend, interfaces?: RpcInterfaceDefinition[]): ElectronRpcConfiguration;
20
- /** Initializes ElectronRpcManager for the backend of an application. */
21
- static initializeBackend(ipcBackend: IpcSocketBackend, interfaces?: RpcInterfaceDefinition[]): ElectronRpcConfiguration;
22
- private static performInitialization;
23
- /** Terminates ElectronRpcManager for the frontend of an application. */
24
- static terminateFrontend(): void;
25
- private static performTermination;
26
- }
1
+ /** @packageDocumentation
2
+ * @module RpcInterface
3
+ */
4
+ import { IpcSocketBackend, IpcSocketFrontend, RpcConfiguration, RpcInterfaceDefinition, RpcManager } from "@itwin/core-common";
5
+ import { ElectronRpcProtocol } from "./ElectronRpcProtocol";
6
+ /** RPC interface configuration for an Electron-based application.
7
+ * @internal
8
+ */
9
+ export declare abstract class ElectronRpcConfiguration extends RpcConfiguration {
10
+ static targetWindowId?: number;
11
+ /** The protocol of the configuration. */
12
+ abstract protocol: ElectronRpcProtocol;
13
+ }
14
+ /** Coordinates usage of RPC interfaces for an Electron-based application.
15
+ * @internal
16
+ */
17
+ export declare class ElectronRpcManager extends RpcManager {
18
+ /** Initializes ElectronRpcManager for the frontend of an application. */
19
+ static initializeFrontend(ipcFrontend: IpcSocketFrontend, interfaces?: RpcInterfaceDefinition[]): ElectronRpcConfiguration;
20
+ /** Initializes ElectronRpcManager for the backend of an application. */
21
+ static initializeBackend(ipcBackend: IpcSocketBackend, interfaces?: RpcInterfaceDefinition[]): ElectronRpcConfiguration;
22
+ private static performInitialization;
23
+ /** Terminates ElectronRpcManager for the frontend of an application. */
24
+ static terminateFrontend(): void;
25
+ private static performTermination;
26
+ }
27
27
  //# sourceMappingURL=ElectronRpcManager.d.ts.map
@@ -1,66 +1,66 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
- * See LICENSE.md in the project root for license terms and full copyright notice.
5
- *--------------------------------------------------------------------------------------------*/
6
- /** @packageDocumentation
7
- * @module RpcInterface
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.ElectronRpcManager = exports.ElectronRpcConfiguration = void 0;
11
- const core_common_1 = require("@itwin/core-common");
12
- const presentation_common_1 = require("@itwin/presentation-common");
13
- const ElectronRpcProtocol_1 = require("./ElectronRpcProtocol");
14
- /* eslint-disable deprecation/deprecation */
15
- /** RPC interface configuration for an Electron-based application.
16
- * @internal
17
- */
18
- class ElectronRpcConfiguration extends core_common_1.RpcConfiguration {
19
- }
20
- exports.ElectronRpcConfiguration = ElectronRpcConfiguration;
21
- /** Coordinates usage of RPC interfaces for an Electron-based application.
22
- * @internal
23
- */
24
- class ElectronRpcManager extends core_common_1.RpcManager {
25
- /** Initializes ElectronRpcManager for the frontend of an application. */
26
- static initializeFrontend(ipcFrontend, interfaces) {
27
- return ElectronRpcManager.performInitialization(ipcFrontend, interfaces);
28
- }
29
- /** Initializes ElectronRpcManager for the backend of an application. */
30
- static initializeBackend(ipcBackend, interfaces) {
31
- return ElectronRpcManager.performInitialization(ipcBackend, interfaces);
32
- }
33
- static performInitialization(ipcSocket, rpcs) {
34
- const interfaces = rpcs ?? [
35
- core_common_1.IModelReadRpcInterface,
36
- core_common_1.IModelTileRpcInterface,
37
- core_common_1.SnapshotIModelRpcInterface,
38
- presentation_common_1.PresentationRpcInterface,
39
- ];
40
- const config = class extends ElectronRpcConfiguration {
41
- constructor() {
42
- super(...arguments);
43
- this.interfaces = () => interfaces;
44
- this.protocol = new ElectronRpcProtocol_1.ElectronRpcProtocol(this, ipcSocket);
45
- }
46
- };
47
- for (const def of interfaces) {
48
- core_common_1.RpcConfiguration.assign(def, () => config);
49
- }
50
- const instance = core_common_1.RpcConfiguration.obtain(config);
51
- core_common_1.RpcConfiguration.initializeInterfaces(instance);
52
- return instance;
53
- }
54
- /** Terminates ElectronRpcManager for the frontend of an application. */
55
- static terminateFrontend() {
56
- return ElectronRpcManager.performTermination();
57
- }
58
- static performTermination() {
59
- const definitions = core_common_1.RpcRegistry.instance.definitionClasses;
60
- for (const [, interfaceDef] of definitions) {
61
- core_common_1.RpcManager.terminateInterface(interfaceDef);
62
- }
63
- }
64
- }
65
- exports.ElectronRpcManager = ElectronRpcManager;
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ /** @packageDocumentation
7
+ * @module RpcInterface
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ElectronRpcManager = exports.ElectronRpcConfiguration = void 0;
11
+ const core_common_1 = require("@itwin/core-common");
12
+ const presentation_common_1 = require("@itwin/presentation-common");
13
+ const ElectronRpcProtocol_1 = require("./ElectronRpcProtocol");
14
+ /* eslint-disable deprecation/deprecation */
15
+ /** RPC interface configuration for an Electron-based application.
16
+ * @internal
17
+ */
18
+ class ElectronRpcConfiguration extends core_common_1.RpcConfiguration {
19
+ }
20
+ exports.ElectronRpcConfiguration = ElectronRpcConfiguration;
21
+ /** Coordinates usage of RPC interfaces for an Electron-based application.
22
+ * @internal
23
+ */
24
+ class ElectronRpcManager extends core_common_1.RpcManager {
25
+ /** Initializes ElectronRpcManager for the frontend of an application. */
26
+ static initializeFrontend(ipcFrontend, interfaces) {
27
+ return ElectronRpcManager.performInitialization(ipcFrontend, interfaces);
28
+ }
29
+ /** Initializes ElectronRpcManager for the backend of an application. */
30
+ static initializeBackend(ipcBackend, interfaces) {
31
+ return ElectronRpcManager.performInitialization(ipcBackend, interfaces);
32
+ }
33
+ static performInitialization(ipcSocket, rpcs) {
34
+ const interfaces = rpcs ?? [
35
+ core_common_1.IModelReadRpcInterface,
36
+ core_common_1.IModelTileRpcInterface,
37
+ core_common_1.SnapshotIModelRpcInterface,
38
+ presentation_common_1.PresentationRpcInterface,
39
+ ];
40
+ const config = class extends ElectronRpcConfiguration {
41
+ constructor() {
42
+ super(...arguments);
43
+ this.interfaces = () => interfaces;
44
+ this.protocol = new ElectronRpcProtocol_1.ElectronRpcProtocol(this, ipcSocket);
45
+ }
46
+ };
47
+ for (const def of interfaces) {
48
+ core_common_1.RpcConfiguration.assign(def, () => config);
49
+ }
50
+ const instance = core_common_1.RpcConfiguration.obtain(config);
51
+ core_common_1.RpcConfiguration.initializeInterfaces(instance);
52
+ return instance;
53
+ }
54
+ /** Terminates ElectronRpcManager for the frontend of an application. */
55
+ static terminateFrontend() {
56
+ return ElectronRpcManager.performTermination();
57
+ }
58
+ static performTermination() {
59
+ const definitions = core_common_1.RpcRegistry.instance.definitionClasses;
60
+ for (const [, interfaceDef] of definitions) {
61
+ core_common_1.RpcManager.terminateInterface(interfaceDef);
62
+ }
63
+ }
64
+ }
65
+ exports.ElectronRpcManager = ElectronRpcManager;
66
66
  //# sourceMappingURL=ElectronRpcManager.js.map
@@ -1,35 +1,35 @@
1
- /** @packageDocumentation
2
- * @module RpcInterface
3
- */
4
- import { IpcSocket, RpcInterface, RpcInterfaceDefinition, RpcProtocol } from "@itwin/core-common";
5
- import { ElectronIpcTransport, IpcTransportMessage } from "./ElectronIpcTransport";
6
- import { ElectronRpcConfiguration } from "./ElectronRpcManager";
7
- import { ElectronRpcRequest } from "./ElectronRpcRequest";
8
- /** RPC interface protocol for an Electron-based application.
9
- * @internal
10
- */
11
- export declare class ElectronRpcProtocol extends RpcProtocol {
12
- static instances: Map<string, ElectronRpcProtocol>;
13
- ipcSocket: IpcSocket;
14
- /** The RPC request class for this protocol. */
15
- readonly requestType: typeof ElectronRpcRequest;
16
- /** Specifies where to break large binary request payloads. */
17
- transferChunkThreshold: number;
18
- /** @internal */
19
- requests: Map<string, ElectronRpcRequest>;
20
- /** @internal */
21
- readonly transport: ElectronIpcTransport<IpcTransportMessage, IpcTransportMessage>;
22
- /** Constructs an Electron protocol. */
23
- constructor(configuration: ElectronRpcConfiguration, ipcSocket: IpcSocket);
24
- /** @internal */
25
- onRpcClientInitialized(definition: RpcInterfaceDefinition, _client: RpcInterface): void;
26
- /** @internal */
27
- onRpcImplInitialized(definition: RpcInterfaceDefinition, _impl: RpcInterface): void;
28
- /** @internal */
29
- onRpcClientTerminated(definition: RpcInterfaceDefinition, _client: RpcInterface): void;
30
- /** @internal */
31
- onRpcImplTerminated(definition: RpcInterfaceDefinition, _impl: RpcInterface): void;
32
- private registerInterface;
33
- private purgeInterface;
34
- }
1
+ /** @packageDocumentation
2
+ * @module RpcInterface
3
+ */
4
+ import { IpcSocket, RpcInterface, RpcInterfaceDefinition, RpcProtocol } from "@itwin/core-common";
5
+ import { ElectronIpcTransport, IpcTransportMessage } from "./ElectronIpcTransport";
6
+ import { ElectronRpcConfiguration } from "./ElectronRpcManager";
7
+ import { ElectronRpcRequest } from "./ElectronRpcRequest";
8
+ /** RPC interface protocol for an Electron-based application.
9
+ * @internal
10
+ */
11
+ export declare class ElectronRpcProtocol extends RpcProtocol {
12
+ static instances: Map<string, ElectronRpcProtocol>;
13
+ ipcSocket: IpcSocket;
14
+ /** The RPC request class for this protocol. */
15
+ readonly requestType: typeof ElectronRpcRequest;
16
+ /** Specifies where to break large binary request payloads. */
17
+ transferChunkThreshold: number;
18
+ /** @internal */
19
+ requests: Map<string, ElectronRpcRequest>;
20
+ /** @internal */
21
+ readonly transport: ElectronIpcTransport<IpcTransportMessage, IpcTransportMessage>;
22
+ /** Constructs an Electron protocol. */
23
+ constructor(configuration: ElectronRpcConfiguration, ipcSocket: IpcSocket);
24
+ /** @internal */
25
+ onRpcClientInitialized(definition: RpcInterfaceDefinition, _client: RpcInterface): void;
26
+ /** @internal */
27
+ onRpcImplInitialized(definition: RpcInterfaceDefinition, _impl: RpcInterface): void;
28
+ /** @internal */
29
+ onRpcClientTerminated(definition: RpcInterfaceDefinition, _client: RpcInterface): void;
30
+ /** @internal */
31
+ onRpcImplTerminated(definition: RpcInterfaceDefinition, _impl: RpcInterface): void;
32
+ private registerInterface;
33
+ private purgeInterface;
34
+ }
35
35
  //# sourceMappingURL=ElectronRpcProtocol.d.ts.map