@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
package/src/common/resource.ts
CHANGED
|
@@ -1,430 +1,430 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2017 TypeFox and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
import { injectable, inject, named } from 'inversify';
|
|
18
|
-
import { TextDocumentContentChangeEvent } from 'vscode-languageserver-protocol';
|
|
19
|
-
import URI from '../common/uri';
|
|
20
|
-
import { ContributionProvider } from './contribution-provider';
|
|
21
|
-
import { Event, Emitter } from './event';
|
|
22
|
-
import { Disposable } from './disposable';
|
|
23
|
-
import { MaybePromise } from './types';
|
|
24
|
-
import { CancellationToken } from './cancellation';
|
|
25
|
-
import { ApplicationError } from './application-error';
|
|
26
|
-
import { ReadableStream, Readable } from './stream';
|
|
27
|
-
import { SyncReferenceCollection, Reference } from './reference';
|
|
28
|
-
import { MarkdownString } from './markdown-rendering';
|
|
29
|
-
|
|
30
|
-
export interface ResourceVersion {
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export interface ResourceReadOptions {
|
|
34
|
-
encoding?: string
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export interface ResourceSaveOptions {
|
|
38
|
-
encoding?: string
|
|
39
|
-
overwriteEncoding?: boolean
|
|
40
|
-
version?: ResourceVersion
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export interface Resource extends Disposable {
|
|
44
|
-
readonly uri: URI;
|
|
45
|
-
/**
|
|
46
|
-
* Latest read version of this resource.
|
|
47
|
-
*
|
|
48
|
-
* Optional if a resource does not support versioning, check with `in` operator`.
|
|
49
|
-
* Undefined if a resource did not read content yet.
|
|
50
|
-
*/
|
|
51
|
-
readonly version?: ResourceVersion | undefined;
|
|
52
|
-
/**
|
|
53
|
-
* Latest read encoding of this resource.
|
|
54
|
-
*
|
|
55
|
-
* Optional if a resource does not support encoding, check with `in` operator`.
|
|
56
|
-
* Undefined if a resource did not read content yet.
|
|
57
|
-
*/
|
|
58
|
-
readonly encoding?: string | undefined;
|
|
59
|
-
|
|
60
|
-
readonly onDidChangeReadOnly?: Event<boolean | MarkdownString>;
|
|
61
|
-
|
|
62
|
-
readonly readOnly?: boolean | MarkdownString;
|
|
63
|
-
/**
|
|
64
|
-
* Reads latest content of this resource.
|
|
65
|
-
*
|
|
66
|
-
* If a resource supports versioning it updates version to latest.
|
|
67
|
-
* If a resource supports encoding it updates encoding to latest.
|
|
68
|
-
*
|
|
69
|
-
* @throws `ResourceError.NotFound` if a resource not found
|
|
70
|
-
*/
|
|
71
|
-
readContents(options?: ResourceReadOptions): Promise<string>;
|
|
72
|
-
/**
|
|
73
|
-
* Stream latest content of this resource.
|
|
74
|
-
*
|
|
75
|
-
* If a resource supports versioning it updates version to latest.
|
|
76
|
-
* If a resource supports encoding it updates encoding to latest.
|
|
77
|
-
*
|
|
78
|
-
* @throws `ResourceError.NotFound` if a resource not found
|
|
79
|
-
*/
|
|
80
|
-
readStream?(options?: ResourceReadOptions): Promise<ReadableStream<string>>;
|
|
81
|
-
/**
|
|
82
|
-
* Rewrites the complete content for this resource.
|
|
83
|
-
* If a resource does not exist it will be created.
|
|
84
|
-
*
|
|
85
|
-
* If a resource supports versioning clients can pass some version
|
|
86
|
-
* to check against it, if it is not provided latest version is used.
|
|
87
|
-
*
|
|
88
|
-
* It updates version and encoding to latest.
|
|
89
|
-
*
|
|
90
|
-
* @throws `ResourceError.OutOfSync` if latest resource version is out of sync with the given
|
|
91
|
-
*/
|
|
92
|
-
saveContents?(content: string, options?: ResourceSaveOptions): Promise<void>;
|
|
93
|
-
/**
|
|
94
|
-
* Rewrites the complete content for this resource.
|
|
95
|
-
* If a resource does not exist it will be created.
|
|
96
|
-
*
|
|
97
|
-
* If a resource supports versioning clients can pass some version
|
|
98
|
-
* to check against it, if it is not provided latest version is used.
|
|
99
|
-
*
|
|
100
|
-
* It updates version and encoding to latest.
|
|
101
|
-
*
|
|
102
|
-
* @throws `ResourceError.OutOfSync` if latest resource version is out of sync with the given
|
|
103
|
-
*/
|
|
104
|
-
saveStream?(content: Readable<string>, options?: ResourceSaveOptions): Promise<void>;
|
|
105
|
-
/**
|
|
106
|
-
* Applies incremental content changes to this resource.
|
|
107
|
-
*
|
|
108
|
-
* If a resource supports versioning clients can pass some version
|
|
109
|
-
* to check against it, if it is not provided latest version is used.
|
|
110
|
-
* It updates version to latest.
|
|
111
|
-
*
|
|
112
|
-
* @throws `ResourceError.NotFound` if a resource not found or was not read yet
|
|
113
|
-
* @throws `ResourceError.OutOfSync` if latest resource version is out of sync with the given
|
|
114
|
-
*/
|
|
115
|
-
saveContentChanges?(changes: TextDocumentContentChangeEvent[], options?: ResourceSaveOptions): Promise<void>;
|
|
116
|
-
readonly onDidChangeContents?: Event<void>;
|
|
117
|
-
guessEncoding?(): Promise<string | undefined>
|
|
118
|
-
}
|
|
119
|
-
export namespace Resource {
|
|
120
|
-
export interface SaveContext {
|
|
121
|
-
contentLength: number
|
|
122
|
-
content: string | Readable<string>
|
|
123
|
-
changes?: TextDocumentContentChangeEvent[]
|
|
124
|
-
options?: ResourceSaveOptions
|
|
125
|
-
}
|
|
126
|
-
export async function save(resource: Resource, context: SaveContext, token?: CancellationToken): Promise<void> {
|
|
127
|
-
if (!resource.saveContents) {
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
if (await trySaveContentChanges(resource, context)) {
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
if (token && token.isCancellationRequested) {
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
if (typeof context.content !== 'string' && resource.saveStream) {
|
|
137
|
-
await resource.saveStream(context.content, context.options);
|
|
138
|
-
} else {
|
|
139
|
-
const content = typeof context.content === 'string' ? context.content : Readable.toString(context.content);
|
|
140
|
-
await resource.saveContents(content, context.options);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
export async function trySaveContentChanges(resource: Resource, context: SaveContext): Promise<boolean> {
|
|
144
|
-
if (!context.changes || !resource.saveContentChanges || shouldSaveContent(resource, context)) {
|
|
145
|
-
return false;
|
|
146
|
-
}
|
|
147
|
-
try {
|
|
148
|
-
await resource.saveContentChanges(context.changes, context.options);
|
|
149
|
-
return true;
|
|
150
|
-
} catch (e) {
|
|
151
|
-
if (!ResourceError.NotFound.is(e) && !ResourceError.OutOfSync.is(e)) {
|
|
152
|
-
console.error(`Failed to apply incremental changes to '${resource.uri.toString()}':`, e);
|
|
153
|
-
}
|
|
154
|
-
return false;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
export function shouldSaveContent(resource: Resource, { contentLength, changes }: SaveContext): boolean {
|
|
158
|
-
if (!changes || (resource.saveStream && contentLength > 32 * 1024 * 1024)) {
|
|
159
|
-
return true;
|
|
160
|
-
}
|
|
161
|
-
let contentChangesLength = 0;
|
|
162
|
-
for (const change of changes) {
|
|
163
|
-
contentChangesLength += JSON.stringify(change).length;
|
|
164
|
-
if (contentChangesLength > contentLength) {
|
|
165
|
-
return true;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
return contentChangesLength > contentLength;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
export namespace ResourceError {
|
|
173
|
-
export const NotFound = ApplicationError.declare(-40000, (raw: ApplicationError.Literal<{ uri: URI }>) => raw);
|
|
174
|
-
export const OutOfSync = ApplicationError.declare(-40001, (raw: ApplicationError.Literal<{ uri: URI }>) => raw);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
export const ResourceResolver = Symbol('ResourceResolver');
|
|
178
|
-
export interface ResourceResolver {
|
|
179
|
-
/**
|
|
180
|
-
* Reject if a resource cannot be provided.
|
|
181
|
-
*/
|
|
182
|
-
resolve(uri: URI): MaybePromise<Resource>;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
export const ResourceProvider = Symbol('ResourceProvider');
|
|
186
|
-
export type ResourceProvider = (uri: URI) => Promise<Resource>;
|
|
187
|
-
|
|
188
|
-
@injectable()
|
|
189
|
-
export class DefaultResourceProvider {
|
|
190
|
-
|
|
191
|
-
constructor(
|
|
192
|
-
@inject(ContributionProvider) @named(ResourceResolver)
|
|
193
|
-
protected readonly resolversProvider: ContributionProvider<ResourceResolver>
|
|
194
|
-
) { }
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* Reject if a resource cannot be provided.
|
|
198
|
-
*/
|
|
199
|
-
async get(uri: URI): Promise<Resource> {
|
|
200
|
-
const resolvers = this.resolversProvider.getContributions();
|
|
201
|
-
for (const resolver of resolvers) {
|
|
202
|
-
try {
|
|
203
|
-
return await resolver.resolve(uri);
|
|
204
|
-
} catch (err) {
|
|
205
|
-
// no-op
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
return Promise.reject(new Error(`A resource provider for '${uri.toString()}' is not registered.`));
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
export class MutableResource implements Resource {
|
|
214
|
-
private contents: string = '';
|
|
215
|
-
|
|
216
|
-
constructor(readonly uri: URI) {
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
dispose(): void { }
|
|
220
|
-
|
|
221
|
-
async readContents(): Promise<string> {
|
|
222
|
-
return this.contents;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
async saveContents(contents: string): Promise<void> {
|
|
226
|
-
this.contents = contents;
|
|
227
|
-
this.fireDidChangeContents();
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
protected readonly onDidChangeContentsEmitter = new Emitter<void>();
|
|
231
|
-
readonly onDidChangeContents = this.onDidChangeContentsEmitter.event;
|
|
232
|
-
protected fireDidChangeContents(): void {
|
|
233
|
-
this.onDidChangeContentsEmitter.fire(undefined);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
export class ReferenceMutableResource implements Resource {
|
|
237
|
-
constructor(protected reference: Reference<MutableResource>) { }
|
|
238
|
-
|
|
239
|
-
get uri(): URI {
|
|
240
|
-
return this.reference.object.uri;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
get onDidChangeContents(): Event<void> {
|
|
244
|
-
return this.reference.object.onDidChangeContents;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
dispose(): void {
|
|
248
|
-
this.reference.dispose();
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
readContents(): Promise<string> {
|
|
252
|
-
return this.reference.object.readContents();
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
saveContents(contents: string): Promise<void> {
|
|
256
|
-
return this.reference.object.saveContents(contents);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
@injectable()
|
|
261
|
-
export class InMemoryResources implements ResourceResolver {
|
|
262
|
-
|
|
263
|
-
protected readonly resources = new SyncReferenceCollection<string, MutableResource>(uri => new MutableResource(new URI(uri)));
|
|
264
|
-
|
|
265
|
-
add(uri: URI, contents: string): Resource {
|
|
266
|
-
const resourceUri = uri.toString();
|
|
267
|
-
if (this.resources.has(resourceUri)) {
|
|
268
|
-
throw new Error(`Cannot add already existing in-memory resource '${resourceUri}'`);
|
|
269
|
-
}
|
|
270
|
-
const resource = this.acquire(resourceUri);
|
|
271
|
-
resource.saveContents(contents);
|
|
272
|
-
return resource;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
update(uri: URI, contents: string): Resource {
|
|
276
|
-
const resourceUri = uri.toString();
|
|
277
|
-
const resource = this.resources.get(resourceUri);
|
|
278
|
-
if (!resource) {
|
|
279
|
-
throw new Error(`Cannot update non-existed in-memory resource '${resourceUri}'`);
|
|
280
|
-
}
|
|
281
|
-
resource.saveContents(contents);
|
|
282
|
-
return resource;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
resolve(uri: URI): Resource {
|
|
286
|
-
const uriString = uri.toString();
|
|
287
|
-
if (!this.resources.has(uriString)) {
|
|
288
|
-
throw new Error(`In memory '${uriString}' resource does not exist.`);
|
|
289
|
-
}
|
|
290
|
-
return this.acquire(uriString);
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
protected acquire(uri: string): ReferenceMutableResource {
|
|
294
|
-
const reference = this.resources.acquire(uri);
|
|
295
|
-
return new ReferenceMutableResource(reference);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
export const MEMORY_TEXT = 'mem-txt';
|
|
300
|
-
|
|
301
|
-
/**
|
|
302
|
-
* Resource implementation for 'mem-txt' URI scheme where content is saved in URI query.
|
|
303
|
-
*/
|
|
304
|
-
export class InMemoryTextResource implements Resource {
|
|
305
|
-
constructor(readonly uri: URI) { }
|
|
306
|
-
|
|
307
|
-
async readContents(options?: { encoding?: string | undefined; } | undefined): Promise<string> {
|
|
308
|
-
return this.uri.query;
|
|
309
|
-
}
|
|
310
|
-
dispose(): void { }
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
/**
|
|
314
|
-
* ResourceResolver implementation for 'mem-txt' URI scheme.
|
|
315
|
-
*/
|
|
316
|
-
@injectable()
|
|
317
|
-
export class InMemoryTextResourceResolver implements ResourceResolver {
|
|
318
|
-
resolve(uri: URI): MaybePromise<Resource> {
|
|
319
|
-
if (uri.scheme !== MEMORY_TEXT) {
|
|
320
|
-
throw new Error(`Expected a URI with ${MEMORY_TEXT} scheme. Was: ${uri}.`);
|
|
321
|
-
}
|
|
322
|
-
return new InMemoryTextResource(uri);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
export const UNTITLED_SCHEME = 'untitled';
|
|
327
|
-
|
|
328
|
-
let untitledResourceSequenceIndex = 0;
|
|
329
|
-
|
|
330
|
-
@injectable()
|
|
331
|
-
export class UntitledResourceResolver implements ResourceResolver {
|
|
332
|
-
|
|
333
|
-
protected readonly resources = new Map<string, UntitledResource>();
|
|
334
|
-
|
|
335
|
-
has(uri: URI): boolean {
|
|
336
|
-
if (uri.scheme !== UNTITLED_SCHEME) {
|
|
337
|
-
throw new Error('The given uri is not untitled file uri: ' + uri);
|
|
338
|
-
} else {
|
|
339
|
-
return this.resources.has(uri.toString());
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
async resolve(uri: URI): Promise<UntitledResource> {
|
|
344
|
-
if (uri.scheme !== UNTITLED_SCHEME) {
|
|
345
|
-
throw new Error('The given uri is not untitled file uri: ' + uri);
|
|
346
|
-
} else {
|
|
347
|
-
const untitledResource = this.resources.get(uri.toString());
|
|
348
|
-
if (!untitledResource) {
|
|
349
|
-
return this.createUntitledResource('', '', uri);
|
|
350
|
-
} else {
|
|
351
|
-
return untitledResource;
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
async createUntitledResource(content?: string, extension?: string, uri?: URI): Promise<UntitledResource> {
|
|
357
|
-
if (!uri) {
|
|
358
|
-
uri = this.createUntitledURI(extension);
|
|
359
|
-
}
|
|
360
|
-
return new UntitledResource(this.resources, uri, content);
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
createUntitledURI(extension?: string, parent?: URI): URI {
|
|
364
|
-
let counter = 1; // vscode starts at 1
|
|
365
|
-
let untitledUri;
|
|
366
|
-
do {
|
|
367
|
-
const name = `Untitled-${counter}${extension ?? ''}`;
|
|
368
|
-
if (parent) {
|
|
369
|
-
untitledUri = parent.resolve(name).withScheme(UNTITLED_SCHEME);
|
|
370
|
-
}
|
|
371
|
-
untitledUri = new URI().resolve(name).withScheme(UNTITLED_SCHEME);
|
|
372
|
-
counter++;
|
|
373
|
-
} while (this.has(untitledUri));
|
|
374
|
-
return untitledUri;
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
export class UntitledResource implements Resource {
|
|
379
|
-
|
|
380
|
-
protected readonly onDidChangeContentsEmitter = new Emitter<void>();
|
|
381
|
-
get onDidChangeContents(): Event<void> {
|
|
382
|
-
return this.onDidChangeContentsEmitter.event;
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
constructor(private resources: Map<string, UntitledResource>, public uri: URI, private content?: string) {
|
|
386
|
-
this.resources.set(this.uri.toString(), this);
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
dispose(): void {
|
|
390
|
-
this.resources.delete(this.uri.toString());
|
|
391
|
-
this.onDidChangeContentsEmitter.dispose();
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
async readContents(options?: { encoding?: string | undefined; } | undefined): Promise<string> {
|
|
395
|
-
if (this.content) {
|
|
396
|
-
return this.content;
|
|
397
|
-
} else {
|
|
398
|
-
return '';
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
async saveContents(content: string, options?: { encoding?: string, overwriteEncoding?: boolean }): Promise<void> {
|
|
403
|
-
// This function must exist to ensure readOnly is false for the Monaco editor.
|
|
404
|
-
// However it should not be called because saving 'untitled' is always processed as 'Save As'.
|
|
405
|
-
throw Error('Untitled resources cannot be saved.');
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
protected fireDidChangeContents(): void {
|
|
409
|
-
this.onDidChangeContentsEmitter.fire(undefined);
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
get version(): ResourceVersion | undefined {
|
|
413
|
-
return undefined;
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
get encoding(): string | undefined {
|
|
417
|
-
return undefined;
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
/**
|
|
422
|
-
* @deprecated Since 1.27.0. Please use `UntitledResourceResolver.createUntitledURI` instead.
|
|
423
|
-
*/
|
|
424
|
-
export function createUntitledURI(extension?: string, parent?: URI): URI {
|
|
425
|
-
const name = `Untitled-${untitledResourceSequenceIndex++}${extension ?? ''}`;
|
|
426
|
-
if (parent) {
|
|
427
|
-
return parent.resolve(name).withScheme(UNTITLED_SCHEME);
|
|
428
|
-
}
|
|
429
|
-
return new URI().resolve(name).withScheme(UNTITLED_SCHEME);
|
|
430
|
-
}
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2017 TypeFox and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { injectable, inject, named } from 'inversify';
|
|
18
|
+
import { TextDocumentContentChangeEvent } from 'vscode-languageserver-protocol';
|
|
19
|
+
import URI from '../common/uri';
|
|
20
|
+
import { ContributionProvider } from './contribution-provider';
|
|
21
|
+
import { Event, Emitter } from './event';
|
|
22
|
+
import { Disposable } from './disposable';
|
|
23
|
+
import { MaybePromise } from './types';
|
|
24
|
+
import { CancellationToken } from './cancellation';
|
|
25
|
+
import { ApplicationError } from './application-error';
|
|
26
|
+
import { ReadableStream, Readable } from './stream';
|
|
27
|
+
import { SyncReferenceCollection, Reference } from './reference';
|
|
28
|
+
import { MarkdownString } from './markdown-rendering';
|
|
29
|
+
|
|
30
|
+
export interface ResourceVersion {
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface ResourceReadOptions {
|
|
34
|
+
encoding?: string
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface ResourceSaveOptions {
|
|
38
|
+
encoding?: string
|
|
39
|
+
overwriteEncoding?: boolean
|
|
40
|
+
version?: ResourceVersion
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface Resource extends Disposable {
|
|
44
|
+
readonly uri: URI;
|
|
45
|
+
/**
|
|
46
|
+
* Latest read version of this resource.
|
|
47
|
+
*
|
|
48
|
+
* Optional if a resource does not support versioning, check with `in` operator`.
|
|
49
|
+
* Undefined if a resource did not read content yet.
|
|
50
|
+
*/
|
|
51
|
+
readonly version?: ResourceVersion | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Latest read encoding of this resource.
|
|
54
|
+
*
|
|
55
|
+
* Optional if a resource does not support encoding, check with `in` operator`.
|
|
56
|
+
* Undefined if a resource did not read content yet.
|
|
57
|
+
*/
|
|
58
|
+
readonly encoding?: string | undefined;
|
|
59
|
+
|
|
60
|
+
readonly onDidChangeReadOnly?: Event<boolean | MarkdownString>;
|
|
61
|
+
|
|
62
|
+
readonly readOnly?: boolean | MarkdownString;
|
|
63
|
+
/**
|
|
64
|
+
* Reads latest content of this resource.
|
|
65
|
+
*
|
|
66
|
+
* If a resource supports versioning it updates version to latest.
|
|
67
|
+
* If a resource supports encoding it updates encoding to latest.
|
|
68
|
+
*
|
|
69
|
+
* @throws `ResourceError.NotFound` if a resource not found
|
|
70
|
+
*/
|
|
71
|
+
readContents(options?: ResourceReadOptions): Promise<string>;
|
|
72
|
+
/**
|
|
73
|
+
* Stream latest content of this resource.
|
|
74
|
+
*
|
|
75
|
+
* If a resource supports versioning it updates version to latest.
|
|
76
|
+
* If a resource supports encoding it updates encoding to latest.
|
|
77
|
+
*
|
|
78
|
+
* @throws `ResourceError.NotFound` if a resource not found
|
|
79
|
+
*/
|
|
80
|
+
readStream?(options?: ResourceReadOptions): Promise<ReadableStream<string>>;
|
|
81
|
+
/**
|
|
82
|
+
* Rewrites the complete content for this resource.
|
|
83
|
+
* If a resource does not exist it will be created.
|
|
84
|
+
*
|
|
85
|
+
* If a resource supports versioning clients can pass some version
|
|
86
|
+
* to check against it, if it is not provided latest version is used.
|
|
87
|
+
*
|
|
88
|
+
* It updates version and encoding to latest.
|
|
89
|
+
*
|
|
90
|
+
* @throws `ResourceError.OutOfSync` if latest resource version is out of sync with the given
|
|
91
|
+
*/
|
|
92
|
+
saveContents?(content: string, options?: ResourceSaveOptions): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Rewrites the complete content for this resource.
|
|
95
|
+
* If a resource does not exist it will be created.
|
|
96
|
+
*
|
|
97
|
+
* If a resource supports versioning clients can pass some version
|
|
98
|
+
* to check against it, if it is not provided latest version is used.
|
|
99
|
+
*
|
|
100
|
+
* It updates version and encoding to latest.
|
|
101
|
+
*
|
|
102
|
+
* @throws `ResourceError.OutOfSync` if latest resource version is out of sync with the given
|
|
103
|
+
*/
|
|
104
|
+
saveStream?(content: Readable<string>, options?: ResourceSaveOptions): Promise<void>;
|
|
105
|
+
/**
|
|
106
|
+
* Applies incremental content changes to this resource.
|
|
107
|
+
*
|
|
108
|
+
* If a resource supports versioning clients can pass some version
|
|
109
|
+
* to check against it, if it is not provided latest version is used.
|
|
110
|
+
* It updates version to latest.
|
|
111
|
+
*
|
|
112
|
+
* @throws `ResourceError.NotFound` if a resource not found or was not read yet
|
|
113
|
+
* @throws `ResourceError.OutOfSync` if latest resource version is out of sync with the given
|
|
114
|
+
*/
|
|
115
|
+
saveContentChanges?(changes: TextDocumentContentChangeEvent[], options?: ResourceSaveOptions): Promise<void>;
|
|
116
|
+
readonly onDidChangeContents?: Event<void>;
|
|
117
|
+
guessEncoding?(): Promise<string | undefined>
|
|
118
|
+
}
|
|
119
|
+
export namespace Resource {
|
|
120
|
+
export interface SaveContext {
|
|
121
|
+
contentLength: number
|
|
122
|
+
content: string | Readable<string>
|
|
123
|
+
changes?: TextDocumentContentChangeEvent[]
|
|
124
|
+
options?: ResourceSaveOptions
|
|
125
|
+
}
|
|
126
|
+
export async function save(resource: Resource, context: SaveContext, token?: CancellationToken): Promise<void> {
|
|
127
|
+
if (!resource.saveContents) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (await trySaveContentChanges(resource, context)) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (token && token.isCancellationRequested) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
if (typeof context.content !== 'string' && resource.saveStream) {
|
|
137
|
+
await resource.saveStream(context.content, context.options);
|
|
138
|
+
} else {
|
|
139
|
+
const content = typeof context.content === 'string' ? context.content : Readable.toString(context.content);
|
|
140
|
+
await resource.saveContents(content, context.options);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
export async function trySaveContentChanges(resource: Resource, context: SaveContext): Promise<boolean> {
|
|
144
|
+
if (!context.changes || !resource.saveContentChanges || shouldSaveContent(resource, context)) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
await resource.saveContentChanges(context.changes, context.options);
|
|
149
|
+
return true;
|
|
150
|
+
} catch (e) {
|
|
151
|
+
if (!ResourceError.NotFound.is(e) && !ResourceError.OutOfSync.is(e)) {
|
|
152
|
+
console.error(`Failed to apply incremental changes to '${resource.uri.toString()}':`, e);
|
|
153
|
+
}
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
export function shouldSaveContent(resource: Resource, { contentLength, changes }: SaveContext): boolean {
|
|
158
|
+
if (!changes || (resource.saveStream && contentLength > 32 * 1024 * 1024)) {
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
let contentChangesLength = 0;
|
|
162
|
+
for (const change of changes) {
|
|
163
|
+
contentChangesLength += JSON.stringify(change).length;
|
|
164
|
+
if (contentChangesLength > contentLength) {
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return contentChangesLength > contentLength;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export namespace ResourceError {
|
|
173
|
+
export const NotFound = ApplicationError.declare(-40000, (raw: ApplicationError.Literal<{ uri: URI }>) => raw);
|
|
174
|
+
export const OutOfSync = ApplicationError.declare(-40001, (raw: ApplicationError.Literal<{ uri: URI }>) => raw);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export const ResourceResolver = Symbol('ResourceResolver');
|
|
178
|
+
export interface ResourceResolver {
|
|
179
|
+
/**
|
|
180
|
+
* Reject if a resource cannot be provided.
|
|
181
|
+
*/
|
|
182
|
+
resolve(uri: URI): MaybePromise<Resource>;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export const ResourceProvider = Symbol('ResourceProvider');
|
|
186
|
+
export type ResourceProvider = (uri: URI) => Promise<Resource>;
|
|
187
|
+
|
|
188
|
+
@injectable()
|
|
189
|
+
export class DefaultResourceProvider {
|
|
190
|
+
|
|
191
|
+
constructor(
|
|
192
|
+
@inject(ContributionProvider) @named(ResourceResolver)
|
|
193
|
+
protected readonly resolversProvider: ContributionProvider<ResourceResolver>
|
|
194
|
+
) { }
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Reject if a resource cannot be provided.
|
|
198
|
+
*/
|
|
199
|
+
async get(uri: URI): Promise<Resource> {
|
|
200
|
+
const resolvers = this.resolversProvider.getContributions();
|
|
201
|
+
for (const resolver of resolvers) {
|
|
202
|
+
try {
|
|
203
|
+
return await resolver.resolve(uri);
|
|
204
|
+
} catch (err) {
|
|
205
|
+
// no-op
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return Promise.reject(new Error(`A resource provider for '${uri.toString()}' is not registered.`));
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export class MutableResource implements Resource {
|
|
214
|
+
private contents: string = '';
|
|
215
|
+
|
|
216
|
+
constructor(readonly uri: URI) {
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
dispose(): void { }
|
|
220
|
+
|
|
221
|
+
async readContents(): Promise<string> {
|
|
222
|
+
return this.contents;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
async saveContents(contents: string): Promise<void> {
|
|
226
|
+
this.contents = contents;
|
|
227
|
+
this.fireDidChangeContents();
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
protected readonly onDidChangeContentsEmitter = new Emitter<void>();
|
|
231
|
+
readonly onDidChangeContents = this.onDidChangeContentsEmitter.event;
|
|
232
|
+
protected fireDidChangeContents(): void {
|
|
233
|
+
this.onDidChangeContentsEmitter.fire(undefined);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
export class ReferenceMutableResource implements Resource {
|
|
237
|
+
constructor(protected reference: Reference<MutableResource>) { }
|
|
238
|
+
|
|
239
|
+
get uri(): URI {
|
|
240
|
+
return this.reference.object.uri;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
get onDidChangeContents(): Event<void> {
|
|
244
|
+
return this.reference.object.onDidChangeContents;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
dispose(): void {
|
|
248
|
+
this.reference.dispose();
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
readContents(): Promise<string> {
|
|
252
|
+
return this.reference.object.readContents();
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
saveContents(contents: string): Promise<void> {
|
|
256
|
+
return this.reference.object.saveContents(contents);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
@injectable()
|
|
261
|
+
export class InMemoryResources implements ResourceResolver {
|
|
262
|
+
|
|
263
|
+
protected readonly resources = new SyncReferenceCollection<string, MutableResource>(uri => new MutableResource(new URI(uri)));
|
|
264
|
+
|
|
265
|
+
add(uri: URI, contents: string): Resource {
|
|
266
|
+
const resourceUri = uri.toString();
|
|
267
|
+
if (this.resources.has(resourceUri)) {
|
|
268
|
+
throw new Error(`Cannot add already existing in-memory resource '${resourceUri}'`);
|
|
269
|
+
}
|
|
270
|
+
const resource = this.acquire(resourceUri);
|
|
271
|
+
resource.saveContents(contents);
|
|
272
|
+
return resource;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
update(uri: URI, contents: string): Resource {
|
|
276
|
+
const resourceUri = uri.toString();
|
|
277
|
+
const resource = this.resources.get(resourceUri);
|
|
278
|
+
if (!resource) {
|
|
279
|
+
throw new Error(`Cannot update non-existed in-memory resource '${resourceUri}'`);
|
|
280
|
+
}
|
|
281
|
+
resource.saveContents(contents);
|
|
282
|
+
return resource;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
resolve(uri: URI): Resource {
|
|
286
|
+
const uriString = uri.toString();
|
|
287
|
+
if (!this.resources.has(uriString)) {
|
|
288
|
+
throw new Error(`In memory '${uriString}' resource does not exist.`);
|
|
289
|
+
}
|
|
290
|
+
return this.acquire(uriString);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
protected acquire(uri: string): ReferenceMutableResource {
|
|
294
|
+
const reference = this.resources.acquire(uri);
|
|
295
|
+
return new ReferenceMutableResource(reference);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
export const MEMORY_TEXT = 'mem-txt';
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Resource implementation for 'mem-txt' URI scheme where content is saved in URI query.
|
|
303
|
+
*/
|
|
304
|
+
export class InMemoryTextResource implements Resource {
|
|
305
|
+
constructor(readonly uri: URI) { }
|
|
306
|
+
|
|
307
|
+
async readContents(options?: { encoding?: string | undefined; } | undefined): Promise<string> {
|
|
308
|
+
return this.uri.query;
|
|
309
|
+
}
|
|
310
|
+
dispose(): void { }
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* ResourceResolver implementation for 'mem-txt' URI scheme.
|
|
315
|
+
*/
|
|
316
|
+
@injectable()
|
|
317
|
+
export class InMemoryTextResourceResolver implements ResourceResolver {
|
|
318
|
+
resolve(uri: URI): MaybePromise<Resource> {
|
|
319
|
+
if (uri.scheme !== MEMORY_TEXT) {
|
|
320
|
+
throw new Error(`Expected a URI with ${MEMORY_TEXT} scheme. Was: ${uri}.`);
|
|
321
|
+
}
|
|
322
|
+
return new InMemoryTextResource(uri);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
export const UNTITLED_SCHEME = 'untitled';
|
|
327
|
+
|
|
328
|
+
let untitledResourceSequenceIndex = 0;
|
|
329
|
+
|
|
330
|
+
@injectable()
|
|
331
|
+
export class UntitledResourceResolver implements ResourceResolver {
|
|
332
|
+
|
|
333
|
+
protected readonly resources = new Map<string, UntitledResource>();
|
|
334
|
+
|
|
335
|
+
has(uri: URI): boolean {
|
|
336
|
+
if (uri.scheme !== UNTITLED_SCHEME) {
|
|
337
|
+
throw new Error('The given uri is not untitled file uri: ' + uri);
|
|
338
|
+
} else {
|
|
339
|
+
return this.resources.has(uri.toString());
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
async resolve(uri: URI): Promise<UntitledResource> {
|
|
344
|
+
if (uri.scheme !== UNTITLED_SCHEME) {
|
|
345
|
+
throw new Error('The given uri is not untitled file uri: ' + uri);
|
|
346
|
+
} else {
|
|
347
|
+
const untitledResource = this.resources.get(uri.toString());
|
|
348
|
+
if (!untitledResource) {
|
|
349
|
+
return this.createUntitledResource('', '', uri);
|
|
350
|
+
} else {
|
|
351
|
+
return untitledResource;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
async createUntitledResource(content?: string, extension?: string, uri?: URI): Promise<UntitledResource> {
|
|
357
|
+
if (!uri) {
|
|
358
|
+
uri = this.createUntitledURI(extension);
|
|
359
|
+
}
|
|
360
|
+
return new UntitledResource(this.resources, uri, content);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
createUntitledURI(extension?: string, parent?: URI): URI {
|
|
364
|
+
let counter = 1; // vscode starts at 1
|
|
365
|
+
let untitledUri;
|
|
366
|
+
do {
|
|
367
|
+
const name = `Untitled-${counter}${extension ?? ''}`;
|
|
368
|
+
if (parent) {
|
|
369
|
+
untitledUri = parent.resolve(name).withScheme(UNTITLED_SCHEME);
|
|
370
|
+
}
|
|
371
|
+
untitledUri = new URI().resolve(name).withScheme(UNTITLED_SCHEME);
|
|
372
|
+
counter++;
|
|
373
|
+
} while (this.has(untitledUri));
|
|
374
|
+
return untitledUri;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
export class UntitledResource implements Resource {
|
|
379
|
+
|
|
380
|
+
protected readonly onDidChangeContentsEmitter = new Emitter<void>();
|
|
381
|
+
get onDidChangeContents(): Event<void> {
|
|
382
|
+
return this.onDidChangeContentsEmitter.event;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
constructor(private resources: Map<string, UntitledResource>, public uri: URI, private content?: string) {
|
|
386
|
+
this.resources.set(this.uri.toString(), this);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
dispose(): void {
|
|
390
|
+
this.resources.delete(this.uri.toString());
|
|
391
|
+
this.onDidChangeContentsEmitter.dispose();
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
async readContents(options?: { encoding?: string | undefined; } | undefined): Promise<string> {
|
|
395
|
+
if (this.content) {
|
|
396
|
+
return this.content;
|
|
397
|
+
} else {
|
|
398
|
+
return '';
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
async saveContents(content: string, options?: { encoding?: string, overwriteEncoding?: boolean }): Promise<void> {
|
|
403
|
+
// This function must exist to ensure readOnly is false for the Monaco editor.
|
|
404
|
+
// However it should not be called because saving 'untitled' is always processed as 'Save As'.
|
|
405
|
+
throw Error('Untitled resources cannot be saved.');
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
protected fireDidChangeContents(): void {
|
|
409
|
+
this.onDidChangeContentsEmitter.fire(undefined);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
get version(): ResourceVersion | undefined {
|
|
413
|
+
return undefined;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
get encoding(): string | undefined {
|
|
417
|
+
return undefined;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* @deprecated Since 1.27.0. Please use `UntitledResourceResolver.createUntitledURI` instead.
|
|
423
|
+
*/
|
|
424
|
+
export function createUntitledURI(extension?: string, parent?: URI): URI {
|
|
425
|
+
const name = `Untitled-${untitledResourceSequenceIndex++}${extension ?? ''}`;
|
|
426
|
+
if (parent) {
|
|
427
|
+
return parent.resolve(name).withScheme(UNTITLED_SCHEME);
|
|
428
|
+
}
|
|
429
|
+
return new URI().resolve(name).withScheme(UNTITLED_SCHEME);
|
|
430
|
+
}
|