@theia/core 1.53.0-next.5 → 1.53.0-next.55
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 +7 -7
- package/i18n/nls.cs.json +582 -552
- package/i18n/nls.de.json +582 -552
- package/i18n/nls.es.json +582 -552
- package/i18n/nls.fr.json +582 -552
- package/i18n/nls.hu.json +582 -552
- package/i18n/nls.it.json +582 -552
- package/i18n/nls.ja.json +582 -552
- package/i18n/nls.json +582 -552
- package/i18n/nls.ko.json +582 -0
- package/i18n/nls.pl.json +582 -552
- package/i18n/nls.pt-br.json +582 -552
- package/i18n/nls.ru.json +582 -552
- package/i18n/nls.tr.json +582 -0
- package/i18n/nls.zh-cn.json +582 -552
- package/i18n/nls.zh-tw.json +582 -0
- package/lib/browser/authentication-service.d.ts +15 -14
- package/lib/browser/authentication-service.d.ts.map +1 -1
- package/lib/browser/authentication-service.js +5 -5
- package/lib/browser/authentication-service.js.map +1 -1
- package/lib/browser/catalog.json +6889 -0
- package/lib/browser/common-frontend-contribution.js +3 -3
- package/lib/browser/common-styling-participants.js +166 -166
- package/lib/browser/context-key-service.d.ts +3 -2
- package/lib/browser/context-key-service.d.ts.map +1 -1
- package/lib/browser/context-key-service.js.map +1 -1
- package/lib/browser/core-preferences.d.ts.map +1 -1
- package/lib/browser/core-preferences.js +9 -0
- package/lib/browser/core-preferences.js.map +1 -1
- package/lib/browser/frontend-application-module.d.ts.map +1 -1
- package/lib/browser/frontend-application-module.js.map +1 -1
- package/lib/browser/json-schema-store.d.ts +0 -3
- package/lib/browser/json-schema-store.d.ts.map +1 -1
- package/lib/browser/json-schema-store.js +2 -12
- package/lib/browser/json-schema-store.js.map +1 -1
- package/lib/browser/open-with-service.d.ts +13 -1
- package/lib/browser/open-with-service.d.ts.map +1 -1
- package/lib/browser/open-with-service.js +48 -9
- package/lib/browser/open-with-service.js.map +1 -1
- package/lib/browser/opener-service.d.ts +8 -0
- package/lib/browser/opener-service.d.ts.map +1 -1
- package/lib/browser/opener-service.js +18 -3
- package/lib/browser/opener-service.js.map +1 -1
- package/lib/browser/progress-location-service.spec.js +7 -7
- package/lib/browser/saveable-service.d.ts.map +1 -1
- package/lib/browser/saveable-service.js +6 -2
- package/lib/browser/saveable-service.js.map +1 -1
- package/lib/browser/saveable.d.ts +17 -1
- package/lib/browser/saveable.d.ts.map +1 -1
- package/lib/browser/saveable.js +62 -1
- package/lib/browser/saveable.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts +5 -4
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +2 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts +6 -16
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +12 -29
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts +43 -78
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js +8 -39
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts +10 -10
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +43 -32
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
- package/lib/browser/storage-service.js +3 -3
- package/lib/browser/tree/tree.spec.js +75 -75
- package/lib/browser/view-container.d.ts +2 -2
- package/lib/browser/view-container.d.ts.map +1 -1
- package/lib/browser/view-container.js.map +1 -1
- package/lib/browser/widget-open-handler.d.ts +4 -1
- package/lib/browser/widget-open-handler.d.ts.map +1 -1
- package/lib/browser/widget-open-handler.js.map +1 -1
- package/lib/browser/widgets/extractable-widget.js +1 -1
- package/lib/browser/widgets/extractable-widget.js.map +1 -1
- package/lib/browser/widgets/index.d.ts +1 -0
- package/lib/browser/widgets/index.d.ts.map +1 -1
- package/lib/browser/widgets/index.js +1 -0
- package/lib/browser/widgets/index.js.map +1 -1
- package/lib/browser/widgets/split-widget.d.ts +45 -0
- package/lib/browser/widgets/split-widget.d.ts.map +1 -0
- package/lib/browser/widgets/split-widget.js +126 -0
- package/lib/browser/widgets/split-widget.js.map +1 -0
- package/lib/common/event.d.ts +2 -0
- package/lib/common/event.d.ts.map +1 -1
- package/lib/common/event.js +4 -0
- package/lib/common/event.js.map +1 -1
- package/lib/common/glob.d.ts +4 -4
- package/lib/common/json-schema.d.ts +2 -0
- package/lib/common/json-schema.d.ts.map +1 -1
- package/lib/common/menu/menu-types.d.ts.map +1 -1
- package/lib/common/menu/menu-types.js.map +1 -1
- package/lib/electron-browser/electron-uri-handler.d.ts +6 -0
- package/lib/electron-browser/electron-uri-handler.d.ts.map +1 -0
- package/lib/electron-browser/electron-uri-handler.js +49 -0
- package/lib/electron-browser/electron-uri-handler.js.map +1 -0
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.js +6 -6
- package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
- package/lib/electron-browser/preload.d.ts.map +1 -1
- package/lib/electron-browser/preload.js +12 -0
- package/lib/electron-browser/preload.js.map +1 -1
- package/lib/electron-browser/window/electron-window-module.d.ts.map +1 -1
- package/lib/electron-browser/window/electron-window-module.js +3 -0
- package/lib/electron-browser/window/electron-window-module.js.map +1 -1
- package/lib/electron-browser/window/external-app-open-handler.js +1 -1
- package/lib/electron-browser/window/external-app-open-handler.js.map +1 -1
- package/lib/electron-common/electron-api.d.ts +2 -0
- package/lib/electron-common/electron-api.d.ts.map +1 -1
- package/lib/electron-common/electron-api.js +2 -1
- package/lib/electron-common/electron-api.js.map +1 -1
- package/lib/electron-main/electron-api-main.d.ts +2 -0
- package/lib/electron-main/electron-api-main.d.ts.map +1 -1
- package/lib/electron-main/electron-api-main.js +27 -3
- package/lib/electron-main/electron-api-main.js.map +1 -1
- package/lib/electron-main/electron-main-application.d.ts +5 -3
- package/lib/electron-main/electron-main-application.d.ts.map +1 -1
- package/lib/electron-main/electron-main-application.js +57 -14
- package/lib/electron-main/electron-main-application.js.map +1 -1
- package/lib/electron-main/theia-electron-window.d.ts +1 -0
- package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
- package/lib/electron-main/theia-electron-window.js +3 -0
- package/lib/electron-main/theia-electron-window.js.map +1 -1
- package/lib/node/i18n/theia-localization-contribution.d.ts.map +1 -1
- package/lib/node/i18n/theia-localization-contribution.js +12 -8
- package/lib/node/i18n/theia-localization-contribution.js.map +1 -1
- package/lib/node/process-utils.spec.js +8 -8
- package/package.json +10 -8
- package/shared/ajv/index.d.ts +2 -2
- package/shared/markdown-it.d.ts +2 -2
- package/shared/markdown-it.js +1 -1
- package/shared/reflect-metadata/index.d.ts +1 -1
- package/shared/reflect-metadata/index.js +1 -1
- package/shared/vscode-languageserver-types/index.d.ts +1 -1
- package/src/browser/about-dialog.tsx +137 -137
- package/src/browser/authentication-service.ts +467 -468
- package/src/browser/breadcrumbs/breadcrumb-popup-container.ts +101 -101
- package/src/browser/breadcrumbs/breadcrumb-renderer.tsx +41 -41
- package/src/browser/breadcrumbs/breadcrumbs-constants.ts +79 -79
- package/src/browser/breadcrumbs/breadcrumbs-renderer.tsx +185 -185
- package/src/browser/breadcrumbs/breadcrumbs-service.ts +108 -108
- package/src/browser/breadcrumbs/index.ts +21 -21
- package/src/browser/browser-clipboard-service.ts +122 -122
- package/src/browser/browser.ts +239 -239
- package/src/browser/clipboard-service.ts +23 -23
- package/src/browser/color-application-contribution.ts +110 -110
- package/src/browser/color-registry.ts +60 -60
- package/src/browser/command-open-handler.ts +54 -54
- package/src/browser/common-frontend-contribution.ts +2680 -2680
- package/src/browser/common-styling-participants.ts +361 -361
- package/src/browser/connection-status-service.spec.ts +200 -200
- package/src/browser/connection-status-service.ts +216 -216
- package/src/browser/context-key-service.ts +142 -142
- package/src/browser/context-menu-renderer.ts +124 -124
- package/src/browser/core-preferences.ts +343 -334
- package/src/browser/credentials-service.ts +106 -106
- package/src/browser/decoration-style.ts +65 -65
- package/src/browser/decorations-service.ts +209 -209
- package/src/browser/dialogs/react-dialog.tsx +56 -56
- package/src/browser/dialogs.ts +534 -534
- package/src/browser/diff-uris.ts +117 -117
- package/src/browser/encoding-registry.ts +97 -97
- package/src/browser/endpoint.spec.ts +148 -148
- package/src/browser/endpoint.ts +136 -136
- package/src/browser/external-uri-service.ts +79 -79
- package/src/browser/file-icons-js.d.ts +20 -20
- package/src/browser/frontend-application-bindings.ts +62 -62
- package/src/browser/frontend-application-config-provider.spec.ts +45 -45
- package/src/browser/frontend-application-config-provider.ts +50 -50
- package/src/browser/frontend-application-contribution.ts +110 -110
- package/src/browser/frontend-application-module.ts +474 -475
- package/src/browser/frontend-application-state.ts +74 -74
- package/src/browser/frontend-application.ts +326 -326
- package/src/browser/hover-service.ts +218 -218
- package/src/browser/http-open-handler.ts +49 -49
- package/src/browser/i18n/i18n-frontend-module.ts +27 -27
- package/src/browser/i18n/language-quick-pick-service.ts +130 -130
- package/src/browser/icon-registry.ts +87 -87
- package/src/browser/icon-theme-contribution.ts +64 -64
- package/src/browser/icon-theme-service.ts +217 -217
- package/src/browser/icons/CollapseAll.svg +7 -7
- package/src/browser/icons/CollapseAll_inverse.svg +7 -7
- package/src/browser/icons/Refresh.svg +7 -7
- package/src/browser/icons/Refresh_inverse.svg +7 -7
- package/src/browser/icons/add-inverse.svg +4 -4
- package/src/browser/icons/add.svg +4 -4
- package/src/browser/icons/arrow-down-bright.svg +6 -6
- package/src/browser/icons/arrow-down-dark.svg +6 -6
- package/src/browser/icons/arrow-up-bright.svg +6 -6
- package/src/browser/icons/arrow-up-dark.svg +6 -6
- package/src/browser/icons/case-sensitive-dark.svg +16 -16
- package/src/browser/icons/case-sensitive.svg +16 -16
- package/src/browser/icons/chevron-right-dark.svg +5 -5
- package/src/browser/icons/chevron-right-light.svg +6 -6
- package/src/browser/icons/circle-bright.svg +7 -7
- package/src/browser/icons/circle-dark.svg +7 -7
- package/src/browser/icons/clear-search-results-dark.svg +7 -7
- package/src/browser/icons/clear-search-results.svg +7 -7
- package/src/browser/icons/close-all-bright.svg +7 -7
- package/src/browser/icons/close-all-dark.svg +7 -7
- package/src/browser/icons/close-bright.svg +7 -7
- package/src/browser/icons/close-dark.svg +7 -7
- package/src/browser/icons/collapse.svg +4 -4
- package/src/browser/icons/edit-json-dark.svg +6 -6
- package/src/browser/icons/edit-json.svg +6 -6
- package/src/browser/icons/expand.svg +4 -4
- package/src/browser/icons/loading-dark.svg +6 -6
- package/src/browser/icons/loading-light.svg +6 -6
- package/src/browser/icons/open-change-bright.svg +3 -3
- package/src/browser/icons/open-change-dark.svg +4 -4
- package/src/browser/icons/open-file-bright.svg +4 -4
- package/src/browser/icons/open-file-dark.svg +4 -4
- package/src/browser/icons/preview-bright.svg +3 -3
- package/src/browser/icons/preview-dark.svg +3 -3
- package/src/browser/icons/regex-dark.svg +10 -10
- package/src/browser/icons/regex.svg +10 -10
- package/src/browser/icons/remove-all-inverse.svg +4 -4
- package/src/browser/icons/remove-all.svg +4 -4
- package/src/browser/icons/replace-all-inverse.svg +13 -13
- package/src/browser/icons/replace-all.svg +13 -13
- package/src/browser/icons/replace-inverse.svg +15 -15
- package/src/browser/icons/replace.svg +15 -15
- package/src/browser/icons/whole-word-dark.svg +19 -19
- package/src/browser/icons/whole-word.svg +19 -19
- package/src/browser/index.ts +50 -50
- package/src/browser/json-schema-store.ts +118 -127
- package/src/browser/keybinding.spec.ts +554 -554
- package/src/browser/keybinding.ts +759 -759
- package/src/browser/keyboard/browser-keyboard-frontend-contribution.ts +108 -108
- package/src/browser/keyboard/browser-keyboard-layout-provider.spec.ts +171 -171
- package/src/browser/keyboard/browser-keyboard-layout-provider.ts +469 -469
- package/src/browser/keyboard/browser-keyboard-module.ts +30 -30
- package/src/browser/keyboard/index.ts +20 -20
- package/src/browser/keyboard/keyboard-layout-service.spec.ts +121 -121
- package/src/browser/keyboard/keyboard-layout-service.ts +455 -455
- package/src/browser/keyboard/keys.spec.ts +258 -258
- package/src/browser/keyboard/keys.ts +20 -20
- package/src/browser/keys.ts +21 -21
- package/src/browser/label-parser.spec.ts +165 -165
- package/src/browser/label-parser.ts +108 -108
- package/src/browser/label-provider.spec.ts +62 -62
- package/src/browser/label-provider.ts +385 -385
- package/src/browser/language-icon-provider.ts +55 -55
- package/src/browser/language-service.ts +77 -77
- package/src/browser/logger-frontend-module.ts +65 -65
- package/src/browser/markdown-rendering/markdown-renderer.ts +98 -98
- package/src/browser/menu/browser-context-menu-renderer.ts +48 -48
- package/src/browser/menu/browser-menu-module.ts +28 -28
- package/src/browser/menu/browser-menu-plugin.ts +491 -491
- package/src/browser/menu/context-menu-context.ts +41 -41
- package/src/browser/messaging/connection-source.ts +26 -26
- package/src/browser/messaging/frontend-id-provider.ts +37 -37
- package/src/browser/messaging/index.ts +18 -18
- package/src/browser/messaging/messaging-frontend-module.ts +41 -41
- package/src/browser/messaging/service-connection-provider.ts +140 -140
- package/src/browser/messaging/ws-connection-provider.ts +49 -49
- package/src/browser/messaging/ws-connection-source.ts +230 -230
- package/src/browser/mime-service.ts +30 -30
- package/src/browser/navigatable-types.ts +81 -81
- package/src/browser/navigatable.ts +39 -39
- package/src/browser/open-with-service.ts +140 -93
- package/src/browser/opener-service.spec.ts +49 -49
- package/src/browser/opener-service.ts +169 -146
- package/src/browser/performance/frontend-stopwatch.ts +65 -65
- package/src/browser/performance/index.ts +18 -18
- package/src/browser/performance/measurement-frontend-bindings.ts +31 -31
- package/src/browser/preferences/index.ts +23 -23
- package/src/browser/preferences/injectable-preference-proxy.ts +283 -283
- package/src/browser/preferences/preference-configurations.ts +82 -82
- package/src/browser/preferences/preference-contribution.ts +436 -436
- package/src/browser/preferences/preference-language-override-service.ts +111 -111
- package/src/browser/preferences/preference-provider.spec.ts +36 -36
- package/src/browser/preferences/preference-provider.ts +277 -277
- package/src/browser/preferences/preference-proxy.spec.ts +367 -367
- package/src/browser/preferences/preference-proxy.ts +367 -367
- package/src/browser/preferences/preference-schema-provider.spec.ts +130 -130
- package/src/browser/preferences/preference-scope.ts +18 -18
- package/src/browser/preferences/preference-service.spec.ts +613 -613
- package/src/browser/preferences/preference-service.ts +594 -594
- package/src/browser/preferences/preference-validation-service.spec.ts +334 -334
- package/src/browser/preferences/preference-validation-service.ts +358 -358
- package/src/browser/preferences/test/index.ts +19 -19
- package/src/browser/preferences/test/mock-preference-provider.ts +50 -50
- package/src/browser/preferences/test/mock-preference-proxy.ts +48 -48
- package/src/browser/preferences/test/mock-preference-service.ts +63 -63
- package/src/browser/preload/i18n-preload-contribution.ts +50 -50
- package/src/browser/preload/os-preload-contribution.ts +37 -37
- package/src/browser/preload/preload-module.ts +45 -45
- package/src/browser/preload/preloader.ts +37 -37
- package/src/browser/preload/theme-preload-contribution.ts +31 -31
- package/src/browser/progress-bar-factory.ts +29 -29
- package/src/browser/progress-bar.ts +76 -76
- package/src/browser/progress-client.ts +53 -53
- package/src/browser/progress-location-service.spec.ts +50 -50
- package/src/browser/progress-location-service.ts +96 -96
- package/src/browser/progress-status-bar-item.ts +83 -83
- package/src/browser/quick-input/index.ts +23 -23
- package/src/browser/quick-input/quick-access.ts +75 -75
- package/src/browser/quick-input/quick-command-frontend-contribution.ts +89 -89
- package/src/browser/quick-input/quick-command-service.ts +246 -246
- package/src/browser/quick-input/quick-help-service.ts +87 -87
- package/src/browser/quick-input/quick-input-frontend-contribution.ts +33 -33
- package/src/browser/quick-input/quick-input-service.spec.ts +176 -176
- package/src/browser/quick-input/quick-input-service.ts +17 -17
- package/src/browser/quick-input/quick-pick-service-impl.ts +69 -69
- package/src/browser/quick-input/quick-view-service.ts +83 -83
- package/src/browser/request/browser-request-module.ts +23 -23
- package/src/browser/request/browser-request-service.ts +172 -172
- package/src/browser/resource-context-key.ts +77 -77
- package/src/browser/saveable-service.ts +332 -328
- package/src/browser/saveable.ts +395 -327
- package/src/browser/secondary-window-handler.ts +211 -211
- package/src/browser/shell/additional-views-menu-widget.tsx +71 -71
- package/src/browser/shell/application-shell-mouse-tracker.ts +103 -103
- package/src/browser/shell/application-shell.ts +2271 -2271
- package/src/browser/shell/current-widget-command-adapter.ts +57 -57
- package/src/browser/shell/index.ts +23 -23
- package/src/browser/shell/shell-layout-restorer.ts +399 -399
- package/src/browser/shell/side-panel-handler.ts +794 -794
- package/src/browser/shell/side-panel-toolbar.ts +111 -111
- package/src/browser/shell/sidebar-bottom-menu-widget.tsx +39 -39
- package/src/browser/shell/sidebar-menu-widget.tsx +183 -183
- package/src/browser/shell/sidebar-top-menu-widget.tsx +26 -26
- package/src/browser/shell/split-panels.ts +191 -191
- package/src/browser/shell/tab-bar-decorator.ts +106 -106
- package/src/browser/shell/tab-bar-toolbar/index.ts +19 -19
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.ts +31 -31
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +242 -256
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.ts +149 -207
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.ts +62 -62
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +443 -428
- package/src/browser/shell/tab-bars.spec.ts +63 -63
- package/src/browser/shell/tab-bars.ts +1468 -1468
- package/src/browser/shell/theia-dock-panel.ts +265 -265
- package/src/browser/shell/view-column-service.ts +125 -125
- package/src/browser/shell/view-contribution.ts +178 -178
- package/src/browser/source-tree/index.ts +19 -19
- package/src/browser/source-tree/source-tree-widget.tsx +107 -107
- package/src/browser/source-tree/source-tree.ts +146 -146
- package/src/browser/source-tree/tree-source.ts +73 -73
- package/src/browser/status-bar/index.ts +29 -29
- package/src/browser/status-bar/status-bar-types.ts +97 -97
- package/src/browser/status-bar/status-bar-view-model.ts +209 -209
- package/src/browser/status-bar/status-bar.tsx +189 -189
- package/src/browser/storage-service.spec.ts +76 -76
- package/src/browser/storage-service.ts +129 -129
- package/src/browser/style/about.css +36 -36
- package/src/browser/style/alert-messages.css +62 -62
- package/src/browser/style/ansi.css +88 -88
- package/src/browser/style/breadcrumbs.css +130 -130
- package/src/browser/style/dialog.css +126 -126
- package/src/browser/style/dockpanel.css +76 -76
- package/src/browser/style/hover-service.css +101 -101
- package/src/browser/style/icons.css +61 -61
- package/src/browser/style/index.css +353 -352
- package/src/browser/style/materialcolors.css +278 -278
- package/src/browser/style/menus.css +230 -230
- package/src/browser/style/notification.css +39 -39
- package/src/browser/style/os.css +87 -87
- package/src/browser/style/progress-bar.css +43 -43
- package/src/browser/style/quick-title-bar.css +45 -45
- package/src/browser/style/scrollbars.css +172 -172
- package/src/browser/style/search-box.css +123 -123
- package/src/browser/style/select-component.css +107 -107
- package/src/browser/style/sidepanel.css +367 -367
- package/src/browser/style/split-widget.css +38 -0
- package/src/browser/style/status-bar.css +127 -127
- package/src/browser/style/tabs.css +647 -658
- package/src/browser/style/tooltip.css +28 -28
- package/src/browser/style/tree-decorators.css +81 -81
- package/src/browser/style/tree.css +232 -232
- package/src/browser/style/view-container.css +187 -194
- package/src/browser/style/widget.css +19 -19
- package/src/browser/styling-service.ts +96 -96
- package/src/browser/supported-encodings.ts +262 -262
- package/src/browser/test/jsdom.ts +69 -69
- package/src/browser/test/mock-connection-status-service.ts +33 -33
- package/src/browser/test/mock-env-variables-server.ts +47 -47
- package/src/browser/test/mock-opener-service.ts +34 -34
- package/src/browser/test/mock-storage-service.ts +49 -49
- package/src/browser/theming.ts +206 -206
- package/src/browser/tooltip-service.tsx +96 -96
- package/src/browser/tree/fuzzy-search.spec.ts +99 -99
- package/src/browser/tree/fuzzy-search.ts +136 -136
- package/src/browser/tree/index.ts +29 -29
- package/src/browser/tree/search-box-debounce.ts +96 -96
- package/src/browser/tree/search-box.ts +355 -355
- package/src/browser/tree/test/mock-selectable-tree-model.ts +109 -109
- package/src/browser/tree/test/mock-tree-model.ts +136 -136
- package/src/browser/tree/test/tree-test-container.ts +50 -50
- package/src/browser/tree/tree-compression/compressed-tree-expansion-service.ts +46 -46
- package/src/browser/tree/tree-compression/compressed-tree-model.ts +88 -88
- package/src/browser/tree/tree-compression/compressed-tree-widget.tsx +203 -203
- package/src/browser/tree/tree-compression/index.ts +20 -20
- package/src/browser/tree/tree-compression/tree-compression-service.ts +125 -125
- package/src/browser/tree/tree-compression/tree-compression.css +28 -28
- package/src/browser/tree/tree-consistency.spec.ts +105 -105
- package/src/browser/tree/tree-container.spec.ts +45 -45
- package/src/browser/tree/tree-container.ts +155 -155
- package/src/browser/tree/tree-decorator.spec.ts +162 -162
- package/src/browser/tree/tree-decorator.ts +238 -238
- package/src/browser/tree/tree-expansion.spec.ts +173 -173
- package/src/browser/tree/tree-expansion.ts +165 -165
- package/src/browser/tree/tree-focus-service.ts +55 -55
- package/src/browser/tree/tree-iterator.spec.ts +170 -170
- package/src/browser/tree/tree-iterator.ts +256 -256
- package/src/browser/tree/tree-label-provider.ts +40 -40
- package/src/browser/tree/tree-model.ts +562 -562
- package/src/browser/tree/tree-navigation.ts +58 -58
- package/src/browser/tree/tree-preference.ts +50 -50
- package/src/browser/tree/tree-search.ts +128 -128
- package/src/browser/tree/tree-selectable.spec.ts +152 -152
- package/src/browser/tree/tree-selection-impl.ts +176 -176
- package/src/browser/tree/tree-selection-state.spec.ts +462 -462
- package/src/browser/tree/tree-selection-state.ts +245 -245
- package/src/browser/tree/tree-selection.ts +159 -159
- package/src/browser/tree/tree-view-welcome-widget.tsx +263 -263
- package/src/browser/tree/tree-widget-selection.ts +45 -45
- package/src/browser/tree/tree-widget.tsx +1591 -1591
- package/src/browser/tree/tree.spec.ts +241 -241
- package/src/browser/tree/tree.ts +425 -425
- package/src/browser/undo-redo-handler.ts +85 -85
- package/src/browser/user-working-directory-provider.ts +77 -77
- package/src/browser/view-container.ts +1640 -1640
- package/src/browser/widget-decoration.ts +358 -358
- package/src/browser/widget-manager.spec.ts +102 -102
- package/src/browser/widget-manager.ts +318 -318
- package/src/browser/widget-open-handler.ts +168 -165
- package/src/browser/widgets/alert-message.tsx +56 -56
- package/src/browser/widgets/enhanced-preview-widget.ts +27 -27
- package/src/browser/widgets/extractable-widget.ts +33 -33
- package/src/browser/widgets/index.ts +21 -20
- package/src/browser/widgets/previewable-widget.ts +31 -31
- package/src/browser/widgets/react-renderer.tsx +53 -53
- package/src/browser/widgets/react-widget.tsx +51 -51
- package/src/browser/widgets/select-component.tsx +367 -367
- package/src/browser/widgets/split-widget.ts +163 -0
- package/src/browser/widgets/widget.ts +406 -406
- package/src/browser/window/browser-window-module.ts +32 -32
- package/src/browser/window/default-secondary-window-service.ts +189 -189
- package/src/browser/window/default-window-service.spec.ts +78 -78
- package/src/browser/window/default-window-service.ts +171 -171
- package/src/browser/window/secondary-window-service.ts +39 -39
- package/src/browser/window/test/mock-window-service.ts +29 -29
- package/src/browser/window/window-service.ts +78 -78
- package/src/browser/window/window-title-service.ts +107 -107
- package/src/browser/window/window-title-updater.ts +95 -95
- package/src/browser/window-contribution.ts +64 -64
- package/src/browser-only/frontend-only-application-module.ts +116 -116
- package/src/browser-only/i18n/i18n-frontend-only-module.ts +37 -37
- package/src/browser-only/logger-frontend-only-module.ts +63 -63
- package/src/browser-only/messaging/frontend-only-service-connection-provider.ts +39 -39
- package/src/browser-only/messaging/messaging-frontend-only-module.ts +42 -42
- package/src/browser-only/preload/frontend-only-preload-module.ts +49 -49
- package/src/common/accessibility.ts +33 -33
- package/src/common/application-error.spec.ts +27 -27
- package/src/common/application-error.ts +76 -76
- package/src/common/application-protocol.ts +42 -42
- package/src/common/array-utils.ts +129 -129
- package/src/common/buffer.ts +228 -228
- package/src/common/cancellation.ts +163 -163
- package/src/common/char-code.ts +438 -438
- package/src/common/collections.ts +125 -125
- package/src/common/color.ts +103 -103
- package/src/common/command.spec.ts +208 -208
- package/src/common/command.ts +489 -489
- package/src/common/contribution-filter/contribution-filter-registry.ts +79 -79
- package/src/common/contribution-filter/contribution-filter.ts +64 -64
- package/src/common/contribution-filter/filter.ts +23 -23
- package/src/common/contribution-filter/index.ts +19 -19
- package/src/common/contribution-provider.ts +96 -96
- package/src/common/disposable.spec.ts +94 -94
- package/src/common/disposable.ts +188 -188
- package/src/common/encoding-service.ts +380 -380
- package/src/common/encodings.ts +24 -24
- package/src/common/env-variables/env-variables-protocol.ts +38 -38
- package/src/common/env-variables/index.ts +17 -17
- package/src/common/event.spec.ts +32 -32
- package/src/common/event.ts +493 -487
- package/src/common/file-uri.ts +61 -61
- package/src/common/frontend-application-state.ts +38 -38
- package/src/common/glob.ts +741 -741
- package/src/common/hash.ts +85 -85
- package/src/common/i18n/localization-server.ts +25 -25
- package/src/common/i18n/localization.ts +80 -80
- package/src/common/i18n/nls.metadata.json +34112 -34112
- package/src/common/index.ts +51 -51
- package/src/common/json-schema.ts +108 -106
- package/src/common/key-store.ts +26 -26
- package/src/common/keybinding.ts +152 -152
- package/src/common/keyboard/keyboard-layout-provider.ts +51 -51
- package/src/common/keys.ts +694 -694
- package/src/common/label-protocol.ts +35 -35
- package/src/common/logger-protocol.ts +119 -119
- package/src/common/logger-watcher.ts +48 -48
- package/src/common/logger.spec.ts +46 -46
- package/src/common/logger.ts +389 -389
- package/src/common/lsp-types.ts +34 -34
- package/src/common/markdown-rendering/icon-utilities.ts +30 -30
- package/src/common/markdown-rendering/index.ts +18 -18
- package/src/common/markdown-rendering/markdown-string.ts +152 -152
- package/src/common/menu/action-menu-node.ts +65 -65
- package/src/common/menu/composite-menu-node.spec.ts +67 -67
- package/src/common/menu/composite-menu-node.ts +114 -114
- package/src/common/menu/index.ts +21 -21
- package/src/common/menu/menu-adapter.ts +103 -103
- package/src/common/menu/menu-model-registry.ts +374 -374
- package/src/common/menu/menu-types.ts +220 -219
- package/src/common/menu/menu.spec.ts +101 -101
- package/src/common/message-rpc/channel.spec.ts +88 -88
- package/src/common/message-rpc/channel.ts +300 -300
- package/src/common/message-rpc/index.ts +22 -22
- package/src/common/message-rpc/message-buffer.ts +105 -105
- package/src/common/message-rpc/msg-pack-extension-manager.ts +70 -70
- package/src/common/message-rpc/rpc-message-encoder.spec.ts +65 -65
- package/src/common/message-rpc/rpc-message-encoder.ts +190 -190
- package/src/common/message-rpc/rpc-protocol.ts +255 -255
- package/src/common/message-rpc/uint8-array-message-buffer.spec.ts +41 -41
- package/src/common/message-rpc/uint8-array-message-buffer.ts +213 -213
- package/src/common/message-service-protocol.ts +148 -148
- package/src/common/message-service.ts +226 -226
- package/src/common/messaging/connection-error-handler.ts +73 -73
- package/src/common/messaging/connection-management.ts +43 -43
- package/src/common/messaging/handler.ts +26 -26
- package/src/common/messaging/index.ts +19 -19
- package/src/common/messaging/proxy-factory.spec.ts +108 -108
- package/src/common/messaging/proxy-factory.ts +336 -336
- package/src/common/messaging/socket-write-buffer.ts +52 -52
- package/src/common/messaging/web-socket-channel.ts +76 -76
- package/src/common/nls.ts +151 -151
- package/src/common/numbers.ts +21 -21
- package/src/common/objects.spec.ts +112 -112
- package/src/common/objects.ts +123 -123
- package/src/common/os.ts +82 -82
- package/src/common/path.spec.ts +415 -415
- package/src/common/path.ts +334 -334
- package/src/common/paths.ts +250 -250
- package/src/common/performance/index.ts +19 -19
- package/src/common/performance/measurement-protocol.ts +104 -104
- package/src/common/performance/measurement.ts +130 -130
- package/src/common/performance/stopwatch.ts +183 -183
- package/src/common/preferences/preference-schema.ts +101 -101
- package/src/common/preferences/preference-scope.spec.ts +48 -48
- package/src/common/preferences/preference-scope.ts +68 -68
- package/src/common/prioritizeable.ts +58 -58
- package/src/common/progress-service-protocol.ts +35 -35
- package/src/common/progress-service.ts +82 -82
- package/src/common/promise-util.spec.ts +102 -102
- package/src/common/promise-util.ts +143 -143
- package/src/common/quick-pick-service.ts +353 -353
- package/src/common/reference.spec.ts +145 -145
- package/src/common/reference.ts +230 -230
- package/src/common/resource.ts +430 -430
- package/src/common/selection-command-handler.ts +101 -101
- package/src/common/selection-service.spec.ts +43 -43
- package/src/common/selection-service.ts +49 -49
- package/src/common/selection.ts +50 -50
- package/src/common/severity.ts +111 -111
- package/src/common/stream.ts +718 -718
- package/src/common/strings.ts +231 -231
- package/src/common/telemetry.ts +45 -45
- package/src/common/ternary-search-tree.ts +417 -417
- package/src/common/test/expect.ts +34 -34
- package/src/common/test/mock-logger.ts +118 -118
- package/src/common/test/mock-menu.ts +35 -35
- package/src/common/test/mock-resource-provider.ts +33 -33
- package/src/common/theme.ts +68 -68
- package/src/common/types.spec.ts +86 -86
- package/src/common/types.ts +140 -140
- package/src/common/uri-command-handler.spec.ts +90 -90
- package/src/common/uri-command-handler.ts +148 -148
- package/src/common/uri.spec.ts +278 -278
- package/src/common/uri.ts +279 -279
- package/src/common/uuid.ts +45 -45
- package/src/common/version.ts +17 -17
- package/src/common/view-column.ts +33 -33
- package/src/common/window.ts +34 -34
- package/src/electron-browser/electron-clipboard-service.ts +32 -32
- package/src/electron-browser/electron-uri-handler.ts +42 -0
- package/src/electron-browser/keyboard/electron-keyboard-layout-change-notifier.ts +39 -39
- package/src/electron-browser/keyboard/electron-keyboard-module.ts +28 -28
- package/src/electron-browser/menu/electron-context-menu-renderer.ts +122 -122
- package/src/electron-browser/menu/electron-main-menu-factory.ts +339 -338
- package/src/electron-browser/menu/electron-menu-contribution.ts +506 -506
- package/src/electron-browser/menu/electron-menu-module.ts +40 -40
- package/src/electron-browser/menu/electron-menu-style.css +110 -110
- package/src/electron-browser/messaging/electron-frontend-id-provider.ts +25 -25
- package/src/electron-browser/messaging/electron-ipc-connection-source.ts +65 -65
- package/src/electron-browser/messaging/electron-local-ws-connection-source.ts +45 -45
- package/src/electron-browser/messaging/electron-messaging-frontend-module.ts +78 -78
- package/src/electron-browser/messaging/electron-ws-connection-source.ts +38 -38
- package/src/electron-browser/preload.ts +264 -249
- package/src/electron-browser/request/electron-browser-request-module.ts +26 -26
- package/src/electron-browser/token/electron-token-frontend-module.ts +22 -22
- package/src/electron-browser/window/electron-frontend-application-state.ts +26 -26
- package/src/electron-browser/window/electron-secondary-window-service.ts +35 -35
- package/src/electron-browser/window/electron-window-module.ts +48 -45
- package/src/electron-browser/window/electron-window-preferences.ts +76 -76
- package/src/electron-browser/window/electron-window-service.ts +109 -109
- package/src/electron-browser/window/external-app-open-handler.ts +42 -42
- package/src/electron-common/electron-api.ts +157 -154
- package/src/electron-common/electron-main-window-service.ts +24 -24
- package/src/electron-common/electron-token.ts +27 -27
- package/src/electron-main/electron-api-main.ts +373 -347
- package/src/electron-main/electron-main-application-module.ts +65 -65
- package/src/electron-main/electron-main-application.ts +860 -818
- package/src/electron-main/electron-main-constants.ts +23 -23
- package/src/electron-main/electron-main-window-service-impl.ts +44 -44
- package/src/electron-main/electron-security-token-service.ts +36 -36
- package/src/electron-main/event-utils.ts +36 -36
- package/src/electron-main/messaging/electron-connection-handler.ts +21 -21
- package/src/electron-main/messaging/electron-messaging-contribution.ts +143 -143
- package/src/electron-main/messaging/electron-messaging-service.ts +35 -35
- package/src/electron-main/theia-electron-window.ts +219 -214
- package/src/electron-node/cli/electron-backend-cli-module.ts +24 -24
- package/src/electron-node/cli/electron-cli-contribution.ts +35 -35
- package/src/electron-node/hosting/electron-backend-hosting-module.ts +24 -24
- package/src/electron-node/hosting/electron-ws-origin-validator.ts +37 -37
- package/src/electron-node/keyboard/electron-backend-keyboard-module.ts +30 -30
- package/src/electron-node/keyboard/electron-keyboard-layout-provider.ts +35 -35
- package/src/electron-node/request/electron-backend-request-module.ts +23 -23
- package/src/electron-node/request/electron-backend-request-service.ts +78 -78
- package/src/electron-node/token/electron-token-backend-contribution.ts +48 -48
- package/src/electron-node/token/electron-token-backend-module.ts +28 -28
- package/src/electron-node/token/electron-token-validator.ts +93 -93
- package/src/node/application-server.ts +59 -59
- package/src/node/backend-application-config-provider.spec.ts +29 -29
- package/src/node/backend-application-config-provider.ts +48 -48
- package/src/node/backend-application-module.ts +139 -139
- package/src/node/backend-application.ts +374 -374
- package/src/node/cli.spec.ts +94 -94
- package/src/node/cli.ts +63 -63
- package/src/node/console-logger-server.spec.ts +59 -59
- package/src/node/console-logger-server.ts +76 -76
- package/src/node/debug.ts +30 -30
- package/src/node/dynamic-require.ts +56 -56
- package/src/node/env-variables/env-variables-server.ts +123 -123
- package/src/node/env-variables/index.ts +17 -17
- package/src/node/environment-utils.spec.ts +92 -92
- package/src/node/environment-utils.ts +66 -66
- package/src/node/file-uri.spec.ts +76 -76
- package/src/node/filesystem-locking.ts +77 -77
- package/src/node/hosting/backend-application-hosts.ts +60 -60
- package/src/node/hosting/backend-hosting-module.ts +26 -26
- package/src/node/hosting/ws-origin-validator.ts +36 -36
- package/src/node/i18n/i18n-backend-module.ts +42 -42
- package/src/node/i18n/localization-contribution.ts +112 -112
- package/src/node/i18n/localization-provider.ts +125 -125
- package/src/node/i18n/localization-server.ts +52 -52
- package/src/node/i18n/theia-localization-contribution.ts +40 -36
- package/src/node/index.ts +22 -22
- package/src/node/key-store-server.ts +162 -162
- package/src/node/logger-backend-module.ts +88 -88
- package/src/node/logger-cli-contribution.spec.ts +245 -245
- package/src/node/logger-cli-contribution.ts +168 -168
- package/src/node/main.ts +33 -33
- package/src/node/messaging/binary-message-pipe.ts +168 -168
- package/src/node/messaging/connection-container-module.ts +96 -96
- package/src/node/messaging/default-messaging-service.ts +129 -129
- package/src/node/messaging/frontend-connection-service.ts +24 -24
- package/src/node/messaging/index.ts +19 -19
- package/src/node/messaging/ipc-bootstrap.ts +27 -27
- package/src/node/messaging/ipc-channel.ts +77 -77
- package/src/node/messaging/ipc-connection-provider.ts +107 -107
- package/src/node/messaging/ipc-protocol.ts +76 -76
- package/src/node/messaging/messaging-backend-module.ts +52 -52
- package/src/node/messaging/messaging-listeners.ts +52 -52
- package/src/node/messaging/messaging-service.ts +46 -46
- package/src/node/messaging/test/test-web-socket-channel.ts +61 -61
- package/src/node/messaging/websocket-endpoint.ts +79 -79
- package/src/node/messaging/websocket-frontend-connection-service.ts +186 -186
- package/src/node/os-backend-provider.ts +25 -25
- package/src/node/performance/index.ts +18 -18
- package/src/node/performance/measurement-backend-bindings.ts +35 -35
- package/src/node/performance/node-stopwatch.ts +40 -40
- package/src/node/process-utils.spec.ts +48 -48
- package/src/node/process-utils.ts +102 -102
- package/src/node/remote/backend-remote-service.ts +25 -25
- package/src/node/remote/remote-cli-contribution.ts +34 -34
- package/src/node/remote/remote-copy-contribution.ts +45 -45
- package/src/node/request/backend-request-facade.ts +39 -39
- package/src/node/request/backend-request-module.ts +25 -25
- package/src/node/request/proxy-cli-contribution.ts +65 -65
- package/src/node/ws-request-validators.ts +56 -56
- package/src/typings/native-keymap.d.ts +108 -108
- package/i18n/nls.pt-pt.json +0 -552
|
@@ -1,168 +1,168 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2022 STMicroelectronics and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
import { Duplex } from 'stream';
|
|
18
|
-
import { Disposable, Emitter, Event } from '../../common';
|
|
19
|
-
import { Uint8ArrayReadBuffer, Uint8ArrayWriteBuffer } from '../../common/message-rpc/uint8-array-message-buffer';
|
|
20
|
-
|
|
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
|
-
export class BinaryMessagePipe implements Disposable {
|
|
27
|
-
static readonly MESSAGE_START_IDENTIFIER = '<MessageStart>';
|
|
28
|
-
protected dataHandler = (chunk: Uint8Array) => this.handleChunk(chunk);
|
|
29
|
-
|
|
30
|
-
protected onMessageEmitter = new Emitter<Uint8Array>();
|
|
31
|
-
protected cachedMessageData: StreamedMessageData = {
|
|
32
|
-
chunks: [],
|
|
33
|
-
missingBytes: 0
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
get onMessage(): Event<Uint8Array> {
|
|
37
|
-
return this.onMessageEmitter.event;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
constructor(protected readonly underlyingPipe: Duplex) {
|
|
41
|
-
underlyingPipe.on('data', this.dataHandler);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
send(message: Uint8Array): void {
|
|
45
|
-
this.underlyingPipe.write(this.encodeMessageStart(message));
|
|
46
|
-
this.underlyingPipe.write(message);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
protected handleChunk(chunk: Uint8Array): void {
|
|
50
|
-
if (this.cachedMessageData.missingBytes === 0) {
|
|
51
|
-
// There is no currently streamed message => We expect that the beginning of the chunk is the message start for a new message
|
|
52
|
-
this.handleNewMessage(chunk);
|
|
53
|
-
} else {
|
|
54
|
-
// The chunk contains message data intended for the currently cached message
|
|
55
|
-
this.handleMessageContentChunk(chunk);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
protected handleNewMessage(chunk: Uint8Array): void {
|
|
60
|
-
if (chunk.byteLength < this.messageStartByteLength) {
|
|
61
|
-
// The chunk only contains a part of the encoded message start
|
|
62
|
-
this.cachedMessageData.partialMessageStart = chunk;
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const messageLength = this.readMessageStart(chunk);
|
|
67
|
-
|
|
68
|
-
if (chunk.length - this.messageStartByteLength > messageLength) {
|
|
69
|
-
// The initial chunk contains more than one binary message => Fire `onMessage` for first message and handle remaining content
|
|
70
|
-
const firstMessage = chunk.slice(this.messageStartByteLength, this.messageStartByteLength + messageLength);
|
|
71
|
-
this.onMessageEmitter.fire(firstMessage);
|
|
72
|
-
this.handleNewMessage(chunk.slice(this.messageStartByteLength + messageLength));
|
|
73
|
-
|
|
74
|
-
} else if (chunk.length - this.messageStartByteLength === messageLength) {
|
|
75
|
-
// The initial chunk contains exactly one complete message. => Directly fire the `onMessage` event.
|
|
76
|
-
this.onMessageEmitter.fire(chunk.slice(this.messageStartByteLength));
|
|
77
|
-
} else {
|
|
78
|
-
// The initial chunk contains only part of the message content => Cache message data
|
|
79
|
-
this.cachedMessageData.chunks = [chunk.slice(this.messageStartByteLength)];
|
|
80
|
-
this.cachedMessageData.missingBytes = messageLength - chunk.byteLength + this.messageStartByteLength;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
protected handleMessageContentChunk(chunk: Uint8Array): void {
|
|
85
|
-
if (this.cachedMessageData) {
|
|
86
|
-
if (chunk.byteLength < this.cachedMessageData.missingBytes) {
|
|
87
|
-
// The chunk only contains parts of the missing bytes for the cached message.
|
|
88
|
-
this.cachedMessageData.chunks.push(chunk);
|
|
89
|
-
this.cachedMessageData.missingBytes -= chunk.byteLength;
|
|
90
|
-
} else if (chunk.byteLength === this.cachedMessageData.missingBytes) {
|
|
91
|
-
// Chunk contains exactly the missing data for the cached message
|
|
92
|
-
this.cachedMessageData.chunks.push(chunk);
|
|
93
|
-
this.emitCachedMessage();
|
|
94
|
-
} else {
|
|
95
|
-
// Chunk contains missing data for the cached message + data for the next message
|
|
96
|
-
const messageEnd = this.cachedMessageData.missingBytes;
|
|
97
|
-
const missingData = chunk.slice(0, messageEnd);
|
|
98
|
-
this.cachedMessageData.chunks.push(missingData);
|
|
99
|
-
this.emitCachedMessage();
|
|
100
|
-
this.handleNewMessage(chunk.slice(messageEnd));
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
protected emitCachedMessage(): void {
|
|
107
|
-
const message = Buffer.concat(this.cachedMessageData.chunks);
|
|
108
|
-
this.onMessageEmitter.fire(message);
|
|
109
|
-
this.cachedMessageData.chunks = [];
|
|
110
|
-
this.cachedMessageData.missingBytes = 0;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Encodes the start of a new message into a {@link Uint8Array}.
|
|
115
|
-
* The message start consists of a identifier string and the length of the following message.
|
|
116
|
-
* @returns the buffer contains the encoded message start
|
|
117
|
-
*/
|
|
118
|
-
protected encodeMessageStart(message: Uint8Array): Uint8Array {
|
|
119
|
-
const writer = new Uint8ArrayWriteBuffer()
|
|
120
|
-
.writeString(BinaryMessagePipe.MESSAGE_START_IDENTIFIER)
|
|
121
|
-
.writeUint32(message.length);
|
|
122
|
-
const messageStart = writer.getCurrentContents();
|
|
123
|
-
writer.dispose();
|
|
124
|
-
return messageStart;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
protected get messageStartByteLength(): number {
|
|
128
|
-
// 4 bytes for length of id + id string length + 4 bytes for length of message
|
|
129
|
-
return 4 + BinaryMessagePipe.MESSAGE_START_IDENTIFIER.length + 4;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Reads the start of a new message from a stream chunk (or cached message) received from the underlying pipe.
|
|
134
|
-
* The message start is expected to consist of an identifier string and the length of the message.
|
|
135
|
-
* @param chunk The stream chunk.
|
|
136
|
-
* @returns The length of the message content to read.
|
|
137
|
-
* @throws An error if the message start can not be read successfully.
|
|
138
|
-
*/
|
|
139
|
-
protected readMessageStart(chunk: Uint8Array): number {
|
|
140
|
-
const messageData = this.cachedMessageData.partialMessageStart ? Buffer.concat([this.cachedMessageData.partialMessageStart, chunk]) : chunk;
|
|
141
|
-
this.cachedMessageData.partialMessageStart = undefined;
|
|
142
|
-
|
|
143
|
-
const reader = new Uint8ArrayReadBuffer(messageData);
|
|
144
|
-
const identifier = reader.readString();
|
|
145
|
-
|
|
146
|
-
if (identifier !== BinaryMessagePipe.MESSAGE_START_IDENTIFIER) {
|
|
147
|
-
throw new Error(`Could not read message start. The start identifier should be '${BinaryMessagePipe.MESSAGE_START_IDENTIFIER}' but was '${identifier}`);
|
|
148
|
-
}
|
|
149
|
-
const length = reader.readUint32();
|
|
150
|
-
return length;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
dispose(): void {
|
|
154
|
-
this.underlyingPipe.removeListener('data', this.dataHandler);
|
|
155
|
-
this.underlyingPipe.end();
|
|
156
|
-
this.onMessageEmitter.dispose();
|
|
157
|
-
this.cachedMessageData = {
|
|
158
|
-
chunks: [],
|
|
159
|
-
missingBytes: 0
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
interface StreamedMessageData {
|
|
165
|
-
chunks: Uint8Array[];
|
|
166
|
-
missingBytes: number;
|
|
167
|
-
partialMessageStart?: Uint8Array;
|
|
168
|
-
}
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2022 STMicroelectronics and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { Duplex } from 'stream';
|
|
18
|
+
import { Disposable, Emitter, Event } from '../../common';
|
|
19
|
+
import { Uint8ArrayReadBuffer, Uint8ArrayWriteBuffer } from '../../common/message-rpc/uint8-array-message-buffer';
|
|
20
|
+
|
|
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
|
+
export class BinaryMessagePipe implements Disposable {
|
|
27
|
+
static readonly MESSAGE_START_IDENTIFIER = '<MessageStart>';
|
|
28
|
+
protected dataHandler = (chunk: Uint8Array) => this.handleChunk(chunk);
|
|
29
|
+
|
|
30
|
+
protected onMessageEmitter = new Emitter<Uint8Array>();
|
|
31
|
+
protected cachedMessageData: StreamedMessageData = {
|
|
32
|
+
chunks: [],
|
|
33
|
+
missingBytes: 0
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
get onMessage(): Event<Uint8Array> {
|
|
37
|
+
return this.onMessageEmitter.event;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
constructor(protected readonly underlyingPipe: Duplex) {
|
|
41
|
+
underlyingPipe.on('data', this.dataHandler);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
send(message: Uint8Array): void {
|
|
45
|
+
this.underlyingPipe.write(this.encodeMessageStart(message));
|
|
46
|
+
this.underlyingPipe.write(message);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
protected handleChunk(chunk: Uint8Array): void {
|
|
50
|
+
if (this.cachedMessageData.missingBytes === 0) {
|
|
51
|
+
// There is no currently streamed message => We expect that the beginning of the chunk is the message start for a new message
|
|
52
|
+
this.handleNewMessage(chunk);
|
|
53
|
+
} else {
|
|
54
|
+
// The chunk contains message data intended for the currently cached message
|
|
55
|
+
this.handleMessageContentChunk(chunk);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
protected handleNewMessage(chunk: Uint8Array): void {
|
|
60
|
+
if (chunk.byteLength < this.messageStartByteLength) {
|
|
61
|
+
// The chunk only contains a part of the encoded message start
|
|
62
|
+
this.cachedMessageData.partialMessageStart = chunk;
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const messageLength = this.readMessageStart(chunk);
|
|
67
|
+
|
|
68
|
+
if (chunk.length - this.messageStartByteLength > messageLength) {
|
|
69
|
+
// The initial chunk contains more than one binary message => Fire `onMessage` for first message and handle remaining content
|
|
70
|
+
const firstMessage = chunk.slice(this.messageStartByteLength, this.messageStartByteLength + messageLength);
|
|
71
|
+
this.onMessageEmitter.fire(firstMessage);
|
|
72
|
+
this.handleNewMessage(chunk.slice(this.messageStartByteLength + messageLength));
|
|
73
|
+
|
|
74
|
+
} else if (chunk.length - this.messageStartByteLength === messageLength) {
|
|
75
|
+
// The initial chunk contains exactly one complete message. => Directly fire the `onMessage` event.
|
|
76
|
+
this.onMessageEmitter.fire(chunk.slice(this.messageStartByteLength));
|
|
77
|
+
} else {
|
|
78
|
+
// The initial chunk contains only part of the message content => Cache message data
|
|
79
|
+
this.cachedMessageData.chunks = [chunk.slice(this.messageStartByteLength)];
|
|
80
|
+
this.cachedMessageData.missingBytes = messageLength - chunk.byteLength + this.messageStartByteLength;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
protected handleMessageContentChunk(chunk: Uint8Array): void {
|
|
85
|
+
if (this.cachedMessageData) {
|
|
86
|
+
if (chunk.byteLength < this.cachedMessageData.missingBytes) {
|
|
87
|
+
// The chunk only contains parts of the missing bytes for the cached message.
|
|
88
|
+
this.cachedMessageData.chunks.push(chunk);
|
|
89
|
+
this.cachedMessageData.missingBytes -= chunk.byteLength;
|
|
90
|
+
} else if (chunk.byteLength === this.cachedMessageData.missingBytes) {
|
|
91
|
+
// Chunk contains exactly the missing data for the cached message
|
|
92
|
+
this.cachedMessageData.chunks.push(chunk);
|
|
93
|
+
this.emitCachedMessage();
|
|
94
|
+
} else {
|
|
95
|
+
// Chunk contains missing data for the cached message + data for the next message
|
|
96
|
+
const messageEnd = this.cachedMessageData.missingBytes;
|
|
97
|
+
const missingData = chunk.slice(0, messageEnd);
|
|
98
|
+
this.cachedMessageData.chunks.push(missingData);
|
|
99
|
+
this.emitCachedMessage();
|
|
100
|
+
this.handleNewMessage(chunk.slice(messageEnd));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
protected emitCachedMessage(): void {
|
|
107
|
+
const message = Buffer.concat(this.cachedMessageData.chunks);
|
|
108
|
+
this.onMessageEmitter.fire(message);
|
|
109
|
+
this.cachedMessageData.chunks = [];
|
|
110
|
+
this.cachedMessageData.missingBytes = 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Encodes the start of a new message into a {@link Uint8Array}.
|
|
115
|
+
* The message start consists of a identifier string and the length of the following message.
|
|
116
|
+
* @returns the buffer contains the encoded message start
|
|
117
|
+
*/
|
|
118
|
+
protected encodeMessageStart(message: Uint8Array): Uint8Array {
|
|
119
|
+
const writer = new Uint8ArrayWriteBuffer()
|
|
120
|
+
.writeString(BinaryMessagePipe.MESSAGE_START_IDENTIFIER)
|
|
121
|
+
.writeUint32(message.length);
|
|
122
|
+
const messageStart = writer.getCurrentContents();
|
|
123
|
+
writer.dispose();
|
|
124
|
+
return messageStart;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
protected get messageStartByteLength(): number {
|
|
128
|
+
// 4 bytes for length of id + id string length + 4 bytes for length of message
|
|
129
|
+
return 4 + BinaryMessagePipe.MESSAGE_START_IDENTIFIER.length + 4;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Reads the start of a new message from a stream chunk (or cached message) received from the underlying pipe.
|
|
134
|
+
* The message start is expected to consist of an identifier string and the length of the message.
|
|
135
|
+
* @param chunk The stream chunk.
|
|
136
|
+
* @returns The length of the message content to read.
|
|
137
|
+
* @throws An error if the message start can not be read successfully.
|
|
138
|
+
*/
|
|
139
|
+
protected readMessageStart(chunk: Uint8Array): number {
|
|
140
|
+
const messageData = this.cachedMessageData.partialMessageStart ? Buffer.concat([this.cachedMessageData.partialMessageStart, chunk]) : chunk;
|
|
141
|
+
this.cachedMessageData.partialMessageStart = undefined;
|
|
142
|
+
|
|
143
|
+
const reader = new Uint8ArrayReadBuffer(messageData);
|
|
144
|
+
const identifier = reader.readString();
|
|
145
|
+
|
|
146
|
+
if (identifier !== BinaryMessagePipe.MESSAGE_START_IDENTIFIER) {
|
|
147
|
+
throw new Error(`Could not read message start. The start identifier should be '${BinaryMessagePipe.MESSAGE_START_IDENTIFIER}' but was '${identifier}`);
|
|
148
|
+
}
|
|
149
|
+
const length = reader.readUint32();
|
|
150
|
+
return length;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
dispose(): void {
|
|
154
|
+
this.underlyingPipe.removeListener('data', this.dataHandler);
|
|
155
|
+
this.underlyingPipe.end();
|
|
156
|
+
this.onMessageEmitter.dispose();
|
|
157
|
+
this.cachedMessageData = {
|
|
158
|
+
chunks: [],
|
|
159
|
+
missingBytes: 0
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
interface StreamedMessageData {
|
|
165
|
+
chunks: Uint8Array[];
|
|
166
|
+
missingBytes: number;
|
|
167
|
+
partialMessageStart?: Uint8Array;
|
|
168
|
+
}
|
|
@@ -1,96 +1,96 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2018 TypeFox and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
18
|
-
|
|
19
|
-
import { interfaces, ContainerModule } from 'inversify';
|
|
20
|
-
import { RpcProxyFactory, ConnectionHandler, RpcConnectionHandler, RpcProxy } from '../../common';
|
|
21
|
-
|
|
22
|
-
export type BindFrontendService = <T extends object>(path: string, serviceIdentifier: interfaces.ServiceIdentifier<T>) => interfaces.BindingWhenOnSyntax<T>;
|
|
23
|
-
export type BindBackendService = <T extends object, C extends object = object>(
|
|
24
|
-
path: string, serviceIdentifier: interfaces.ServiceIdentifier<T>, onActivation?: (service: T, proxy: RpcProxy<C>) => T
|
|
25
|
-
) => void;
|
|
26
|
-
export type ConnectionContainerModuleCallBack = (registry: {
|
|
27
|
-
bind: interfaces.Bind
|
|
28
|
-
unbind: interfaces.Unbind
|
|
29
|
-
isBound: interfaces.IsBound
|
|
30
|
-
rebind: interfaces.Rebind
|
|
31
|
-
bindFrontendService: BindFrontendService
|
|
32
|
-
bindBackendService: BindBackendService
|
|
33
|
-
}) => void;
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* ### Connection Container Module
|
|
37
|
-
*
|
|
38
|
-
* It provides bindings which are scoped per a connection, e.g.
|
|
39
|
-
* in order to allow backend services to access frontend service within the same connection.
|
|
40
|
-
*
|
|
41
|
-
* #### Binding a frontend service
|
|
42
|
-
* ```ts
|
|
43
|
-
* const myConnectionModule = ConnectionContainerModule.create(({ bindFrontendService }) => {
|
|
44
|
-
* bindFrontendService(myFrontendServicePath, MyFrontendService);
|
|
45
|
-
* });
|
|
46
|
-
*
|
|
47
|
-
* export const myBackendApplicationModule = new ContainerModule(bind => {
|
|
48
|
-
* bind(ConnectionContainerModule).toConstantValue(myConnectionModule);
|
|
49
|
-
* }
|
|
50
|
-
* ```
|
|
51
|
-
*
|
|
52
|
-
* #### Exposing a backend service
|
|
53
|
-
* ```ts
|
|
54
|
-
* const myConnectionModule2 = ConnectionContainerModule.create(({ bind, bindBackendService }) => {
|
|
55
|
-
* bind(MyBackendService).toSelf().inSingletonScope();
|
|
56
|
-
* bindBackendService(myBackendServicePath, MyBackendService);
|
|
57
|
-
* });
|
|
58
|
-
*
|
|
59
|
-
* export const myBackendApplicationModule2 = new ContainerModule(bind => {
|
|
60
|
-
* bind(ConnectionContainerModule).toConstantValue(myConnectionModule2);
|
|
61
|
-
* }
|
|
62
|
-
* ```
|
|
63
|
-
*
|
|
64
|
-
* #### Injecting a frontend service
|
|
65
|
-
* ```ts
|
|
66
|
-
* @injectable()
|
|
67
|
-
* export class MyBackendService {
|
|
68
|
-
* @inject(MyFrontendService)
|
|
69
|
-
* protected readonly myFrontendService: MyFrontendService;
|
|
70
|
-
* }
|
|
71
|
-
* ```
|
|
72
|
-
*/
|
|
73
|
-
export const ConnectionContainerModule: symbol & { create(callback: ConnectionContainerModuleCallBack): ContainerModule } = Object.assign(Symbol('ConnectionContainerModule'), {
|
|
74
|
-
create(callback: ConnectionContainerModuleCallBack): ContainerModule {
|
|
75
|
-
return new ContainerModule((bind, unbind, isBound, rebind) => {
|
|
76
|
-
const bindFrontendService: BindFrontendService = (path, serviceIdentifier) => {
|
|
77
|
-
const serviceFactory = new RpcProxyFactory();
|
|
78
|
-
const service = serviceFactory.createProxy();
|
|
79
|
-
bind<ConnectionHandler>(ConnectionHandler).toConstantValue({
|
|
80
|
-
path,
|
|
81
|
-
onConnection: connection => serviceFactory.listen(connection)
|
|
82
|
-
});
|
|
83
|
-
return bind(serviceIdentifier).toConstantValue(service as any);
|
|
84
|
-
};
|
|
85
|
-
const bindBackendService: BindBackendService = (path, serviceIdentifier, onActivation) => {
|
|
86
|
-
bind(ConnectionHandler).toDynamicValue(context =>
|
|
87
|
-
new RpcConnectionHandler<any>(path, proxy => {
|
|
88
|
-
const service = context.container.get(serviceIdentifier);
|
|
89
|
-
return onActivation ? onActivation(service, proxy) : service;
|
|
90
|
-
})
|
|
91
|
-
).inSingletonScope();
|
|
92
|
-
};
|
|
93
|
-
callback({ bind, unbind, isBound, rebind, bindFrontendService, bindBackendService });
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
});
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2018 TypeFox and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
18
|
+
|
|
19
|
+
import { interfaces, ContainerModule } from 'inversify';
|
|
20
|
+
import { RpcProxyFactory, ConnectionHandler, RpcConnectionHandler, RpcProxy } from '../../common';
|
|
21
|
+
|
|
22
|
+
export type BindFrontendService = <T extends object>(path: string, serviceIdentifier: interfaces.ServiceIdentifier<T>) => interfaces.BindingWhenOnSyntax<T>;
|
|
23
|
+
export type BindBackendService = <T extends object, C extends object = object>(
|
|
24
|
+
path: string, serviceIdentifier: interfaces.ServiceIdentifier<T>, onActivation?: (service: T, proxy: RpcProxy<C>) => T
|
|
25
|
+
) => void;
|
|
26
|
+
export type ConnectionContainerModuleCallBack = (registry: {
|
|
27
|
+
bind: interfaces.Bind
|
|
28
|
+
unbind: interfaces.Unbind
|
|
29
|
+
isBound: interfaces.IsBound
|
|
30
|
+
rebind: interfaces.Rebind
|
|
31
|
+
bindFrontendService: BindFrontendService
|
|
32
|
+
bindBackendService: BindBackendService
|
|
33
|
+
}) => void;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* ### Connection Container Module
|
|
37
|
+
*
|
|
38
|
+
* It provides bindings which are scoped per a connection, e.g.
|
|
39
|
+
* in order to allow backend services to access frontend service within the same connection.
|
|
40
|
+
*
|
|
41
|
+
* #### Binding a frontend service
|
|
42
|
+
* ```ts
|
|
43
|
+
* const myConnectionModule = ConnectionContainerModule.create(({ bindFrontendService }) => {
|
|
44
|
+
* bindFrontendService(myFrontendServicePath, MyFrontendService);
|
|
45
|
+
* });
|
|
46
|
+
*
|
|
47
|
+
* export const myBackendApplicationModule = new ContainerModule(bind => {
|
|
48
|
+
* bind(ConnectionContainerModule).toConstantValue(myConnectionModule);
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* #### Exposing a backend service
|
|
53
|
+
* ```ts
|
|
54
|
+
* const myConnectionModule2 = ConnectionContainerModule.create(({ bind, bindBackendService }) => {
|
|
55
|
+
* bind(MyBackendService).toSelf().inSingletonScope();
|
|
56
|
+
* bindBackendService(myBackendServicePath, MyBackendService);
|
|
57
|
+
* });
|
|
58
|
+
*
|
|
59
|
+
* export const myBackendApplicationModule2 = new ContainerModule(bind => {
|
|
60
|
+
* bind(ConnectionContainerModule).toConstantValue(myConnectionModule2);
|
|
61
|
+
* }
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* #### Injecting a frontend service
|
|
65
|
+
* ```ts
|
|
66
|
+
* @injectable()
|
|
67
|
+
* export class MyBackendService {
|
|
68
|
+
* @inject(MyFrontendService)
|
|
69
|
+
* protected readonly myFrontendService: MyFrontendService;
|
|
70
|
+
* }
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export const ConnectionContainerModule: symbol & { create(callback: ConnectionContainerModuleCallBack): ContainerModule } = Object.assign(Symbol('ConnectionContainerModule'), {
|
|
74
|
+
create(callback: ConnectionContainerModuleCallBack): ContainerModule {
|
|
75
|
+
return new ContainerModule((bind, unbind, isBound, rebind) => {
|
|
76
|
+
const bindFrontendService: BindFrontendService = (path, serviceIdentifier) => {
|
|
77
|
+
const serviceFactory = new RpcProxyFactory();
|
|
78
|
+
const service = serviceFactory.createProxy();
|
|
79
|
+
bind<ConnectionHandler>(ConnectionHandler).toConstantValue({
|
|
80
|
+
path,
|
|
81
|
+
onConnection: connection => serviceFactory.listen(connection)
|
|
82
|
+
});
|
|
83
|
+
return bind(serviceIdentifier).toConstantValue(service as any);
|
|
84
|
+
};
|
|
85
|
+
const bindBackendService: BindBackendService = (path, serviceIdentifier, onActivation) => {
|
|
86
|
+
bind(ConnectionHandler).toDynamicValue(context =>
|
|
87
|
+
new RpcConnectionHandler<any>(path, proxy => {
|
|
88
|
+
const service = context.container.get(serviceIdentifier);
|
|
89
|
+
return onActivation ? onActivation(service, proxy) : service;
|
|
90
|
+
})
|
|
91
|
+
).inSingletonScope();
|
|
92
|
+
};
|
|
93
|
+
callback({ bind, unbind, isBound, rebind, bindFrontendService, bindBackendService });
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
});
|