@theia/core 1.53.0-next.4 → 1.53.0-next.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/i18n/nls.cs.json +582 -552
- package/i18n/nls.de.json +582 -552
- package/i18n/nls.es.json +582 -552
- package/i18n/nls.fr.json +582 -552
- package/i18n/nls.hu.json +582 -552
- package/i18n/nls.it.json +582 -552
- package/i18n/nls.ja.json +582 -552
- package/i18n/nls.json +582 -552
- package/i18n/nls.ko.json +582 -0
- package/i18n/nls.pl.json +582 -552
- package/i18n/nls.pt-br.json +582 -552
- package/i18n/nls.ru.json +582 -552
- package/i18n/nls.tr.json +582 -0
- package/i18n/nls.zh-cn.json +582 -552
- package/i18n/nls.zh-tw.json +582 -0
- package/lib/browser/authentication-service.d.ts +15 -14
- package/lib/browser/authentication-service.d.ts.map +1 -1
- package/lib/browser/authentication-service.js +5 -5
- package/lib/browser/authentication-service.js.map +1 -1
- package/lib/browser/catalog.json +6889 -0
- package/lib/browser/common-frontend-contribution.js +3 -3
- package/lib/browser/common-styling-participants.js +166 -166
- package/lib/browser/context-key-service.d.ts +3 -2
- package/lib/browser/context-key-service.d.ts.map +1 -1
- package/lib/browser/context-key-service.js.map +1 -1
- package/lib/browser/core-preferences.d.ts.map +1 -1
- package/lib/browser/core-preferences.js +9 -0
- package/lib/browser/core-preferences.js.map +1 -1
- package/lib/browser/frontend-application-module.d.ts.map +1 -1
- package/lib/browser/frontend-application-module.js.map +1 -1
- package/lib/browser/json-schema-store.d.ts +0 -3
- package/lib/browser/json-schema-store.d.ts.map +1 -1
- package/lib/browser/json-schema-store.js +2 -12
- package/lib/browser/json-schema-store.js.map +1 -1
- package/lib/browser/open-with-service.d.ts +13 -1
- package/lib/browser/open-with-service.d.ts.map +1 -1
- package/lib/browser/open-with-service.js +48 -9
- package/lib/browser/open-with-service.js.map +1 -1
- package/lib/browser/opener-service.d.ts +8 -0
- package/lib/browser/opener-service.d.ts.map +1 -1
- package/lib/browser/opener-service.js +18 -3
- package/lib/browser/opener-service.js.map +1 -1
- package/lib/browser/progress-location-service.spec.js +7 -7
- package/lib/browser/saveable-service.d.ts.map +1 -1
- package/lib/browser/saveable-service.js +6 -2
- package/lib/browser/saveable-service.js.map +1 -1
- package/lib/browser/saveable.d.ts +17 -1
- package/lib/browser/saveable.d.ts.map +1 -1
- package/lib/browser/saveable.js +62 -1
- package/lib/browser/saveable.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts +5 -4
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +2 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts +6 -16
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +12 -29
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts +43 -78
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js +8 -39
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts +10 -10
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +43 -32
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
- package/lib/browser/storage-service.js +3 -3
- package/lib/browser/tree/tree.spec.js +75 -75
- package/lib/browser/view-container.d.ts +2 -2
- package/lib/browser/view-container.d.ts.map +1 -1
- package/lib/browser/view-container.js.map +1 -1
- package/lib/browser/widget-open-handler.d.ts +4 -1
- package/lib/browser/widget-open-handler.d.ts.map +1 -1
- package/lib/browser/widget-open-handler.js.map +1 -1
- package/lib/browser/widgets/extractable-widget.js +1 -1
- package/lib/browser/widgets/extractable-widget.js.map +1 -1
- package/lib/browser/widgets/index.d.ts +1 -0
- package/lib/browser/widgets/index.d.ts.map +1 -1
- package/lib/browser/widgets/index.js +1 -0
- package/lib/browser/widgets/index.js.map +1 -1
- package/lib/browser/widgets/split-widget.d.ts +45 -0
- package/lib/browser/widgets/split-widget.d.ts.map +1 -0
- package/lib/browser/widgets/split-widget.js +126 -0
- package/lib/browser/widgets/split-widget.js.map +1 -0
- package/lib/common/event.d.ts +2 -0
- package/lib/common/event.d.ts.map +1 -1
- package/lib/common/event.js +4 -0
- package/lib/common/event.js.map +1 -1
- package/lib/common/glob.d.ts +4 -4
- package/lib/common/json-schema.d.ts +2 -0
- package/lib/common/json-schema.d.ts.map +1 -1
- package/lib/common/menu/menu-types.d.ts.map +1 -1
- package/lib/common/menu/menu-types.js.map +1 -1
- package/lib/electron-browser/electron-uri-handler.d.ts +6 -0
- package/lib/electron-browser/electron-uri-handler.d.ts.map +1 -0
- package/lib/electron-browser/electron-uri-handler.js +49 -0
- package/lib/electron-browser/electron-uri-handler.js.map +1 -0
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.js +6 -6
- package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
- package/lib/electron-browser/preload.d.ts.map +1 -1
- package/lib/electron-browser/preload.js +12 -0
- package/lib/electron-browser/preload.js.map +1 -1
- package/lib/electron-browser/window/electron-window-module.d.ts.map +1 -1
- package/lib/electron-browser/window/electron-window-module.js +3 -0
- package/lib/electron-browser/window/electron-window-module.js.map +1 -1
- package/lib/electron-browser/window/external-app-open-handler.js +1 -1
- package/lib/electron-browser/window/external-app-open-handler.js.map +1 -1
- package/lib/electron-common/electron-api.d.ts +2 -0
- package/lib/electron-common/electron-api.d.ts.map +1 -1
- package/lib/electron-common/electron-api.js +2 -1
- package/lib/electron-common/electron-api.js.map +1 -1
- package/lib/electron-main/electron-api-main.d.ts +2 -0
- package/lib/electron-main/electron-api-main.d.ts.map +1 -1
- package/lib/electron-main/electron-api-main.js +27 -3
- package/lib/electron-main/electron-api-main.js.map +1 -1
- package/lib/electron-main/electron-main-application.d.ts +5 -3
- package/lib/electron-main/electron-main-application.d.ts.map +1 -1
- package/lib/electron-main/electron-main-application.js +57 -14
- package/lib/electron-main/electron-main-application.js.map +1 -1
- package/lib/electron-main/theia-electron-window.d.ts +1 -0
- package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
- package/lib/electron-main/theia-electron-window.js +3 -0
- package/lib/electron-main/theia-electron-window.js.map +1 -1
- package/lib/node/i18n/theia-localization-contribution.d.ts.map +1 -1
- package/lib/node/i18n/theia-localization-contribution.js +12 -8
- package/lib/node/i18n/theia-localization-contribution.js.map +1 -1
- package/lib/node/process-utils.spec.js +8 -8
- package/package.json +10 -8
- package/shared/ajv/index.d.ts +2 -2
- package/shared/markdown-it.d.ts +2 -2
- package/shared/markdown-it.js +1 -1
- package/shared/reflect-metadata/index.d.ts +1 -1
- package/shared/reflect-metadata/index.js +1 -1
- package/shared/vscode-languageserver-types/index.d.ts +1 -1
- package/src/browser/about-dialog.tsx +137 -137
- package/src/browser/authentication-service.ts +467 -468
- package/src/browser/breadcrumbs/breadcrumb-popup-container.ts +101 -101
- package/src/browser/breadcrumbs/breadcrumb-renderer.tsx +41 -41
- package/src/browser/breadcrumbs/breadcrumbs-constants.ts +79 -79
- package/src/browser/breadcrumbs/breadcrumbs-renderer.tsx +185 -185
- package/src/browser/breadcrumbs/breadcrumbs-service.ts +108 -108
- package/src/browser/breadcrumbs/index.ts +21 -21
- package/src/browser/browser-clipboard-service.ts +122 -122
- package/src/browser/browser.ts +239 -239
- package/src/browser/clipboard-service.ts +23 -23
- package/src/browser/color-application-contribution.ts +110 -110
- package/src/browser/color-registry.ts +60 -60
- package/src/browser/command-open-handler.ts +54 -54
- package/src/browser/common-frontend-contribution.ts +2680 -2680
- package/src/browser/common-styling-participants.ts +361 -361
- package/src/browser/connection-status-service.spec.ts +200 -200
- package/src/browser/connection-status-service.ts +216 -216
- package/src/browser/context-key-service.ts +142 -142
- package/src/browser/context-menu-renderer.ts +124 -124
- package/src/browser/core-preferences.ts +343 -334
- package/src/browser/credentials-service.ts +106 -106
- package/src/browser/decoration-style.ts +65 -65
- package/src/browser/decorations-service.ts +209 -209
- package/src/browser/dialogs/react-dialog.tsx +56 -56
- package/src/browser/dialogs.ts +534 -534
- package/src/browser/diff-uris.ts +117 -117
- package/src/browser/encoding-registry.ts +97 -97
- package/src/browser/endpoint.spec.ts +148 -148
- package/src/browser/endpoint.ts +136 -136
- package/src/browser/external-uri-service.ts +79 -79
- package/src/browser/file-icons-js.d.ts +20 -20
- package/src/browser/frontend-application-bindings.ts +62 -62
- package/src/browser/frontend-application-config-provider.spec.ts +45 -45
- package/src/browser/frontend-application-config-provider.ts +50 -50
- package/src/browser/frontend-application-contribution.ts +110 -110
- package/src/browser/frontend-application-module.ts +474 -475
- package/src/browser/frontend-application-state.ts +74 -74
- package/src/browser/frontend-application.ts +326 -326
- package/src/browser/hover-service.ts +218 -218
- package/src/browser/http-open-handler.ts +49 -49
- package/src/browser/i18n/i18n-frontend-module.ts +27 -27
- package/src/browser/i18n/language-quick-pick-service.ts +130 -130
- package/src/browser/icon-registry.ts +87 -87
- package/src/browser/icon-theme-contribution.ts +64 -64
- package/src/browser/icon-theme-service.ts +217 -217
- package/src/browser/icons/CollapseAll.svg +7 -7
- package/src/browser/icons/CollapseAll_inverse.svg +7 -7
- package/src/browser/icons/Refresh.svg +7 -7
- package/src/browser/icons/Refresh_inverse.svg +7 -7
- package/src/browser/icons/add-inverse.svg +4 -4
- package/src/browser/icons/add.svg +4 -4
- package/src/browser/icons/arrow-down-bright.svg +6 -6
- package/src/browser/icons/arrow-down-dark.svg +6 -6
- package/src/browser/icons/arrow-up-bright.svg +6 -6
- package/src/browser/icons/arrow-up-dark.svg +6 -6
- package/src/browser/icons/case-sensitive-dark.svg +16 -16
- package/src/browser/icons/case-sensitive.svg +16 -16
- package/src/browser/icons/chevron-right-dark.svg +5 -5
- package/src/browser/icons/chevron-right-light.svg +6 -6
- package/src/browser/icons/circle-bright.svg +7 -7
- package/src/browser/icons/circle-dark.svg +7 -7
- package/src/browser/icons/clear-search-results-dark.svg +7 -7
- package/src/browser/icons/clear-search-results.svg +7 -7
- package/src/browser/icons/close-all-bright.svg +7 -7
- package/src/browser/icons/close-all-dark.svg +7 -7
- package/src/browser/icons/close-bright.svg +7 -7
- package/src/browser/icons/close-dark.svg +7 -7
- package/src/browser/icons/collapse.svg +4 -4
- package/src/browser/icons/edit-json-dark.svg +6 -6
- package/src/browser/icons/edit-json.svg +6 -6
- package/src/browser/icons/expand.svg +4 -4
- package/src/browser/icons/loading-dark.svg +6 -6
- package/src/browser/icons/loading-light.svg +6 -6
- package/src/browser/icons/open-change-bright.svg +3 -3
- package/src/browser/icons/open-change-dark.svg +4 -4
- package/src/browser/icons/open-file-bright.svg +4 -4
- package/src/browser/icons/open-file-dark.svg +4 -4
- package/src/browser/icons/preview-bright.svg +3 -3
- package/src/browser/icons/preview-dark.svg +3 -3
- package/src/browser/icons/regex-dark.svg +10 -10
- package/src/browser/icons/regex.svg +10 -10
- package/src/browser/icons/remove-all-inverse.svg +4 -4
- package/src/browser/icons/remove-all.svg +4 -4
- package/src/browser/icons/replace-all-inverse.svg +13 -13
- package/src/browser/icons/replace-all.svg +13 -13
- package/src/browser/icons/replace-inverse.svg +15 -15
- package/src/browser/icons/replace.svg +15 -15
- package/src/browser/icons/whole-word-dark.svg +19 -19
- package/src/browser/icons/whole-word.svg +19 -19
- package/src/browser/index.ts +50 -50
- package/src/browser/json-schema-store.ts +118 -127
- package/src/browser/keybinding.spec.ts +554 -554
- package/src/browser/keybinding.ts +759 -759
- package/src/browser/keyboard/browser-keyboard-frontend-contribution.ts +108 -108
- package/src/browser/keyboard/browser-keyboard-layout-provider.spec.ts +171 -171
- package/src/browser/keyboard/browser-keyboard-layout-provider.ts +469 -469
- package/src/browser/keyboard/browser-keyboard-module.ts +30 -30
- package/src/browser/keyboard/index.ts +20 -20
- package/src/browser/keyboard/keyboard-layout-service.spec.ts +121 -121
- package/src/browser/keyboard/keyboard-layout-service.ts +455 -455
- package/src/browser/keyboard/keys.spec.ts +258 -258
- package/src/browser/keyboard/keys.ts +20 -20
- package/src/browser/keys.ts +21 -21
- package/src/browser/label-parser.spec.ts +165 -165
- package/src/browser/label-parser.ts +108 -108
- package/src/browser/label-provider.spec.ts +62 -62
- package/src/browser/label-provider.ts +385 -385
- package/src/browser/language-icon-provider.ts +55 -55
- package/src/browser/language-service.ts +77 -77
- package/src/browser/logger-frontend-module.ts +65 -65
- package/src/browser/markdown-rendering/markdown-renderer.ts +98 -98
- package/src/browser/menu/browser-context-menu-renderer.ts +48 -48
- package/src/browser/menu/browser-menu-module.ts +28 -28
- package/src/browser/menu/browser-menu-plugin.ts +491 -491
- package/src/browser/menu/context-menu-context.ts +41 -41
- package/src/browser/messaging/connection-source.ts +26 -26
- package/src/browser/messaging/frontend-id-provider.ts +37 -37
- package/src/browser/messaging/index.ts +18 -18
- package/src/browser/messaging/messaging-frontend-module.ts +41 -41
- package/src/browser/messaging/service-connection-provider.ts +140 -140
- package/src/browser/messaging/ws-connection-provider.ts +49 -49
- package/src/browser/messaging/ws-connection-source.ts +230 -230
- package/src/browser/mime-service.ts +30 -30
- package/src/browser/navigatable-types.ts +81 -81
- package/src/browser/navigatable.ts +39 -39
- package/src/browser/open-with-service.ts +140 -93
- package/src/browser/opener-service.spec.ts +49 -49
- package/src/browser/opener-service.ts +169 -146
- package/src/browser/performance/frontend-stopwatch.ts +65 -65
- package/src/browser/performance/index.ts +18 -18
- package/src/browser/performance/measurement-frontend-bindings.ts +31 -31
- package/src/browser/preferences/index.ts +23 -23
- package/src/browser/preferences/injectable-preference-proxy.ts +283 -283
- package/src/browser/preferences/preference-configurations.ts +82 -82
- package/src/browser/preferences/preference-contribution.ts +436 -436
- package/src/browser/preferences/preference-language-override-service.ts +111 -111
- package/src/browser/preferences/preference-provider.spec.ts +36 -36
- package/src/browser/preferences/preference-provider.ts +277 -277
- package/src/browser/preferences/preference-proxy.spec.ts +367 -367
- package/src/browser/preferences/preference-proxy.ts +367 -367
- package/src/browser/preferences/preference-schema-provider.spec.ts +130 -130
- package/src/browser/preferences/preference-scope.ts +18 -18
- package/src/browser/preferences/preference-service.spec.ts +613 -613
- package/src/browser/preferences/preference-service.ts +594 -594
- package/src/browser/preferences/preference-validation-service.spec.ts +334 -334
- package/src/browser/preferences/preference-validation-service.ts +358 -358
- package/src/browser/preferences/test/index.ts +19 -19
- package/src/browser/preferences/test/mock-preference-provider.ts +50 -50
- package/src/browser/preferences/test/mock-preference-proxy.ts +48 -48
- package/src/browser/preferences/test/mock-preference-service.ts +63 -63
- package/src/browser/preload/i18n-preload-contribution.ts +50 -50
- package/src/browser/preload/os-preload-contribution.ts +37 -37
- package/src/browser/preload/preload-module.ts +45 -45
- package/src/browser/preload/preloader.ts +37 -37
- package/src/browser/preload/theme-preload-contribution.ts +31 -31
- package/src/browser/progress-bar-factory.ts +29 -29
- package/src/browser/progress-bar.ts +76 -76
- package/src/browser/progress-client.ts +53 -53
- package/src/browser/progress-location-service.spec.ts +50 -50
- package/src/browser/progress-location-service.ts +96 -96
- package/src/browser/progress-status-bar-item.ts +83 -83
- package/src/browser/quick-input/index.ts +23 -23
- package/src/browser/quick-input/quick-access.ts +75 -75
- package/src/browser/quick-input/quick-command-frontend-contribution.ts +89 -89
- package/src/browser/quick-input/quick-command-service.ts +246 -246
- package/src/browser/quick-input/quick-help-service.ts +87 -87
- package/src/browser/quick-input/quick-input-frontend-contribution.ts +33 -33
- package/src/browser/quick-input/quick-input-service.spec.ts +176 -176
- package/src/browser/quick-input/quick-input-service.ts +17 -17
- package/src/browser/quick-input/quick-pick-service-impl.ts +69 -69
- package/src/browser/quick-input/quick-view-service.ts +83 -83
- package/src/browser/request/browser-request-module.ts +23 -23
- package/src/browser/request/browser-request-service.ts +172 -172
- package/src/browser/resource-context-key.ts +77 -77
- package/src/browser/saveable-service.ts +332 -328
- package/src/browser/saveable.ts +395 -327
- package/src/browser/secondary-window-handler.ts +211 -211
- package/src/browser/shell/additional-views-menu-widget.tsx +71 -71
- package/src/browser/shell/application-shell-mouse-tracker.ts +103 -103
- package/src/browser/shell/application-shell.ts +2271 -2271
- package/src/browser/shell/current-widget-command-adapter.ts +57 -57
- package/src/browser/shell/index.ts +23 -23
- package/src/browser/shell/shell-layout-restorer.ts +399 -399
- package/src/browser/shell/side-panel-handler.ts +794 -794
- package/src/browser/shell/side-panel-toolbar.ts +111 -111
- package/src/browser/shell/sidebar-bottom-menu-widget.tsx +39 -39
- package/src/browser/shell/sidebar-menu-widget.tsx +183 -183
- package/src/browser/shell/sidebar-top-menu-widget.tsx +26 -26
- package/src/browser/shell/split-panels.ts +191 -191
- package/src/browser/shell/tab-bar-decorator.ts +106 -106
- package/src/browser/shell/tab-bar-toolbar/index.ts +19 -19
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.ts +31 -31
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +242 -256
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.ts +149 -207
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.ts +62 -62
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +443 -428
- package/src/browser/shell/tab-bars.spec.ts +63 -63
- package/src/browser/shell/tab-bars.ts +1468 -1468
- package/src/browser/shell/theia-dock-panel.ts +265 -265
- package/src/browser/shell/view-column-service.ts +125 -125
- package/src/browser/shell/view-contribution.ts +178 -178
- package/src/browser/source-tree/index.ts +19 -19
- package/src/browser/source-tree/source-tree-widget.tsx +107 -107
- package/src/browser/source-tree/source-tree.ts +146 -146
- package/src/browser/source-tree/tree-source.ts +73 -73
- package/src/browser/status-bar/index.ts +29 -29
- package/src/browser/status-bar/status-bar-types.ts +97 -97
- package/src/browser/status-bar/status-bar-view-model.ts +209 -209
- package/src/browser/status-bar/status-bar.tsx +189 -189
- package/src/browser/storage-service.spec.ts +76 -76
- package/src/browser/storage-service.ts +129 -129
- package/src/browser/style/about.css +36 -36
- package/src/browser/style/alert-messages.css +62 -62
- package/src/browser/style/ansi.css +88 -88
- package/src/browser/style/breadcrumbs.css +130 -130
- package/src/browser/style/dialog.css +126 -126
- package/src/browser/style/dockpanel.css +76 -76
- package/src/browser/style/hover-service.css +101 -101
- package/src/browser/style/icons.css +61 -61
- package/src/browser/style/index.css +353 -351
- package/src/browser/style/materialcolors.css +278 -278
- package/src/browser/style/menus.css +230 -230
- package/src/browser/style/notification.css +39 -39
- package/src/browser/style/os.css +87 -87
- package/src/browser/style/progress-bar.css +43 -43
- package/src/browser/style/quick-title-bar.css +45 -45
- package/src/browser/style/scrollbars.css +172 -172
- package/src/browser/style/search-box.css +123 -123
- package/src/browser/style/select-component.css +107 -107
- package/src/browser/style/sidepanel.css +367 -367
- package/src/browser/style/split-widget.css +38 -0
- package/src/browser/style/status-bar.css +127 -127
- package/src/browser/style/tabs.css +647 -658
- package/src/browser/style/tooltip.css +28 -28
- package/src/browser/style/tree-decorators.css +81 -81
- package/src/browser/style/tree.css +232 -232
- package/src/browser/style/view-container.css +187 -194
- package/src/browser/style/widget.css +19 -19
- package/src/browser/styling-service.ts +96 -96
- package/src/browser/supported-encodings.ts +262 -262
- package/src/browser/test/jsdom.ts +69 -69
- package/src/browser/test/mock-connection-status-service.ts +33 -33
- package/src/browser/test/mock-env-variables-server.ts +47 -47
- package/src/browser/test/mock-opener-service.ts +34 -34
- package/src/browser/test/mock-storage-service.ts +49 -49
- package/src/browser/theming.ts +206 -206
- package/src/browser/tooltip-service.tsx +96 -96
- package/src/browser/tree/fuzzy-search.spec.ts +99 -99
- package/src/browser/tree/fuzzy-search.ts +136 -136
- package/src/browser/tree/index.ts +29 -29
- package/src/browser/tree/search-box-debounce.ts +96 -96
- package/src/browser/tree/search-box.ts +355 -355
- package/src/browser/tree/test/mock-selectable-tree-model.ts +109 -109
- package/src/browser/tree/test/mock-tree-model.ts +136 -136
- package/src/browser/tree/test/tree-test-container.ts +50 -50
- package/src/browser/tree/tree-compression/compressed-tree-expansion-service.ts +46 -46
- package/src/browser/tree/tree-compression/compressed-tree-model.ts +88 -88
- package/src/browser/tree/tree-compression/compressed-tree-widget.tsx +203 -203
- package/src/browser/tree/tree-compression/index.ts +20 -20
- package/src/browser/tree/tree-compression/tree-compression-service.ts +125 -125
- package/src/browser/tree/tree-compression/tree-compression.css +28 -28
- package/src/browser/tree/tree-consistency.spec.ts +105 -105
- package/src/browser/tree/tree-container.spec.ts +45 -45
- package/src/browser/tree/tree-container.ts +155 -155
- package/src/browser/tree/tree-decorator.spec.ts +162 -162
- package/src/browser/tree/tree-decorator.ts +238 -238
- package/src/browser/tree/tree-expansion.spec.ts +173 -173
- package/src/browser/tree/tree-expansion.ts +165 -165
- package/src/browser/tree/tree-focus-service.ts +55 -55
- package/src/browser/tree/tree-iterator.spec.ts +170 -170
- package/src/browser/tree/tree-iterator.ts +256 -256
- package/src/browser/tree/tree-label-provider.ts +40 -40
- package/src/browser/tree/tree-model.ts +562 -562
- package/src/browser/tree/tree-navigation.ts +58 -58
- package/src/browser/tree/tree-preference.ts +50 -50
- package/src/browser/tree/tree-search.ts +128 -128
- package/src/browser/tree/tree-selectable.spec.ts +152 -152
- package/src/browser/tree/tree-selection-impl.ts +176 -176
- package/src/browser/tree/tree-selection-state.spec.ts +462 -462
- package/src/browser/tree/tree-selection-state.ts +245 -245
- package/src/browser/tree/tree-selection.ts +159 -159
- package/src/browser/tree/tree-view-welcome-widget.tsx +263 -263
- package/src/browser/tree/tree-widget-selection.ts +45 -45
- package/src/browser/tree/tree-widget.tsx +1591 -1591
- package/src/browser/tree/tree.spec.ts +241 -241
- package/src/browser/tree/tree.ts +425 -425
- package/src/browser/undo-redo-handler.ts +85 -85
- package/src/browser/user-working-directory-provider.ts +77 -77
- package/src/browser/view-container.ts +1640 -1640
- package/src/browser/widget-decoration.ts +358 -358
- package/src/browser/widget-manager.spec.ts +102 -102
- package/src/browser/widget-manager.ts +318 -318
- package/src/browser/widget-open-handler.ts +168 -165
- package/src/browser/widgets/alert-message.tsx +56 -56
- package/src/browser/widgets/enhanced-preview-widget.ts +27 -27
- package/src/browser/widgets/extractable-widget.ts +33 -33
- package/src/browser/widgets/index.ts +21 -20
- package/src/browser/widgets/previewable-widget.ts +31 -31
- package/src/browser/widgets/react-renderer.tsx +53 -53
- package/src/browser/widgets/react-widget.tsx +51 -51
- package/src/browser/widgets/select-component.tsx +367 -367
- package/src/browser/widgets/split-widget.ts +163 -0
- package/src/browser/widgets/widget.ts +406 -406
- package/src/browser/window/browser-window-module.ts +32 -32
- package/src/browser/window/default-secondary-window-service.ts +189 -189
- package/src/browser/window/default-window-service.spec.ts +78 -78
- package/src/browser/window/default-window-service.ts +171 -171
- package/src/browser/window/secondary-window-service.ts +39 -39
- package/src/browser/window/test/mock-window-service.ts +29 -29
- package/src/browser/window/window-service.ts +78 -78
- package/src/browser/window/window-title-service.ts +107 -107
- package/src/browser/window/window-title-updater.ts +95 -95
- package/src/browser/window-contribution.ts +64 -64
- package/src/browser-only/frontend-only-application-module.ts +116 -116
- package/src/browser-only/i18n/i18n-frontend-only-module.ts +37 -37
- package/src/browser-only/logger-frontend-only-module.ts +63 -63
- package/src/browser-only/messaging/frontend-only-service-connection-provider.ts +39 -39
- package/src/browser-only/messaging/messaging-frontend-only-module.ts +42 -42
- package/src/browser-only/preload/frontend-only-preload-module.ts +49 -49
- package/src/common/accessibility.ts +33 -33
- package/src/common/application-error.spec.ts +27 -27
- package/src/common/application-error.ts +76 -76
- package/src/common/application-protocol.ts +42 -42
- package/src/common/array-utils.ts +129 -129
- package/src/common/buffer.ts +228 -228
- package/src/common/cancellation.ts +163 -163
- package/src/common/char-code.ts +438 -438
- package/src/common/collections.ts +125 -125
- package/src/common/color.ts +103 -103
- package/src/common/command.spec.ts +208 -208
- package/src/common/command.ts +489 -489
- package/src/common/contribution-filter/contribution-filter-registry.ts +79 -79
- package/src/common/contribution-filter/contribution-filter.ts +64 -64
- package/src/common/contribution-filter/filter.ts +23 -23
- package/src/common/contribution-filter/index.ts +19 -19
- package/src/common/contribution-provider.ts +96 -96
- package/src/common/disposable.spec.ts +94 -94
- package/src/common/disposable.ts +188 -188
- package/src/common/encoding-service.ts +380 -380
- package/src/common/encodings.ts +24 -24
- package/src/common/env-variables/env-variables-protocol.ts +38 -38
- package/src/common/env-variables/index.ts +17 -17
- package/src/common/event.spec.ts +32 -32
- package/src/common/event.ts +493 -487
- package/src/common/file-uri.ts +61 -61
- package/src/common/frontend-application-state.ts +38 -38
- package/src/common/glob.ts +741 -741
- package/src/common/hash.ts +85 -85
- package/src/common/i18n/localization-server.ts +25 -25
- package/src/common/i18n/localization.ts +80 -80
- package/src/common/i18n/nls.metadata.json +34112 -34112
- package/src/common/index.ts +51 -51
- package/src/common/json-schema.ts +108 -106
- package/src/common/key-store.ts +26 -26
- package/src/common/keybinding.ts +152 -152
- package/src/common/keyboard/keyboard-layout-provider.ts +51 -51
- package/src/common/keys.ts +694 -694
- package/src/common/label-protocol.ts +35 -35
- package/src/common/logger-protocol.ts +119 -119
- package/src/common/logger-watcher.ts +48 -48
- package/src/common/logger.spec.ts +46 -46
- package/src/common/logger.ts +389 -389
- package/src/common/lsp-types.ts +34 -34
- package/src/common/markdown-rendering/icon-utilities.ts +30 -30
- package/src/common/markdown-rendering/index.ts +18 -18
- package/src/common/markdown-rendering/markdown-string.ts +152 -152
- package/src/common/menu/action-menu-node.ts +65 -65
- package/src/common/menu/composite-menu-node.spec.ts +67 -67
- package/src/common/menu/composite-menu-node.ts +114 -114
- package/src/common/menu/index.ts +21 -21
- package/src/common/menu/menu-adapter.ts +103 -103
- package/src/common/menu/menu-model-registry.ts +374 -374
- package/src/common/menu/menu-types.ts +220 -219
- package/src/common/menu/menu.spec.ts +101 -101
- package/src/common/message-rpc/channel.spec.ts +88 -88
- package/src/common/message-rpc/channel.ts +300 -300
- package/src/common/message-rpc/index.ts +22 -22
- package/src/common/message-rpc/message-buffer.ts +105 -105
- package/src/common/message-rpc/msg-pack-extension-manager.ts +70 -70
- package/src/common/message-rpc/rpc-message-encoder.spec.ts +65 -65
- package/src/common/message-rpc/rpc-message-encoder.ts +190 -190
- package/src/common/message-rpc/rpc-protocol.ts +255 -255
- package/src/common/message-rpc/uint8-array-message-buffer.spec.ts +41 -41
- package/src/common/message-rpc/uint8-array-message-buffer.ts +213 -213
- package/src/common/message-service-protocol.ts +148 -148
- package/src/common/message-service.ts +226 -226
- package/src/common/messaging/connection-error-handler.ts +73 -73
- package/src/common/messaging/connection-management.ts +43 -43
- package/src/common/messaging/handler.ts +26 -26
- package/src/common/messaging/index.ts +19 -19
- package/src/common/messaging/proxy-factory.spec.ts +108 -108
- package/src/common/messaging/proxy-factory.ts +336 -336
- package/src/common/messaging/socket-write-buffer.ts +52 -52
- package/src/common/messaging/web-socket-channel.ts +76 -76
- package/src/common/nls.ts +151 -151
- package/src/common/numbers.ts +21 -21
- package/src/common/objects.spec.ts +112 -112
- package/src/common/objects.ts +123 -123
- package/src/common/os.ts +82 -82
- package/src/common/path.spec.ts +415 -415
- package/src/common/path.ts +334 -334
- package/src/common/paths.ts +250 -250
- package/src/common/performance/index.ts +19 -19
- package/src/common/performance/measurement-protocol.ts +104 -104
- package/src/common/performance/measurement.ts +130 -130
- package/src/common/performance/stopwatch.ts +183 -183
- package/src/common/preferences/preference-schema.ts +101 -101
- package/src/common/preferences/preference-scope.spec.ts +48 -48
- package/src/common/preferences/preference-scope.ts +68 -68
- package/src/common/prioritizeable.ts +58 -58
- package/src/common/progress-service-protocol.ts +35 -35
- package/src/common/progress-service.ts +82 -82
- package/src/common/promise-util.spec.ts +102 -102
- package/src/common/promise-util.ts +143 -143
- package/src/common/quick-pick-service.ts +353 -353
- package/src/common/reference.spec.ts +145 -145
- package/src/common/reference.ts +230 -230
- package/src/common/resource.ts +430 -430
- package/src/common/selection-command-handler.ts +101 -101
- package/src/common/selection-service.spec.ts +43 -43
- package/src/common/selection-service.ts +49 -49
- package/src/common/selection.ts +50 -50
- package/src/common/severity.ts +111 -111
- package/src/common/stream.ts +718 -718
- package/src/common/strings.ts +231 -231
- package/src/common/telemetry.ts +45 -45
- package/src/common/ternary-search-tree.ts +417 -417
- package/src/common/test/expect.ts +34 -34
- package/src/common/test/mock-logger.ts +118 -118
- package/src/common/test/mock-menu.ts +35 -35
- package/src/common/test/mock-resource-provider.ts +33 -33
- package/src/common/theme.ts +68 -68
- package/src/common/types.spec.ts +86 -86
- package/src/common/types.ts +140 -140
- package/src/common/uri-command-handler.spec.ts +90 -90
- package/src/common/uri-command-handler.ts +148 -148
- package/src/common/uri.spec.ts +278 -278
- package/src/common/uri.ts +279 -279
- package/src/common/uuid.ts +45 -45
- package/src/common/version.ts +17 -17
- package/src/common/view-column.ts +33 -33
- package/src/common/window.ts +34 -34
- package/src/electron-browser/electron-clipboard-service.ts +32 -32
- package/src/electron-browser/electron-uri-handler.ts +42 -0
- package/src/electron-browser/keyboard/electron-keyboard-layout-change-notifier.ts +39 -39
- package/src/electron-browser/keyboard/electron-keyboard-module.ts +28 -28
- package/src/electron-browser/menu/electron-context-menu-renderer.ts +122 -122
- package/src/electron-browser/menu/electron-main-menu-factory.ts +339 -338
- package/src/electron-browser/menu/electron-menu-contribution.ts +506 -506
- package/src/electron-browser/menu/electron-menu-module.ts +40 -40
- package/src/electron-browser/menu/electron-menu-style.css +110 -110
- package/src/electron-browser/messaging/electron-frontend-id-provider.ts +25 -25
- package/src/electron-browser/messaging/electron-ipc-connection-source.ts +65 -65
- package/src/electron-browser/messaging/electron-local-ws-connection-source.ts +45 -45
- package/src/electron-browser/messaging/electron-messaging-frontend-module.ts +78 -78
- package/src/electron-browser/messaging/electron-ws-connection-source.ts +38 -38
- package/src/electron-browser/preload.ts +264 -249
- package/src/electron-browser/request/electron-browser-request-module.ts +26 -26
- package/src/electron-browser/token/electron-token-frontend-module.ts +22 -22
- package/src/electron-browser/window/electron-frontend-application-state.ts +26 -26
- package/src/electron-browser/window/electron-secondary-window-service.ts +35 -35
- package/src/electron-browser/window/electron-window-module.ts +48 -45
- package/src/electron-browser/window/electron-window-preferences.ts +76 -76
- package/src/electron-browser/window/electron-window-service.ts +109 -109
- package/src/electron-browser/window/external-app-open-handler.ts +42 -42
- package/src/electron-common/electron-api.ts +157 -154
- package/src/electron-common/electron-main-window-service.ts +24 -24
- package/src/electron-common/electron-token.ts +27 -27
- package/src/electron-main/electron-api-main.ts +373 -347
- package/src/electron-main/electron-main-application-module.ts +65 -65
- package/src/electron-main/electron-main-application.ts +860 -818
- package/src/electron-main/electron-main-constants.ts +23 -23
- package/src/electron-main/electron-main-window-service-impl.ts +44 -44
- package/src/electron-main/electron-security-token-service.ts +36 -36
- package/src/electron-main/event-utils.ts +36 -36
- package/src/electron-main/messaging/electron-connection-handler.ts +21 -21
- package/src/electron-main/messaging/electron-messaging-contribution.ts +143 -143
- package/src/electron-main/messaging/electron-messaging-service.ts +35 -35
- package/src/electron-main/theia-electron-window.ts +219 -214
- package/src/electron-node/cli/electron-backend-cli-module.ts +24 -24
- package/src/electron-node/cli/electron-cli-contribution.ts +35 -35
- package/src/electron-node/hosting/electron-backend-hosting-module.ts +24 -24
- package/src/electron-node/hosting/electron-ws-origin-validator.ts +37 -37
- package/src/electron-node/keyboard/electron-backend-keyboard-module.ts +30 -30
- package/src/electron-node/keyboard/electron-keyboard-layout-provider.ts +35 -35
- package/src/electron-node/request/electron-backend-request-module.ts +23 -23
- package/src/electron-node/request/electron-backend-request-service.ts +78 -78
- package/src/electron-node/token/electron-token-backend-contribution.ts +48 -48
- package/src/electron-node/token/electron-token-backend-module.ts +28 -28
- package/src/electron-node/token/electron-token-validator.ts +93 -93
- package/src/node/application-server.ts +59 -59
- package/src/node/backend-application-config-provider.spec.ts +29 -29
- package/src/node/backend-application-config-provider.ts +48 -48
- package/src/node/backend-application-module.ts +139 -139
- package/src/node/backend-application.ts +374 -374
- package/src/node/cli.spec.ts +94 -94
- package/src/node/cli.ts +63 -63
- package/src/node/console-logger-server.spec.ts +59 -59
- package/src/node/console-logger-server.ts +76 -76
- package/src/node/debug.ts +30 -30
- package/src/node/dynamic-require.ts +56 -56
- package/src/node/env-variables/env-variables-server.ts +123 -123
- package/src/node/env-variables/index.ts +17 -17
- package/src/node/environment-utils.spec.ts +92 -92
- package/src/node/environment-utils.ts +66 -66
- package/src/node/file-uri.spec.ts +76 -76
- package/src/node/filesystem-locking.ts +77 -77
- package/src/node/hosting/backend-application-hosts.ts +60 -60
- package/src/node/hosting/backend-hosting-module.ts +26 -26
- package/src/node/hosting/ws-origin-validator.ts +36 -36
- package/src/node/i18n/i18n-backend-module.ts +42 -42
- package/src/node/i18n/localization-contribution.ts +112 -112
- package/src/node/i18n/localization-provider.ts +125 -125
- package/src/node/i18n/localization-server.ts +52 -52
- package/src/node/i18n/theia-localization-contribution.ts +40 -36
- package/src/node/index.ts +22 -22
- package/src/node/key-store-server.ts +162 -162
- package/src/node/logger-backend-module.ts +88 -88
- package/src/node/logger-cli-contribution.spec.ts +245 -245
- package/src/node/logger-cli-contribution.ts +168 -168
- package/src/node/main.ts +33 -33
- package/src/node/messaging/binary-message-pipe.ts +168 -168
- package/src/node/messaging/connection-container-module.ts +96 -96
- package/src/node/messaging/default-messaging-service.ts +129 -129
- package/src/node/messaging/frontend-connection-service.ts +24 -24
- package/src/node/messaging/index.ts +19 -19
- package/src/node/messaging/ipc-bootstrap.ts +27 -27
- package/src/node/messaging/ipc-channel.ts +77 -77
- package/src/node/messaging/ipc-connection-provider.ts +107 -107
- package/src/node/messaging/ipc-protocol.ts +76 -76
- package/src/node/messaging/messaging-backend-module.ts +52 -52
- package/src/node/messaging/messaging-listeners.ts +52 -52
- package/src/node/messaging/messaging-service.ts +46 -46
- package/src/node/messaging/test/test-web-socket-channel.ts +61 -61
- package/src/node/messaging/websocket-endpoint.ts +79 -79
- package/src/node/messaging/websocket-frontend-connection-service.ts +186 -186
- package/src/node/os-backend-provider.ts +25 -25
- package/src/node/performance/index.ts +18 -18
- package/src/node/performance/measurement-backend-bindings.ts +35 -35
- package/src/node/performance/node-stopwatch.ts +40 -40
- package/src/node/process-utils.spec.ts +48 -48
- package/src/node/process-utils.ts +102 -102
- package/src/node/remote/backend-remote-service.ts +25 -25
- package/src/node/remote/remote-cli-contribution.ts +34 -34
- package/src/node/remote/remote-copy-contribution.ts +45 -45
- package/src/node/request/backend-request-facade.ts +39 -39
- package/src/node/request/backend-request-module.ts +25 -25
- package/src/node/request/proxy-cli-contribution.ts +65 -65
- package/src/node/ws-request-validators.ts +56 -56
- package/src/typings/native-keymap.d.ts +108 -108
- package/i18n/nls.pt-pt.json +0 -552
|
@@ -1,367 +1,367 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2018 TypeFox and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
18
|
-
|
|
19
|
-
import { Disposable, Event, isObject, MaybePromise } from '../../common';
|
|
20
|
-
import { PreferenceService } from './preference-service';
|
|
21
|
-
import { PreferenceSchema } from './preference-contribution';
|
|
22
|
-
import { PreferenceScope } from './preference-scope';
|
|
23
|
-
import { OverridePreferenceName } from './preference-language-override-service';
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* It is worth explaining the type for `PreferenceChangeEvent`:
|
|
27
|
-
*
|
|
28
|
-
* // Given T:
|
|
29
|
-
* type T = { a: string, b: number }
|
|
30
|
-
*
|
|
31
|
-
* // We construct a new type such as:
|
|
32
|
-
* type U = {
|
|
33
|
-
* a: {
|
|
34
|
-
* preferenceName: 'a'
|
|
35
|
-
* newValue: string
|
|
36
|
-
* oldValue?: string
|
|
37
|
-
* }
|
|
38
|
-
* b: {
|
|
39
|
-
* preferenceName: 'b'
|
|
40
|
-
* newValue: number
|
|
41
|
-
* oldValue?: number
|
|
42
|
-
* }
|
|
43
|
-
* }
|
|
44
|
-
*
|
|
45
|
-
* // Then we get the union of all values of U by selecting by `keyof T`:
|
|
46
|
-
* type V = U[keyof T]
|
|
47
|
-
*
|
|
48
|
-
* // Implementation:
|
|
49
|
-
* type PreferenceChangeEvent<T> = {
|
|
50
|
-
* // Create a mapping where each key is a key from T,
|
|
51
|
-
* // -? normalizes optional typings to avoid getting
|
|
52
|
-
* // `undefined` as part of the final union:
|
|
53
|
-
* [K in keyof T]-?: {
|
|
54
|
-
* // In this object, K will take the value of each
|
|
55
|
-
* // independent key from T:
|
|
56
|
-
* preferenceName: K
|
|
57
|
-
* newValue: T[K]
|
|
58
|
-
* oldValue?: T[K]
|
|
59
|
-
* // Finally we create the union by doing so:
|
|
60
|
-
* }[keyof T]
|
|
61
|
-
* }
|
|
62
|
-
*/
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Union of all possible key/value pairs for a type `T`
|
|
66
|
-
*/
|
|
67
|
-
export type PreferenceChangeEvent<T> = {
|
|
68
|
-
affects(resourceUri?: string, overrideIdentifier?: string): boolean;
|
|
69
|
-
} & {
|
|
70
|
-
[K in keyof T]-?: {
|
|
71
|
-
readonly preferenceName: K;
|
|
72
|
-
readonly newValue: T[K];
|
|
73
|
-
/**
|
|
74
|
-
* Undefined if the preference is set for the first time.
|
|
75
|
-
*/
|
|
76
|
-
// TODO: Use the default value instead of undefined?
|
|
77
|
-
readonly oldValue?: T[K];
|
|
78
|
-
}
|
|
79
|
-
}[keyof T];
|
|
80
|
-
|
|
81
|
-
export interface PreferenceEventEmitter<T> {
|
|
82
|
-
readonly onPreferenceChanged: Event<PreferenceChangeEvent<T>>;
|
|
83
|
-
readonly ready: Promise<void>;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Generic interface to declare a typesafe get function based on the given
|
|
88
|
-
* configuration type.
|
|
89
|
-
*
|
|
90
|
-
* ### Illustration
|
|
91
|
-
*
|
|
92
|
-
* ```ts
|
|
93
|
-
* interface PreferenceConfiguration {
|
|
94
|
-
* 'myext.enabled': boolean,
|
|
95
|
-
* }
|
|
96
|
-
* const enabled : boolean = prefs.get('myext.enabled'); // valid
|
|
97
|
-
* const debug : string = prefs.get('myext.enabled'); // invalid
|
|
98
|
-
* prefs.get('foobar'); // invalid
|
|
99
|
-
* ```
|
|
100
|
-
*/
|
|
101
|
-
export interface PreferenceRetrieval<T> {
|
|
102
|
-
get<K extends keyof T>(preferenceName: K | {
|
|
103
|
-
preferenceName: K,
|
|
104
|
-
overrideIdentifier?: string
|
|
105
|
-
}, defaultValue?: T[K], resourceUri?: string): T[K];
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Typesafe schema-based preferences utility based on the {@link PreferenceService}.
|
|
110
|
-
* Can be used to get preferences as well as listen to preference changes.
|
|
111
|
-
*
|
|
112
|
-
* See {@link createPreferenceProxy} on how to instantiate preference proxies.
|
|
113
|
-
*
|
|
114
|
-
* ### Example usage
|
|
115
|
-
*
|
|
116
|
-
* ```ts
|
|
117
|
-
* preferences.onPreferenceChanged(({ preferenceName, newValue }) => { ... });
|
|
118
|
-
* const enabled = preferences['myext.enabled'];
|
|
119
|
-
* ```
|
|
120
|
-
*/
|
|
121
|
-
export type PreferenceProxy<T> = Readonly<T> & Disposable & PreferenceEventEmitter<T> & PreferenceRetrieval<T>;
|
|
122
|
-
export const PreferenceProxyOptions = Symbol('PreferenceProxyOptions');
|
|
123
|
-
/**
|
|
124
|
-
* Proxy configuration parameters.
|
|
125
|
-
*/
|
|
126
|
-
export interface PreferenceProxyOptions {
|
|
127
|
-
/**
|
|
128
|
-
* Prefix which is transparently added to all preference identifiers.
|
|
129
|
-
*/
|
|
130
|
-
prefix?: string;
|
|
131
|
-
/**
|
|
132
|
-
* The default resourceUri to use if none was specified when calling "set" or "get".
|
|
133
|
-
*/
|
|
134
|
-
resourceUri?: string;
|
|
135
|
-
/**
|
|
136
|
-
* The overrideIdentifier to use with the underlying preferenceService.
|
|
137
|
-
* Useful to potentially override existing values while keeping both values in store.
|
|
138
|
-
*
|
|
139
|
-
* For example to store different editor settings, e.g. "[markdown].editor.autoIndent",
|
|
140
|
-
* "[json].editor.autoIndent" and "editor.autoIndent"
|
|
141
|
-
*/
|
|
142
|
-
overrideIdentifier?: string;
|
|
143
|
-
/**
|
|
144
|
-
* Indicates whether '.' in schema properties shall be interpreted as regular names (flat),
|
|
145
|
-
* as declaring nested objects (deep) or both. Default is flat.
|
|
146
|
-
*
|
|
147
|
-
* When 'deep' or 'both' is given, nested preference proxies can be retrieved.
|
|
148
|
-
*/
|
|
149
|
-
style?: 'flat' | 'deep' | 'both';
|
|
150
|
-
/**
|
|
151
|
-
* Indicates whether the proxy should be disposable. Proxies that are shared between multiple callers should not be disposable.
|
|
152
|
-
*/
|
|
153
|
-
isDisposable?: boolean;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Creates a preference proxy for typesafe preference handling.
|
|
158
|
-
*
|
|
159
|
-
* @param preferences the underlying preference service to use for preference handling.
|
|
160
|
-
* @param promisedSchema the JSON Schema which describes which preferences are available including types and descriptions. Can be a promise.
|
|
161
|
-
* @param options configuration options.
|
|
162
|
-
*
|
|
163
|
-
* @returns the created preference proxy.
|
|
164
|
-
*
|
|
165
|
-
* ### Usage
|
|
166
|
-
*
|
|
167
|
-
* 1. Create JSON Schema specifying your preferences
|
|
168
|
-
* 2. Create Configuration type based on the JSON Schema
|
|
169
|
-
* 3. Bind the return value of `createPreferenceProxy` to make your preferences available wherever needed.
|
|
170
|
-
*
|
|
171
|
-
* See {@link CorePreferences} for an example.
|
|
172
|
-
*
|
|
173
|
-
* Note that if `schema` is a Promise, most actions will be no-ops until the promise is resolved.
|
|
174
|
-
*
|
|
175
|
-
* @deprecated @since 1.23.0 use `PreferenceProxyFactory` instead.
|
|
176
|
-
*/
|
|
177
|
-
export function createPreferenceProxy<T>(preferences: PreferenceService, promisedSchema: MaybePromise<PreferenceSchema>, options?: PreferenceProxyOptions): PreferenceProxy<T> {
|
|
178
|
-
const opts = options || {};
|
|
179
|
-
const prefix = opts.prefix || '';
|
|
180
|
-
const style = opts.style || 'flat';
|
|
181
|
-
const isDeep = style === 'deep' || style === 'both';
|
|
182
|
-
const isFlat = style === 'both' || style === 'flat';
|
|
183
|
-
let schema: PreferenceSchema | undefined;
|
|
184
|
-
if (PreferenceSchema.is(promisedSchema)) {
|
|
185
|
-
schema = promisedSchema;
|
|
186
|
-
} else {
|
|
187
|
-
promisedSchema.then(s => schema = s);
|
|
188
|
-
}
|
|
189
|
-
const onPreferenceChanged = (listener: (e: PreferenceChangeEvent<T>) => any, thisArgs?: any, disposables?: Disposable[]) => preferences.onPreferencesChanged(changes => {
|
|
190
|
-
if (schema) {
|
|
191
|
-
for (const key of Object.keys(changes)) {
|
|
192
|
-
const e = changes[key];
|
|
193
|
-
const overridden = preferences.overriddenPreferenceName(e.preferenceName);
|
|
194
|
-
const preferenceName: any = overridden ? overridden.preferenceName : e.preferenceName;
|
|
195
|
-
if (preferenceName.startsWith(prefix) && (!opts.overrideIdentifier || overridden?.overrideIdentifier === opts.overrideIdentifier)) {
|
|
196
|
-
if (schema.properties[preferenceName]) {
|
|
197
|
-
const { newValue, oldValue } = e;
|
|
198
|
-
listener({
|
|
199
|
-
newValue, oldValue, preferenceName,
|
|
200
|
-
affects: (resourceUri, overrideIdentifier) => {
|
|
201
|
-
if (overrideIdentifier !== overridden?.overrideIdentifier) {
|
|
202
|
-
return false;
|
|
203
|
-
}
|
|
204
|
-
return e.affects(resourceUri);
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}, thisArgs, disposables);
|
|
212
|
-
|
|
213
|
-
const unsupportedOperation = (_: any, __: string) => {
|
|
214
|
-
throw new Error('Unsupported operation');
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
const getValue: PreferenceRetrieval<any>['get'] = (arg, defaultValue, resourceUri) => {
|
|
218
|
-
const preferenceName = OverridePreferenceName.is(arg) ?
|
|
219
|
-
preferences.overridePreferenceName(arg) :
|
|
220
|
-
<string>arg;
|
|
221
|
-
return preferences.get(preferenceName, defaultValue, resourceUri || opts.resourceUri);
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
const ownKeys: () => string[] = () => {
|
|
225
|
-
const properties = [];
|
|
226
|
-
if (schema) {
|
|
227
|
-
for (const p of Object.keys(schema.properties)) {
|
|
228
|
-
if (p.startsWith(prefix)) {
|
|
229
|
-
const idx = p.indexOf('.', prefix.length);
|
|
230
|
-
if (idx !== -1 && isDeep) {
|
|
231
|
-
const pre = p.substring(prefix.length, idx);
|
|
232
|
-
if (properties.indexOf(pre) === -1) {
|
|
233
|
-
properties.push(pre);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
const prop = p.substring(prefix.length);
|
|
237
|
-
if (isFlat || prop.indexOf('.') === -1) {
|
|
238
|
-
properties.push(prop);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
return properties;
|
|
244
|
-
};
|
|
245
|
-
|
|
246
|
-
const set: (target: any, prop: string, value: any, receiver: any) => boolean = (_, property: string | symbol | number, value: any) => {
|
|
247
|
-
if (typeof property !== 'string') {
|
|
248
|
-
throw new Error(`unexpected property: ${String(property)}`);
|
|
249
|
-
}
|
|
250
|
-
if (style === 'deep' && property.indexOf('.') !== -1) {
|
|
251
|
-
return false;
|
|
252
|
-
}
|
|
253
|
-
if (schema) {
|
|
254
|
-
const fullProperty = prefix ? prefix + property : property;
|
|
255
|
-
if (schema.properties[fullProperty]) {
|
|
256
|
-
preferences.set(fullProperty, value, PreferenceScope.Default);
|
|
257
|
-
return true;
|
|
258
|
-
}
|
|
259
|
-
const newPrefix = fullProperty + '.';
|
|
260
|
-
for (const p of Object.keys(schema.properties)) {
|
|
261
|
-
if (p.startsWith(newPrefix)) {
|
|
262
|
-
const subProxy: { [k: string]: any } = createPreferenceProxy(preferences, schema, {
|
|
263
|
-
prefix: newPrefix,
|
|
264
|
-
resourceUri: opts.resourceUri,
|
|
265
|
-
overrideIdentifier: opts.overrideIdentifier,
|
|
266
|
-
style
|
|
267
|
-
});
|
|
268
|
-
for (const k of Object.keys(value)) {
|
|
269
|
-
subProxy[k] = value[k];
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
return false;
|
|
275
|
-
};
|
|
276
|
-
|
|
277
|
-
const get: (target: any, prop: string) => any = (_, property: string | symbol | number) => {
|
|
278
|
-
if (typeof property !== 'string') {
|
|
279
|
-
throw new Error(`unexpected property: ${String(property)}`);
|
|
280
|
-
}
|
|
281
|
-
const fullProperty = prefix ? prefix + property : property;
|
|
282
|
-
if (schema) {
|
|
283
|
-
if (isFlat || property.indexOf('.') === -1) {
|
|
284
|
-
if (schema.properties[fullProperty]) {
|
|
285
|
-
let value;
|
|
286
|
-
if (opts.overrideIdentifier) {
|
|
287
|
-
value = preferences.get(preferences.overridePreferenceName({
|
|
288
|
-
overrideIdentifier: opts.overrideIdentifier,
|
|
289
|
-
preferenceName: fullProperty
|
|
290
|
-
}), undefined, opts.resourceUri);
|
|
291
|
-
}
|
|
292
|
-
if (value === undefined) {
|
|
293
|
-
value = preferences.get(fullProperty, undefined, opts.resourceUri);
|
|
294
|
-
}
|
|
295
|
-
return value;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
if (property === 'onPreferenceChanged') {
|
|
300
|
-
return onPreferenceChanged;
|
|
301
|
-
}
|
|
302
|
-
if (property === 'dispose') {
|
|
303
|
-
return () => { /* do nothing */ };
|
|
304
|
-
}
|
|
305
|
-
if (property === 'ready') {
|
|
306
|
-
return preferences.ready;
|
|
307
|
-
}
|
|
308
|
-
if (property === 'get') {
|
|
309
|
-
return getValue;
|
|
310
|
-
}
|
|
311
|
-
if (property === 'toJSON') {
|
|
312
|
-
return toJSON();
|
|
313
|
-
}
|
|
314
|
-
if (schema && isDeep) {
|
|
315
|
-
const newPrefix = fullProperty + '.';
|
|
316
|
-
for (const p of Object.keys(schema.properties)) {
|
|
317
|
-
if (p.startsWith(newPrefix)) {
|
|
318
|
-
return createPreferenceProxy(preferences, schema, { prefix: newPrefix, resourceUri: opts.resourceUri, overrideIdentifier: opts.overrideIdentifier, style });
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
let value;
|
|
323
|
-
let parentSegment = fullProperty;
|
|
324
|
-
const segments = [];
|
|
325
|
-
do {
|
|
326
|
-
const index = parentSegment.lastIndexOf('.');
|
|
327
|
-
segments.push(parentSegment.substring(index + 1));
|
|
328
|
-
parentSegment = parentSegment.substring(0, index);
|
|
329
|
-
if (parentSegment in schema.properties) {
|
|
330
|
-
value = get(_, parentSegment);
|
|
331
|
-
}
|
|
332
|
-
} while (parentSegment && value === undefined);
|
|
333
|
-
|
|
334
|
-
let segment;
|
|
335
|
-
while (isObject(value) && (segment = segments.pop())) {
|
|
336
|
-
value = value[segment];
|
|
337
|
-
}
|
|
338
|
-
return segments.length ? undefined : value;
|
|
339
|
-
}
|
|
340
|
-
return undefined;
|
|
341
|
-
};
|
|
342
|
-
|
|
343
|
-
const toJSON = () => {
|
|
344
|
-
const result: any = {};
|
|
345
|
-
for (const k of ownKeys()) {
|
|
346
|
-
result[k] = get(undefined, k);
|
|
347
|
-
}
|
|
348
|
-
return result;
|
|
349
|
-
};
|
|
350
|
-
|
|
351
|
-
return new Proxy({}, {
|
|
352
|
-
get,
|
|
353
|
-
ownKeys,
|
|
354
|
-
getOwnPropertyDescriptor: (_, property: string) => {
|
|
355
|
-
if (ownKeys().indexOf(property) !== -1) {
|
|
356
|
-
return {
|
|
357
|
-
enumerable: true,
|
|
358
|
-
configurable: true
|
|
359
|
-
};
|
|
360
|
-
}
|
|
361
|
-
return {};
|
|
362
|
-
},
|
|
363
|
-
set,
|
|
364
|
-
deleteProperty: unsupportedOperation,
|
|
365
|
-
defineProperty: unsupportedOperation
|
|
366
|
-
});
|
|
367
|
-
}
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2018 TypeFox and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
18
|
+
|
|
19
|
+
import { Disposable, Event, isObject, MaybePromise } from '../../common';
|
|
20
|
+
import { PreferenceService } from './preference-service';
|
|
21
|
+
import { PreferenceSchema } from './preference-contribution';
|
|
22
|
+
import { PreferenceScope } from './preference-scope';
|
|
23
|
+
import { OverridePreferenceName } from './preference-language-override-service';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* It is worth explaining the type for `PreferenceChangeEvent`:
|
|
27
|
+
*
|
|
28
|
+
* // Given T:
|
|
29
|
+
* type T = { a: string, b: number }
|
|
30
|
+
*
|
|
31
|
+
* // We construct a new type such as:
|
|
32
|
+
* type U = {
|
|
33
|
+
* a: {
|
|
34
|
+
* preferenceName: 'a'
|
|
35
|
+
* newValue: string
|
|
36
|
+
* oldValue?: string
|
|
37
|
+
* }
|
|
38
|
+
* b: {
|
|
39
|
+
* preferenceName: 'b'
|
|
40
|
+
* newValue: number
|
|
41
|
+
* oldValue?: number
|
|
42
|
+
* }
|
|
43
|
+
* }
|
|
44
|
+
*
|
|
45
|
+
* // Then we get the union of all values of U by selecting by `keyof T`:
|
|
46
|
+
* type V = U[keyof T]
|
|
47
|
+
*
|
|
48
|
+
* // Implementation:
|
|
49
|
+
* type PreferenceChangeEvent<T> = {
|
|
50
|
+
* // Create a mapping where each key is a key from T,
|
|
51
|
+
* // -? normalizes optional typings to avoid getting
|
|
52
|
+
* // `undefined` as part of the final union:
|
|
53
|
+
* [K in keyof T]-?: {
|
|
54
|
+
* // In this object, K will take the value of each
|
|
55
|
+
* // independent key from T:
|
|
56
|
+
* preferenceName: K
|
|
57
|
+
* newValue: T[K]
|
|
58
|
+
* oldValue?: T[K]
|
|
59
|
+
* // Finally we create the union by doing so:
|
|
60
|
+
* }[keyof T]
|
|
61
|
+
* }
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Union of all possible key/value pairs for a type `T`
|
|
66
|
+
*/
|
|
67
|
+
export type PreferenceChangeEvent<T> = {
|
|
68
|
+
affects(resourceUri?: string, overrideIdentifier?: string): boolean;
|
|
69
|
+
} & {
|
|
70
|
+
[K in keyof T]-?: {
|
|
71
|
+
readonly preferenceName: K;
|
|
72
|
+
readonly newValue: T[K];
|
|
73
|
+
/**
|
|
74
|
+
* Undefined if the preference is set for the first time.
|
|
75
|
+
*/
|
|
76
|
+
// TODO: Use the default value instead of undefined?
|
|
77
|
+
readonly oldValue?: T[K];
|
|
78
|
+
}
|
|
79
|
+
}[keyof T];
|
|
80
|
+
|
|
81
|
+
export interface PreferenceEventEmitter<T> {
|
|
82
|
+
readonly onPreferenceChanged: Event<PreferenceChangeEvent<T>>;
|
|
83
|
+
readonly ready: Promise<void>;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Generic interface to declare a typesafe get function based on the given
|
|
88
|
+
* configuration type.
|
|
89
|
+
*
|
|
90
|
+
* ### Illustration
|
|
91
|
+
*
|
|
92
|
+
* ```ts
|
|
93
|
+
* interface PreferenceConfiguration {
|
|
94
|
+
* 'myext.enabled': boolean,
|
|
95
|
+
* }
|
|
96
|
+
* const enabled : boolean = prefs.get('myext.enabled'); // valid
|
|
97
|
+
* const debug : string = prefs.get('myext.enabled'); // invalid
|
|
98
|
+
* prefs.get('foobar'); // invalid
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export interface PreferenceRetrieval<T> {
|
|
102
|
+
get<K extends keyof T>(preferenceName: K | {
|
|
103
|
+
preferenceName: K,
|
|
104
|
+
overrideIdentifier?: string
|
|
105
|
+
}, defaultValue?: T[K], resourceUri?: string): T[K];
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Typesafe schema-based preferences utility based on the {@link PreferenceService}.
|
|
110
|
+
* Can be used to get preferences as well as listen to preference changes.
|
|
111
|
+
*
|
|
112
|
+
* See {@link createPreferenceProxy} on how to instantiate preference proxies.
|
|
113
|
+
*
|
|
114
|
+
* ### Example usage
|
|
115
|
+
*
|
|
116
|
+
* ```ts
|
|
117
|
+
* preferences.onPreferenceChanged(({ preferenceName, newValue }) => { ... });
|
|
118
|
+
* const enabled = preferences['myext.enabled'];
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
export type PreferenceProxy<T> = Readonly<T> & Disposable & PreferenceEventEmitter<T> & PreferenceRetrieval<T>;
|
|
122
|
+
export const PreferenceProxyOptions = Symbol('PreferenceProxyOptions');
|
|
123
|
+
/**
|
|
124
|
+
* Proxy configuration parameters.
|
|
125
|
+
*/
|
|
126
|
+
export interface PreferenceProxyOptions {
|
|
127
|
+
/**
|
|
128
|
+
* Prefix which is transparently added to all preference identifiers.
|
|
129
|
+
*/
|
|
130
|
+
prefix?: string;
|
|
131
|
+
/**
|
|
132
|
+
* The default resourceUri to use if none was specified when calling "set" or "get".
|
|
133
|
+
*/
|
|
134
|
+
resourceUri?: string;
|
|
135
|
+
/**
|
|
136
|
+
* The overrideIdentifier to use with the underlying preferenceService.
|
|
137
|
+
* Useful to potentially override existing values while keeping both values in store.
|
|
138
|
+
*
|
|
139
|
+
* For example to store different editor settings, e.g. "[markdown].editor.autoIndent",
|
|
140
|
+
* "[json].editor.autoIndent" and "editor.autoIndent"
|
|
141
|
+
*/
|
|
142
|
+
overrideIdentifier?: string;
|
|
143
|
+
/**
|
|
144
|
+
* Indicates whether '.' in schema properties shall be interpreted as regular names (flat),
|
|
145
|
+
* as declaring nested objects (deep) or both. Default is flat.
|
|
146
|
+
*
|
|
147
|
+
* When 'deep' or 'both' is given, nested preference proxies can be retrieved.
|
|
148
|
+
*/
|
|
149
|
+
style?: 'flat' | 'deep' | 'both';
|
|
150
|
+
/**
|
|
151
|
+
* Indicates whether the proxy should be disposable. Proxies that are shared between multiple callers should not be disposable.
|
|
152
|
+
*/
|
|
153
|
+
isDisposable?: boolean;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Creates a preference proxy for typesafe preference handling.
|
|
158
|
+
*
|
|
159
|
+
* @param preferences the underlying preference service to use for preference handling.
|
|
160
|
+
* @param promisedSchema the JSON Schema which describes which preferences are available including types and descriptions. Can be a promise.
|
|
161
|
+
* @param options configuration options.
|
|
162
|
+
*
|
|
163
|
+
* @returns the created preference proxy.
|
|
164
|
+
*
|
|
165
|
+
* ### Usage
|
|
166
|
+
*
|
|
167
|
+
* 1. Create JSON Schema specifying your preferences
|
|
168
|
+
* 2. Create Configuration type based on the JSON Schema
|
|
169
|
+
* 3. Bind the return value of `createPreferenceProxy` to make your preferences available wherever needed.
|
|
170
|
+
*
|
|
171
|
+
* See {@link CorePreferences} for an example.
|
|
172
|
+
*
|
|
173
|
+
* Note that if `schema` is a Promise, most actions will be no-ops until the promise is resolved.
|
|
174
|
+
*
|
|
175
|
+
* @deprecated @since 1.23.0 use `PreferenceProxyFactory` instead.
|
|
176
|
+
*/
|
|
177
|
+
export function createPreferenceProxy<T>(preferences: PreferenceService, promisedSchema: MaybePromise<PreferenceSchema>, options?: PreferenceProxyOptions): PreferenceProxy<T> {
|
|
178
|
+
const opts = options || {};
|
|
179
|
+
const prefix = opts.prefix || '';
|
|
180
|
+
const style = opts.style || 'flat';
|
|
181
|
+
const isDeep = style === 'deep' || style === 'both';
|
|
182
|
+
const isFlat = style === 'both' || style === 'flat';
|
|
183
|
+
let schema: PreferenceSchema | undefined;
|
|
184
|
+
if (PreferenceSchema.is(promisedSchema)) {
|
|
185
|
+
schema = promisedSchema;
|
|
186
|
+
} else {
|
|
187
|
+
promisedSchema.then(s => schema = s);
|
|
188
|
+
}
|
|
189
|
+
const onPreferenceChanged = (listener: (e: PreferenceChangeEvent<T>) => any, thisArgs?: any, disposables?: Disposable[]) => preferences.onPreferencesChanged(changes => {
|
|
190
|
+
if (schema) {
|
|
191
|
+
for (const key of Object.keys(changes)) {
|
|
192
|
+
const e = changes[key];
|
|
193
|
+
const overridden = preferences.overriddenPreferenceName(e.preferenceName);
|
|
194
|
+
const preferenceName: any = overridden ? overridden.preferenceName : e.preferenceName;
|
|
195
|
+
if (preferenceName.startsWith(prefix) && (!opts.overrideIdentifier || overridden?.overrideIdentifier === opts.overrideIdentifier)) {
|
|
196
|
+
if (schema.properties[preferenceName]) {
|
|
197
|
+
const { newValue, oldValue } = e;
|
|
198
|
+
listener({
|
|
199
|
+
newValue, oldValue, preferenceName,
|
|
200
|
+
affects: (resourceUri, overrideIdentifier) => {
|
|
201
|
+
if (overrideIdentifier !== overridden?.overrideIdentifier) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
return e.affects(resourceUri);
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}, thisArgs, disposables);
|
|
212
|
+
|
|
213
|
+
const unsupportedOperation = (_: any, __: string) => {
|
|
214
|
+
throw new Error('Unsupported operation');
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
const getValue: PreferenceRetrieval<any>['get'] = (arg, defaultValue, resourceUri) => {
|
|
218
|
+
const preferenceName = OverridePreferenceName.is(arg) ?
|
|
219
|
+
preferences.overridePreferenceName(arg) :
|
|
220
|
+
<string>arg;
|
|
221
|
+
return preferences.get(preferenceName, defaultValue, resourceUri || opts.resourceUri);
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
const ownKeys: () => string[] = () => {
|
|
225
|
+
const properties = [];
|
|
226
|
+
if (schema) {
|
|
227
|
+
for (const p of Object.keys(schema.properties)) {
|
|
228
|
+
if (p.startsWith(prefix)) {
|
|
229
|
+
const idx = p.indexOf('.', prefix.length);
|
|
230
|
+
if (idx !== -1 && isDeep) {
|
|
231
|
+
const pre = p.substring(prefix.length, idx);
|
|
232
|
+
if (properties.indexOf(pre) === -1) {
|
|
233
|
+
properties.push(pre);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
const prop = p.substring(prefix.length);
|
|
237
|
+
if (isFlat || prop.indexOf('.') === -1) {
|
|
238
|
+
properties.push(prop);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return properties;
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
const set: (target: any, prop: string, value: any, receiver: any) => boolean = (_, property: string | symbol | number, value: any) => {
|
|
247
|
+
if (typeof property !== 'string') {
|
|
248
|
+
throw new Error(`unexpected property: ${String(property)}`);
|
|
249
|
+
}
|
|
250
|
+
if (style === 'deep' && property.indexOf('.') !== -1) {
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
if (schema) {
|
|
254
|
+
const fullProperty = prefix ? prefix + property : property;
|
|
255
|
+
if (schema.properties[fullProperty]) {
|
|
256
|
+
preferences.set(fullProperty, value, PreferenceScope.Default);
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
const newPrefix = fullProperty + '.';
|
|
260
|
+
for (const p of Object.keys(schema.properties)) {
|
|
261
|
+
if (p.startsWith(newPrefix)) {
|
|
262
|
+
const subProxy: { [k: string]: any } = createPreferenceProxy(preferences, schema, {
|
|
263
|
+
prefix: newPrefix,
|
|
264
|
+
resourceUri: opts.resourceUri,
|
|
265
|
+
overrideIdentifier: opts.overrideIdentifier,
|
|
266
|
+
style
|
|
267
|
+
});
|
|
268
|
+
for (const k of Object.keys(value)) {
|
|
269
|
+
subProxy[k] = value[k];
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return false;
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
const get: (target: any, prop: string) => any = (_, property: string | symbol | number) => {
|
|
278
|
+
if (typeof property !== 'string') {
|
|
279
|
+
throw new Error(`unexpected property: ${String(property)}`);
|
|
280
|
+
}
|
|
281
|
+
const fullProperty = prefix ? prefix + property : property;
|
|
282
|
+
if (schema) {
|
|
283
|
+
if (isFlat || property.indexOf('.') === -1) {
|
|
284
|
+
if (schema.properties[fullProperty]) {
|
|
285
|
+
let value;
|
|
286
|
+
if (opts.overrideIdentifier) {
|
|
287
|
+
value = preferences.get(preferences.overridePreferenceName({
|
|
288
|
+
overrideIdentifier: opts.overrideIdentifier,
|
|
289
|
+
preferenceName: fullProperty
|
|
290
|
+
}), undefined, opts.resourceUri);
|
|
291
|
+
}
|
|
292
|
+
if (value === undefined) {
|
|
293
|
+
value = preferences.get(fullProperty, undefined, opts.resourceUri);
|
|
294
|
+
}
|
|
295
|
+
return value;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
if (property === 'onPreferenceChanged') {
|
|
300
|
+
return onPreferenceChanged;
|
|
301
|
+
}
|
|
302
|
+
if (property === 'dispose') {
|
|
303
|
+
return () => { /* do nothing */ };
|
|
304
|
+
}
|
|
305
|
+
if (property === 'ready') {
|
|
306
|
+
return preferences.ready;
|
|
307
|
+
}
|
|
308
|
+
if (property === 'get') {
|
|
309
|
+
return getValue;
|
|
310
|
+
}
|
|
311
|
+
if (property === 'toJSON') {
|
|
312
|
+
return toJSON();
|
|
313
|
+
}
|
|
314
|
+
if (schema && isDeep) {
|
|
315
|
+
const newPrefix = fullProperty + '.';
|
|
316
|
+
for (const p of Object.keys(schema.properties)) {
|
|
317
|
+
if (p.startsWith(newPrefix)) {
|
|
318
|
+
return createPreferenceProxy(preferences, schema, { prefix: newPrefix, resourceUri: opts.resourceUri, overrideIdentifier: opts.overrideIdentifier, style });
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
let value;
|
|
323
|
+
let parentSegment = fullProperty;
|
|
324
|
+
const segments = [];
|
|
325
|
+
do {
|
|
326
|
+
const index = parentSegment.lastIndexOf('.');
|
|
327
|
+
segments.push(parentSegment.substring(index + 1));
|
|
328
|
+
parentSegment = parentSegment.substring(0, index);
|
|
329
|
+
if (parentSegment in schema.properties) {
|
|
330
|
+
value = get(_, parentSegment);
|
|
331
|
+
}
|
|
332
|
+
} while (parentSegment && value === undefined);
|
|
333
|
+
|
|
334
|
+
let segment;
|
|
335
|
+
while (isObject(value) && (segment = segments.pop())) {
|
|
336
|
+
value = value[segment];
|
|
337
|
+
}
|
|
338
|
+
return segments.length ? undefined : value;
|
|
339
|
+
}
|
|
340
|
+
return undefined;
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
const toJSON = () => {
|
|
344
|
+
const result: any = {};
|
|
345
|
+
for (const k of ownKeys()) {
|
|
346
|
+
result[k] = get(undefined, k);
|
|
347
|
+
}
|
|
348
|
+
return result;
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
return new Proxy({}, {
|
|
352
|
+
get,
|
|
353
|
+
ownKeys,
|
|
354
|
+
getOwnPropertyDescriptor: (_, property: string) => {
|
|
355
|
+
if (ownKeys().indexOf(property) !== -1) {
|
|
356
|
+
return {
|
|
357
|
+
enumerable: true,
|
|
358
|
+
configurable: true
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
return {};
|
|
362
|
+
},
|
|
363
|
+
set,
|
|
364
|
+
deleteProperty: unsupportedOperation,
|
|
365
|
+
defineProperty: unsupportedOperation
|
|
366
|
+
});
|
|
367
|
+
}
|