@theia/core 1.46.1 → 1.47.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 -6
- package/i18n/nls.cs.json +16 -3
- package/i18n/nls.de.json +16 -3
- package/i18n/nls.es.json +16 -3
- package/i18n/nls.fr.json +16 -3
- package/i18n/nls.hu.json +16 -3
- package/i18n/nls.it.json +16 -3
- package/i18n/nls.ja.json +16 -3
- package/i18n/nls.json +16 -3
- package/i18n/nls.pl.json +16 -3
- package/i18n/nls.pt-br.json +16 -3
- package/i18n/nls.pt-pt.json +16 -3
- package/i18n/nls.ru.json +16 -3
- package/i18n/nls.zh-cn.json +16 -3
- package/lib/browser/about-dialog.js +13 -24
- package/lib/browser/about-dialog.js.map +1 -1
- package/lib/browser/authentication-service.js +12 -20
- package/lib/browser/authentication-service.js.map +1 -1
- package/lib/browser/breadcrumbs/breadcrumb-popup-container.js +12 -20
- package/lib/browser/breadcrumbs/breadcrumb-popup-container.js.map +1 -1
- package/lib/browser/breadcrumbs/breadcrumb-renderer.js +2 -7
- package/lib/browser/breadcrumbs/breadcrumb-renderer.js.map +1 -1
- package/lib/browser/breadcrumbs/breadcrumbs-renderer.js +14 -22
- package/lib/browser/breadcrumbs/breadcrumbs-renderer.js.map +1 -1
- package/lib/browser/breadcrumbs/breadcrumbs-service.js +10 -18
- package/lib/browser/breadcrumbs/breadcrumbs-service.js.map +1 -1
- package/lib/browser/breadcrumbs/index.js +6 -15
- package/lib/browser/breadcrumbs/index.js.map +1 -1
- package/lib/browser/browser-clipboard-service.js +6 -14
- package/lib/browser/browser-clipboard-service.js.map +1 -1
- package/lib/browser/color-application-contribution.js +8 -16
- package/lib/browser/color-application-contribution.js.map +1 -1
- package/lib/browser/color-registry.js +2 -7
- package/lib/browser/color-registry.js.map +1 -1
- package/lib/browser/command-open-handler.js +4 -12
- package/lib/browser/command-open-handler.js.map +1 -1
- package/lib/browser/common-frontend-contribution.js +46 -57
- package/lib/browser/common-frontend-contribution.js.map +1 -1
- package/lib/browser/common-styling-participants.js +9 -14
- package/lib/browser/common-styling-participants.js.map +1 -1
- package/lib/browser/connection-status-service.js +22 -33
- package/lib/browser/connection-status-service.js.map +1 -1
- package/lib/browser/context-key-service.d.ts +1 -2
- package/lib/browser/context-key-service.d.ts.map +1 -1
- package/lib/browser/context-key-service.js +2 -7
- package/lib/browser/context-key-service.js.map +1 -1
- package/lib/browser/context-menu-renderer.d.ts +0 -1
- package/lib/browser/context-menu-renderer.d.ts.map +1 -1
- package/lib/browser/context-menu-renderer.js +3 -12
- 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/credentials-service.js +4 -15
- package/lib/browser/credentials-service.js.map +1 -1
- package/lib/browser/decorations-service.js +2 -7
- package/lib/browser/decorations-service.js.map +1 -1
- package/lib/browser/dialogs/react-dialog.js +4 -15
- package/lib/browser/dialogs/react-dialog.js.map +1 -1
- package/lib/browser/dialogs.js +18 -29
- package/lib/browser/dialogs.js.map +1 -1
- package/lib/browser/diff-uris.js +4 -15
- package/lib/browser/diff-uris.js.map +1 -1
- package/lib/browser/encoding-registry.js +6 -14
- package/lib/browser/encoding-registry.js.map +1 -1
- package/lib/browser/external-uri-service.js +2 -7
- package/lib/browser/external-uri-service.js.map +1 -1
- package/lib/browser/frontend-application-contribution.js +2 -7
- package/lib/browser/frontend-application-contribution.js.map +1 -1
- package/lib/browser/frontend-application-module.d.ts.map +1 -1
- package/lib/browser/frontend-application-module.js +2 -1
- package/lib/browser/frontend-application-module.js.map +1 -1
- package/lib/browser/frontend-application-state.js +4 -12
- package/lib/browser/frontend-application-state.js.map +1 -1
- package/lib/browser/frontend-application.js +21 -32
- package/lib/browser/frontend-application.js.map +1 -1
- package/lib/browser/hover-service.js +6 -14
- package/lib/browser/hover-service.js.map +1 -1
- package/lib/browser/http-open-handler.js +6 -14
- package/lib/browser/http-open-handler.js.map +1 -1
- package/lib/browser/i18n/language-quick-pick-service.js +8 -16
- package/lib/browser/i18n/language-quick-pick-service.js.map +1 -1
- package/lib/browser/icon-registry.d.ts +1 -7
- package/lib/browser/icon-registry.d.ts.map +1 -1
- package/lib/browser/icon-registry.js.map +1 -1
- package/lib/browser/icon-theme-contribution.js +7 -15
- package/lib/browser/icon-theme-contribution.js.map +1 -1
- package/lib/browser/icon-theme-service.js +13 -21
- package/lib/browser/icon-theme-service.js.map +1 -1
- package/lib/browser/index.js +32 -41
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/json-schema-store.js +7 -15
- package/lib/browser/json-schema-store.js.map +1 -1
- package/lib/browser/keybinding.js +18 -26
- package/lib/browser/keybinding.js.map +1 -1
- package/lib/browser/keybinding.spec.js +4 -9
- package/lib/browser/keybinding.spec.js.map +1 -1
- package/lib/browser/keyboard/browser-keyboard-frontend-contribution.js +6 -14
- package/lib/browser/keyboard/browser-keyboard-frontend-contribution.js.map +1 -1
- package/lib/browser/keyboard/browser-keyboard-layout-provider.js +10 -18
- package/lib/browser/keyboard/browser-keyboard-layout-provider.js.map +1 -1
- package/lib/browser/keyboard/browser-keyboard-layout-provider.spec.js +2 -7
- package/lib/browser/keyboard/browser-keyboard-layout-provider.spec.js.map +1 -1
- package/lib/browser/keyboard/index.js +5 -14
- package/lib/browser/keyboard/index.js.map +1 -1
- package/lib/browser/keyboard/keyboard-layout-service.js +8 -16
- package/lib/browser/keyboard/keyboard-layout-service.js.map +1 -1
- package/lib/browser/keyboard/keyboard-layout-service.spec.js +2 -7
- package/lib/browser/keyboard/keyboard-layout-service.spec.js.map +1 -1
- package/lib/browser/keyboard/keys.js +2 -11
- package/lib/browser/keyboard/keys.js.map +1 -1
- package/lib/browser/label-parser.js +2 -7
- package/lib/browser/label-parser.js.map +1 -1
- package/lib/browser/label-provider.js +11 -19
- package/lib/browser/label-provider.js.map +1 -1
- package/lib/browser/language-icon-provider.js +10 -18
- package/lib/browser/language-icon-provider.js.map +1 -1
- package/lib/browser/language-service.js +2 -7
- package/lib/browser/language-service.js.map +1 -1
- package/lib/browser/markdown-rendering/markdown-renderer.d.ts +1 -1
- package/lib/browser/markdown-rendering/markdown-renderer.d.ts.map +1 -1
- package/lib/browser/markdown-rendering/markdown-renderer.js +8 -16
- package/lib/browser/markdown-rendering/markdown-renderer.js.map +1 -1
- package/lib/browser/menu/browser-context-menu-renderer.js +4 -15
- package/lib/browser/menu/browser-context-menu-renderer.js.map +1 -1
- package/lib/browser/menu/browser-menu-plugin.js +23 -34
- package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
- package/lib/browser/menu/context-menu-context.js +3 -11
- package/lib/browser/menu/context-menu-context.js.map +1 -1
- package/lib/browser/messaging/frontend-id-provider.js +2 -7
- package/lib/browser/messaging/frontend-id-provider.js.map +1 -1
- package/lib/browser/messaging/index.js +2 -11
- package/lib/browser/messaging/index.js.map +1 -1
- package/lib/browser/messaging/service-connection-provider.js +8 -16
- package/lib/browser/messaging/service-connection-provider.js.map +1 -1
- package/lib/browser/messaging/ws-connection-provider.js +4 -12
- package/lib/browser/messaging/ws-connection-provider.js.map +1 -1
- package/lib/browser/messaging/ws-connection-source.js +9 -17
- package/lib/browser/messaging/ws-connection-source.js.map +1 -1
- package/lib/browser/mime-service.js +2 -7
- package/lib/browser/mime-service.js.map +1 -1
- package/lib/browser/navigatable.js +2 -11
- package/lib/browser/navigatable.js.map +1 -1
- package/lib/browser/opener-service.js +5 -16
- package/lib/browser/opener-service.js.map +1 -1
- package/lib/browser/performance/frontend-stopwatch.js +3 -11
- package/lib/browser/performance/frontend-stopwatch.js.map +1 -1
- package/lib/browser/performance/index.js +3 -12
- package/lib/browser/performance/index.js.map +1 -1
- package/lib/browser/preferences/index.js +8 -17
- package/lib/browser/preferences/index.js.map +1 -1
- package/lib/browser/preferences/injectable-preference-proxy.js +14 -22
- package/lib/browser/preferences/injectable-preference-proxy.js.map +1 -1
- package/lib/browser/preferences/preference-configurations.js +4 -12
- package/lib/browser/preferences/preference-configurations.js.map +1 -1
- package/lib/browser/preferences/preference-contribution.js +10 -18
- package/lib/browser/preferences/preference-contribution.js.map +1 -1
- package/lib/browser/preferences/preference-language-override-service.js +2 -7
- package/lib/browser/preferences/preference-language-override-service.js.map +1 -1
- package/lib/browser/preferences/preference-provider.js +5 -13
- package/lib/browser/preferences/preference-provider.js.map +1 -1
- package/lib/browser/preferences/preference-service.js +14 -22
- package/lib/browser/preferences/preference-service.js.map +1 -1
- package/lib/browser/preferences/preference-validation-service.js +6 -14
- package/lib/browser/preferences/preference-validation-service.js.map +1 -1
- package/lib/browser/preferences/test/index.js +4 -13
- package/lib/browser/preferences/test/index.js.map +1 -1
- package/lib/browser/preferences/test/mock-preference-service.js +3 -11
- package/lib/browser/preferences/test/mock-preference-service.js.map +1 -1
- package/lib/browser/preload/i18n-preload-contribution.js +4 -12
- package/lib/browser/preload/i18n-preload-contribution.js.map +1 -1
- package/lib/browser/preload/os-preload-contribution.js +4 -12
- package/lib/browser/preload/os-preload-contribution.js.map +1 -1
- package/lib/browser/preload/preloader.js +4 -12
- package/lib/browser/preload/preloader.js.map +1 -1
- package/lib/browser/preload/theme-preload-contribution.js +2 -7
- package/lib/browser/preload/theme-preload-contribution.js.map +1 -1
- package/lib/browser/progress-bar.js +11 -19
- package/lib/browser/progress-bar.js.map +1 -1
- package/lib/browser/progress-client.js +6 -14
- package/lib/browser/progress-client.js.map +1 -1
- package/lib/browser/progress-location-service.js +2 -7
- package/lib/browser/progress-location-service.js.map +1 -1
- package/lib/browser/progress-status-bar-item.js +4 -12
- package/lib/browser/progress-status-bar-item.js.map +1 -1
- package/lib/browser/quick-input/index.js +9 -18
- package/lib/browser/quick-input/index.js.map +1 -1
- package/lib/browser/quick-input/quick-command-frontend-contribution.js +6 -14
- package/lib/browser/quick-input/quick-command-frontend-contribution.js.map +1 -1
- package/lib/browser/quick-input/quick-command-service.js +12 -20
- package/lib/browser/quick-input/quick-command-service.js.map +1 -1
- package/lib/browser/quick-input/quick-help-service.js +6 -14
- package/lib/browser/quick-input/quick-help-service.js.map +1 -1
- package/lib/browser/quick-input/quick-input-frontend-contribution.js +4 -12
- package/lib/browser/quick-input/quick-input-frontend-contribution.js.map +1 -1
- package/lib/browser/quick-input/quick-input-service.js +2 -11
- package/lib/browser/quick-input/quick-input-service.js.map +1 -1
- package/lib/browser/quick-input/quick-pick-service-impl.js +4 -12
- package/lib/browser/quick-input/quick-pick-service-impl.js.map +1 -1
- package/lib/browser/quick-input/quick-view-service.js +6 -14
- package/lib/browser/quick-input/quick-view-service.js.map +1 -1
- package/lib/browser/request/browser-request-service.js +12 -20
- package/lib/browser/request/browser-request-service.js.map +1 -1
- package/lib/browser/resource-context-key.js +10 -18
- package/lib/browser/resource-context-key.js.map +1 -1
- package/lib/browser/save-resource-service.d.ts +3 -3
- package/lib/browser/save-resource-service.d.ts.map +1 -1
- package/lib/browser/save-resource-service.js +6 -13
- package/lib/browser/save-resource-service.js.map +1 -1
- package/lib/browser/secondary-window-handler.js +12 -20
- package/lib/browser/secondary-window-handler.js.map +1 -1
- package/lib/browser/shell/additional-views-menu-widget.js +6 -14
- package/lib/browser/shell/additional-views-menu-widget.js.map +1 -1
- package/lib/browser/shell/application-shell-mouse-tracker.js +4 -12
- package/lib/browser/shell/application-shell-mouse-tracker.js.map +1 -1
- package/lib/browser/shell/application-shell.d.ts.map +1 -1
- package/lib/browser/shell/application-shell.js +40 -46
- package/lib/browser/shell/application-shell.js.map +1 -1
- package/lib/browser/shell/index.js +8 -17
- package/lib/browser/shell/index.js.map +1 -1
- package/lib/browser/shell/shell-layout-restorer.js +12 -23
- package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
- package/lib/browser/shell/side-panel-handler.js +22 -30
- package/lib/browser/shell/side-panel-handler.js.map +1 -1
- package/lib/browser/shell/sidebar-bottom-menu-widget.js +2 -7
- package/lib/browser/shell/sidebar-bottom-menu-widget.js.map +1 -1
- package/lib/browser/shell/sidebar-menu-widget.js +7 -15
- package/lib/browser/shell/sidebar-menu-widget.js.map +1 -1
- package/lib/browser/shell/sidebar-top-menu-widget.js +2 -7
- package/lib/browser/shell/sidebar-top-menu-widget.js.map +1 -1
- package/lib/browser/shell/split-panels.js +2 -7
- package/lib/browser/shell/split-panels.js.map +1 -1
- package/lib/browser/shell/tab-bar-decorator.d.ts +7 -2
- package/lib/browser/shell/tab-bar-decorator.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-decorator.js +39 -16
- package/lib/browser/shell/tab-bar-decorator.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/index.js +4 -13
- package/lib/browser/shell/tab-bar-toolbar/index.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +10 -18
- 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.js +23 -31
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
- package/lib/browser/shell/tab-bars.d.ts +4 -1
- package/lib/browser/shell/tab-bars.d.ts.map +1 -1
- package/lib/browser/shell/tab-bars.js +39 -4
- package/lib/browser/shell/tab-bars.js.map +1 -1
- package/lib/browser/shell/view-contribution.js +9 -17
- package/lib/browser/shell/view-contribution.js.map +1 -1
- package/lib/browser/source-tree/index.js +4 -13
- package/lib/browser/source-tree/index.js.map +1 -1
- package/lib/browser/source-tree/source-tree-widget.js +6 -14
- package/lib/browser/source-tree/source-tree-widget.js.map +1 -1
- package/lib/browser/source-tree/source-tree.js +2 -7
- package/lib/browser/source-tree/source-tree.js.map +1 -1
- package/lib/browser/source-tree/tree-source.js +4 -15
- package/lib/browser/source-tree/tree-source.js.map +1 -1
- package/lib/browser/status-bar/index.js +4 -13
- package/lib/browser/status-bar/index.js.map +1 -1
- package/lib/browser/status-bar/status-bar-view-model.js +2 -7
- package/lib/browser/status-bar/status-bar-view-model.js.map +1 -1
- package/lib/browser/status-bar/status-bar.js +9 -20
- package/lib/browser/status-bar/status-bar.js.map +1 -1
- package/lib/browser/storage-service.js +12 -20
- package/lib/browser/storage-service.js.map +1 -1
- package/lib/browser/styling-service.js +8 -16
- package/lib/browser/styling-service.js.map +1 -1
- package/lib/browser/test/mock-opener-service.js +2 -7
- package/lib/browser/test/mock-opener-service.js.map +1 -1
- package/lib/browser/test/mock-storage-service.js +2 -7
- package/lib/browser/test/mock-storage-service.js.map +1 -1
- package/lib/browser/theming.js +10 -18
- package/lib/browser/theming.js.map +1 -1
- package/lib/browser/tooltip-service.js +13 -24
- package/lib/browser/tooltip-service.js.map +1 -1
- package/lib/browser/tree/fuzzy-search.js +2 -7
- package/lib/browser/tree/fuzzy-search.js.map +1 -1
- package/lib/browser/tree/index.js +14 -23
- package/lib/browser/tree/index.js.map +1 -1
- package/lib/browser/tree/test/mock-selectable-tree-model.d.ts +15 -0
- package/lib/browser/tree/test/mock-selectable-tree-model.d.ts.map +1 -0
- package/lib/browser/tree/test/mock-selectable-tree-model.js +103 -0
- package/lib/browser/tree/test/mock-selectable-tree-model.js.map +1 -0
- package/lib/browser/tree/tree-compression/compressed-tree-expansion-service.js +6 -14
- package/lib/browser/tree/tree-compression/compressed-tree-expansion-service.js.map +1 -1
- package/lib/browser/tree/tree-compression/compressed-tree-model.js +6 -14
- package/lib/browser/tree/tree-compression/compressed-tree-model.js.map +1 -1
- package/lib/browser/tree/tree-compression/compressed-tree-widget.js +10 -21
- package/lib/browser/tree/tree-compression/compressed-tree-widget.js.map +1 -1
- package/lib/browser/tree/tree-compression/index.js +5 -14
- package/lib/browser/tree/tree-compression/index.js.map +1 -1
- package/lib/browser/tree/tree-compression/tree-compression-service.js +2 -7
- package/lib/browser/tree/tree-compression/tree-compression-service.js.map +1 -1
- package/lib/browser/tree/tree-consistency.spec.js +2 -7
- package/lib/browser/tree/tree-consistency.spec.js.map +1 -1
- package/lib/browser/tree/tree-decorator.js +4 -12
- package/lib/browser/tree/tree-decorator.js.map +1 -1
- package/lib/browser/tree/tree-expansion.js +8 -16
- package/lib/browser/tree/tree-expansion.js.map +1 -1
- package/lib/browser/tree/tree-focus-service.js +4 -12
- package/lib/browser/tree/tree-focus-service.js.map +1 -1
- package/lib/browser/tree/tree-label-provider.js +2 -7
- package/lib/browser/tree/tree-label-provider.js.map +1 -1
- package/lib/browser/tree/tree-model.d.ts +24 -0
- package/lib/browser/tree/tree-model.d.ts.map +1 -1
- package/lib/browser/tree/tree-model.js +66 -28
- package/lib/browser/tree/tree-model.js.map +1 -1
- package/lib/browser/tree/tree-navigation.js +2 -7
- package/lib/browser/tree/tree-navigation.js.map +1 -1
- package/lib/browser/tree/tree-search.js +12 -20
- package/lib/browser/tree/tree-search.js.map +1 -1
- package/lib/browser/tree/tree-selectable.spec.d.ts +2 -0
- package/lib/browser/tree/tree-selectable.spec.d.ts.map +1 -0
- package/lib/browser/tree/tree-selectable.spec.js +147 -0
- package/lib/browser/tree/tree-selectable.spec.js.map +1 -0
- package/lib/browser/tree/tree-selection-impl.js +10 -18
- package/lib/browser/tree/tree-selection-impl.js.map +1 -1
- package/lib/browser/tree/tree-view-welcome-widget.js +8 -16
- package/lib/browser/tree/tree-view-welcome-widget.js.map +1 -1
- package/lib/browser/tree/tree-widget.js +26 -37
- package/lib/browser/tree/tree-widget.js.map +1 -1
- package/lib/browser/tree/tree.js +3 -11
- package/lib/browser/tree/tree.js.map +1 -1
- package/lib/browser/user-working-directory-provider.js +6 -14
- package/lib/browser/user-working-directory-provider.js.map +1 -1
- package/lib/browser/view-container.js +31 -39
- package/lib/browser/view-container.js.map +1 -1
- package/lib/browser/widget-manager.js +6 -14
- package/lib/browser/widget-manager.js.map +1 -1
- package/lib/browser/widget-open-handler.js +10 -18
- package/lib/browser/widget-open-handler.js.map +1 -1
- package/lib/browser/widgets/index.js +5 -14
- package/lib/browser/widgets/index.js.map +1 -1
- package/lib/browser/widgets/react-renderer.js +5 -16
- package/lib/browser/widgets/react-renderer.js.map +1 -1
- package/lib/browser/widgets/react-widget.js +4 -15
- package/lib/browser/widgets/react-widget.js.map +1 -1
- package/lib/browser/widgets/widget.d.ts +2 -0
- package/lib/browser/widgets/widget.d.ts.map +1 -1
- package/lib/browser/widgets/widget.js +14 -24
- package/lib/browser/widgets/widget.js.map +1 -1
- package/lib/browser/window/default-secondary-window-service.js +10 -18
- package/lib/browser/window/default-secondary-window-service.js.map +1 -1
- package/lib/browser/window/default-window-service.js +6 -14
- package/lib/browser/window/default-window-service.js.map +1 -1
- package/lib/browser/window/test/mock-window-service.js +2 -7
- package/lib/browser/window/test/mock-window-service.js.map +1 -1
- package/lib/browser/window/window-title-service.js +8 -16
- package/lib/browser/window/window-title-service.js.map +1 -1
- package/lib/browser/window/window-title-updater.js +6 -14
- package/lib/browser/window/window-title-updater.js.map +1 -1
- package/lib/browser/window-contribution.js +4 -12
- package/lib/browser/window-contribution.js.map +1 -1
- package/lib/browser-only/messaging/frontend-only-service-connection-provider.js +3 -8
- package/lib/browser-only/messaging/frontend-only-service-connection-provider.js.map +1 -1
- package/lib/common/command.js +5 -16
- package/lib/common/command.js.map +1 -1
- package/lib/common/contribution-filter/contribution-filter-registry.js +5 -16
- package/lib/common/contribution-filter/contribution-filter-registry.js.map +1 -1
- package/lib/common/contribution-filter/index.js +4 -13
- package/lib/common/contribution-filter/index.js.map +1 -1
- package/lib/common/disposable.d.ts +28 -0
- package/lib/common/disposable.d.ts.map +1 -1
- package/lib/common/disposable.js +28 -0
- package/lib/common/disposable.js.map +1 -1
- package/lib/common/disposable.spec.js +51 -0
- package/lib/common/disposable.spec.js.map +1 -1
- package/lib/common/encoding-service.js +2 -7
- package/lib/common/encoding-service.js.map +1 -1
- package/lib/common/env-variables/index.js +2 -11
- package/lib/common/env-variables/index.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 +34 -42
- package/lib/common/index.js.map +1 -1
- package/lib/common/logger-protocol.js +2 -7
- package/lib/common/logger-protocol.js.map +1 -1
- package/lib/common/logger-watcher.js +2 -7
- package/lib/common/logger-watcher.js.map +1 -1
- package/lib/common/logger.js +14 -22
- package/lib/common/logger.js.map +1 -1
- package/lib/common/markdown-rendering/index.js +3 -12
- package/lib/common/markdown-rendering/index.js.map +1 -1
- package/lib/common/markdown-rendering/markdown-string.d.ts +5 -2
- package/lib/common/markdown-rendering/markdown-string.d.ts.map +1 -1
- package/lib/common/markdown-rendering/markdown-string.js.map +1 -1
- package/lib/common/menu/composite-menu-node.js +5 -5
- package/lib/common/menu/composite-menu-node.js.map +1 -1
- package/lib/common/menu/composite-menu-node.spec.d.ts +2 -0
- package/lib/common/menu/composite-menu-node.spec.d.ts.map +1 -0
- package/lib/common/menu/composite-menu-node.spec.js +68 -0
- package/lib/common/menu/composite-menu-node.spec.js.map +1 -0
- package/lib/common/menu/index.js +6 -15
- package/lib/common/menu/index.js.map +1 -1
- package/lib/common/menu/menu-adapter.js +7 -15
- package/lib/common/menu/menu-adapter.js.map +1 -1
- package/lib/common/menu/menu-model-registry.js +6 -17
- package/lib/common/menu/menu-model-registry.js.map +1 -1
- package/lib/common/message-service-protocol.js +2 -7
- package/lib/common/message-service-protocol.js.map +1 -1
- package/lib/common/message-service.js +4 -15
- package/lib/common/message-service.js.map +1 -1
- package/lib/common/messaging/index.js +4 -13
- package/lib/common/messaging/index.js.map +1 -1
- package/lib/common/performance/index.js +4 -13
- package/lib/common/performance/index.js.map +1 -1
- package/lib/common/performance/measurement-protocol.js +5 -13
- package/lib/common/performance/measurement-protocol.js.map +1 -1
- package/lib/common/performance/stopwatch.js +5 -13
- package/lib/common/performance/stopwatch.js.map +1 -1
- package/lib/common/progress-service.js +6 -14
- package/lib/common/progress-service.js.map +1 -1
- package/lib/common/promise-util.spec.js +31 -6
- package/lib/common/promise-util.spec.js.map +1 -1
- package/lib/common/quick-pick-service.d.ts +14 -25
- package/lib/common/quick-pick-service.d.ts.map +1 -1
- package/lib/common/quick-pick-service.js +1 -26
- package/lib/common/quick-pick-service.js.map +1 -1
- package/lib/common/reference.d.ts +55 -0
- package/lib/common/reference.d.ts.map +1 -1
- package/lib/common/reference.js +55 -0
- package/lib/common/reference.js.map +1 -1
- package/lib/common/resource.d.ts +3 -1
- package/lib/common/resource.d.ts.map +1 -1
- package/lib/common/resource.js +8 -19
- package/lib/common/resource.js.map +1 -1
- package/lib/common/selection-service.js +2 -7
- package/lib/common/selection-service.js.map +1 -1
- package/lib/common/test/mock-logger.js +2 -7
- package/lib/common/test/mock-logger.js.map +1 -1
- package/lib/common/test/mock-resource-provider.js +3 -11
- package/lib/common/test/mock-resource-provider.js.map +1 -1
- package/lib/common/theme.d.ts +25 -0
- package/lib/common/theme.d.ts.map +1 -1
- package/lib/common/theme.js.map +1 -1
- package/lib/common/uri.d.ts +1 -0
- package/lib/common/uri.d.ts.map +1 -1
- package/lib/common/uri.js +1 -1
- package/lib/common/uri.js.map +1 -1
- package/lib/common/uuid.d.ts +1 -1
- package/lib/common/uuid.d.ts.map +1 -1
- package/lib/common/uuid.js +4 -57
- package/lib/common/uuid.js.map +1 -1
- package/lib/electron-browser/electron-clipboard-service.js +2 -7
- package/lib/electron-browser/electron-clipboard-service.js.map +1 -1
- package/lib/electron-browser/keyboard/electron-keyboard-layout-change-notifier.js +6 -14
- package/lib/electron-browser/keyboard/electron-keyboard-layout-change-notifier.js.map +1 -1
- package/lib/electron-browser/menu/electron-context-menu-renderer.js +15 -26
- package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.js +8 -16
- package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
- package/lib/electron-browser/menu/electron-menu-contribution.d.ts +2 -1
- package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-menu-contribution.js +33 -35
- package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
- package/lib/electron-browser/messaging/electron-frontend-id-provider.js +2 -7
- package/lib/electron-browser/messaging/electron-frontend-id-provider.js.map +1 -1
- package/lib/electron-browser/messaging/electron-ipc-connection-source.js +2 -7
- package/lib/electron-browser/messaging/electron-ipc-connection-source.js.map +1 -1
- package/lib/electron-browser/messaging/electron-local-ws-connection-source.js +2 -7
- package/lib/electron-browser/messaging/electron-local-ws-connection-source.js.map +1 -1
- package/lib/electron-browser/messaging/electron-messaging-frontend-module.js +3 -3
- package/lib/electron-browser/messaging/electron-messaging-frontend-module.js.map +1 -1
- package/lib/electron-browser/messaging/electron-ws-connection-source.js +3 -11
- package/lib/electron-browser/messaging/electron-ws-connection-source.js.map +1 -1
- package/lib/electron-browser/window/electron-frontend-application-state.js +2 -7
- package/lib/electron-browser/window/electron-frontend-application-state.js.map +1 -1
- package/lib/electron-browser/window/electron-secondary-window-service.js +2 -7
- package/lib/electron-browser/window/electron-secondary-window-service.js.map +1 -1
- package/lib/electron-browser/window/electron-window-service.js +14 -22
- package/lib/electron-browser/window/electron-window-service.js.map +1 -1
- package/lib/electron-main/electron-api-main.js +4 -12
- package/lib/electron-main/electron-api-main.js.map +1 -1
- package/lib/electron-main/electron-main-application-module.js +2 -2
- package/lib/electron-main/electron-main-application-module.js.map +1 -1
- package/lib/electron-main/electron-main-application.js +15 -23
- package/lib/electron-main/electron-main-application.js.map +1 -1
- package/lib/electron-main/electron-main-window-service-impl.js +4 -12
- package/lib/electron-main/electron-main-window-service-impl.js.map +1 -1
- package/lib/electron-main/electron-security-token-service.js +4 -12
- package/lib/electron-main/electron-security-token-service.js.map +1 -1
- package/lib/electron-main/messaging/electron-messaging-contribution.js +10 -18
- package/lib/electron-main/messaging/electron-messaging-contribution.js.map +1 -1
- package/lib/electron-main/theia-electron-window.js +12 -20
- package/lib/electron-main/theia-electron-window.js.map +1 -1
- package/lib/electron-node/hosting/electron-ws-origin-validator.js +4 -12
- package/lib/electron-node/hosting/electron-ws-origin-validator.js.map +1 -1
- package/lib/electron-node/keyboard/electron-keyboard-layout-provider.js +2 -7
- package/lib/electron-node/keyboard/electron-keyboard-layout-provider.js.map +1 -1
- package/lib/electron-node/request/electron-backend-request-service.js +2 -7
- package/lib/electron-node/request/electron-backend-request-service.js.map +1 -1
- package/lib/electron-node/token/electron-token-backend-contribution.js +4 -12
- package/lib/electron-node/token/electron-token-backend-contribution.js.map +1 -1
- package/lib/electron-node/token/electron-token-validator.js +6 -14
- package/lib/electron-node/token/electron-token-validator.js.map +1 -1
- package/lib/node/application-server.js +4 -12
- package/lib/node/application-server.js.map +1 -1
- package/lib/node/backend-application.js +17 -28
- package/lib/node/backend-application.js.map +1 -1
- package/lib/node/backend-remote-service.js +2 -7
- package/lib/node/backend-remote-service.js.map +1 -1
- package/lib/node/cli.js +5 -16
- package/lib/node/cli.js.map +1 -1
- package/lib/node/console-logger-server.js +10 -18
- package/lib/node/console-logger-server.js.map +1 -1
- package/lib/node/console-logger-server.spec.js +6 -14
- package/lib/node/console-logger-server.spec.js.map +1 -1
- package/lib/node/env-variables/env-variables-server.js +3 -11
- package/lib/node/env-variables/env-variables-server.js.map +1 -1
- package/lib/node/env-variables/index.js +2 -11
- package/lib/node/env-variables/index.js.map +1 -1
- package/lib/node/environment-utils.js +2 -7
- package/lib/node/environment-utils.js.map +1 -1
- package/lib/node/filesystem-locking.js +2 -7
- package/lib/node/filesystem-locking.js.map +1 -1
- package/lib/node/hosting/backend-application-hosts.js +6 -14
- package/lib/node/hosting/backend-application-hosts.js.map +1 -1
- package/lib/node/hosting/ws-origin-validator.js +4 -12
- package/lib/node/hosting/ws-origin-validator.js.map +1 -1
- package/lib/node/i18n/localization-contribution.js +6 -14
- package/lib/node/i18n/localization-contribution.js.map +1 -1
- package/lib/node/i18n/localization-provider.js +2 -7
- package/lib/node/i18n/localization-provider.js.map +1 -1
- package/lib/node/i18n/localization-server.js +6 -14
- package/lib/node/i18n/localization-server.js.map +1 -1
- package/lib/node/i18n/theia-localization-contribution.js +2 -7
- package/lib/node/i18n/theia-localization-contribution.js.map +1 -1
- package/lib/node/index.js +6 -15
- package/lib/node/index.js.map +1 -1
- package/lib/node/key-store-server.js +2 -7
- package/lib/node/key-store-server.js.map +1 -1
- package/lib/node/logger-cli-contribution.js +2 -7
- package/lib/node/logger-cli-contribution.js.map +1 -1
- package/lib/node/messaging/default-messaging-service.js +10 -18
- package/lib/node/messaging/default-messaging-service.js.map +1 -1
- package/lib/node/messaging/index.js +4 -13
- package/lib/node/messaging/index.js.map +1 -1
- package/lib/node/messaging/ipc-connection-provider.js +4 -12
- package/lib/node/messaging/ipc-connection-provider.js.map +1 -1
- package/lib/node/messaging/messaging-listeners.js +4 -12
- package/lib/node/messaging/messaging-listeners.js.map +1 -1
- package/lib/node/messaging/test/test-web-socket-channel.js +3 -11
- package/lib/node/messaging/test/test-web-socket-channel.js.map +1 -1
- package/lib/node/messaging/websocket-endpoint.js +6 -14
- package/lib/node/messaging/websocket-endpoint.js.map +1 -1
- package/lib/node/messaging/websocket-frontend-connection-service.js +4 -12
- package/lib/node/messaging/websocket-frontend-connection-service.js.map +1 -1
- package/lib/node/os-backend-provider.js +2 -7
- package/lib/node/os-backend-provider.js.map +1 -1
- package/lib/node/performance/index.js +3 -12
- package/lib/node/performance/index.js.map +1 -1
- package/lib/node/performance/node-stopwatch.js +3 -11
- package/lib/node/performance/node-stopwatch.js.map +1 -1
- package/lib/node/process-utils.js +2 -7
- package/lib/node/process-utils.js.map +1 -1
- package/lib/node/request/backend-request-facade.js +4 -12
- package/lib/node/request/backend-request-facade.js.map +1 -1
- package/lib/node/request/proxy-cli-contribution.js +4 -12
- package/lib/node/request/proxy-cli-contribution.js.map +1 -1
- package/lib/node/ws-request-validators.js +4 -12
- package/lib/node/ws-request-validators.js.map +1 -1
- package/package.json +10 -8
- package/src/browser/context-key-service.ts +1 -2
- package/src/browser/context-menu-renderer.ts +0 -4
- package/src/browser/core-preferences.ts +6 -0
- package/src/browser/frontend-application-module.ts +3 -1
- package/src/browser/icon-registry.ts +1 -10
- package/src/browser/markdown-rendering/markdown-renderer.ts +1 -1
- package/src/browser/save-resource-service.ts +5 -4
- package/src/browser/shell/application-shell.ts +8 -3
- package/src/browser/shell/tab-bar-decorator.ts +36 -6
- package/src/browser/shell/tab-bars.ts +41 -5
- package/src/browser/style/index.css +153 -148
- package/src/browser/style/tabs.css +6 -0
- package/src/browser/tooltip-service.tsx +2 -2
- package/src/browser/tree/test/mock-selectable-tree-model.ts +109 -0
- package/src/browser/tree/tree-model.ts +74 -0
- package/src/browser/tree/tree-selectable.spec.ts +152 -0
- package/src/browser/widgets/widget.ts +8 -0
- package/src/common/disposable.spec.ts +66 -1
- package/src/common/disposable.ts +28 -0
- package/src/common/index.ts +1 -0
- package/src/common/markdown-rendering/markdown-string.ts +6 -3
- package/src/common/menu/composite-menu-node.spec.ts +67 -0
- package/src/common/menu/composite-menu-node.ts +5 -5
- package/src/common/promise-util.spec.ts +48 -18
- package/src/common/quick-pick-service.ts +11 -33
- package/src/common/reference.ts +55 -0
- package/src/common/resource.ts +5 -1
- package/src/common/theme.ts +32 -0
- package/src/common/uri.ts +4 -2
- package/src/common/uuid.ts +4 -71
- package/src/electron-browser/menu/electron-menu-contribution.ts +9 -1
- package/src/electron-browser/messaging/electron-messaging-frontend-module.ts +1 -1
- package/src/electron-main/electron-main-application-module.ts +2 -2
|
@@ -99,21 +99,41 @@ export interface TreeModel extends Tree, TreeSelectionService, TreeExpansionServ
|
|
|
99
99
|
*/
|
|
100
100
|
navigateBackward(): Promise<void>;
|
|
101
101
|
|
|
102
|
+
/**
|
|
103
|
+
* Selects the previous tree node, regardless of its selection or visibility state.
|
|
104
|
+
*/
|
|
105
|
+
selectPrev(): void;
|
|
106
|
+
|
|
102
107
|
/**
|
|
103
108
|
* Selects the previous node relatively to the currently selected one. This method takes the expansion state of the tree into consideration.
|
|
104
109
|
*/
|
|
105
110
|
selectPrevNode(type?: TreeSelection.SelectionType): void;
|
|
106
111
|
|
|
112
|
+
/**
|
|
113
|
+
* Returns the previous tree node, regardless of its selection or visibility state.
|
|
114
|
+
*/
|
|
115
|
+
getPrevNode(node?: TreeNode): TreeNode | undefined;
|
|
116
|
+
|
|
107
117
|
/**
|
|
108
118
|
* Returns the previous selectable tree node.
|
|
109
119
|
*/
|
|
110
120
|
getPrevSelectableNode(node?: TreeNode): SelectableTreeNode | undefined;
|
|
111
121
|
|
|
122
|
+
/**
|
|
123
|
+
* Selects the next tree node, regardless of its selection or visibility state.
|
|
124
|
+
*/
|
|
125
|
+
selectNext(): void;
|
|
126
|
+
|
|
112
127
|
/**
|
|
113
128
|
* Selects the next node relatively to the currently selected one. This method takes the expansion state of the tree into consideration.
|
|
114
129
|
*/
|
|
115
130
|
selectNextNode(type?: TreeSelection.SelectionType): void;
|
|
116
131
|
|
|
132
|
+
/**
|
|
133
|
+
* Returns the next tree node, regardless of its selection or visibility state.
|
|
134
|
+
*/
|
|
135
|
+
getNextNode(node?: TreeNode): TreeNode | undefined;
|
|
136
|
+
|
|
117
137
|
/**
|
|
118
138
|
* Returns the next selectable tree node.
|
|
119
139
|
*/
|
|
@@ -294,6 +314,11 @@ export class TreeModelImpl implements TreeModel, SelectionProvider<ReadonlyArray
|
|
|
294
314
|
}
|
|
295
315
|
}
|
|
296
316
|
|
|
317
|
+
selectPrev(): void {
|
|
318
|
+
const node = this.getPrevNode();
|
|
319
|
+
this.selectNodeIfSelectable(node);
|
|
320
|
+
}
|
|
321
|
+
|
|
297
322
|
selectPrevNode(type: TreeSelection.SelectionType = TreeSelection.SelectionType.DEFAULT): void {
|
|
298
323
|
const node = this.getPrevSelectableNode();
|
|
299
324
|
if (node) {
|
|
@@ -301,6 +326,11 @@ export class TreeModelImpl implements TreeModel, SelectionProvider<ReadonlyArray
|
|
|
301
326
|
}
|
|
302
327
|
}
|
|
303
328
|
|
|
329
|
+
getPrevNode(node: TreeNode | undefined = this.getFocusedNode()): TreeNode | undefined {
|
|
330
|
+
const iterator = this.createBackwardTreeIterator(node);
|
|
331
|
+
return iterator && this.doGetNode(iterator);
|
|
332
|
+
}
|
|
333
|
+
|
|
304
334
|
getPrevSelectableNode(node: TreeNode | undefined = this.getFocusedNode()): SelectableTreeNode | undefined {
|
|
305
335
|
if (!node) {
|
|
306
336
|
return this.getNextSelectableNode(this.root);
|
|
@@ -309,6 +339,11 @@ export class TreeModelImpl implements TreeModel, SelectionProvider<ReadonlyArray
|
|
|
309
339
|
return iterator && this.doGetNextNode(iterator, this.isVisibleSelectableNode.bind(this));
|
|
310
340
|
}
|
|
311
341
|
|
|
342
|
+
selectNext(): void {
|
|
343
|
+
const node = this.getNextNode();
|
|
344
|
+
this.selectNodeIfSelectable(node);
|
|
345
|
+
}
|
|
346
|
+
|
|
312
347
|
selectNextNode(type: TreeSelection.SelectionType = TreeSelection.SelectionType.DEFAULT): void {
|
|
313
348
|
const node = this.getNextSelectableNode();
|
|
314
349
|
if (node) {
|
|
@@ -316,11 +351,28 @@ export class TreeModelImpl implements TreeModel, SelectionProvider<ReadonlyArray
|
|
|
316
351
|
}
|
|
317
352
|
}
|
|
318
353
|
|
|
354
|
+
getNextNode(node: TreeNode | undefined = this.getFocusedNode()): TreeNode | undefined {
|
|
355
|
+
const iterator = this.createTreeIterator(node);
|
|
356
|
+
return iterator && this.doGetNode(iterator);
|
|
357
|
+
}
|
|
358
|
+
|
|
319
359
|
getNextSelectableNode(node: TreeNode | undefined = this.getFocusedNode() ?? this.root): SelectableTreeNode | undefined {
|
|
320
360
|
const iterator = this.createIterator(node);
|
|
321
361
|
return iterator && this.doGetNextNode(iterator, this.isVisibleSelectableNode.bind(this));
|
|
322
362
|
}
|
|
323
363
|
|
|
364
|
+
protected selectNodeIfSelectable(node: TreeNode | undefined): void {
|
|
365
|
+
if (SelectableTreeNode.is(node)) {
|
|
366
|
+
this.addSelection(node);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
protected doGetNode(iterator: TreeIterator): TreeNode | undefined {
|
|
371
|
+
iterator.next();
|
|
372
|
+
const result = iterator.next();
|
|
373
|
+
return result.done ? undefined : result.value;
|
|
374
|
+
}
|
|
375
|
+
|
|
324
376
|
protected doGetNextNode<T extends TreeNode>(iterator: TreeIterator, criterion: (node: TreeNode) => node is T): T | undefined {
|
|
325
377
|
// Skip the first item. // TODO: clean this up, and skip the first item in a different way without loading everything.
|
|
326
378
|
iterator.next();
|
|
@@ -338,6 +390,17 @@ export class TreeModelImpl implements TreeModel, SelectionProvider<ReadonlyArray
|
|
|
338
390
|
return SelectableTreeNode.isVisible(node);
|
|
339
391
|
}
|
|
340
392
|
|
|
393
|
+
protected createBackwardTreeIterator(node: TreeNode | undefined): TreeIterator | undefined {
|
|
394
|
+
const { filteredNodes } = this.treeSearch;
|
|
395
|
+
if (filteredNodes.length === 0) {
|
|
396
|
+
return node ? new BottomUpTreeIterator(node!, { pruneCollapsed: false }) : undefined;
|
|
397
|
+
}
|
|
398
|
+
if (node && filteredNodes.indexOf(node) === -1) {
|
|
399
|
+
return undefined;
|
|
400
|
+
}
|
|
401
|
+
return Iterators.cycle(filteredNodes.slice().reverse(), node);
|
|
402
|
+
}
|
|
403
|
+
|
|
341
404
|
protected createBackwardIterator(node: TreeNode | undefined): TreeIterator | undefined {
|
|
342
405
|
const { filteredNodes } = this.treeSearch;
|
|
343
406
|
if (filteredNodes.length === 0) {
|
|
@@ -349,6 +412,17 @@ export class TreeModelImpl implements TreeModel, SelectionProvider<ReadonlyArray
|
|
|
349
412
|
return Iterators.cycle(filteredNodes.slice().reverse(), node);
|
|
350
413
|
}
|
|
351
414
|
|
|
415
|
+
protected createTreeIterator(node: TreeNode | undefined): TreeIterator | undefined {
|
|
416
|
+
const { filteredNodes } = this.treeSearch;
|
|
417
|
+
if (filteredNodes.length === 0) {
|
|
418
|
+
return node && new TopDownTreeIterator(node, { pruneCollapsed: false });
|
|
419
|
+
}
|
|
420
|
+
if (node && filteredNodes.indexOf(node) === -1) {
|
|
421
|
+
return undefined;
|
|
422
|
+
}
|
|
423
|
+
return Iterators.cycle(filteredNodes, node);
|
|
424
|
+
}
|
|
425
|
+
|
|
352
426
|
protected createIterator(node: TreeNode | undefined): TreeIterator | undefined {
|
|
353
427
|
const { filteredNodes } = this.treeSearch;
|
|
354
428
|
if (filteredNodes.length === 0) {
|
|
@@ -0,0 +1,152 @@
|
|
|
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
|
+
import { TreeNode } from './tree';
|
|
18
|
+
import { TreeModel } from './tree-model';
|
|
19
|
+
import { notEmpty } from '../../common/objects';
|
|
20
|
+
import { expect } from 'chai';
|
|
21
|
+
import { createTreeTestContainer } from './test/tree-test-container';
|
|
22
|
+
import { SelectableTreeNode } from './tree-selection';
|
|
23
|
+
import { MockSelectableTreeModel } from './test/mock-selectable-tree-model';
|
|
24
|
+
import { ExpandableTreeNode } from './tree-expansion';
|
|
25
|
+
|
|
26
|
+
describe('Selectable Tree', () => {
|
|
27
|
+
let model: TreeModel;
|
|
28
|
+
function assertNodeRetrieval(method: () => TreeNode | undefined, sequence: string[]): void {
|
|
29
|
+
for (const expectedNodeId of sequence) {
|
|
30
|
+
const actualNode = method();
|
|
31
|
+
const expectedNode = retrieveNode<SelectableTreeNode>(expectedNodeId);
|
|
32
|
+
expect(actualNode?.id).to.be.equal(expectedNode.id);
|
|
33
|
+
model.addSelection(expectedNode);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function assertNodeSelection(method: () => void, sequence: string[]): void {
|
|
37
|
+
for (const expectedNodeId of sequence) {
|
|
38
|
+
method();
|
|
39
|
+
const node = retrieveNode<SelectableTreeNode>(expectedNodeId);
|
|
40
|
+
expect(node.selected).to.be.true;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
describe('Get and Set Next Nodes Methods', () => {
|
|
44
|
+
const uncollapsedSelectionOrder = ['1.1', '1.1.1', '1.1.2', '1.2', '1.2.1', '1.2.1.1', '1.2.1.2', '1.2.2', '1.2.3', '1.3'];
|
|
45
|
+
const collapsedSelectionOrder = ['1.1', '1.2', '1.2.1', '1.2.2', '1.2.3', '1.3'];
|
|
46
|
+
beforeEach(() => {
|
|
47
|
+
model = createTreeModel();
|
|
48
|
+
model.root = MockSelectableTreeModel.HIERARCHICAL_MOCK_ROOT();
|
|
49
|
+
model.addSelection(retrieveNode<SelectableTreeNode>('1'));
|
|
50
|
+
|
|
51
|
+
});
|
|
52
|
+
it('`getNextNode()` should select each node in sequence (uncollapsed)', done => {
|
|
53
|
+
assertNodeRetrieval(model.getNextNode.bind(model), uncollapsedSelectionOrder);
|
|
54
|
+
done();
|
|
55
|
+
});
|
|
56
|
+
it('`getNextNode()` should select each node in sequence (collapsed)', done => {
|
|
57
|
+
collapseNode('1.1', '1.2.1');
|
|
58
|
+
assertNodeRetrieval(model.getNextNode.bind(model), uncollapsedSelectionOrder);
|
|
59
|
+
done();
|
|
60
|
+
});
|
|
61
|
+
it('`getNextSelectableNode()` should select each node in sequence (uncollapsed)', done => {
|
|
62
|
+
assertNodeRetrieval(model.getNextSelectableNode.bind(model), uncollapsedSelectionOrder);
|
|
63
|
+
done();
|
|
64
|
+
});
|
|
65
|
+
it('`getNextSelectableNode()` should select each node in sequence (collapsed)', done => {
|
|
66
|
+
collapseNode('1.1', '1.2.1');
|
|
67
|
+
assertNodeRetrieval(model.getNextSelectableNode.bind(model), collapsedSelectionOrder);
|
|
68
|
+
done();
|
|
69
|
+
});
|
|
70
|
+
it('`selectNext()` should select each node in sequence (uncollapsed)', done => {
|
|
71
|
+
assertNodeSelection(model.selectNext.bind(model), uncollapsedSelectionOrder);
|
|
72
|
+
done();
|
|
73
|
+
});
|
|
74
|
+
it('`selectNext()` should select each node in sequence (collapsed)', done => {
|
|
75
|
+
collapseNode('1.1', '1.2.1');
|
|
76
|
+
assertNodeSelection(model.selectNext.bind(model), uncollapsedSelectionOrder);
|
|
77
|
+
done();
|
|
78
|
+
});
|
|
79
|
+
it('`selectNextNode()` should select each node in sequence (uncollapsed)', done => {
|
|
80
|
+
assertNodeSelection(model.selectNextNode.bind(model), uncollapsedSelectionOrder);
|
|
81
|
+
done();
|
|
82
|
+
});
|
|
83
|
+
it('`selectNextNode()` should select each node in sequence (collapsed)', done => {
|
|
84
|
+
collapseNode('1.1', '1.2.1');
|
|
85
|
+
assertNodeSelection(model.selectNextNode.bind(model), collapsedSelectionOrder);
|
|
86
|
+
done();
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
describe('Get and Set Previous Nodes Methods', () => {
|
|
91
|
+
const uncollapsedSelectionOrder = ['1.2.3', '1.2.2', '1.2.1.2', '1.2.1.1', '1.2.1', '1.2', '1.1.2', '1.1.1', '1.1'];
|
|
92
|
+
const collapsedSelectionOrder = ['1.2.3', '1.2.2', '1.2.1', '1.2', '1.1'];
|
|
93
|
+
beforeEach(() => {
|
|
94
|
+
model = createTreeModel();
|
|
95
|
+
model.root = MockSelectableTreeModel.HIERARCHICAL_MOCK_ROOT();
|
|
96
|
+
model.addSelection(retrieveNode<SelectableTreeNode>('1.3'));
|
|
97
|
+
});
|
|
98
|
+
it('`getPrevNode()` should select each node in reverse sequence (uncollapsed)', done => {
|
|
99
|
+
assertNodeRetrieval(model.getPrevNode.bind(model), uncollapsedSelectionOrder);
|
|
100
|
+
done();
|
|
101
|
+
});
|
|
102
|
+
it('`getPrevNode()` should select each node in reverse sequence (collapsed)', done => {
|
|
103
|
+
collapseNode('1.1', '1.2.1');
|
|
104
|
+
assertNodeRetrieval(model.getPrevNode.bind(model), uncollapsedSelectionOrder);
|
|
105
|
+
done();
|
|
106
|
+
});
|
|
107
|
+
it('`getPrevSelectableNode()` should select each node in reverse sequence (uncollapsed)', done => {
|
|
108
|
+
assertNodeRetrieval(model.getPrevSelectableNode.bind(model), uncollapsedSelectionOrder);
|
|
109
|
+
done();
|
|
110
|
+
});
|
|
111
|
+
it('`getPrevSelectableNode()` should select each node in reverse sequence (collapsed)', done => {
|
|
112
|
+
collapseNode('1.1', '1.2.1');
|
|
113
|
+
assertNodeRetrieval(model.getPrevSelectableNode.bind(model), collapsedSelectionOrder);
|
|
114
|
+
done();
|
|
115
|
+
});
|
|
116
|
+
it('`selectPrev()` should select each node in reverse sequence (uncollapsed)', done => {
|
|
117
|
+
assertNodeSelection(model.selectPrev.bind(model), uncollapsedSelectionOrder);
|
|
118
|
+
done();
|
|
119
|
+
});
|
|
120
|
+
it('`selectPrev()` should select each node in reverse sequence (collapsed)', done => {
|
|
121
|
+
collapseNode('1.1', '1.2.1');
|
|
122
|
+
assertNodeSelection(model.selectPrev.bind(model), uncollapsedSelectionOrder);
|
|
123
|
+
done();
|
|
124
|
+
});
|
|
125
|
+
it('`selectPrevNode()` should select each node in reverse sequence (uncollapsed)', done => {
|
|
126
|
+
assertNodeSelection(model.selectPrevNode.bind(model), uncollapsedSelectionOrder);
|
|
127
|
+
done();
|
|
128
|
+
});
|
|
129
|
+
it('`selectPrevNode()` should select each node in reverse sequence (collapsed)', done => {
|
|
130
|
+
collapseNode('1.1', '1.2.1');
|
|
131
|
+
assertNodeSelection(model.selectPrevNode.bind(model), collapsedSelectionOrder);
|
|
132
|
+
done();
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
const findNode = (id: string) => model.getNode(id);
|
|
137
|
+
function createTreeModel(): TreeModel {
|
|
138
|
+
const container = createTreeTestContainer();
|
|
139
|
+
return container.get(TreeModel);
|
|
140
|
+
}
|
|
141
|
+
function retrieveNode<T extends TreeNode>(id: string): Readonly<T> {
|
|
142
|
+
const readonlyNode: Readonly<T> = model.getNode(id) as T;
|
|
143
|
+
return readonlyNode;
|
|
144
|
+
}
|
|
145
|
+
function collapseNode(...ids: string[]): void {
|
|
146
|
+
ids.map(findNode).filter(notEmpty).filter(ExpandableTreeNode.is).forEach(node => {
|
|
147
|
+
model.collapseNode(node);
|
|
148
|
+
expect(node).to.have.property('expanded', false);
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
});
|
|
@@ -381,12 +381,20 @@ export function pin(title: Title<Widget>): void {
|
|
|
381
381
|
}
|
|
382
382
|
}
|
|
383
383
|
|
|
384
|
+
export function isLocked(title: Title<Widget>): boolean {
|
|
385
|
+
return title.className.includes(LOCKED_CLASS);
|
|
386
|
+
}
|
|
387
|
+
|
|
384
388
|
export function lock(title: Title<Widget>): void {
|
|
385
389
|
if (!title.className.includes(LOCKED_CLASS)) {
|
|
386
390
|
title.className += ` ${LOCKED_CLASS}`;
|
|
387
391
|
}
|
|
388
392
|
}
|
|
389
393
|
|
|
394
|
+
export function unlock(title: Title<Widget>): void {
|
|
395
|
+
title.className = title.className.replace(LOCKED_CLASS, '').trim();
|
|
396
|
+
}
|
|
397
|
+
|
|
390
398
|
export function togglePinned(title?: Title<Widget>): void {
|
|
391
399
|
if (title) {
|
|
392
400
|
if (isPinned(title)) {
|
|
@@ -14,8 +14,11 @@
|
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
|
-
import { expect } from 'chai';
|
|
17
|
+
import { expect, spy, use } from 'chai';
|
|
18
18
|
import { DisposableCollection, Disposable } from './disposable';
|
|
19
|
+
import * as spies from 'chai-spies';
|
|
20
|
+
|
|
21
|
+
use(spies);
|
|
19
22
|
|
|
20
23
|
describe('Disposables', () => {
|
|
21
24
|
it('Is safe to use Disposable.NULL', () => {
|
|
@@ -26,4 +29,66 @@ describe('Disposables', () => {
|
|
|
26
29
|
expect(collectionA.disposed, 'A should be disposed after being disposed.').to.be.true;
|
|
27
30
|
expect(collectionB.disposed, 'B should not be disposed because A was disposed.').to.be.false;
|
|
28
31
|
});
|
|
32
|
+
|
|
33
|
+
it('Collection is auto-pruned when an element is disposed', () => {
|
|
34
|
+
const onDispose = spy(() => { });
|
|
35
|
+
const elementDispose = () => { };
|
|
36
|
+
|
|
37
|
+
const collection = new DisposableCollection();
|
|
38
|
+
collection.onDispose(onDispose);
|
|
39
|
+
|
|
40
|
+
const disposable1 = Disposable.create(elementDispose);
|
|
41
|
+
collection.push(disposable1);
|
|
42
|
+
expect(collection['disposables']).to.have.lengthOf(1);
|
|
43
|
+
|
|
44
|
+
const disposable2 = Disposable.create(elementDispose);
|
|
45
|
+
collection.push(disposable2);
|
|
46
|
+
expect(collection['disposables']).to.have.lengthOf(2);
|
|
47
|
+
|
|
48
|
+
disposable1.dispose();
|
|
49
|
+
expect(collection['disposables']).to.have.lengthOf(1);
|
|
50
|
+
expect(onDispose).to.have.not.been.called();
|
|
51
|
+
expect(collection.disposed).is.false;
|
|
52
|
+
|
|
53
|
+
// Test that calling dispose on an already disposed element doesn't
|
|
54
|
+
// alter the collection state
|
|
55
|
+
disposable1.dispose();
|
|
56
|
+
expect(collection['disposables']).to.have.lengthOf(1);
|
|
57
|
+
expect(onDispose).to.have.not.been.called();
|
|
58
|
+
expect(collection.disposed).is.false;
|
|
59
|
+
|
|
60
|
+
disposable2.dispose();
|
|
61
|
+
expect(collection['disposables']).to.be.empty;
|
|
62
|
+
expect(collection.disposed).is.true;
|
|
63
|
+
expect(onDispose).to.have.been.called.once;
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('onDispose is only called once on actual disposal of elements', () => {
|
|
67
|
+
const onDispose = spy(() => { });
|
|
68
|
+
const elementDispose = spy(() => { });
|
|
69
|
+
|
|
70
|
+
const collection = new DisposableCollection();
|
|
71
|
+
collection.onDispose(onDispose);
|
|
72
|
+
|
|
73
|
+
// if the collection is empty 'onDispose' is not called
|
|
74
|
+
collection.dispose();
|
|
75
|
+
expect(onDispose).to.not.have.been.called();
|
|
76
|
+
|
|
77
|
+
// 'onDispose' is called because we actually dispose an element
|
|
78
|
+
collection.push(Disposable.create(elementDispose));
|
|
79
|
+
collection.dispose();
|
|
80
|
+
expect(elementDispose).to.have.been.called.once;
|
|
81
|
+
expect(onDispose).to.have.been.called.once;
|
|
82
|
+
|
|
83
|
+
// if the collection is empty 'onDispose' is not called and no further element is disposed
|
|
84
|
+
collection.dispose();
|
|
85
|
+
expect(elementDispose).to.have.been.called.once;
|
|
86
|
+
expect(onDispose).to.have.been.called.once;
|
|
87
|
+
|
|
88
|
+
// 'onDispose' is not called again even if we actually dispose an element
|
|
89
|
+
collection.push(Disposable.create(elementDispose));
|
|
90
|
+
collection.dispose();
|
|
91
|
+
expect(elementDispose).to.have.been.called.twice;
|
|
92
|
+
expect(onDispose).to.have.been.called.once;
|
|
93
|
+
});
|
|
29
94
|
});
|
package/src/common/disposable.ts
CHANGED
|
@@ -47,6 +47,34 @@ Object.defineProperty(Disposable, 'NULL', {
|
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Utility for tracking a collection of Disposable objects.
|
|
52
|
+
*
|
|
53
|
+
* This utility provides a number of benefits over just using an array of
|
|
54
|
+
* Disposables:
|
|
55
|
+
*
|
|
56
|
+
* - the collection is auto-pruned when an element it contains is disposed by
|
|
57
|
+
* any code that has a reference to it
|
|
58
|
+
* - you can register to be notified when all elements in the collection have
|
|
59
|
+
* been disposed [1]
|
|
60
|
+
* - you can conveniently dispose all elements by calling dispose()
|
|
61
|
+
* on the collection
|
|
62
|
+
*
|
|
63
|
+
* Unlike an array, however, this utility does not give you direct access to
|
|
64
|
+
* its elements.
|
|
65
|
+
*
|
|
66
|
+
* Being notified when all elements are disposed is simple:
|
|
67
|
+
* ```
|
|
68
|
+
* const dc = new DisposableCollection(myDisposables);
|
|
69
|
+
* dc.onDispose(() => {
|
|
70
|
+
* console.log('All elements in the collection have been disposed');
|
|
71
|
+
* });
|
|
72
|
+
* ```
|
|
73
|
+
*
|
|
74
|
+
* [1] The collection will notify only once. It will continue to function in so
|
|
75
|
+
* far as accepting new Disposables and pruning them when they are disposed, but
|
|
76
|
+
* such activity will never result in another notification.
|
|
77
|
+
*/
|
|
50
78
|
export class DisposableCollection implements Disposable {
|
|
51
79
|
|
|
52
80
|
protected readonly disposables: Disposable[] = [];
|
package/src/common/index.ts
CHANGED
|
@@ -19,9 +19,13 @@ import { UriComponents } from '../uri';
|
|
|
19
19
|
import { escapeIcons } from './icon-utilities';
|
|
20
20
|
import { isObject, isString } from '../types';
|
|
21
21
|
|
|
22
|
+
export interface MarkdownStringTrustedOptions {
|
|
23
|
+
readonly enabledCommands: readonly string[];
|
|
24
|
+
}
|
|
25
|
+
|
|
22
26
|
export interface MarkdownString {
|
|
23
27
|
readonly value: string;
|
|
24
|
-
readonly isTrusted?: boolean;
|
|
28
|
+
readonly isTrusted?: boolean | MarkdownStringTrustedOptions;
|
|
25
29
|
readonly supportThemeIcons?: boolean;
|
|
26
30
|
readonly supportHtml?: boolean;
|
|
27
31
|
readonly baseUri?: UriComponents;
|
|
@@ -45,9 +49,8 @@ export namespace MarkdownString {
|
|
|
45
49
|
// Copied from https://github.com/microsoft/vscode/blob/7d9b1c37f8e5ae3772782ba3b09d827eb3fdd833/src/vs/base/common/htmlContent.ts
|
|
46
50
|
|
|
47
51
|
export class MarkdownStringImpl implements MarkdownString {
|
|
48
|
-
|
|
49
52
|
public value: string;
|
|
50
|
-
public isTrusted?: boolean;
|
|
53
|
+
public isTrusted?: boolean | MarkdownStringTrustedOptions;
|
|
51
54
|
public supportThemeIcons?: boolean;
|
|
52
55
|
public supportHtml?: boolean;
|
|
53
56
|
public baseUri?: UriComponents;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2024 EclipseSource 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
|
+
import { expect } from 'chai';
|
|
17
|
+
import { CompositeMenuNode } from './composite-menu-node';
|
|
18
|
+
import { CompoundMenuNodeRole } from './menu-types';
|
|
19
|
+
|
|
20
|
+
describe('composite-menu-node', () => {
|
|
21
|
+
describe('updateOptions', () => {
|
|
22
|
+
it('should update undefined node properties', () => {
|
|
23
|
+
const node = new CompositeMenuNode('test-id');
|
|
24
|
+
node.updateOptions({ label: 'node-label', icon: 'icon', order: 'a', role: CompoundMenuNodeRole.Flat, when: 'node-condition' });
|
|
25
|
+
expect(node.label).to.equal('node-label');
|
|
26
|
+
expect(node.icon).to.equal('icon');
|
|
27
|
+
expect(node.order).to.equal('a');
|
|
28
|
+
expect(node.role).to.equal(CompoundMenuNodeRole.Flat);
|
|
29
|
+
expect(node.when).to.equal('node-condition');
|
|
30
|
+
});
|
|
31
|
+
it('should update existing node properties', () => {
|
|
32
|
+
const node = new CompositeMenuNode('test-id', 'test-label', { icon: 'test-icon', order: 'a1', role: CompoundMenuNodeRole.Submenu, when: 'test-condition' });
|
|
33
|
+
node.updateOptions({ label: 'NEW-label', icon: 'NEW-icon', order: 'a2', role: CompoundMenuNodeRole.Flat, when: 'NEW-condition' });
|
|
34
|
+
expect(node.label).to.equal('NEW-label');
|
|
35
|
+
expect(node.icon).to.equal('NEW-icon');
|
|
36
|
+
expect(node.order).to.equal('a2');
|
|
37
|
+
expect(node.role).to.equal(CompoundMenuNodeRole.Flat);
|
|
38
|
+
expect(node.when).to.equal('NEW-condition');
|
|
39
|
+
});
|
|
40
|
+
it('should update only the icon without affecting other properties', () => {
|
|
41
|
+
const node = new CompositeMenuNode('test-id', 'test-label', { icon: 'test-icon', order: 'a' });
|
|
42
|
+
node.updateOptions({ icon: 'NEW-icon' });
|
|
43
|
+
expect(node.label).to.equal('test-label');
|
|
44
|
+
expect(node.icon).to.equal('NEW-icon');
|
|
45
|
+
expect(node.order).to.equal('a');
|
|
46
|
+
});
|
|
47
|
+
it('should not allow to unset properties', () => {
|
|
48
|
+
const node = new CompositeMenuNode('test-id', 'test-label', { icon: 'test-icon', order: 'a' });
|
|
49
|
+
node.updateOptions({ icon: undefined });
|
|
50
|
+
expect(node.label).to.equal('test-label');
|
|
51
|
+
expect(node.icon).to.equal('test-icon');
|
|
52
|
+
expect(node.order).to.equal('a');
|
|
53
|
+
});
|
|
54
|
+
it('should allow to set empty strings in properties', () => {
|
|
55
|
+
const node = new CompositeMenuNode('test-id', 'test-label');
|
|
56
|
+
node.updateOptions({ label: '' });
|
|
57
|
+
expect(node.label).to.equal('');
|
|
58
|
+
});
|
|
59
|
+
it('should not cause side effects when updating a property to its existing value', () => {
|
|
60
|
+
const node = new CompositeMenuNode('test-id', 'test-label', { icon: 'test-icon', order: 'a' });
|
|
61
|
+
node.updateOptions({ icon: 'test-icon' });
|
|
62
|
+
expect(node.label).to.equal('test-label');
|
|
63
|
+
expect(node.icon).to.equal('test-icon');
|
|
64
|
+
expect(node.order).to.equal('a');
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
});
|
|
@@ -63,11 +63,11 @@ export class CompositeMenuNode implements MutableCompoundMenuNode {
|
|
|
63
63
|
|
|
64
64
|
updateOptions(options?: SubMenuOptions): void {
|
|
65
65
|
if (options) {
|
|
66
|
-
this.iconClass
|
|
67
|
-
this.label
|
|
68
|
-
this.order
|
|
69
|
-
this._role
|
|
70
|
-
this._when
|
|
66
|
+
this.iconClass = options.icon ?? options.iconClass ?? this.iconClass;
|
|
67
|
+
this.label = options.label ?? this.label;
|
|
68
|
+
this.order = options.order ?? this.order;
|
|
69
|
+
this._role = options.role ?? this._role;
|
|
70
|
+
this._when = options.when ?? this._when;
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
import * as assert from 'assert/strict';
|
|
17
|
-
import { firstTrue, waitForEvent } from './promise-util';
|
|
17
|
+
import { Deferred, firstTrue, waitForEvent } from './promise-util';
|
|
18
18
|
import { Emitter } from './event';
|
|
19
19
|
import { CancellationError } from './cancellation';
|
|
20
20
|
|
|
@@ -35,7 +35,30 @@ describe('promise-util', () => {
|
|
|
35
35
|
});
|
|
36
36
|
});
|
|
37
37
|
|
|
38
|
+
type ExecutionHandler<T> = (resolve: (value: T) => void, reject: (error: unknown) => void) => void;
|
|
39
|
+
|
|
38
40
|
describe('firstTrue', () => {
|
|
41
|
+
function createSequentialPromises<T>(...executionHandlers: ExecutionHandler<T>[]): Promise<T>[] {
|
|
42
|
+
const deferreds: Deferred<T>[] = [];
|
|
43
|
+
let i = 0;
|
|
44
|
+
for (let k = 0; k < executionHandlers.length; k++) {
|
|
45
|
+
deferreds.push(new Deferred<T>());
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const resolveNext = () => {
|
|
49
|
+
if (i < executionHandlers.length) {
|
|
50
|
+
executionHandlers[i](value => deferreds[i].resolve(value), error => deferreds[i].reject(error));
|
|
51
|
+
i++;
|
|
52
|
+
}
|
|
53
|
+
if (i < executionHandlers.length) {
|
|
54
|
+
setTimeout(resolveNext, 1);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
setTimeout(resolveNext, 1);
|
|
59
|
+
return deferreds.map(deferred => deferred.promise);
|
|
60
|
+
}
|
|
61
|
+
|
|
39
62
|
it('should resolve to false when the promises arg is empty', async () => {
|
|
40
63
|
const actual = await firstTrue();
|
|
41
64
|
assert.strictEqual(actual, false);
|
|
@@ -43,29 +66,36 @@ describe('promise-util', () => {
|
|
|
43
66
|
|
|
44
67
|
it('should resolve to true when the first promise resolves to true', async () => {
|
|
45
68
|
const signals: string[] = [];
|
|
46
|
-
|
|
47
|
-
|
|
69
|
+
|
|
70
|
+
function createHandler(signal: string, result?: boolean): ExecutionHandler<boolean> {
|
|
71
|
+
return (resolve: (value: boolean) => void, reject: (error: unknown) => void) => {
|
|
48
72
|
signals.push(signal);
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
73
|
+
if (typeof result !== 'undefined') {
|
|
74
|
+
resolve(result);
|
|
75
|
+
} else {
|
|
76
|
+
reject(undefined);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const actual = await firstTrue(...createSequentialPromises(
|
|
82
|
+
createHandler('a', false),
|
|
83
|
+
createHandler('b', false),
|
|
84
|
+
createHandler('c', true),
|
|
85
|
+
createHandler('d', false),
|
|
86
|
+
createHandler('e', true)
|
|
87
|
+
));
|
|
58
88
|
assert.strictEqual(actual, true);
|
|
59
89
|
assert.deepStrictEqual(signals, ['a', 'b', 'c']);
|
|
60
90
|
});
|
|
61
91
|
|
|
62
92
|
it('should reject when one of the promises rejects', async () => {
|
|
63
|
-
await assert.rejects(firstTrue(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
), /Error: my test error/);
|
|
93
|
+
await assert.rejects(firstTrue(...createSequentialPromises<boolean>(
|
|
94
|
+
(resolve, _) => resolve(false),
|
|
95
|
+
resolve => resolve(false),
|
|
96
|
+
(_, reject) => reject(new Error('my test error')),
|
|
97
|
+
resolve => resolve(true),
|
|
98
|
+
)), /Error: my test error/);
|
|
69
99
|
});
|
|
70
100
|
});
|
|
71
101
|
|