@theia/core 1.65.0-next.6 → 1.65.1
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 +117 -15
- package/i18n/nls.de.json +117 -15
- package/i18n/nls.es.json +117 -15
- package/i18n/nls.fr.json +117 -15
- package/i18n/nls.hu.json +117 -15
- package/i18n/nls.it.json +117 -15
- package/i18n/nls.ja.json +117 -15
- package/i18n/nls.json +121 -19
- package/i18n/nls.ko.json +117 -15
- package/i18n/nls.pl.json +117 -15
- package/i18n/nls.pt-br.json +117 -15
- package/i18n/nls.ru.json +117 -15
- package/i18n/nls.tr.json +117 -15
- package/i18n/nls.zh-cn.json +117 -15
- package/i18n/nls.zh-tw.json +117 -15
- package/lib/browser/breadcrumbs/breadcrumbs-renderer.d.ts +1 -1
- package/lib/browser/breadcrumbs/breadcrumbs-renderer.d.ts.map +1 -1
- package/lib/browser/breadcrumbs/breadcrumbs-renderer.js +1 -1
- package/lib/browser/breadcrumbs/breadcrumbs-renderer.js.map +1 -1
- package/lib/browser/catalog.json +227 -32
- package/lib/browser/common-frontend-contribution.d.ts +2 -3
- package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
- package/lib/browser/common-frontend-contribution.js +3 -4
- package/lib/browser/common-frontend-contribution.js.map +1 -1
- package/lib/browser/dialogs/react-dialog.d.ts.map +1 -1
- package/lib/browser/dialogs/react-dialog.js +1 -0
- package/lib/browser/dialogs/react-dialog.js.map +1 -1
- package/lib/browser/encoding-registry.d.ts +1 -1
- package/lib/browser/encoding-registry.d.ts.map +1 -1
- package/lib/browser/encoding-registry.js +1 -1
- package/lib/browser/encoding-registry.js.map +1 -1
- package/lib/browser/frontend-application-bindings.d.ts.map +1 -1
- package/lib/browser/frontend-application-bindings.js +10 -17
- package/lib/browser/frontend-application-bindings.js.map +1 -1
- package/lib/browser/frontend-application-module.d.ts.map +1 -1
- package/lib/browser/frontend-application-module.js +10 -6
- package/lib/browser/frontend-application-module.js.map +1 -1
- package/lib/browser/frontend-application.d.ts +1 -1
- package/lib/browser/frontend-application.d.ts.map +1 -1
- package/lib/browser/frontend-application.js +1 -1
- package/lib/browser/frontend-application.js.map +1 -1
- package/lib/browser/hover-service.d.ts +1 -2
- package/lib/browser/hover-service.d.ts.map +1 -1
- package/lib/browser/hover-service.js +1 -2
- package/lib/browser/hover-service.js.map +1 -1
- package/lib/browser/icon-theme-service.d.ts +3 -2
- package/lib/browser/icon-theme-service.d.ts.map +1 -1
- package/lib/browser/icon-theme-service.js +4 -3
- package/lib/browser/icon-theme-service.js.map +1 -1
- package/lib/browser/index.d.ts +0 -1
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +0 -1
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/json-schema-store.d.ts +2 -0
- package/lib/browser/json-schema-store.d.ts.map +1 -1
- package/lib/browser/json-schema-store.js +10 -3
- package/lib/browser/json-schema-store.js.map +1 -1
- package/lib/browser/keybinding.d.ts +1 -1
- package/lib/browser/keybinding.d.ts.map +1 -1
- package/lib/browser/keybinding.js +1 -1
- package/lib/browser/keybinding.js.map +1 -1
- package/lib/browser/keybinding.spec.js +1 -1
- package/lib/browser/keybinding.spec.js.map +1 -1
- package/lib/browser/menu/browser-menu-plugin.d.ts +3 -3
- package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
- package/lib/browser/menu/browser-menu-plugin.js +4 -5
- package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
- package/lib/browser/open-with-service.d.ts +1 -1
- package/lib/browser/open-with-service.d.ts.map +1 -1
- package/lib/browser/open-with-service.js +3 -3
- package/lib/browser/open-with-service.js.map +1 -1
- package/lib/browser/opener-service.d.ts +1 -2
- package/lib/browser/opener-service.d.ts.map +1 -1
- package/lib/browser/opener-service.js.map +1 -1
- package/lib/browser/preferences/frontend-config-preference-contributions.d.ts +6 -0
- package/lib/browser/preferences/frontend-config-preference-contributions.d.ts.map +1 -0
- package/lib/browser/preferences/frontend-config-preference-contributions.js +60 -0
- package/lib/browser/preferences/frontend-config-preference-contributions.js.map +1 -0
- package/lib/browser/preferences/index.d.ts +0 -5
- package/lib/browser/preferences/index.d.ts.map +1 -1
- package/lib/browser/preferences/index.js +0 -5
- package/lib/browser/preferences/index.js.map +1 -1
- package/lib/browser/preferences/preference-contribution.d.ts +0 -96
- package/lib/browser/preferences/preference-contribution.d.ts.map +1 -1
- package/lib/browser/preferences/preference-contribution.js +14 -355
- package/lib/browser/preferences/preference-contribution.js.map +1 -1
- package/lib/browser/preferences/preference-proxy.spec.js +25 -17
- package/lib/browser/preferences/preference-proxy.spec.js.map +1 -1
- package/lib/browser/preferences/preference-schema-provider.spec.js +21 -34
- package/lib/browser/preferences/preference-schema-provider.spec.js.map +1 -1
- package/lib/browser/preferences/preference-service.spec.js +57 -80
- package/lib/browser/preferences/preference-service.spec.js.map +1 -1
- package/lib/browser/preferences/preference-validation-service.d.ts +24 -26
- package/lib/browser/preferences/preference-validation-service.d.ts.map +1 -1
- package/lib/browser/preferences/preference-validation-service.js +40 -20
- package/lib/browser/preferences/preference-validation-service.js.map +1 -1
- package/lib/browser/preferences/preference-validation-service.spec.js +10 -6
- package/lib/browser/preferences/preference-validation-service.spec.js.map +1 -1
- package/lib/browser/preferences/test/mock-preference-provider.d.ts +2 -3
- package/lib/browser/preferences/test/mock-preference-provider.d.ts.map +1 -1
- package/lib/browser/preferences/test/mock-preference-provider.js +5 -7
- package/lib/browser/preferences/test/mock-preference-provider.js.map +1 -1
- package/lib/browser/preferences/test/mock-preference-proxy.d.ts.map +1 -1
- package/lib/browser/preferences/test/mock-preference-proxy.js.map +1 -1
- package/lib/browser/preferences/test/mock-preference-service.d.ts +1 -4
- package/lib/browser/preferences/test/mock-preference-service.d.ts.map +1 -1
- package/lib/browser/preferences/test/mock-preference-service.js.map +1 -1
- package/lib/browser/quick-input/quick-command-service.d.ts +1 -1
- package/lib/browser/quick-input/quick-command-service.d.ts.map +1 -1
- package/lib/browser/quick-input/quick-command-service.js +1 -1
- package/lib/browser/quick-input/quick-command-service.js.map +1 -1
- package/lib/browser/request/browser-request-service.d.ts +1 -1
- package/lib/browser/request/browser-request-service.d.ts.map +1 -1
- package/lib/browser/request/browser-request-service.js +2 -2
- package/lib/browser/request/browser-request-service.js.map +1 -1
- package/lib/browser/saveable.d.ts +9 -0
- package/lib/browser/saveable.d.ts.map +1 -1
- package/lib/browser/saveable.js.map +1 -1
- package/lib/browser/secondary-window-handler.d.ts +21 -9
- package/lib/browser/secondary-window-handler.d.ts.map +1 -1
- package/lib/browser/secondary-window-handler.js +162 -21
- package/lib/browser/secondary-window-handler.js.map +1 -1
- package/lib/browser/shell/application-shell.d.ts +7 -2
- package/lib/browser/shell/application-shell.d.ts.map +1 -1
- package/lib/browser/shell/application-shell.js +27 -10
- package/lib/browser/shell/application-shell.js.map +1 -1
- package/lib/browser/shell/shell-layout-restorer.d.ts +13 -0
- package/lib/browser/shell/shell-layout-restorer.d.ts.map +1 -1
- package/lib/browser/shell/shell-layout-restorer.js +8 -1
- package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts +30 -16
- 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 +116 -33
- 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.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +8 -3
- 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 +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts +2 -2
- package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts.map +1 -1
- package/lib/browser/shell/tab-bars.d.ts +1 -1
- package/lib/browser/shell/tab-bars.d.ts.map +1 -1
- package/lib/browser/shell/theia-dock-panel.d.ts +19 -2
- package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
- package/lib/browser/shell/theia-dock-panel.js +82 -0
- package/lib/browser/shell/theia-dock-panel.js.map +1 -1
- package/lib/browser/status-bar/status-bar.d.ts +1 -1
- package/lib/browser/status-bar/status-bar.d.ts.map +1 -1
- package/lib/browser/status-bar/status-bar.js +3 -2
- package/lib/browser/status-bar/status-bar.js.map +1 -1
- package/lib/browser/theming.d.ts +5 -4
- package/lib/browser/theming.d.ts.map +1 -1
- package/lib/browser/theming.js +7 -6
- package/lib/browser/theming.js.map +1 -1
- package/lib/browser/tooltip-service.d.ts +1 -1
- package/lib/browser/tooltip-service.d.ts.map +1 -1
- package/lib/browser/tooltip-service.js +1 -1
- package/lib/browser/tooltip-service.js.map +1 -1
- package/lib/browser/tree/index.d.ts +0 -1
- package/lib/browser/tree/index.d.ts.map +1 -1
- package/lib/browser/tree/index.js +0 -1
- package/lib/browser/tree/index.js.map +1 -1
- package/lib/browser/tree/tree-widget.d.ts +2 -2
- package/lib/browser/tree/tree-widget.d.ts.map +1 -1
- package/lib/browser/tree/tree-widget.js +5 -4
- package/lib/browser/tree/tree-widget.js.map +1 -1
- package/lib/browser/view-container.d.ts.map +1 -1
- package/lib/browser/view-container.js +2 -2
- package/lib/browser/view-container.js.map +1 -1
- package/lib/browser/widgets/extractable-widget.d.ts +3 -0
- package/lib/browser/widgets/extractable-widget.d.ts.map +1 -1
- package/lib/browser/widgets/extractable-widget.js.map +1 -1
- package/lib/browser/widgets/widget.js +4 -4
- package/lib/browser/widgets/widget.js.map +1 -1
- package/lib/browser/window/default-secondary-window-service.d.ts +10 -5
- package/lib/browser/window/default-secondary-window-service.d.ts.map +1 -1
- package/lib/browser/window/default-secondary-window-service.js +53 -13
- package/lib/browser/window/default-secondary-window-service.js.map +1 -1
- package/lib/browser/window/default-window-service.d.ts +1 -1
- package/lib/browser/window/default-window-service.d.ts.map +1 -1
- package/lib/browser/window/default-window-service.js +1 -1
- package/lib/browser/window/default-window-service.js.map +1 -1
- package/lib/browser/window/default-window-service.spec.js +1 -1
- package/lib/browser/window/default-window-service.spec.js.map +1 -1
- package/lib/browser/window/secondary-window-service.d.ts +15 -2
- package/lib/browser/window/secondary-window-service.d.ts.map +1 -1
- package/lib/browser/window/secondary-window-service.js +12 -1
- package/lib/browser/window/secondary-window-service.js.map +1 -1
- package/lib/browser/window/window-title-service.d.ts +1 -1
- package/lib/browser/window/window-title-service.d.ts.map +1 -1
- package/lib/browser/window/window-title-service.js +1 -1
- package/lib/browser/window/window-title-service.js.map +1 -1
- package/lib/{browser → common}/core-preferences.d.ts +2 -1
- package/lib/common/core-preferences.d.ts.map +1 -0
- package/lib/{browser → common}/core-preferences.js +17 -18
- package/lib/common/core-preferences.js.map +1 -0
- package/lib/common/index.d.ts +4 -0
- package/lib/common/index.d.ts.map +1 -1
- package/lib/common/index.js +4 -0
- package/lib/common/index.js.map +1 -1
- package/lib/common/inversify-utils.d.ts +31 -0
- package/lib/common/inversify-utils.d.ts.map +1 -0
- package/lib/common/inversify-utils.js +60 -0
- package/lib/common/inversify-utils.js.map +1 -0
- package/lib/common/json-schema.d.ts +1 -0
- package/lib/common/json-schema.d.ts.map +1 -1
- package/lib/common/menu/menu-types.d.ts +1 -0
- package/lib/common/menu/menu-types.d.ts.map +1 -1
- package/lib/common/menu/menu-types.js.map +1 -1
- package/lib/common/preferences/defaults-preference-provider.d.ts +21 -0
- package/lib/common/preferences/defaults-preference-provider.d.ts.map +1 -0
- package/lib/common/preferences/defaults-preference-provider.js +99 -0
- package/lib/common/preferences/defaults-preference-provider.js.map +1 -0
- package/lib/common/preferences/index.d.ts +12 -0
- package/lib/common/preferences/index.d.ts.map +1 -0
- package/lib/common/preferences/index.js +30 -0
- package/lib/common/preferences/index.js.map +1 -0
- package/lib/{browser → common}/preferences/injectable-preference-proxy.d.ts +1 -1
- package/lib/common/preferences/injectable-preference-proxy.d.ts.map +1 -0
- package/lib/{browser → common}/preferences/injectable-preference-proxy.js +2 -2
- package/lib/common/preferences/injectable-preference-proxy.js.map +1 -0
- package/lib/common/preferences/preference-configurations.d.ts.map +1 -0
- package/lib/common/preferences/preference-configurations.js.map +1 -0
- package/lib/{browser → common}/preferences/preference-language-override-service.d.ts +4 -13
- package/lib/common/preferences/preference-language-override-service.d.ts.map +1 -0
- package/lib/{browser → common}/preferences/preference-language-override-service.js +14 -30
- package/lib/common/preferences/preference-language-override-service.js.map +1 -0
- package/lib/common/preferences/preference-provider-impl.d.ts +52 -0
- package/lib/common/preferences/preference-provider-impl.d.ts.map +1 -0
- package/lib/{browser/preferences/preference-provider.js → common/preferences/preference-provider-impl.js} +23 -95
- package/lib/common/preferences/preference-provider-impl.js.map +1 -0
- package/lib/{browser → common}/preferences/preference-provider.d.ts +34 -59
- package/lib/common/preferences/preference-provider.d.ts.map +1 -0
- package/lib/common/preferences/preference-provider.js +71 -0
- package/lib/common/preferences/preference-provider.js.map +1 -0
- package/lib/common/preferences/preference-provider.spec.d.ts.map +1 -0
- package/lib/{browser → common}/preferences/preference-provider.spec.js +4 -4
- package/lib/common/preferences/preference-provider.spec.js.map +1 -0
- package/lib/{browser → common}/preferences/preference-proxy.d.ts +2 -2
- package/lib/common/preferences/preference-proxy.d.ts.map +1 -0
- package/lib/{browser → common}/preferences/preference-proxy.js +10 -10
- package/lib/common/preferences/preference-proxy.js.map +1 -0
- package/lib/common/preferences/preference-schema-service.d.ts +55 -0
- package/lib/common/preferences/preference-schema-service.d.ts.map +1 -0
- package/lib/common/preferences/preference-schema-service.js +402 -0
- package/lib/common/preferences/preference-schema-service.js.map +1 -0
- package/lib/common/preferences/preference-schema.d.ts +145 -43
- package/lib/common/preferences/preference-schema.d.ts.map +1 -1
- package/lib/common/preferences/preference-schema.js +3 -41
- package/lib/common/preferences/preference-schema.js.map +1 -1
- package/lib/common/preferences/preference-scope.d.ts +4 -1
- package/lib/common/preferences/preference-scope.d.ts.map +1 -1
- package/lib/common/preferences/preference-scope.js +5 -14
- package/lib/common/preferences/preference-scope.js.map +1 -1
- package/lib/{browser → common}/preferences/preference-service.d.ts +9 -10
- package/lib/common/preferences/preference-service.d.ts.map +1 -0
- package/lib/{browser → common}/preferences/preference-service.js +68 -58
- package/lib/common/preferences/preference-service.js.map +1 -0
- package/lib/common/stream.d.ts +9 -0
- package/lib/common/stream.d.ts.map +1 -1
- package/lib/common/stream.js +93 -2
- package/lib/common/stream.js.map +1 -1
- package/lib/common/supported-encodings.d.ts.map +1 -0
- package/lib/common/supported-encodings.js.map +1 -0
- package/lib/{browser/tree → common}/tree-preference.d.ts +1 -1
- package/lib/common/tree-preference.d.ts.map +1 -0
- package/lib/{browser/tree → common}/tree-preference.js +3 -5
- package/lib/common/tree-preference.js.map +1 -0
- package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts +2 -1
- package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-context-menu-renderer.js +2 -1
- package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +1 -2
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.js +11 -10
- package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
- package/lib/electron-browser/menu/electron-menu-contribution.d.ts +2 -2
- package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-menu-contribution.js +6 -6
- package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
- package/lib/electron-browser/preload.d.ts.map +1 -1
- package/lib/electron-browser/preload.js +3 -0
- package/lib/electron-browser/preload.js.map +1 -1
- package/lib/electron-browser/window/electron-secondary-window-service.d.ts.map +1 -1
- package/lib/electron-browser/window/electron-secondary-window-service.js +5 -4
- package/lib/electron-browser/window/electron-secondary-window-service.js.map +1 -1
- package/lib/electron-browser/window/electron-window-module.js +1 -1
- package/lib/electron-browser/window/electron-window-module.js.map +1 -1
- package/lib/electron-browser/window/electron-window-service.d.ts +1 -1
- package/lib/electron-browser/window/electron-window-service.d.ts.map +1 -1
- package/lib/electron-browser/window/electron-window-service.js +1 -1
- package/lib/electron-browser/window/electron-window-service.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-browser/window → electron-common}/electron-window-preferences.d.ts +2 -1
- package/lib/electron-common/electron-window-preferences.d.ts.map +1 -0
- package/lib/{electron-browser/window → electron-common}/electron-window-preferences.js +7 -7
- package/lib/electron-common/electron-window-preferences.js.map +1 -0
- package/lib/electron-main/electron-api-main.d.ts.map +1 -1
- package/lib/electron-main/electron-api-main.js +9 -0
- package/lib/electron-main/electron-api-main.js.map +1 -1
- package/lib/electron-node/window/electron-window-module.d.ts +4 -0
- package/lib/electron-node/window/electron-window-module.d.ts.map +1 -0
- package/lib/{browser/preferences/preference-scope.js → electron-node/window/electron-window-module.js} +7 -5
- package/lib/electron-node/window/electron-window-module.js.map +1 -0
- package/lib/node/backend-application-module.d.ts.map +1 -1
- package/lib/node/backend-application-module.js +13 -0
- package/lib/node/backend-application-module.js.map +1 -1
- package/lib/node/backend-application.js +1 -1
- package/lib/node/logger-cli-contribution.d.ts +7 -1
- package/lib/node/logger-cli-contribution.d.ts.map +1 -1
- package/lib/node/logger-cli-contribution.js +22 -10
- package/lib/node/logger-cli-contribution.js.map +1 -1
- package/lib/node/logger-cli-contribution.spec.js +13 -2
- package/lib/node/logger-cli-contribution.spec.js.map +1 -1
- package/package.json +8 -7
- package/src/browser/breadcrumbs/breadcrumbs-renderer.tsx +1 -1
- package/src/browser/common-frontend-contribution.ts +2 -3
- package/src/browser/dialogs/react-dialog.tsx +1 -0
- package/src/browser/encoding-registry.ts +1 -1
- package/src/browser/frontend-application-bindings.ts +8 -13
- package/src/browser/frontend-application-module.ts +13 -6
- package/src/browser/frontend-application.ts +1 -1
- package/src/browser/hover-service.ts +1 -2
- package/src/browser/icon-theme-service.ts +3 -2
- package/src/browser/index.ts +0 -1
- package/src/browser/json-schema-store.ts +9 -1
- package/src/browser/keybinding.spec.ts +1 -1
- package/src/browser/keybinding.ts +1 -1
- package/src/browser/menu/browser-menu-plugin.ts +7 -7
- package/src/browser/open-with-service.ts +1 -1
- package/src/browser/opener-service.ts +1 -2
- package/src/browser/preferences/frontend-config-preference-contributions.ts +52 -0
- package/src/browser/preferences/index.ts +0 -5
- package/src/browser/preferences/preference-contribution.ts +16 -398
- package/src/browser/preferences/preference-proxy.spec.ts +27 -17
- package/src/browser/preferences/preference-schema-provider.spec.ts +25 -37
- package/src/browser/preferences/preference-service.spec.ts +32 -56
- package/src/browser/preferences/preference-validation-service.spec.ts +27 -19
- package/src/browser/preferences/preference-validation-service.ts +60 -41
- package/src/browser/preferences/test/mock-preference-provider.ts +2 -5
- package/src/browser/preferences/test/mock-preference-proxy.ts +1 -2
- package/src/browser/preferences/test/mock-preference-service.ts +1 -4
- package/src/browser/quick-input/quick-command-service.ts +1 -1
- package/src/browser/request/browser-request-service.ts +4 -4
- package/src/browser/saveable.ts +8 -0
- package/src/browser/secondary-window-handler.ts +189 -29
- package/src/browser/shell/application-shell.ts +36 -13
- package/src/browser/shell/shell-layout-restorer.ts +15 -0
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.tsx +139 -40
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +12 -6
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +2 -2
- package/src/browser/shell/tab-bar-toolbar/tab-toolbar-item.tsx +2 -2
- package/src/browser/shell/tab-bars.ts +1 -1
- package/src/browser/shell/theia-dock-panel.ts +101 -2
- package/src/browser/status-bar/status-bar.tsx +3 -2
- package/src/browser/style/dockpanel.css +7 -0
- package/src/browser/theming.ts +7 -6
- package/src/browser/tooltip-service.tsx +1 -1
- package/src/browser/tree/index.ts +0 -1
- package/src/browser/tree/tree-widget.tsx +6 -5
- package/src/browser/view-container.ts +5 -5
- package/src/browser/widgets/extractable-widget.ts +3 -0
- package/src/browser/widgets/widget.ts +4 -4
- package/src/browser/window/default-secondary-window-service.ts +54 -17
- package/src/browser/window/default-window-service.spec.ts +1 -1
- package/src/browser/window/default-window-service.ts +1 -1
- package/src/browser/window/secondary-window-service.ts +23 -2
- package/src/browser/window/window-title-service.ts +1 -1
- package/src/{browser → common}/core-preferences.ts +16 -17
- package/src/common/index.ts +4 -0
- package/src/common/inversify-utils.ts +63 -0
- package/src/common/json-schema.ts +1 -0
- package/src/common/menu/menu-types.ts +2 -0
- package/src/common/preferences/defaults-preference-provider.ts +91 -0
- package/src/common/preferences/index.ts +27 -0
- package/src/{browser → common}/preferences/injectable-preference-proxy.ts +3 -3
- package/src/{browser → common}/preferences/preference-language-override-service.ts +12 -29
- package/src/common/preferences/preference-provider-impl.ts +165 -0
- package/src/{browser → common}/preferences/preference-provider.spec.ts +6 -5
- package/src/common/preferences/preference-provider.ts +164 -0
- package/src/{browser → common}/preferences/preference-proxy.ts +15 -14
- package/src/common/preferences/preference-schema-service.ts +434 -0
- package/src/common/preferences/preference-schema.ts +156 -64
- package/src/common/preferences/preference-scope.ts +5 -13
- package/src/{browser → common}/preferences/preference-service.ts +76 -63
- package/src/common/stream.ts +102 -1
- package/src/{browser/tree → common}/tree-preference.ts +2 -4
- package/src/electron-browser/menu/electron-context-menu-renderer.ts +2 -1
- package/src/electron-browser/menu/electron-main-menu-factory.ts +13 -11
- package/src/electron-browser/menu/electron-menu-contribution.ts +9 -6
- package/src/electron-browser/preload.ts +4 -1
- package/src/electron-browser/window/electron-secondary-window-service.ts +7 -4
- package/src/electron-browser/window/electron-window-module.ts +1 -1
- package/src/electron-browser/window/electron-window-service.ts +1 -1
- package/src/electron-common/electron-api.ts +2 -0
- package/src/{electron-browser/window → electron-common}/electron-window-preferences.ts +6 -6
- package/src/electron-main/electron-api-main.ts +11 -1
- package/src/{browser/preferences/preference-scope.ts → electron-node/window/electron-window-module.ts} +7 -3
- package/src/node/backend-application-module.ts +28 -1
- package/src/node/backend-application.ts +1 -1
- package/src/node/logger-cli-contribution.spec.ts +17 -2
- package/src/node/logger-cli-contribution.ts +18 -3
- package/lib/browser/core-preferences.d.ts.map +0 -1
- package/lib/browser/core-preferences.js.map +0 -1
- package/lib/browser/preferences/injectable-preference-proxy.d.ts.map +0 -1
- package/lib/browser/preferences/injectable-preference-proxy.js.map +0 -1
- package/lib/browser/preferences/preference-configurations.d.ts.map +0 -1
- package/lib/browser/preferences/preference-configurations.js.map +0 -1
- package/lib/browser/preferences/preference-language-override-service.d.ts.map +0 -1
- package/lib/browser/preferences/preference-language-override-service.js.map +0 -1
- package/lib/browser/preferences/preference-provider.d.ts.map +0 -1
- package/lib/browser/preferences/preference-provider.js.map +0 -1
- package/lib/browser/preferences/preference-provider.spec.d.ts.map +0 -1
- package/lib/browser/preferences/preference-provider.spec.js.map +0 -1
- package/lib/browser/preferences/preference-proxy.d.ts.map +0 -1
- package/lib/browser/preferences/preference-proxy.js.map +0 -1
- package/lib/browser/preferences/preference-scope.d.ts +0 -3
- package/lib/browser/preferences/preference-scope.d.ts.map +0 -1
- package/lib/browser/preferences/preference-scope.js.map +0 -1
- package/lib/browser/preferences/preference-service.d.ts.map +0 -1
- package/lib/browser/preferences/preference-service.js.map +0 -1
- package/lib/browser/supported-encodings.d.ts.map +0 -1
- package/lib/browser/supported-encodings.js.map +0 -1
- package/lib/browser/tree/tree-preference.d.ts.map +0 -1
- package/lib/browser/tree/tree-preference.js.map +0 -1
- package/lib/electron-browser/window/electron-window-preferences.d.ts.map +0 -1
- package/lib/electron-browser/window/electron-window-preferences.js.map +0 -1
- package/src/browser/preferences/preference-provider.ts +0 -277
- /package/lib/{browser → common}/preferences/preference-configurations.d.ts +0 -0
- /package/lib/{browser → common}/preferences/preference-configurations.js +0 -0
- /package/lib/{browser → common}/preferences/preference-provider.spec.d.ts +0 -0
- /package/lib/{browser → common}/supported-encodings.d.ts +0 -0
- /package/lib/{browser → common}/supported-encodings.js +0 -0
- /package/src/{browser → common}/preferences/preference-configurations.ts +0 -0
- /package/src/{browser → common}/supported-encodings.ts +0 -0
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2025 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 { inject, injectable, named, postConstruct } from 'inversify';
|
|
18
|
+
import { Disposable } from '../disposable';
|
|
19
|
+
import { Emitter } from '../event';
|
|
20
|
+
import { IJSONSchema } from '../json-schema';
|
|
21
|
+
import { JSONObject, JSONValue } from '@lumino/coreutils';
|
|
22
|
+
import { PreferenceDataProperty, PreferenceSchema, PreferenceSchemaService, DefaultValueChangedEvent, PreferenceContribution } from './preference-schema';
|
|
23
|
+
import { PreferenceScope, ValidPreferenceScopes } from './preference-scope';
|
|
24
|
+
import { PreferenceUtils } from './preference-provider';
|
|
25
|
+
import { ContributionProvider } from '../contribution-provider';
|
|
26
|
+
import { Deferred } from '../promise-util';
|
|
27
|
+
|
|
28
|
+
const NO_OVERRIDE = {};
|
|
29
|
+
const OVERRIDE_PROPERTY = '\\[(.*)\\]$';
|
|
30
|
+
|
|
31
|
+
@injectable()
|
|
32
|
+
export class PreferenceSchemaServiceImpl implements PreferenceSchemaService {
|
|
33
|
+
// Storage structures
|
|
34
|
+
protected readonly schemas = new Set<PreferenceSchema>();
|
|
35
|
+
protected readonly properties = new Map<string, PreferenceDataProperty>();
|
|
36
|
+
/**
|
|
37
|
+
* This map stores default overrides. The primary map key is the base preference name.
|
|
38
|
+
* The preference name maps to a second map keyed by the override identifier or a special object value `NO_OVERRIDE',
|
|
39
|
+
* representing default overrides for the base property. The value in this second map is an array
|
|
40
|
+
* of entries in reverse order of their insertion. This is necessary becuaus multiple clients might register
|
|
41
|
+
* overrides for the same preference key/override combination. The elements in this array consist of a unique, generated
|
|
42
|
+
* identifier and the actual override value. This allows us to always return the last registerd override even
|
|
43
|
+
* when overrides are later removed.
|
|
44
|
+
*/
|
|
45
|
+
protected readonly defaultOverrides = new Map<string, Map<string | object, [number, JSONValue][]>>();
|
|
46
|
+
protected readonly _overrideIdentifiers = new Set<string>();
|
|
47
|
+
|
|
48
|
+
protected readonly jsonSchemas: IJSONSchema[] = [];
|
|
49
|
+
|
|
50
|
+
protected readonly _ready = new Deferred();
|
|
51
|
+
|
|
52
|
+
get ready(): Promise<void> {
|
|
53
|
+
return this._ready.promise;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
get overrideIdentifiers(): ReadonlySet<string> {
|
|
57
|
+
return this._overrideIdentifiers;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
getSchemaProperties(): ReadonlyMap<string, PreferenceDataProperty> {
|
|
61
|
+
return this.properties;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
protected nextSchemaTitle = 1;
|
|
65
|
+
protected nextOverrideValueId = 1;
|
|
66
|
+
|
|
67
|
+
// Event emitters
|
|
68
|
+
protected readonly defaultValueChangedEmitter = new Emitter<DefaultValueChangedEvent>();
|
|
69
|
+
protected readonly schemaChangedEmitter = new Emitter<void>();
|
|
70
|
+
|
|
71
|
+
// Public events
|
|
72
|
+
readonly onDidChangeDefaultValue = this.defaultValueChangedEmitter.event;
|
|
73
|
+
readonly onDidChangeSchema = this.schemaChangedEmitter.event;
|
|
74
|
+
|
|
75
|
+
@inject(ValidPreferenceScopes)
|
|
76
|
+
readonly validScopes: readonly PreferenceScope[];
|
|
77
|
+
|
|
78
|
+
@inject(ContributionProvider) @named(PreferenceContribution)
|
|
79
|
+
protected readonly preferenceContributions: ContributionProvider<PreferenceContribution>;
|
|
80
|
+
|
|
81
|
+
@postConstruct()
|
|
82
|
+
protected init(): void {
|
|
83
|
+
for (const scope of this.validScopes) {
|
|
84
|
+
this.jsonSchemas[scope] = {
|
|
85
|
+
type: 'object',
|
|
86
|
+
properties: {},
|
|
87
|
+
patternProperties: {},
|
|
88
|
+
additionalProperties: false
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const promises: Promise<void>[] = [];
|
|
92
|
+
this.preferenceContributions.getContributions().forEach(contrib => {
|
|
93
|
+
if (contrib.schema) {
|
|
94
|
+
this.addSchema(contrib.schema);
|
|
95
|
+
}
|
|
96
|
+
if (contrib.initSchema) {
|
|
97
|
+
promises.push(contrib.initSchema(this));
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
Promise.all(promises).then(() => this._ready.resolve());
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
dispose(): void {
|
|
104
|
+
this.defaultValueChangedEmitter.dispose();
|
|
105
|
+
this.schemaChangedEmitter.dispose();
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
registerOverrideIdentifier(overrideIdentifier: string): Disposable {
|
|
109
|
+
if (!this._overrideIdentifiers.has(overrideIdentifier)) {
|
|
110
|
+
this.addOverrideToJsonSchema(overrideIdentifier);
|
|
111
|
+
this._overrideIdentifiers.add(overrideIdentifier);
|
|
112
|
+
this.schemaChangedEmitter.fire();
|
|
113
|
+
|
|
114
|
+
return Disposable.create(() => {
|
|
115
|
+
if (this._overrideIdentifiers.delete(overrideIdentifier)) {
|
|
116
|
+
this.schemaChangedEmitter.fire();
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
return Disposable.NULL;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
addSchema(schema: PreferenceSchema): Disposable {
|
|
124
|
+
this.schemas.add(schema);
|
|
125
|
+
|
|
126
|
+
for (const [key, property] of Object.entries(schema.properties)) {
|
|
127
|
+
if (this.properties.has(key)) {
|
|
128
|
+
throw new Error(`Property with id '${key}' already exists`);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (property.scope === undefined) {
|
|
132
|
+
property.scope = schema.scope;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (property.overridable === undefined) {
|
|
136
|
+
property.overridable = schema.defaultOverridable;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
this.properties.set(key, property);
|
|
140
|
+
this.setJSONSchemasProperty(key, property);
|
|
141
|
+
if (property.default !== undefined) {
|
|
142
|
+
this.defaultValueChangedEmitter.fire(this.changeFor(key, undefined, this.defaultOverrides.get(key), undefined, property.default!));
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
this.schemaChangedEmitter.fire();
|
|
148
|
+
|
|
149
|
+
return Disposable.create(() => {
|
|
150
|
+
if (this.schemas.delete(schema)) {
|
|
151
|
+
for (const [key, property] of Object.entries(schema.properties)) {
|
|
152
|
+
this.deleteFromJSONSchemas(key, property);
|
|
153
|
+
this.properties.delete(key);
|
|
154
|
+
const overrides = this.defaultOverrides.get(key);
|
|
155
|
+
|
|
156
|
+
const baseOverride = overrides?.get(NO_OVERRIDE);
|
|
157
|
+
if (baseOverride !== undefined) {
|
|
158
|
+
this.defaultValueChangedEmitter.fire(this.changeFor(key, undefined, overrides, baseOverride, undefined));
|
|
159
|
+
} else if (property.default !== undefined) {
|
|
160
|
+
this.defaultValueChangedEmitter.fire(this.changeFor(key, undefined, overrides, property.default, undefined));
|
|
161
|
+
}
|
|
162
|
+
if (overrides) {
|
|
163
|
+
for (const [overrideKey, value] of overrides) {
|
|
164
|
+
if (typeof overrideKey === 'string') {
|
|
165
|
+
this.defaultValueChangedEmitter.fire(this.changeFor(key, overrideKey, overrides, value[0][1], undefined));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
this.schemaChangedEmitter.fire();
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
isValidInScope(preferenceName: string, scope: PreferenceScope): boolean {
|
|
177
|
+
const property = this.properties.get(preferenceName);
|
|
178
|
+
|
|
179
|
+
if (!property) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// A property is valid in a scope if:
|
|
184
|
+
// 1. It is included (undefined or true)
|
|
185
|
+
// 2. Its scope is not defined (valid in all scopes) or its scope includes the given scope
|
|
186
|
+
return (property.included !== false) &&
|
|
187
|
+
(property.scope === undefined || property.scope >= scope);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
getSchemaProperty(key: string): PreferenceDataProperty | undefined {
|
|
191
|
+
return this.properties.get(key);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
updateSchemaProperty(key: string, property: PreferenceDataProperty): void {
|
|
195
|
+
const existing = this.properties.get(key);
|
|
196
|
+
if (existing) {
|
|
197
|
+
// Update the property with new values
|
|
198
|
+
const updatedProperty = { ...existing, ...property };
|
|
199
|
+
this.properties.set(key, updatedProperty);
|
|
200
|
+
const hasNoBaseOverrideValue = this.defaultOverrides.get(key)?.get(NO_OVERRIDE) === undefined;
|
|
201
|
+
if (hasNoBaseOverrideValue && !PreferenceUtils.deepEqual(property.default, existing.default)) {
|
|
202
|
+
this.defaultValueChangedEmitter.fire(this.changeFor(key, undefined, this.defaultOverrides.get(key), undefined, property.default!));
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
this.setJSONSchemasProperty(key, updatedProperty);
|
|
206
|
+
this.schemaChangedEmitter.fire();
|
|
207
|
+
} else {
|
|
208
|
+
console.warn(`Trying to update non-existent property ${key}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
registerOverride(key: string, overrideIdentifier: string | undefined, value: JSONValue): Disposable {
|
|
213
|
+
const overrideId = overrideIdentifier || NO_OVERRIDE;
|
|
214
|
+
const property = this.properties.get(key);
|
|
215
|
+
if (!property) {
|
|
216
|
+
console.warn(`Trying to register default override for non-existent preference: ${key}`);
|
|
217
|
+
} else if (!property.overridable && overrideIdentifier) {
|
|
218
|
+
console.warn(`Trying to register default override for identifier ${overrideIdentifier} for non-overridable preference: ${key}`);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
let overrides = this.defaultOverrides.get(key);
|
|
222
|
+
if (!overrides) {
|
|
223
|
+
overrides = new Map();
|
|
224
|
+
this.defaultOverrides.set(key, overrides);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const oldValue = this.getDefaultValue(key, overrideIdentifier);
|
|
228
|
+
|
|
229
|
+
const overrideValueId = this.nextOverrideValueId;
|
|
230
|
+
let override = overrides.get(overrideId);
|
|
231
|
+
if (!override) {
|
|
232
|
+
override = [];
|
|
233
|
+
overrides.set(overrideId, override);
|
|
234
|
+
}
|
|
235
|
+
override.unshift([overrideValueId, value]);
|
|
236
|
+
|
|
237
|
+
// Fire event only if the value actually changed
|
|
238
|
+
if (!PreferenceUtils.deepEqual(oldValue, value)) {
|
|
239
|
+
const evt = this.changeFor(key, overrideIdentifier, overrides, oldValue, value);
|
|
240
|
+
this.defaultValueChangedEmitter.fire(evt);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if (property) {
|
|
244
|
+
this.setJSONSchemasProperty(key, property);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return Disposable.create(() => {
|
|
248
|
+
this.removeOverride(key, overrideIdentifier, overrideValueId);
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
protected changeFor(key: string, overrideIdentifier: string | undefined,
|
|
253
|
+
overrides: Map<string | object, [number, JSONValue][]> | undefined, oldValue: JSONValue | undefined, newValue: JSONValue | undefined): DefaultValueChangedEvent {
|
|
254
|
+
const affectedOverrides = [];
|
|
255
|
+
if (!overrideIdentifier) {
|
|
256
|
+
for (const id of this._overrideIdentifiers) {
|
|
257
|
+
if (!overrides?.has(id)) {
|
|
258
|
+
affectedOverrides.push(id);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return {
|
|
263
|
+
key,
|
|
264
|
+
overrideIdentifier: overrideIdentifier,
|
|
265
|
+
otherAffectedOverrides: affectedOverrides,
|
|
266
|
+
oldValue,
|
|
267
|
+
newValue
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
protected removeOverride(key: string, overrideIdentifier: string | undefined, overrideValueId: number): void {
|
|
272
|
+
const overrideId = overrideIdentifier || NO_OVERRIDE;
|
|
273
|
+
const overrides = this.defaultOverrides.get(key);
|
|
274
|
+
if (overrides) {
|
|
275
|
+
const values = overrides.get(overrideId);
|
|
276
|
+
if (values) {
|
|
277
|
+
const index = values.findIndex(v => v[0] === overrideValueId);
|
|
278
|
+
if (index) {
|
|
279
|
+
const oldValue = this.getDefaultValue(key, overrideIdentifier);
|
|
280
|
+
values.splice(index, 1);
|
|
281
|
+
const newValue = this.getDefaultValue(key, overrideIdentifier);
|
|
282
|
+
if (!PreferenceUtils.deepEqual(oldValue, newValue)) {
|
|
283
|
+
|
|
284
|
+
const affectedOverrides = [];
|
|
285
|
+
if (!overrideIdentifier) {
|
|
286
|
+
for (const id of this._overrideIdentifiers) {
|
|
287
|
+
if (!overrides.has(id)) {
|
|
288
|
+
affectedOverrides.push(id);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
this.defaultValueChangedEmitter.fire({
|
|
294
|
+
key,
|
|
295
|
+
overrideIdentifier,
|
|
296
|
+
otherAffectedOverrides: affectedOverrides,
|
|
297
|
+
oldValue,
|
|
298
|
+
newValue
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
if (values.length === 0) {
|
|
303
|
+
overrides.delete(overrideId);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
if (overrides.size === 0) {
|
|
307
|
+
this.defaultOverrides.delete(key);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
getDefaultValue(key: string, overrideIdentifier: string | undefined): JSONValue | undefined {
|
|
313
|
+
const overrideId = overrideIdentifier || NO_OVERRIDE;
|
|
314
|
+
const overrides = this.defaultOverrides.get(key);
|
|
315
|
+
if (overrides) {
|
|
316
|
+
const values = overrides.get(overrideId);
|
|
317
|
+
if (values) {
|
|
318
|
+
return values[0][1]; // there will be no empty values arrays in the data structure
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
const property = this.properties.get(key);
|
|
323
|
+
return property?.default;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
inspectDefaultValue(key: string, overrideIdentifier: string | undefined): JSONValue | undefined {
|
|
327
|
+
const overrideId = overrideIdentifier || NO_OVERRIDE;
|
|
328
|
+
const overrides = this.defaultOverrides.get(key);
|
|
329
|
+
if (overrides) {
|
|
330
|
+
const values = overrides.get(overrideId);
|
|
331
|
+
if (values) {
|
|
332
|
+
return values[0][1]; // there will be no empty values arrays in the data structure
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
if (!overrideIdentifier) {
|
|
337
|
+
const property = this.properties.get(key);
|
|
338
|
+
return property?.default;
|
|
339
|
+
}
|
|
340
|
+
return undefined;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
getJSONSchema(scope: PreferenceScope): IJSONSchema {
|
|
344
|
+
return this.jsonSchemas[scope];
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
private setJSONSchemasProperty(key: string, property: PreferenceDataProperty): void {
|
|
348
|
+
for (const scope of this.validScopes) {
|
|
349
|
+
if (this.isValidInScope(key, scope)) {
|
|
350
|
+
this.setJSONSchemaProperty(this.jsonSchemas[scope], key, property);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
private deleteFromJSONSchemas(key: string, property: PreferenceDataProperty): void {
|
|
355
|
+
for (const scope of this.validScopes) {
|
|
356
|
+
if (this.isValidInScope(key, scope)) {
|
|
357
|
+
const schema = this.jsonSchemas[scope];
|
|
358
|
+
for (const name of Object.keys(schema.properties!)) {
|
|
359
|
+
if (name.match(OVERRIDE_PROPERTY)) {
|
|
360
|
+
const value = schema.properties![name] as IJSONSchema;
|
|
361
|
+
delete value.properties![key];
|
|
362
|
+
} else {
|
|
363
|
+
delete schema.properties![key];
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
private setJSONSchemaProperty(schema: IJSONSchema, key: string, property: PreferenceDataProperty): void {
|
|
371
|
+
// Add property to the schema
|
|
372
|
+
const prop = { ...property, default: this.getDefaultValue(key, undefined) };
|
|
373
|
+
schema.properties![key] = prop;
|
|
374
|
+
delete prop['scope'];
|
|
375
|
+
delete prop['overridable'];
|
|
376
|
+
if (property.overridable) {
|
|
377
|
+
for (const overrideIdentifier of this._overrideIdentifiers) {
|
|
378
|
+
const overrideSchema: IJSONSchema = schema.properties![`[${overrideIdentifier}]`] || {
|
|
379
|
+
type: 'object',
|
|
380
|
+
properties: {},
|
|
381
|
+
patternProperties: {},
|
|
382
|
+
additionalProperties: false
|
|
383
|
+
};
|
|
384
|
+
schema.properties![`[${overrideIdentifier}]`] = overrideSchema;
|
|
385
|
+
overrideSchema.properties![key] = { ...property, default: this.getDefaultValue(key, overrideIdentifier) };
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
addOverrideToJsonSchema(overrideIdentifier: string): void {
|
|
391
|
+
for (const scope of this.validScopes) {
|
|
392
|
+
const schema = this.jsonSchemas[scope];
|
|
393
|
+
const overrideSchema: IJSONSchema = {
|
|
394
|
+
type: 'object',
|
|
395
|
+
properties: {},
|
|
396
|
+
patternProperties: {},
|
|
397
|
+
additionalProperties: false
|
|
398
|
+
};
|
|
399
|
+
schema.properties![`[${overrideIdentifier}]`] = overrideSchema;
|
|
400
|
+
for (const [key, property] of this.properties.entries()) {
|
|
401
|
+
if (property.overridable && this.isValidInScope(key, scope)) {
|
|
402
|
+
overrideSchema.properties![key] = { ...property, default: this.getDefaultValue(key, overrideIdentifier) };
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
getDefaultValues(): JSONObject {
|
|
409
|
+
const result: JSONObject = {};
|
|
410
|
+
|
|
411
|
+
for (const [key, property] of this.properties.entries()) {
|
|
412
|
+
if (this.isValidInScope(key, PreferenceScope.Default)) {
|
|
413
|
+
if (property.default !== undefined) {
|
|
414
|
+
result[key] = property.default;
|
|
415
|
+
}
|
|
416
|
+
const overrides = this.defaultOverrides.get(key);
|
|
417
|
+
if (overrides) {
|
|
418
|
+
for (const [overrideId, values] of overrides.entries()) {
|
|
419
|
+
if (overrideId === NO_OVERRIDE) {
|
|
420
|
+
result[key] = values[0][1];
|
|
421
|
+
} else {
|
|
422
|
+
const overrideKey = `[${overrideId}]`;
|
|
423
|
+
const target: JSONObject = result[overrideKey] as JSONObject || {};
|
|
424
|
+
target[key] = values[0][1];
|
|
425
|
+
result[overrideKey] = target;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
return result;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
@@ -16,89 +16,181 @@
|
|
|
16
16
|
|
|
17
17
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
18
18
|
|
|
19
|
-
import { JSONValue } from '@lumino/coreutils';
|
|
19
|
+
import { JSONObject, JSONValue } from '@lumino/coreutils';
|
|
20
20
|
import { IJSONSchema } from '../json-schema';
|
|
21
21
|
import { PreferenceScope } from './preference-scope';
|
|
22
|
-
import {
|
|
22
|
+
import { Event } from '../event';
|
|
23
|
+
import { Disposable } from '../disposable';
|
|
23
24
|
|
|
24
|
-
export
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
export const PreferenceContribution = Symbol('PreferenceContribution');
|
|
26
|
+
/**
|
|
27
|
+
* A {@link PreferenceContribution} allows adding additional custom preferences.
|
|
28
|
+
* For this, the {@link PreferenceContribution} has to provide a valid `PrefernceSchema` specifying which preferences
|
|
29
|
+
* are available including their types and description.
|
|
30
|
+
*
|
|
31
|
+
* ### Example usage
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const MyPreferencesSchema: PreferenceSchema = {
|
|
34
|
+
* 'scope': PreferenceScope.Folder,
|
|
35
|
+
* 'properties': {
|
|
36
|
+
* 'myext.decorations.enabled': {
|
|
37
|
+
* 'type': 'boolean',
|
|
38
|
+
* 'description': 'Show file status',
|
|
39
|
+
* 'default': true
|
|
40
|
+
* },
|
|
41
|
+
* // [...]
|
|
42
|
+
* }
|
|
43
|
+
* }
|
|
44
|
+
* @injectable()
|
|
45
|
+
* export class MyPreferenceContribution implements PreferenceContribution{
|
|
46
|
+
* schema= MyPreferencesSchema;
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export interface PreferenceContribution {
|
|
51
|
+
readonly schema?: PreferenceSchema;
|
|
28
52
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
53
|
+
* Allows to do additional intialisation of the preference schema, for example registering overrides
|
|
54
|
+
* @param service the preference schema service
|
|
31
55
|
*/
|
|
32
|
-
|
|
33
|
-
properties: PreferenceSchemaProperties
|
|
34
|
-
}
|
|
35
|
-
export namespace PreferenceSchema {
|
|
36
|
-
export function is(obj: unknown): obj is PreferenceSchema {
|
|
37
|
-
return isObject<PreferenceSchema>(obj) && PreferenceSchemaProperties.is(obj.properties);
|
|
38
|
-
}
|
|
39
|
-
export function getDefaultScope(schema: PreferenceSchema): PreferenceScope {
|
|
40
|
-
let defaultScope: PreferenceScope = PreferenceScope.Workspace;
|
|
41
|
-
if (!PreferenceScope.is(schema.scope)) {
|
|
42
|
-
defaultScope = PreferenceScope.fromString(<string>schema.scope) || PreferenceScope.Workspace;
|
|
43
|
-
} else {
|
|
44
|
-
defaultScope = schema.scope;
|
|
45
|
-
}
|
|
46
|
-
return defaultScope;
|
|
47
|
-
}
|
|
56
|
+
initSchema?(service: PreferenceSchemaService): Promise<void>
|
|
48
57
|
}
|
|
49
58
|
|
|
50
|
-
export interface
|
|
51
|
-
[name: string]:
|
|
52
|
-
}
|
|
53
|
-
export namespace PreferenceSchemaProperties {
|
|
54
|
-
export function is(obj: unknown): obj is PreferenceSchemaProperties {
|
|
55
|
-
return isObject(obj);
|
|
56
|
-
}
|
|
59
|
+
export interface IndexedAccess<T> {
|
|
60
|
+
[name: string]: T;
|
|
57
61
|
}
|
|
58
62
|
|
|
59
|
-
export interface
|
|
60
|
-
|
|
63
|
+
export interface PreferenceSchema {
|
|
64
|
+
/** The default scope for properties in this schema */
|
|
61
65
|
scope?: PreferenceScope,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
};
|
|
66
|
+
/** Optional title to be used in UI */
|
|
67
|
+
title?: string,
|
|
68
|
+
/** Whether properties in this schema are overridable by default. Defaults to false. */
|
|
69
|
+
defaultOverridable?: boolean;
|
|
70
|
+
properties: IndexedAccess<PreferenceDataProperty>;
|
|
68
71
|
}
|
|
69
72
|
|
|
70
|
-
export interface
|
|
73
|
+
export interface PreferenceDataProperty extends IJSONSchema {
|
|
71
74
|
/**
|
|
72
|
-
*
|
|
75
|
+
* Whether distinct values can be defined for language override identifers. E.g. values valid when editing typescript files vs.
|
|
76
|
+
* when editing Java files
|
|
73
77
|
*/
|
|
74
|
-
defaultValue?: JSONValue;
|
|
75
78
|
overridable?: boolean;
|
|
76
|
-
/** If false, the preference will not be included in the schema or the UI. */
|
|
79
|
+
/** If false, the preference will not be included in the schema or the UI. E.g. OS-Specific prefs */
|
|
77
80
|
included?: boolean;
|
|
78
81
|
/** If true, this item will registered as part of the preference schema, but hidden in the preference editor UI. */
|
|
79
82
|
hidden?: boolean;
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
export interface PreferenceSchemaProperty extends PreferenceItem {
|
|
83
|
-
description?: string;
|
|
84
|
-
markdownDescription?: string;
|
|
85
|
-
scope?: 'application' | 'machine' | 'window' | 'resource' | 'language-overridable' | 'machine-overridable' | PreferenceScope;
|
|
86
|
-
tags?: string[];
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export interface PreferenceDataProperty extends PreferenceItem {
|
|
90
|
-
description?: string;
|
|
91
|
-
markdownDescription?: string;
|
|
83
|
+
/** The maximum scope where values for this property can be set. */
|
|
92
84
|
scope?: PreferenceScope;
|
|
85
|
+
/** Metadata intended for custom renderers */
|
|
93
86
|
typeDetails?: any;
|
|
87
|
+
/** Tags can be searched for in the UI */
|
|
88
|
+
tags?: string[]
|
|
94
89
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
90
|
+
|
|
91
|
+
export interface DefaultValueChangedEvent {
|
|
92
|
+
/** The preference key */
|
|
93
|
+
key: string;
|
|
94
|
+
/** The override identifier that the default changed for */
|
|
95
|
+
overrideIdentifier?: string;
|
|
96
|
+
/**
|
|
97
|
+
* When the default for the base property changes, indicates which override identifiers will be affected
|
|
98
|
+
*/
|
|
99
|
+
otherAffectedOverrides: string[];
|
|
100
|
+
oldValue: JSONValue | undefined;
|
|
101
|
+
newValue: JSONValue | undefined;
|
|
104
102
|
}
|
|
103
|
+
|
|
104
|
+
export const PreferenceSchemaService = Symbol('PreferenceSchemaService');
|
|
105
|
+
|
|
106
|
+
export interface PreferenceSchemaService {
|
|
107
|
+
/**
|
|
108
|
+
* Resolves after static contributions have been processed
|
|
109
|
+
*/
|
|
110
|
+
readonly ready: Promise<void>;
|
|
111
|
+
/**
|
|
112
|
+
* Register an override identifier for language specific preferences
|
|
113
|
+
* @param overrideIdentifier The identifier to register
|
|
114
|
+
* @returns A disposable to unregister the identifier
|
|
115
|
+
*/
|
|
116
|
+
registerOverrideIdentifier(overrideIdentifier: string): Disposable;
|
|
117
|
+
readonly overrideIdentifiers: ReadonlySet<string>;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Add a preference schema. It is an error to register the same property in two different schemas
|
|
121
|
+
* @param schema The schema to add
|
|
122
|
+
* @returns A disposable to remove the schema
|
|
123
|
+
*/
|
|
124
|
+
addSchema(schema: PreferenceSchema): Disposable;
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* The scopes which this preference schema service handles. Any properties that are not applicable within the
|
|
128
|
+
* valid scopes will be ignored
|
|
129
|
+
*/
|
|
130
|
+
readonly validScopes: readonly PreferenceScope[];
|
|
131
|
+
/**
|
|
132
|
+
* Check if a preference is valid in a specific scope
|
|
133
|
+
* @param preferenceName The preference name
|
|
134
|
+
* @param scope The scope to check
|
|
135
|
+
* @returns True if the preference is valid in the given scope
|
|
136
|
+
*/
|
|
137
|
+
isValidInScope(preferenceName: string, scope: PreferenceScope): boolean;
|
|
138
|
+
getSchemaProperty(key: string): PreferenceDataProperty | undefined;
|
|
139
|
+
getSchemaProperties(): ReadonlyMap<string, PreferenceDataProperty>;
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Update a property in the schema. The corresponding JSON Schemas, etc. will be updated
|
|
143
|
+
* @param key The property key
|
|
144
|
+
* @param property The updated property
|
|
145
|
+
*/
|
|
146
|
+
updateSchemaProperty(key: string, property: PreferenceDataProperty): void;
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Register an override for a preference default value. If multiple overrides are registered for the same value,
|
|
150
|
+
* the last override will be in effect. Removing the last override will make the second-to-last override active, etc.
|
|
151
|
+
* @param key The preference key
|
|
152
|
+
* @param overrideIdentifier The override identifier, undefined for global default
|
|
153
|
+
* @param value The default value
|
|
154
|
+
* @returns A disposable to unregister the override
|
|
155
|
+
*/
|
|
156
|
+
registerOverride(key: string, overrideIdentifier: string | undefined, value: JSONValue): Disposable;
|
|
157
|
+
/**
|
|
158
|
+
* Get the default value for a preference. This is the value a client will see for the given key/override
|
|
159
|
+
* @param key The preference key
|
|
160
|
+
* @param overrideIdentifier The override identifier, undefined for global default
|
|
161
|
+
* @returns The default value or undefined if not found
|
|
162
|
+
*/
|
|
163
|
+
getDefaultValue(key: string, overrideIdentifier: string | undefined): JSONValue | undefined;
|
|
164
|
+
/**
|
|
165
|
+
* Gets the default value for a preference. This method not fall back to the global value if no override is given
|
|
166
|
+
* @param key The preference key
|
|
167
|
+
* @param overrideIdentifier The override identifier, undefined for global default
|
|
168
|
+
* @returns The default value or undefined if not found
|
|
169
|
+
*/
|
|
170
|
+
inspectDefaultValue(key: string, overrideIdentifier: string | undefined): JSONValue | undefined;
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Gets a JSON schema a preference.json file for the given scope.
|
|
174
|
+
* @param scope The scope to generate schema for
|
|
175
|
+
* @returns The JSON schema
|
|
176
|
+
*/
|
|
177
|
+
getJSONSchema(scope: PreferenceScope): IJSONSchema;
|
|
178
|
+
/**
|
|
179
|
+
* Get the collection of all defined default values as JSONObject of the form like in a preferences.json
|
|
180
|
+
*
|
|
181
|
+
* #### Example usage
|
|
182
|
+
* ```json
|
|
183
|
+
* {
|
|
184
|
+
* "my.preference": "a string default",
|
|
185
|
+
* "[typescript]": {
|
|
186
|
+
* "another.preference": 39
|
|
187
|
+
* }
|
|
188
|
+
* }
|
|
189
|
+
*/
|
|
190
|
+
getDefaultValues(): JSONObject;
|
|
191
|
+
|
|
192
|
+
// Public events
|
|
193
|
+
onDidChangeDefaultValue: Event<DefaultValueChangedEvent>;
|
|
194
|
+
onDidChangeSchema: Event<void>;
|
|
195
|
+
}
|
|
196
|
+
|