@theia/core 1.27.0-next.9 → 1.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -7
- package/i18n/nls.cs.json +52 -6
- package/i18n/nls.de.json +52 -6
- package/i18n/nls.es.json +52 -6
- package/i18n/nls.fr.json +52 -6
- package/i18n/nls.hu.json +55 -9
- package/i18n/nls.it.json +52 -6
- package/i18n/nls.ja.json +52 -6
- package/i18n/nls.json +52 -6
- package/i18n/nls.pl.json +52 -6
- package/i18n/nls.pt-br.json +52 -6
- package/i18n/nls.pt-pt.json +52 -6
- package/i18n/nls.ru.json +52 -6
- package/i18n/nls.zh-cn.json +52 -6
- package/lib/browser/color-application-contribution.d.ts +2 -2
- package/lib/browser/color-application-contribution.d.ts.map +1 -1
- package/lib/browser/color-application-contribution.js +15 -16
- package/lib/browser/color-application-contribution.js.map +1 -1
- package/lib/browser/color-registry.d.ts +0 -4
- package/lib/browser/color-registry.d.ts.map +1 -1
- package/lib/browser/color-registry.js +0 -14
- package/lib/browser/color-registry.js.map +1 -1
- package/lib/browser/common-frontend-contribution.d.ts +4 -0
- package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
- package/lib/browser/common-frontend-contribution.js +157 -163
- package/lib/browser/common-frontend-contribution.js.map +1 -1
- package/lib/browser/common-styling-participants.d.ts +28 -0
- package/lib/browser/common-styling-participants.d.ts.map +1 -0
- package/lib/browser/common-styling-participants.js +319 -0
- package/lib/browser/common-styling-participants.js.map +1 -0
- package/lib/browser/connection-status-service.d.ts.map +1 -1
- package/lib/browser/connection-status-service.js +2 -2
- package/lib/browser/connection-status-service.js.map +1 -1
- package/lib/browser/connection-status-service.spec.js +1 -2
- package/lib/browser/connection-status-service.spec.js.map +1 -1
- package/lib/browser/context-menu-renderer.d.ts +1 -5
- package/lib/browser/context-menu-renderer.d.ts.map +1 -1
- package/lib/browser/context-menu-renderer.js +10 -30
- package/lib/browser/context-menu-renderer.js.map +1 -1
- package/lib/browser/core-preferences.d.ts +1 -0
- package/lib/browser/core-preferences.d.ts.map +1 -1
- package/lib/browser/core-preferences.js +5 -0
- package/lib/browser/core-preferences.js.map +1 -1
- package/lib/browser/decoration-style.d.ts +1 -0
- package/lib/browser/decoration-style.d.ts.map +1 -1
- package/lib/browser/decoration-style.js +6 -2
- package/lib/browser/decoration-style.js.map +1 -1
- package/lib/browser/frontend-application-bindings.d.ts.map +1 -1
- package/lib/browser/frontend-application-bindings.js +1 -3
- package/lib/browser/frontend-application-bindings.js.map +1 -1
- package/lib/browser/frontend-application-config-provider.d.ts +1 -0
- package/lib/browser/frontend-application-config-provider.d.ts.map +1 -1
- package/lib/browser/frontend-application-config-provider.js +2 -1
- package/lib/browser/frontend-application-config-provider.js.map +1 -1
- package/lib/browser/frontend-application-module.d.ts.map +1 -1
- package/lib/browser/frontend-application-module.js +9 -3
- package/lib/browser/frontend-application-module.js.map +1 -1
- package/lib/browser/i18n/i18n-frontend-module.d.ts.map +1 -1
- package/lib/browser/i18n/i18n-frontend-module.js +2 -0
- package/lib/browser/i18n/i18n-frontend-module.js.map +1 -1
- package/lib/browser/i18n/language-quick-pick-service.d.ts +17 -0
- package/lib/browser/i18n/language-quick-pick-service.d.ts.map +1 -0
- package/lib/browser/i18n/language-quick-pick-service.js +142 -0
- package/lib/browser/i18n/language-quick-pick-service.js.map +1 -0
- package/lib/browser/index.d.ts +1 -0
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +1 -0
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/keybinding.d.ts.map +1 -1
- package/lib/browser/keybinding.js +2 -1
- package/lib/browser/keybinding.js.map +1 -1
- package/lib/browser/keybinding.spec.js +18 -21
- package/lib/browser/keybinding.spec.js.map +1 -1
- package/lib/browser/label-provider.d.ts +0 -12
- package/lib/browser/label-provider.d.ts.map +1 -1
- package/lib/browser/label-provider.js +1 -13
- package/lib/browser/label-provider.js.map +1 -1
- package/lib/browser/logger-frontend-module.d.ts.map +1 -1
- package/lib/browser/logger-frontend-module.js +8 -1
- package/lib/browser/logger-frontend-module.js.map +1 -1
- package/lib/browser/messaging/ws-connection-provider.d.ts +5 -4
- package/lib/browser/messaging/ws-connection-provider.d.ts.map +1 -1
- package/lib/browser/messaging/ws-connection-provider.js +30 -23
- package/lib/browser/messaging/ws-connection-provider.js.map +1 -1
- package/lib/browser/preferences/preference-contribution.d.ts +2 -19
- package/lib/browser/preferences/preference-contribution.d.ts.map +1 -1
- package/lib/browser/preferences/preference-contribution.js +1 -24
- package/lib/browser/preferences/preference-contribution.js.map +1 -1
- package/lib/browser/preferences/preference-proxy.d.ts +0 -4
- package/lib/browser/preferences/preference-proxy.d.ts.map +1 -1
- package/lib/browser/preferences/preference-proxy.js.map +1 -1
- package/lib/browser/preferences/preference-proxy.spec.js +3 -102
- package/lib/browser/preferences/preference-proxy.spec.js.map +1 -1
- package/lib/browser/preferences/preference-schema-provider.spec.js +4 -3
- package/lib/browser/preferences/preference-schema-provider.spec.js.map +1 -1
- package/lib/browser/preferences/preference-service.spec.js +1 -2
- package/lib/browser/preferences/preference-service.spec.js.map +1 -1
- package/lib/browser/preferences/preference-validation-service.d.ts +2 -2
- package/lib/browser/preferences/preference-validation-service.d.ts.map +1 -1
- package/lib/browser/preferences/preference-validation-service.spec.js.map +1 -1
- package/lib/browser/preloader.d.ts.map +1 -1
- package/lib/browser/preloader.js +7 -1
- package/lib/browser/preloader.js.map +1 -1
- package/lib/browser/progress-status-bar-item.d.ts +1 -1
- package/lib/browser/progress-status-bar-item.d.ts.map +1 -1
- package/lib/browser/quick-input/quick-command-service.d.ts.map +1 -1
- package/lib/browser/quick-input/quick-command-service.js +2 -2
- package/lib/browser/quick-input/quick-command-service.js.map +1 -1
- package/lib/browser/saveable.d.ts.map +1 -1
- package/lib/browser/saveable.js +5 -4
- package/lib/browser/saveable.js.map +1 -1
- package/lib/browser/shell/application-shell.d.ts +4 -0
- package/lib/browser/shell/application-shell.d.ts.map +1 -1
- package/lib/browser/shell/application-shell.js +42 -36
- package/lib/browser/shell/application-shell.js.map +1 -1
- package/lib/browser/shell/shell-layout-restorer.d.ts +2 -0
- package/lib/browser/shell/shell-layout-restorer.d.ts.map +1 -1
- package/lib/browser/shell/shell-layout-restorer.js +5 -1
- package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
- package/lib/browser/shell/side-panel-handler.d.ts.map +1 -1
- package/lib/browser/shell/side-panel-handler.js +3 -2
- package/lib/browser/shell/side-panel-handler.js.map +1 -1
- package/lib/browser/shell/tab-bars.d.ts +4 -2
- package/lib/browser/shell/tab-bars.d.ts.map +1 -1
- package/lib/browser/shell/tab-bars.js +12 -4
- package/lib/browser/shell/tab-bars.js.map +1 -1
- package/lib/browser/source-tree/source-tree-widget.js +1 -1
- package/lib/browser/source-tree/source-tree-widget.js.map +1 -1
- package/lib/browser/source-tree/tree-source.d.ts +2 -1
- package/lib/browser/source-tree/tree-source.d.ts.map +1 -1
- package/lib/browser/source-tree/tree-source.js.map +1 -1
- package/lib/browser/styling-service.d.ts +26 -0
- package/lib/browser/styling-service.d.ts.map +1 -0
- package/lib/browser/styling-service.js +76 -0
- package/lib/browser/styling-service.js.map +1 -0
- package/lib/browser/theming.d.ts +4 -8
- package/lib/browser/theming.d.ts.map +1 -1
- package/lib/browser/theming.js +38 -53
- package/lib/browser/theming.js.map +1 -1
- package/lib/browser/tree/search-box.d.ts.map +1 -1
- package/lib/browser/tree/search-box.js +5 -4
- package/lib/browser/tree/search-box.js.map +1 -1
- package/lib/browser/tree/test/tree-test-container.d.ts.map +1 -1
- package/lib/browser/tree/test/tree-test-container.js +2 -0
- package/lib/browser/tree/test/tree-test-container.js.map +1 -1
- package/lib/browser/tree/tree-compression/compressed-tree-model.d.ts +1 -1
- package/lib/browser/tree/tree-compression/compressed-tree-model.d.ts.map +1 -1
- package/lib/browser/tree/tree-compression/compressed-tree-model.js +4 -2
- package/lib/browser/tree/tree-compression/compressed-tree-model.js.map +1 -1
- package/lib/browser/tree/tree-compression/compressed-tree-widget.d.ts.map +1 -1
- package/lib/browser/tree/tree-compression/compressed-tree-widget.js +4 -2
- package/lib/browser/tree/tree-compression/compressed-tree-widget.js.map +1 -1
- package/lib/browser/tree/tree-container.d.ts +2 -0
- package/lib/browser/tree/tree-container.d.ts.map +1 -1
- package/lib/browser/tree/tree-container.js +3 -0
- package/lib/browser/tree/tree-container.js.map +1 -1
- package/lib/browser/tree/tree-focus-service.d.ts +20 -0
- package/lib/browser/tree/tree-focus-service.d.ts.map +1 -0
- package/lib/browser/tree/tree-focus-service.js +62 -0
- package/lib/browser/tree/tree-focus-service.js.map +1 -0
- package/lib/browser/tree/tree-model.d.ts +11 -2
- package/lib/browser/tree/tree-model.d.ts.map +1 -1
- package/lib/browser/tree/tree-model.js +29 -8
- package/lib/browser/tree/tree-model.js.map +1 -1
- package/lib/browser/tree/tree-selection-impl.d.ts +4 -1
- package/lib/browser/tree/tree-selection-impl.d.ts.map +1 -1
- package/lib/browser/tree/tree-selection-impl.js +13 -2
- package/lib/browser/tree/tree-selection-impl.js.map +1 -1
- package/lib/browser/tree/tree-selection-state.d.ts +1 -0
- package/lib/browser/tree/tree-selection-state.d.ts.map +1 -1
- package/lib/browser/tree/tree-selection-state.js +8 -2
- package/lib/browser/tree/tree-selection-state.js.map +1 -1
- package/lib/browser/tree/tree-selection.d.ts +9 -0
- package/lib/browser/tree/tree-selection.d.ts.map +1 -1
- package/lib/browser/tree/tree-selection.js +3 -0
- package/lib/browser/tree/tree-selection.js.map +1 -1
- package/lib/browser/tree/tree-widget-selection.d.ts.map +1 -1
- package/lib/browser/tree/tree-widget-selection.js +9 -1
- package/lib/browser/tree/tree-widget-selection.js.map +1 -1
- package/lib/browser/tree/tree-widget.d.ts +14 -0
- package/lib/browser/tree/tree-widget.d.ts.map +1 -1
- package/lib/browser/tree/tree-widget.js +80 -40
- package/lib/browser/tree/tree-widget.js.map +1 -1
- package/lib/browser/tree/tree.d.ts +2 -1
- package/lib/browser/tree/tree.d.ts.map +1 -1
- package/lib/browser/tree/tree.js +12 -2
- package/lib/browser/tree/tree.js.map +1 -1
- package/lib/browser/view-container.d.ts +9 -4
- package/lib/browser/view-container.d.ts.map +1 -1
- package/lib/browser/view-container.js +36 -6
- package/lib/browser/view-container.js.map +1 -1
- package/lib/common/cancellation.d.ts +1 -0
- package/lib/common/cancellation.d.ts.map +1 -1
- package/lib/common/cancellation.js +8 -0
- package/lib/common/cancellation.js.map +1 -1
- package/lib/common/command.d.ts +1 -1
- package/lib/common/command.d.ts.map +1 -1
- package/lib/common/command.js +13 -16
- package/lib/common/command.js.map +1 -1
- package/lib/common/index.d.ts +1 -0
- package/lib/common/index.d.ts.map +1 -1
- package/lib/common/index.js +1 -0
- package/lib/common/index.js.map +1 -1
- package/lib/common/message-rpc/channel.d.ts +106 -0
- package/lib/common/message-rpc/channel.d.ts.map +1 -0
- package/lib/common/message-rpc/channel.js +195 -0
- package/lib/common/message-rpc/channel.js.map +1 -0
- package/lib/common/message-rpc/channel.spec.d.ts +9 -0
- package/lib/common/message-rpc/channel.spec.d.ts.map +1 -0
- package/lib/common/message-rpc/channel.spec.js +80 -0
- package/lib/common/message-rpc/channel.spec.js.map +1 -0
- package/lib/common/message-rpc/index.d.ts +4 -0
- package/lib/common/message-rpc/index.d.ts.map +1 -0
- package/lib/{node/messaging/logger.js → common/message-rpc/index.js} +6 -19
- package/lib/common/message-rpc/index.js.map +1 -0
- package/lib/common/message-rpc/message-buffer.d.ts +50 -0
- package/lib/common/message-rpc/message-buffer.d.ts.map +1 -0
- package/lib/common/message-rpc/message-buffer.js +56 -0
- package/lib/common/message-rpc/message-buffer.js.map +1 -0
- package/lib/common/message-rpc/rpc-message-encoder.d.ts +171 -0
- package/lib/common/message-rpc/rpc-message-encoder.d.ts.map +1 -0
- package/lib/common/message-rpc/rpc-message-encoder.js +409 -0
- package/lib/common/message-rpc/rpc-message-encoder.js.map +1 -0
- package/lib/common/message-rpc/rpc-message-encoder.spec.d.ts +2 -0
- package/lib/common/message-rpc/rpc-message-encoder.spec.d.ts.map +1 -0
- package/lib/common/message-rpc/rpc-message-encoder.spec.js +49 -0
- package/lib/common/message-rpc/rpc-message-encoder.spec.js.map +1 -0
- package/lib/common/message-rpc/rpc-protocol.d.ts +61 -0
- package/lib/common/message-rpc/rpc-protocol.d.ts.map +1 -0
- package/lib/common/message-rpc/rpc-protocol.js +183 -0
- package/lib/common/message-rpc/rpc-protocol.js.map +1 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.d.ts +52 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.d.ts.map +1 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.js +169 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.js.map +1 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.spec.d.ts +2 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.spec.d.ts.map +1 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.spec.js +39 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.spec.js.map +1 -0
- package/lib/common/messaging/abstract-connection-provider.d.ts +9 -8
- package/lib/common/messaging/abstract-connection-provider.d.ts.map +1 -1
- package/lib/common/messaging/abstract-connection-provider.js +20 -35
- package/lib/common/messaging/abstract-connection-provider.js.map +1 -1
- package/lib/common/messaging/connection-error-handler.d.ts +1 -2
- package/lib/common/messaging/connection-error-handler.d.ts.map +1 -1
- package/lib/common/messaging/connection-error-handler.js +1 -1
- package/lib/common/messaging/connection-error-handler.js.map +1 -1
- package/lib/common/messaging/handler.d.ts +2 -2
- package/lib/common/messaging/handler.d.ts.map +1 -1
- package/lib/common/messaging/proxy-factory.d.ts +13 -7
- package/lib/common/messaging/proxy-factory.d.ts.map +1 -1
- package/lib/common/messaging/proxy-factory.js +18 -13
- package/lib/common/messaging/proxy-factory.js.map +1 -1
- package/lib/common/messaging/proxy-factory.spec.js +4 -15
- package/lib/common/messaging/proxy-factory.spec.js.map +1 -1
- package/lib/common/messaging/web-socket-channel.d.ts +54 -48
- package/lib/common/messaging/web-socket-channel.d.ts.map +1 -1
- package/lib/common/messaging/web-socket-channel.js +41 -105
- package/lib/common/messaging/web-socket-channel.js.map +1 -1
- package/lib/common/nls.d.ts +2 -0
- package/lib/common/nls.d.ts.map +1 -1
- package/lib/common/nls.js +11 -0
- package/lib/common/nls.js.map +1 -1
- package/lib/common/preferences/preference-schema.d.ts +1 -5
- package/lib/common/preferences/preference-schema.d.ts.map +1 -1
- package/lib/common/preferences/preference-schema.js.map +1 -1
- package/lib/common/promise-util.d.ts +2 -1
- package/lib/common/promise-util.d.ts.map +1 -1
- package/lib/common/promise-util.js +8 -13
- package/lib/common/promise-util.js.map +1 -1
- package/lib/common/resource.d.ts +5 -0
- package/lib/common/resource.d.ts.map +1 -1
- package/lib/common/resource.js +28 -1
- package/lib/common/resource.js.map +1 -1
- package/lib/common/theme.d.ts +3 -2
- package/lib/common/theme.d.ts.map +1 -1
- package/lib/common/theme.js +5 -0
- package/lib/common/theme.js.map +1 -1
- package/lib/electron-browser/messaging/electron-ipc-connection-provider.d.ts +2 -2
- package/lib/electron-browser/messaging/electron-ipc-connection-provider.d.ts.map +1 -1
- package/lib/electron-browser/messaging/electron-ipc-connection-provider.js +18 -7
- package/lib/electron-browser/messaging/electron-ipc-connection-provider.js.map +1 -1
- package/lib/electron-browser/messaging/electron-ws-connection-provider.d.ts +2 -2
- package/lib/electron-browser/messaging/electron-ws-connection-provider.d.ts.map +1 -1
- package/lib/electron-browser/messaging/electron-ws-connection-provider.js +5 -7
- package/lib/electron-browser/messaging/electron-ws-connection-provider.js.map +1 -1
- package/lib/electron-main/event-utils.d.ts +1 -1
- package/lib/electron-main/messaging/electron-messaging-contribution.d.ts +37 -9
- package/lib/electron-main/messaging/electron-messaging-contribution.d.ts.map +1 -1
- package/lib/electron-main/messaging/electron-messaging-contribution.js +83 -68
- package/lib/electron-main/messaging/electron-messaging-contribution.js.map +1 -1
- package/lib/electron-main/messaging/electron-messaging-service.d.ts +2 -8
- package/lib/electron-main/messaging/electron-messaging-service.d.ts.map +1 -1
- package/lib/electron-main/messaging/electron-messaging-service.js.map +1 -1
- package/lib/node/messaging/binary-message-pipe.d.ts +45 -0
- package/lib/node/messaging/binary-message-pipe.d.ts.map +1 -0
- package/lib/node/messaging/binary-message-pipe.js +152 -0
- package/lib/node/messaging/binary-message-pipe.js.map +1 -0
- package/lib/node/messaging/ipc-bootstrap.js +2 -11
- package/lib/node/messaging/ipc-bootstrap.js.map +1 -1
- package/lib/node/messaging/ipc-channel.d.ts +26 -0
- package/lib/node/messaging/ipc-channel.d.ts.map +1 -0
- package/lib/node/messaging/ipc-channel.js +86 -0
- package/lib/node/messaging/ipc-channel.js.map +1 -0
- package/lib/node/messaging/ipc-connection-provider.d.ts +3 -5
- package/lib/node/messaging/ipc-connection-provider.d.ts.map +1 -1
- package/lib/node/messaging/ipc-connection-provider.js +14 -31
- package/lib/node/messaging/ipc-connection-provider.js.map +1 -1
- package/lib/node/messaging/ipc-protocol.d.ts +2 -2
- package/lib/node/messaging/ipc-protocol.d.ts.map +1 -1
- package/lib/node/messaging/messaging-contribution.d.ts +6 -9
- package/lib/node/messaging/messaging-contribution.d.ts.map +1 -1
- package/lib/node/messaging/messaging-contribution.js +23 -68
- package/lib/node/messaging/messaging-contribution.js.map +1 -1
- package/lib/node/messaging/messaging-service.d.ts +4 -23
- package/lib/node/messaging/messaging-service.d.ts.map +1 -1
- package/lib/node/messaging/messaging-service.js +1 -15
- package/lib/node/messaging/messaging-service.js.map +1 -1
- package/lib/node/messaging/test/test-web-socket-channel.d.ts +4 -2
- package/lib/node/messaging/test/test-web-socket-channel.d.ts.map +1 -1
- package/lib/node/messaging/test/test-web-socket-channel.js +25 -12
- package/lib/node/messaging/test/test-web-socket-channel.js.map +1 -1
- package/lib/node/request/proxy-cli-contribution.js +1 -1
- package/lib/node/request/proxy-cli-contribution.js.map +1 -1
- package/package.json +7 -10
- package/src/browser/color-application-contribution.ts +10 -17
- package/src/browser/color-registry.ts +0 -5
- package/src/browser/common-frontend-contribution.ts +26 -33
- package/src/browser/common-styling-participants.ts +307 -0
- package/src/browser/connection-status-service.spec.ts +1 -4
- package/src/browser/connection-status-service.ts +3 -3
- package/src/browser/context-menu-renderer.ts +13 -29
- package/src/browser/core-preferences.ts +6 -0
- package/src/browser/decoration-style.ts +6 -2
- package/src/browser/frontend-application-bindings.ts +1 -3
- package/src/browser/frontend-application-config-provider.ts +2 -0
- package/src/browser/frontend-application-module.ts +11 -4
- package/src/browser/i18n/i18n-frontend-module.ts +2 -0
- package/src/browser/i18n/language-quick-pick-service.ts +128 -0
- package/src/browser/index.ts +1 -0
- package/src/browser/keybinding.spec.ts +22 -27
- package/src/browser/keybinding.ts +2 -1
- package/src/browser/label-provider.ts +0 -13
- package/src/browser/logger-frontend-module.ts +8 -1
- package/src/browser/messaging/ws-connection-provider.ts +34 -25
- package/src/browser/preferences/preference-contribution.ts +3 -28
- package/src/browser/preferences/preference-proxy.spec.ts +3 -113
- package/src/browser/preferences/preference-proxy.ts +0 -4
- package/src/browser/preferences/preference-schema-provider.spec.ts +1 -4
- package/src/browser/preferences/preference-service.spec.ts +1 -5
- package/src/browser/preferences/preference-validation-service.spec.ts +2 -2
- package/src/browser/preferences/preference-validation-service.ts +2 -2
- package/src/browser/preloader.ts +9 -2
- package/src/browser/progress-status-bar-item.ts +1 -1
- package/src/browser/quick-input/quick-command-service.ts +3 -3
- package/src/browser/saveable.ts +5 -4
- package/src/browser/shell/application-shell.ts +42 -35
- package/src/browser/shell/shell-layout-restorer.ts +4 -6
- package/src/browser/shell/side-panel-handler.ts +3 -2
- package/src/browser/shell/tab-bars.ts +14 -4
- package/src/browser/source-tree/source-tree-widget.tsx +1 -1
- package/src/browser/source-tree/tree-source.ts +2 -1
- package/src/browser/style/breadcrumbs.css +0 -1
- package/src/browser/style/index.css +66 -29
- package/src/browser/style/menus.css +4 -2
- package/src/browser/style/select-component.css +2 -0
- package/src/browser/style/sidepanel.css +11 -25
- package/src/browser/style/status-bar.css +8 -17
- package/src/browser/style/tabs.css +0 -16
- package/src/browser/style/tooltip.css +3 -3
- package/src/browser/style/tree.css +27 -11
- package/src/browser/style/view-container.css +4 -0
- package/src/browser/styling-service.ts +76 -0
- package/src/browser/theming.ts +18 -45
- package/src/browser/tree/search-box.ts +5 -4
- package/src/browser/tree/test/tree-test-container.ts +2 -0
- package/src/browser/tree/tree-compression/compressed-tree-model.ts +8 -2
- package/src/browser/tree/tree-compression/compressed-tree-widget.tsx +4 -2
- package/src/browser/tree/tree-container.ts +4 -0
- package/src/browser/tree/tree-focus-service.ts +55 -0
- package/src/browser/tree/tree-model.ts +32 -8
- package/src/browser/tree/tree-selection-impl.ts +13 -4
- package/src/browser/tree/tree-selection-state.ts +7 -2
- package/src/browser/tree/tree-selection.ts +10 -0
- package/src/browser/tree/tree-widget-selection.ts +10 -1
- package/src/browser/tree/tree-widget.tsx +83 -43
- package/src/browser/tree/tree.ts +8 -2
- package/src/browser/view-container.ts +41 -4
- package/src/common/cancellation.ts +8 -0
- package/src/common/command.ts +14 -16
- package/src/common/index.ts +1 -0
- package/src/common/message-rpc/channel.spec.ts +88 -0
- package/src/common/message-rpc/channel.ts +260 -0
- package/src/{node/messaging/logger.ts → common/message-rpc/index.ts} +4 -23
- package/src/common/message-rpc/message-buffer.ts +99 -0
- package/src/common/message-rpc/rpc-message-encoder.spec.ts +55 -0
- package/src/common/message-rpc/rpc-message-encoder.ts +552 -0
- package/src/common/message-rpc/rpc-protocol.ts +217 -0
- package/src/common/message-rpc/uint8-array-message-buffer.spec.ts +41 -0
- package/src/common/message-rpc/uint8-array-message-buffer.ts +206 -0
- package/src/common/messaging/abstract-connection-provider.ts +28 -37
- package/src/common/messaging/connection-error-handler.ts +1 -2
- package/src/common/messaging/handler.ts +2 -2
- package/src/common/messaging/proxy-factory.spec.ts +4 -17
- package/src/common/messaging/proxy-factory.ts +27 -16
- package/src/common/messaging/web-socket-channel.ts +79 -135
- package/src/common/nls.ts +11 -0
- package/src/common/preferences/preference-schema.ts +1 -6
- package/src/common/promise-util.ts +13 -14
- package/src/common/resource.ts +29 -2
- package/src/common/theme.ts +6 -2
- package/src/electron-browser/messaging/electron-ipc-connection-provider.ts +21 -7
- package/src/electron-browser/messaging/electron-ws-connection-provider.ts +5 -8
- package/src/electron-main/messaging/electron-messaging-contribution.ts +87 -65
- package/src/electron-main/messaging/electron-messaging-service.ts +2 -8
- package/src/node/messaging/binary-message-pipe.ts +168 -0
- package/src/node/messaging/ipc-bootstrap.ts +3 -11
- package/src/node/messaging/ipc-channel.ts +97 -0
- package/src/node/messaging/ipc-connection-provider.ts +18 -35
- package/src/node/messaging/ipc-protocol.ts +2 -2
- package/src/node/messaging/messaging-contribution.ts +29 -74
- package/src/node/messaging/messaging-service.ts +4 -31
- package/src/node/messaging/test/test-web-socket-channel.ts +26 -17
- package/src/node/request/proxy-cli-contribution.ts +1 -1
- package/lib/browser/preferences/validated-preference-proxy.d.ts +0 -21
- package/lib/browser/preferences/validated-preference-proxy.d.ts.map +0 -1
- package/lib/browser/preferences/validated-preference-proxy.js +0 -118
- package/lib/browser/preferences/validated-preference-proxy.js.map +0 -1
- package/lib/node/messaging/logger.d.ts +0 -8
- package/lib/node/messaging/logger.d.ts.map +0 -1
- package/lib/node/messaging/logger.js.map +0 -1
- package/shared/vscode-ws-jsonrpc/index.d.ts +0 -1
- package/shared/vscode-ws-jsonrpc/index.js +0 -1
- package/src/browser/preferences/validated-preference-proxy.ts +0 -111
- package/src/browser/style/variables-bright.useable.css +0 -93
- package/src/browser/style/variables-dark.useable.css +0 -93
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electron-ws-connection-provider.d.ts","sourceRoot":"","sources":["../../../src/electron-browser/messaging/electron-ws-connection-provider.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"electron-ws-connection-provider.d.ts","sourceRoot":"","sources":["../../../src/electron-browser/messaging/electron-ws-connection-provider.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAC/G,OAAO,EAAE,+BAA+B,EAAE,MAAM,oCAAoC,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;;;GAIG;AACH,qBACa,mCAAoC,SAAQ,2BAA4B,YAAW,+BAA+B;IAE3H;;OAEG;IACH,SAAS,CAAC,QAAQ,UAAS;IAE3B,MAAM,IAAI,IAAI;IAQC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAM3H"}
|
|
@@ -38,16 +38,14 @@ let ElectronWebSocketConnectionProvider = class ElectronWebSocketConnectionProvi
|
|
|
38
38
|
this.stopping = false;
|
|
39
39
|
}
|
|
40
40
|
onStop() {
|
|
41
|
+
var _a;
|
|
41
42
|
this.stopping = true;
|
|
42
|
-
//
|
|
43
|
+
// Manually close the websocket connections `onStop`. Otherwise, the channels will be closed with 30 sec (`MessagingContribution#checkAliveTimeout`) delay.
|
|
43
44
|
// https://github.com/eclipse-theia/theia/issues/6499
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
// But we cannot use `1001`: https://github.com/TypeFox/vscode-ws-jsonrpc/issues/15
|
|
47
|
-
channel.close(1000, 'The frontend is "going away"...');
|
|
48
|
-
}
|
|
45
|
+
// `1001` indicates that an endpoint is "going away", such as a server going down or a browser having navigated away from a page.
|
|
46
|
+
(_a = this.channelMultiPlexer) === null || _a === void 0 ? void 0 : _a.onUnderlyingChannelClose({ reason: 'The frontend is "going away"', code: 1001 });
|
|
49
47
|
}
|
|
50
|
-
openChannel(path, handler, options) {
|
|
48
|
+
async openChannel(path, handler, options) {
|
|
51
49
|
if (!this.stopping) {
|
|
52
50
|
super.openChannel(path, handler, options);
|
|
53
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electron-ws-connection-provider.js","sourceRoot":"","sources":["../../../src/electron-browser/messaging/electron-ws-connection-provider.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;;;;;;;;;AAEhF,yCAAuC;
|
|
1
|
+
{"version":3,"file":"electron-ws-connection-provider.js","sourceRoot":"","sources":["../../../src/electron-browser/messaging/electron-ws-connection-provider.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;;;;;;;;;AAEhF,yCAAuC;AACvC,2FAA+G;AAI/G;;;;GAIG;AAEH,IAAa,mCAAmC,GAAhD,MAAa,mCAAoC,SAAQ,oDAA2B;IAApF;;QAEI;;WAEG;QACO,aAAQ,GAAG,KAAK,CAAC;IAgB/B,CAAC;IAdG,MAAM;;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,2JAA2J;QAC3J,qDAAqD;QACrD,iIAAiI;QACjI,MAAA,IAAI,CAAC,kBAAkB,0CAAE,wBAAwB,CAAC,EAAE,MAAM,EAAE,8BAA8B,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9G,CAAC;IAEQ,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,OAAmC,EAAE,OAA0B;QACpG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;SAC7C;IACL,CAAC;CAEJ,CAAA;AArBY,mCAAmC;IAD/C,IAAA,sBAAU,GAAE;GACA,mCAAmC,CAqB/C;AArBY,kFAAmC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
/// <reference types="mocha" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
3
|
import { Disposable, DisposableCollection } from '../common';
|
|
4
4
|
/**
|
|
5
5
|
* @param collection If a collection is passed in, the new disposable is added to that collection. Otherwise, the new disposable is returned.
|
|
@@ -1,29 +1,57 @@
|
|
|
1
1
|
import { IpcMainEvent, WebContents } from '@theia/electron/shared/electron';
|
|
2
|
-
import { MessageConnection } from 'vscode-ws-jsonrpc';
|
|
3
2
|
import { ContributionProvider } from '../../common/contribution-provider';
|
|
4
|
-
import { WebSocketChannel } from '../../common/messaging/web-socket-channel';
|
|
5
3
|
import { MessagingContribution } from '../../node/messaging/messaging-contribution';
|
|
6
4
|
import { ElectronConnectionHandler } from '../../electron-common/messaging/electron-connection-handler';
|
|
7
5
|
import { ElectronMainApplicationContribution } from '../electron-main-application';
|
|
8
6
|
import { ElectronMessagingService } from './electron-messaging-service';
|
|
7
|
+
import { Channel, ChannelCloseEvent, ChannelMultiplexer, MessageProvider } from '../../common/message-rpc/channel';
|
|
8
|
+
import { Emitter, Event, WriteBuffer } from '../../common';
|
|
9
9
|
/**
|
|
10
10
|
* This component replicates the role filled by `MessagingContribution` but for Electron.
|
|
11
11
|
* Unlike the WebSocket based implementation, we do not expect to receive
|
|
12
12
|
* connection events. Instead, we'll create channels based on incoming `open`
|
|
13
13
|
* events on the `ipcMain` channel.
|
|
14
|
-
*
|
|
15
14
|
* This component allows communication between renderer process (frontend) and electron main process.
|
|
16
15
|
*/
|
|
17
16
|
export declare class ElectronMessagingContribution implements ElectronMainApplicationContribution, ElectronMessagingService {
|
|
18
17
|
protected readonly messagingContributions: ContributionProvider<ElectronMessagingService.Contribution>;
|
|
19
18
|
protected readonly connectionHandlers: ContributionProvider<ElectronConnectionHandler>;
|
|
20
|
-
protected readonly channelHandlers: MessagingContribution.ConnectionHandlers<
|
|
21
|
-
|
|
19
|
+
protected readonly channelHandlers: MessagingContribution.ConnectionHandlers<Channel>;
|
|
20
|
+
/**
|
|
21
|
+
* Each electron window has a main chanel and its own multiplexer to route multiple client messages the same IPC connection.
|
|
22
|
+
*/
|
|
23
|
+
protected readonly windowChannelMultiplexer: Map<number, {
|
|
24
|
+
channel: ElectronWebContentChannel;
|
|
25
|
+
multiPlexer: ChannelMultiplexer;
|
|
26
|
+
}>;
|
|
22
27
|
protected init(): void;
|
|
28
|
+
protected handleIpcEvent(event: IpcMainEvent, data: Uint8Array): void;
|
|
29
|
+
protected createWindowChannelData(sender: Electron.WebContents): {
|
|
30
|
+
channel: ElectronWebContentChannel;
|
|
31
|
+
multiPlexer: ChannelMultiplexer;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Creates the main channel to a window.
|
|
35
|
+
* @param sender The window that the channel should be established to.
|
|
36
|
+
*/
|
|
37
|
+
protected createWindowMainChannel(sender: WebContents): ElectronWebContentChannel;
|
|
23
38
|
onStart(): void;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
39
|
+
ipcChannel(spec: string, callback: (params: any, channel: Channel) => void): void;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Used to establish a connection between the ipcMain and the Electron frontend (window).
|
|
43
|
+
* Messages a transferred via electron IPC.
|
|
44
|
+
*/
|
|
45
|
+
export declare class ElectronWebContentChannel implements Channel {
|
|
46
|
+
protected readonly sender: Electron.WebContents;
|
|
47
|
+
protected readonly onCloseEmitter: Emitter<ChannelCloseEvent>;
|
|
48
|
+
get onClose(): Event<ChannelCloseEvent>;
|
|
49
|
+
readonly onMessageEmitter: Emitter<MessageProvider>;
|
|
50
|
+
get onMessage(): Event<MessageProvider>;
|
|
51
|
+
protected readonly onErrorEmitter: Emitter<unknown>;
|
|
52
|
+
get onError(): Event<unknown>;
|
|
53
|
+
constructor(sender: Electron.WebContents);
|
|
54
|
+
getWriteBuffer(): WriteBuffer;
|
|
55
|
+
close(): void;
|
|
28
56
|
}
|
|
29
57
|
//# sourceMappingURL=electron-messaging-contribution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electron-messaging-contribution.d.ts","sourceRoot":"","sources":["../../../src/electron-main/messaging/electron-messaging-contribution.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,YAAY,EAAW,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAErF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"electron-messaging-contribution.d.ts","sourceRoot":"","sources":["../../../src/electron-main/messaging/electron-messaging-contribution.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,YAAY,EAAW,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAErF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAmC,MAAM,6DAA6D,CAAC;AACzI,OAAO,EAAE,mCAAmC,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3D;;;;;;GAMG;AAEH,qBACa,6BAA8B,YAAW,mCAAmC,EAAE,wBAAwB;IAG/G,SAAS,CAAC,QAAQ,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;IAGvG,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;IAEvF,SAAS,CAAC,QAAQ,CAAC,eAAe,oDAA2D;IAC7F;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,wBAAwB;iBAA8B,yBAAyB;qBAAe,kBAAkB;OAAM;IAGzI,SAAS,CAAC,IAAI,IAAI,IAAI;IAMtB,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAYrE,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,GAAG;QAAE,OAAO,EAAE,yBAAyB,CAAC;QAAC,WAAW,EAAE,kBAAkB,CAAA;KAAE;IAkBxI;;;OAGG;IACH,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,yBAAyB;IAIjF,OAAO,IAAI,IAAI;IAYf,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;CAGpF;AAED;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,OAAO;IAiBzC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW;IAhB3D,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAiB;IAC9E,IAAI,OAAO,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAEtC;IAGD,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,eAAe,CAAC,CAAiB;IACpE,IAAI,SAAS,IAAI,KAAK,CAAC,eAAe,CAAC,CAEtC;IAED,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,CAAiB;IACpE,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAE5B;gBAE8B,MAAM,EAAE,QAAQ,CAAC,WAAW;IAG3D,cAAc,IAAI,WAAW;IAW7B,KAAK,IAAI,IAAI;CAKhB"}
|
|
@@ -24,108 +24,86 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
24
24
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
25
25
|
};
|
|
26
26
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
-
exports.ElectronMessagingContribution = void 0;
|
|
27
|
+
exports.ElectronWebContentChannel = exports.ElectronMessagingContribution = void 0;
|
|
28
28
|
const electron_1 = require("@theia/electron/shared/electron");
|
|
29
29
|
const inversify_1 = require("inversify");
|
|
30
|
-
const connection_1 = require("vscode-ws-jsonrpc/lib/socket/connection");
|
|
31
30
|
const contribution_provider_1 = require("../../common/contribution-provider");
|
|
32
|
-
const web_socket_channel_1 = require("../../common/messaging/web-socket-channel");
|
|
33
31
|
const messaging_contribution_1 = require("../../node/messaging/messaging-contribution");
|
|
34
|
-
const logger_1 = require("../../node/messaging/logger");
|
|
35
32
|
const electron_connection_handler_1 = require("../../electron-common/messaging/electron-connection-handler");
|
|
36
33
|
const electron_messaging_service_1 = require("./electron-messaging-service");
|
|
34
|
+
const channel_1 = require("../../common/message-rpc/channel");
|
|
35
|
+
const common_1 = require("../../common");
|
|
36
|
+
const uint8_array_message_buffer_1 = require("../../common/message-rpc/uint8-array-message-buffer");
|
|
37
37
|
/**
|
|
38
38
|
* This component replicates the role filled by `MessagingContribution` but for Electron.
|
|
39
39
|
* Unlike the WebSocket based implementation, we do not expect to receive
|
|
40
40
|
* connection events. Instead, we'll create channels based on incoming `open`
|
|
41
41
|
* events on the `ipcMain` channel.
|
|
42
|
-
*
|
|
43
42
|
* This component allows communication between renderer process (frontend) and electron main process.
|
|
44
43
|
*/
|
|
45
44
|
let ElectronMessagingContribution = class ElectronMessagingContribution {
|
|
46
45
|
constructor() {
|
|
47
46
|
this.channelHandlers = new messaging_contribution_1.MessagingContribution.ConnectionHandlers();
|
|
48
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Each electron window has a main chanel and its own multiplexer to route multiple client messages the same IPC connection.
|
|
49
|
+
*/
|
|
50
|
+
this.windowChannelMultiplexer = new Map();
|
|
49
51
|
}
|
|
50
52
|
init() {
|
|
51
53
|
electron_1.ipcMain.on(electron_connection_handler_1.THEIA_ELECTRON_IPC_CHANNEL_NAME, (event, data) => {
|
|
52
|
-
this.
|
|
54
|
+
this.handleIpcEvent(event, data);
|
|
53
55
|
});
|
|
54
56
|
}
|
|
57
|
+
handleIpcEvent(event, data) {
|
|
58
|
+
var _a;
|
|
59
|
+
const sender = event.sender;
|
|
60
|
+
// Get the multiplexer for a given window id
|
|
61
|
+
try {
|
|
62
|
+
const windowChannelData = (_a = this.windowChannelMultiplexer.get(sender.id)) !== null && _a !== void 0 ? _a : this.createWindowChannelData(sender);
|
|
63
|
+
windowChannelData.channel.onMessageEmitter.fire(() => new uint8_array_message_buffer_1.Uint8ArrayReadBuffer(data));
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error('IPC: Failed to handle message', { error, data });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Creates a new multiplexer for a given sender/window
|
|
70
|
+
createWindowChannelData(sender) {
|
|
71
|
+
const mainChannel = this.createWindowMainChannel(sender);
|
|
72
|
+
const multiPlexer = new channel_1.ChannelMultiplexer(mainChannel);
|
|
73
|
+
multiPlexer.onDidOpenChannel(openEvent => {
|
|
74
|
+
const { channel, id } = openEvent;
|
|
75
|
+
if (this.channelHandlers.route(id, channel)) {
|
|
76
|
+
console.debug(`Opening channel for service path '${id}'.`);
|
|
77
|
+
channel.onClose(() => console.debug(`Closing channel on service path '${id}'.`));
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
sender.once('did-navigate', () => multiPlexer.onUnderlyingChannelClose({ reason: 'Window was refreshed' })); // When refreshing the browser window.
|
|
81
|
+
sender.once('destroyed', () => multiPlexer.onUnderlyingChannelClose({ reason: 'Window was closed' })); // When closing the browser window.
|
|
82
|
+
const data = { channel: mainChannel, multiPlexer };
|
|
83
|
+
this.windowChannelMultiplexer.set(sender.id, data);
|
|
84
|
+
return data;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Creates the main channel to a window.
|
|
88
|
+
* @param sender The window that the channel should be established to.
|
|
89
|
+
*/
|
|
90
|
+
createWindowMainChannel(sender) {
|
|
91
|
+
return new ElectronWebContentChannel(sender);
|
|
92
|
+
}
|
|
55
93
|
onStart() {
|
|
56
94
|
for (const contribution of this.messagingContributions.getContributions()) {
|
|
57
95
|
contribution.configure(this);
|
|
58
96
|
}
|
|
59
97
|
for (const connectionHandler of this.connectionHandlers.getContributions()) {
|
|
60
98
|
this.channelHandlers.push(connectionHandler.path, (params, channel) => {
|
|
61
|
-
|
|
62
|
-
connectionHandler.onConnection(connection);
|
|
99
|
+
connectionHandler.onConnection(channel);
|
|
63
100
|
});
|
|
64
101
|
}
|
|
65
102
|
}
|
|
66
|
-
listen(spec, callback) {
|
|
67
|
-
this.ipcChannel(spec, (params, channel) => {
|
|
68
|
-
const connection = (0, connection_1.createWebSocketConnection)(channel, new logger_1.ConsoleLogger());
|
|
69
|
-
callback(params, connection);
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
103
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
73
104
|
ipcChannel(spec, callback) {
|
|
74
105
|
this.channelHandlers.push(spec, callback);
|
|
75
106
|
}
|
|
76
|
-
handleIpcMessage(event, data) {
|
|
77
|
-
const sender = event.sender;
|
|
78
|
-
try {
|
|
79
|
-
// Get the channel map for a given window id
|
|
80
|
-
let channels = this.windowChannels.get(sender.id);
|
|
81
|
-
if (!channels) {
|
|
82
|
-
this.windowChannels.set(sender.id, channels = new Map());
|
|
83
|
-
}
|
|
84
|
-
// Start parsing the message to extract the channel id and route
|
|
85
|
-
const message = JSON.parse(data.toString());
|
|
86
|
-
// Someone wants to open a logical channel
|
|
87
|
-
if (message.kind === 'open') {
|
|
88
|
-
const { id, path } = message;
|
|
89
|
-
const channel = this.createChannel(id, sender);
|
|
90
|
-
if (this.channelHandlers.route(path, channel)) {
|
|
91
|
-
channel.ready();
|
|
92
|
-
channels.set(id, channel);
|
|
93
|
-
channel.onClose(() => channels.delete(id));
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
console.error('Cannot find a service for the path: ' + path);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
const { id } = message;
|
|
101
|
-
const channel = channels.get(id);
|
|
102
|
-
if (channel) {
|
|
103
|
-
channel.handleMessage(message);
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
console.error('The ipc channel does not exist', id);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
const close = () => {
|
|
110
|
-
for (const channel of Array.from(channels.values())) {
|
|
111
|
-
channel.close(undefined, 'webContent destroyed');
|
|
112
|
-
}
|
|
113
|
-
channels.clear();
|
|
114
|
-
};
|
|
115
|
-
sender.once('did-navigate', close); // When refreshing the browser window.
|
|
116
|
-
sender.once('destroyed', close); // When closing the browser window.
|
|
117
|
-
}
|
|
118
|
-
catch (error) {
|
|
119
|
-
console.error('IPC: Failed to handle message', { error, data });
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
createChannel(id, sender) {
|
|
123
|
-
return new web_socket_channel_1.WebSocketChannel(id, content => {
|
|
124
|
-
if (!sender.isDestroyed()) {
|
|
125
|
-
sender.send(electron_connection_handler_1.THEIA_ELECTRON_IPC_CHANNEL_NAME, content);
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
107
|
};
|
|
130
108
|
__decorate([
|
|
131
109
|
(0, inversify_1.inject)(contribution_provider_1.ContributionProvider),
|
|
@@ -147,4 +125,41 @@ ElectronMessagingContribution = __decorate([
|
|
|
147
125
|
(0, inversify_1.injectable)()
|
|
148
126
|
], ElectronMessagingContribution);
|
|
149
127
|
exports.ElectronMessagingContribution = ElectronMessagingContribution;
|
|
128
|
+
/**
|
|
129
|
+
* Used to establish a connection between the ipcMain and the Electron frontend (window).
|
|
130
|
+
* Messages a transferred via electron IPC.
|
|
131
|
+
*/
|
|
132
|
+
class ElectronWebContentChannel {
|
|
133
|
+
constructor(sender) {
|
|
134
|
+
this.sender = sender;
|
|
135
|
+
this.onCloseEmitter = new common_1.Emitter();
|
|
136
|
+
// Make the message emitter public so that we can easily forward messages received from the ipcMain.
|
|
137
|
+
this.onMessageEmitter = new common_1.Emitter();
|
|
138
|
+
this.onErrorEmitter = new common_1.Emitter();
|
|
139
|
+
}
|
|
140
|
+
get onClose() {
|
|
141
|
+
return this.onCloseEmitter.event;
|
|
142
|
+
}
|
|
143
|
+
get onMessage() {
|
|
144
|
+
return this.onMessageEmitter.event;
|
|
145
|
+
}
|
|
146
|
+
get onError() {
|
|
147
|
+
return this.onErrorEmitter.event;
|
|
148
|
+
}
|
|
149
|
+
getWriteBuffer() {
|
|
150
|
+
const writer = new uint8_array_message_buffer_1.Uint8ArrayWriteBuffer();
|
|
151
|
+
writer.onCommit(buffer => {
|
|
152
|
+
if (!this.sender.isDestroyed()) {
|
|
153
|
+
this.sender.send(electron_connection_handler_1.THEIA_ELECTRON_IPC_CHANNEL_NAME, buffer);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
return writer;
|
|
157
|
+
}
|
|
158
|
+
close() {
|
|
159
|
+
this.onCloseEmitter.dispose();
|
|
160
|
+
this.onMessageEmitter.dispose();
|
|
161
|
+
this.onErrorEmitter.dispose();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
exports.ElectronWebContentChannel = ElectronWebContentChannel;
|
|
150
165
|
//# sourceMappingURL=electron-messaging-contribution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electron-messaging-contribution.js","sourceRoot":"","sources":["../../../src/electron-main/messaging/electron-messaging-contribution.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;;;;;;;;;;;;AAEhF,8DAAqF;AACrF,yCAAqE;
|
|
1
|
+
{"version":3,"file":"electron-messaging-contribution.js","sourceRoot":"","sources":["../../../src/electron-main/messaging/electron-messaging-contribution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { WebSocketChannel } from '../../common/messaging/web-socket-channel';
|
|
1
|
+
import { Channel } from '../../common/message-rpc/channel';
|
|
3
2
|
export interface ElectronMessagingService {
|
|
4
|
-
/**
|
|
5
|
-
* Accept a JSON-RPC connection on the given path.
|
|
6
|
-
* A path supports the route syntax: https://github.com/rcs/route-parser#what-can-i-use-in-my-routes.
|
|
7
|
-
*/
|
|
8
|
-
listen(path: string, callback: (params: ElectronMessagingService.PathParams, connection: MessageConnection) => void): void;
|
|
9
3
|
/**
|
|
10
4
|
* Accept an ipc channel on the given path.
|
|
11
5
|
* A path supports the route syntax: https://github.com/rcs/route-parser#what-can-i-use-in-my-routes.
|
|
12
6
|
*/
|
|
13
|
-
ipcChannel(path: string, callback: (params: ElectronMessagingService.PathParams, socket:
|
|
7
|
+
ipcChannel(path: string, callback: (params: ElectronMessagingService.PathParams, socket: Channel) => void): void;
|
|
14
8
|
}
|
|
15
9
|
export declare namespace ElectronMessagingService {
|
|
16
10
|
interface PathParams {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electron-messaging-service.d.ts","sourceRoot":"","sources":["../../../src/electron-main/messaging/electron-messaging-service.ts"],"names":[],"mappings":"AAgBA,OAAO,
|
|
1
|
+
{"version":3,"file":"electron-messaging-service.d.ts","sourceRoot":"","sources":["../../../src/electron-main/messaging/electron-messaging-service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAE3D,MAAM,WAAW,wBAAwB;IACrC;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;CACpH;AACD,yBAAiB,wBAAwB,CAAC;IACtC,UAAiB,UAAU;QACvB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KACzB;IACM,MAAM,YAAY,eAAkD,CAAC;IAC5E,UAAiB,YAAY;QACzB,SAAS,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAAC;KACtD;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electron-messaging-service.js","sourceRoot":"","sources":["../../../src/electron-main/messaging/electron-messaging-service.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;;;
|
|
1
|
+
{"version":3,"file":"electron-messaging-service.js","sourceRoot":"","sources":["../../../src/electron-main/messaging/electron-messaging-service.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;;;AAWhF,IAAiB,wBAAwB,CAQxC;AARD,WAAiB,wBAAwB;IAIxB,qCAAY,GAAG,MAAM,CAAC,uCAAuC,CAAC,CAAC;AAIhF,CAAC,EARgB,wBAAwB,GAAxB,gCAAwB,KAAxB,gCAAwB,QAQxC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Duplex } from 'stream';
|
|
3
|
+
import { Disposable, Emitter, Event } from '../../common';
|
|
4
|
+
/**
|
|
5
|
+
* A `BinaryMessagePipe` is capable of sending and retrieving binary messages i.e. {@link Uint8Array}s over
|
|
6
|
+
* and underlying streamed process pipe/fd. The message length of individual messages is encoding at the beginning of
|
|
7
|
+
* a new message. This makes it possible to extract messages from the streamed data.
|
|
8
|
+
*/
|
|
9
|
+
export declare class BinaryMessagePipe implements Disposable {
|
|
10
|
+
protected readonly underlyingPipe: Duplex;
|
|
11
|
+
static readonly MESSAGE_START_IDENTIFIER = "<MessageStart>";
|
|
12
|
+
protected dataHandler: (chunk: Uint8Array) => void;
|
|
13
|
+
protected onMessageEmitter: Emitter<Uint8Array>;
|
|
14
|
+
protected cachedMessageData: StreamedMessageData;
|
|
15
|
+
get onMessage(): Event<Uint8Array>;
|
|
16
|
+
constructor(underlyingPipe: Duplex);
|
|
17
|
+
send(message: Uint8Array): void;
|
|
18
|
+
protected handleChunk(chunk: Uint8Array): void;
|
|
19
|
+
protected handleNewMessage(chunk: Uint8Array): void;
|
|
20
|
+
protected handleMessageContentChunk(chunk: Uint8Array): void;
|
|
21
|
+
protected emitCachedMessage(): void;
|
|
22
|
+
/**
|
|
23
|
+
* Encodes the start of a new message into a {@link Uint8Array}.
|
|
24
|
+
* The message start consists of a identifier string and the length of the following message.
|
|
25
|
+
* @returns the buffer contains the encoded message start
|
|
26
|
+
*/
|
|
27
|
+
protected encodeMessageStart(message: Uint8Array): Uint8Array;
|
|
28
|
+
protected get messageStartByteLength(): number;
|
|
29
|
+
/**
|
|
30
|
+
* Reads the start of a new message from a stream chunk (or cached message) received from the underlying pipe.
|
|
31
|
+
* The message start is expected to consist of an identifier string and the length of the message.
|
|
32
|
+
* @param chunk The stream chunk.
|
|
33
|
+
* @returns The length of the message content to read.
|
|
34
|
+
* @throws An error if the message start can not be read successfully.
|
|
35
|
+
*/
|
|
36
|
+
protected readMessageStart(chunk: Uint8Array): number;
|
|
37
|
+
dispose(): void;
|
|
38
|
+
}
|
|
39
|
+
interface StreamedMessageData {
|
|
40
|
+
chunks: Uint8Array[];
|
|
41
|
+
missingBytes: number;
|
|
42
|
+
partialMessageStart?: Uint8Array;
|
|
43
|
+
}
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=binary-message-pipe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-message-pipe.d.ts","sourceRoot":"","sources":["../../../src/node/messaging/binary-message-pipe.ts"],"names":[],"mappings":";AAgBA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAG1D;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,UAAU;IAcpC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM;IAbrD,MAAM,CAAC,QAAQ,CAAC,wBAAwB,oBAAoB;IAC5D,SAAS,CAAC,WAAW,UAAW,UAAU,UAA6B;IAEvE,SAAS,CAAC,gBAAgB,sBAA6B;IACvD,SAAS,CAAC,iBAAiB,EAAE,mBAAmB,CAG9C;IAEF,IAAI,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,CAEjC;gBAE8B,cAAc,EAAE,MAAM;IAIrD,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAK/B,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAU9C,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAyBnD,SAAS,CAAC,yBAAyB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAsB5D,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAOnC;;;;OAIG;IACH,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAS7D,SAAS,KAAK,sBAAsB,IAAI,MAAM,CAG7C;IAED;;;;;;OAMG;IACH,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM;IAcrD,OAAO,IAAI,IAAI;CASlB;AAED,UAAU,mBAAmB;IACzB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,UAAU,CAAC;CACpC"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2022 STMicroelectronics and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.BinaryMessagePipe = void 0;
|
|
19
|
+
const common_1 = require("../../common");
|
|
20
|
+
const uint8_array_message_buffer_1 = require("../../common/message-rpc/uint8-array-message-buffer");
|
|
21
|
+
/**
|
|
22
|
+
* A `BinaryMessagePipe` is capable of sending and retrieving binary messages i.e. {@link Uint8Array}s over
|
|
23
|
+
* and underlying streamed process pipe/fd. The message length of individual messages is encoding at the beginning of
|
|
24
|
+
* a new message. This makes it possible to extract messages from the streamed data.
|
|
25
|
+
*/
|
|
26
|
+
class BinaryMessagePipe {
|
|
27
|
+
constructor(underlyingPipe) {
|
|
28
|
+
this.underlyingPipe = underlyingPipe;
|
|
29
|
+
this.dataHandler = (chunk) => this.handleChunk(chunk);
|
|
30
|
+
this.onMessageEmitter = new common_1.Emitter();
|
|
31
|
+
this.cachedMessageData = {
|
|
32
|
+
chunks: [],
|
|
33
|
+
missingBytes: 0
|
|
34
|
+
};
|
|
35
|
+
underlyingPipe.on('data', this.dataHandler);
|
|
36
|
+
}
|
|
37
|
+
get onMessage() {
|
|
38
|
+
return this.onMessageEmitter.event;
|
|
39
|
+
}
|
|
40
|
+
send(message) {
|
|
41
|
+
this.underlyingPipe.write(this.encodeMessageStart(message));
|
|
42
|
+
this.underlyingPipe.write(message);
|
|
43
|
+
}
|
|
44
|
+
handleChunk(chunk) {
|
|
45
|
+
if (this.cachedMessageData.missingBytes === 0) {
|
|
46
|
+
// There is no currently streamed message => We expect that the beginning of the chunk is the message start for a new message
|
|
47
|
+
this.handleNewMessage(chunk);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
// The chunk contains message data intended for the currently cached message
|
|
51
|
+
this.handleMessageContentChunk(chunk);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
handleNewMessage(chunk) {
|
|
55
|
+
if (chunk.byteLength < this.messageStartByteLength) {
|
|
56
|
+
// The chunk only contains a part of the encoded message start
|
|
57
|
+
this.cachedMessageData.partialMessageStart = chunk;
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const messageLength = this.readMessageStart(chunk);
|
|
61
|
+
if (chunk.length - this.messageStartByteLength > messageLength) {
|
|
62
|
+
// The initial chunk contains more than one binary message => Fire `onMessage` for first message and handle remaining content
|
|
63
|
+
const firstMessage = chunk.slice(this.messageStartByteLength, this.messageStartByteLength + messageLength);
|
|
64
|
+
this.onMessageEmitter.fire(firstMessage);
|
|
65
|
+
this.handleNewMessage(chunk.slice(this.messageStartByteLength + messageLength));
|
|
66
|
+
}
|
|
67
|
+
else if (chunk.length - this.messageStartByteLength === messageLength) {
|
|
68
|
+
// The initial chunk contains exactly one complete message. => Directly fire the `onMessage` event.
|
|
69
|
+
this.onMessageEmitter.fire(chunk.slice(this.messageStartByteLength));
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// The initial chunk contains only part of the message content => Cache message data
|
|
73
|
+
this.cachedMessageData.chunks = [chunk.slice(this.messageStartByteLength)];
|
|
74
|
+
this.cachedMessageData.missingBytes = messageLength - chunk.byteLength + this.messageStartByteLength;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
handleMessageContentChunk(chunk) {
|
|
78
|
+
if (this.cachedMessageData) {
|
|
79
|
+
if (chunk.byteLength < this.cachedMessageData.missingBytes) {
|
|
80
|
+
// The chunk only contains parts of the missing bytes for the cached message.
|
|
81
|
+
this.cachedMessageData.chunks.push(chunk);
|
|
82
|
+
this.cachedMessageData.missingBytes -= chunk.byteLength;
|
|
83
|
+
}
|
|
84
|
+
else if (chunk.byteLength === this.cachedMessageData.missingBytes) {
|
|
85
|
+
// Chunk contains exactly the missing data for the cached message
|
|
86
|
+
this.cachedMessageData.chunks.push(chunk);
|
|
87
|
+
this.emitCachedMessage();
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
// Chunk contains missing data for the cached message + data for the next message
|
|
91
|
+
const messageEnd = this.cachedMessageData.missingBytes;
|
|
92
|
+
const missingData = chunk.slice(0, messageEnd);
|
|
93
|
+
this.cachedMessageData.chunks.push(missingData);
|
|
94
|
+
this.emitCachedMessage();
|
|
95
|
+
this.handleNewMessage(chunk.slice(messageEnd));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
emitCachedMessage() {
|
|
100
|
+
const message = Buffer.concat(this.cachedMessageData.chunks);
|
|
101
|
+
this.onMessageEmitter.fire(message);
|
|
102
|
+
this.cachedMessageData.chunks = [];
|
|
103
|
+
this.cachedMessageData.missingBytes = 0;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Encodes the start of a new message into a {@link Uint8Array}.
|
|
107
|
+
* The message start consists of a identifier string and the length of the following message.
|
|
108
|
+
* @returns the buffer contains the encoded message start
|
|
109
|
+
*/
|
|
110
|
+
encodeMessageStart(message) {
|
|
111
|
+
const writer = new uint8_array_message_buffer_1.Uint8ArrayWriteBuffer()
|
|
112
|
+
.writeString(BinaryMessagePipe.MESSAGE_START_IDENTIFIER)
|
|
113
|
+
.writeUint32(message.length);
|
|
114
|
+
const messageStart = writer.getCurrentContents();
|
|
115
|
+
writer.dispose();
|
|
116
|
+
return messageStart;
|
|
117
|
+
}
|
|
118
|
+
get messageStartByteLength() {
|
|
119
|
+
// 4 bytes for length of id + id string length + 4 bytes for length of message
|
|
120
|
+
return 4 + BinaryMessagePipe.MESSAGE_START_IDENTIFIER.length + 4;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Reads the start of a new message from a stream chunk (or cached message) received from the underlying pipe.
|
|
124
|
+
* The message start is expected to consist of an identifier string and the length of the message.
|
|
125
|
+
* @param chunk The stream chunk.
|
|
126
|
+
* @returns The length of the message content to read.
|
|
127
|
+
* @throws An error if the message start can not be read successfully.
|
|
128
|
+
*/
|
|
129
|
+
readMessageStart(chunk) {
|
|
130
|
+
const messageData = this.cachedMessageData.partialMessageStart ? Buffer.concat([this.cachedMessageData.partialMessageStart, chunk]) : chunk;
|
|
131
|
+
this.cachedMessageData.partialMessageStart = undefined;
|
|
132
|
+
const reader = new uint8_array_message_buffer_1.Uint8ArrayReadBuffer(messageData);
|
|
133
|
+
const identifier = reader.readString();
|
|
134
|
+
if (identifier !== BinaryMessagePipe.MESSAGE_START_IDENTIFIER) {
|
|
135
|
+
throw new Error(`Could not read message start. The start identifier should be '${BinaryMessagePipe.MESSAGE_START_IDENTIFIER}' but was '${identifier}`);
|
|
136
|
+
}
|
|
137
|
+
const length = reader.readUint32();
|
|
138
|
+
return length;
|
|
139
|
+
}
|
|
140
|
+
dispose() {
|
|
141
|
+
this.underlyingPipe.removeListener('data', this.dataHandler);
|
|
142
|
+
this.underlyingPipe.end();
|
|
143
|
+
this.onMessageEmitter.dispose();
|
|
144
|
+
this.cachedMessageData = {
|
|
145
|
+
chunks: [],
|
|
146
|
+
missingBytes: 0
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
exports.BinaryMessagePipe = BinaryMessagePipe;
|
|
151
|
+
BinaryMessagePipe.MESSAGE_START_IDENTIFIER = '<MessageStart>';
|
|
152
|
+
//# sourceMappingURL=binary-message-pipe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-message-pipe.js","sourceRoot":"","sources":["../../../src/node/messaging/binary-message-pipe.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,18 +17,9 @@
|
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
require("reflect-metadata");
|
|
19
19
|
const dynamic_require_1 = require("../dynamic-require");
|
|
20
|
-
const
|
|
21
|
-
const vscode_ws_jsonrpc_1 = require("vscode-ws-jsonrpc");
|
|
20
|
+
const ipc_channel_1 = require("./ipc-channel");
|
|
22
21
|
const ipc_protocol_1 = require("./ipc-protocol");
|
|
23
22
|
(0, ipc_protocol_1.checkParentAlive)();
|
|
24
23
|
const entryPoint = ipc_protocol_1.IPCEntryPoint.getScriptFromEnv();
|
|
25
|
-
|
|
26
|
-
const writer = new vscode_ws_jsonrpc_1.IPCMessageWriter(process);
|
|
27
|
-
const logger = new logger_1.ConsoleLogger();
|
|
28
|
-
const connection = (0, vscode_ws_jsonrpc_1.createMessageConnection)(reader, writer, logger);
|
|
29
|
-
connection.trace(vscode_ws_jsonrpc_1.Trace.Off, {
|
|
30
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
31
|
-
log: (message, data) => console.log(message, data)
|
|
32
|
-
});
|
|
33
|
-
(0, dynamic_require_1.dynamicRequire)(entryPoint).default(connection);
|
|
24
|
+
(0, dynamic_require_1.dynamicRequire)(entryPoint).default(new ipc_channel_1.IPCChannel());
|
|
34
25
|
//# sourceMappingURL=ipc-bootstrap.js.map
|