@theia/plugin-ext 1.34.2 → 1.34.3
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/LICENSE +641 -641
- package/README.md +54 -54
- package/lib/common/arrays.d.ts +19 -19
- package/lib/common/arrays.js +46 -46
- package/lib/common/assert.d.ts +1 -1
- package/lib/common/assert.js +25 -25
- package/lib/common/cache.d.ts +11 -11
- package/lib/common/cache.js +47 -47
- package/lib/common/character-classifier.d.ts +18 -18
- package/lib/common/character-classifier.js +60 -60
- package/lib/common/collections.d.ts +4 -4
- package/lib/common/collections.js +39 -39
- package/lib/common/connection.d.ts +54 -54
- package/lib/common/connection.js +107 -107
- package/lib/common/disposable-util.d.ts +6 -6
- package/lib/common/disposable-util.js +37 -37
- package/lib/common/editor-options.d.ts +30 -30
- package/lib/common/editor-options.js +72 -72
- package/lib/common/env.d.ts +3 -3
- package/lib/common/env.js +17 -17
- package/lib/common/errors.d.ts +3 -3
- package/lib/common/errors.js +42 -42
- package/lib/common/id-generator.d.ts +6 -6
- package/lib/common/id-generator.js +28 -28
- package/lib/common/index.d.ts +3 -3
- package/lib/common/index.js +33 -33
- package/lib/common/link-computer.d.ts +41 -41
- package/lib/common/link-computer.js +275 -275
- package/lib/common/object-identifier.d.ts +8 -8
- package/lib/common/object-identifier.js +32 -32
- package/lib/common/objects.d.ts +1 -1
- package/lib/common/objects.js +46 -46
- package/lib/common/paths-util.d.ts +3 -3
- package/lib/common/paths-util.js +144 -144
- package/lib/common/plugin-api-rpc-model.d.ts +728 -728
- package/lib/common/plugin-api-rpc-model.js +173 -173
- package/lib/common/plugin-api-rpc.d.ts +1710 -1710
- package/lib/common/plugin-api-rpc.js +279 -279
- package/lib/common/plugin-ext-api-contribution.d.ts +58 -58
- package/lib/common/plugin-ext-api-contribution.js +5 -5
- package/lib/common/plugin-identifiers.d.ts +40 -40
- package/lib/common/plugin-identifiers.js +80 -80
- package/lib/common/plugin-protocol.d.ts +840 -840
- package/lib/common/plugin-protocol.js +67 -67
- package/lib/common/proxy-handler.d.ts +65 -65
- package/lib/common/proxy-handler.js +97 -97
- package/lib/common/reference-map.d.ts +7 -7
- package/lib/common/reference-map.js +39 -39
- package/lib/common/rpc-protocol.d.ts +65 -65
- package/lib/common/rpc-protocol.js +229 -229
- package/lib/common/semantic-tokens-dto.d.ts +18 -18
- package/lib/common/semantic-tokens-dto.js +162 -162
- package/lib/common/types.d.ts +37 -37
- package/lib/common/types.js +121 -121
- package/lib/common/uint.d.ts +7 -7
- package/lib/common/uint.js +33 -33
- package/lib/common/uri-components.d.ts +39 -39
- package/lib/common/uri-components.js +66 -66
- package/lib/hosted/browser/hosted-plugin-watcher.d.ts +15 -15
- package/lib/hosted/browser/hosted-plugin-watcher.js +59 -59
- package/lib/hosted/browser/hosted-plugin.d.ts +145 -145
- package/lib/hosted/browser/hosted-plugin.js +787 -787
- package/lib/hosted/browser/plugin-worker.d.ts +6 -6
- package/lib/hosted/browser/plugin-worker.js +57 -57
- package/lib/hosted/browser/worker/debug-stub.d.ts +3 -3
- package/lib/hosted/browser/worker/debug-stub.js +29 -29
- package/lib/hosted/browser/worker/plugin-manifest-loader.d.ts +2 -2
- package/lib/hosted/browser/worker/plugin-manifest-loader.js +107 -107
- package/lib/hosted/browser/worker/worker-env-ext.d.ts +14 -14
- package/lib/hosted/browser/worker/worker-env-ext.js +38 -38
- package/lib/hosted/browser/worker/worker-main.d.ts +1 -1
- package/lib/hosted/browser/worker/worker-main.js +192 -192
- package/lib/hosted/node/hosted-plugin-cli-contribution.d.ts +16 -16
- package/lib/hosted/node/hosted-plugin-cli-contribution.js +76 -76
- package/lib/hosted/node/hosted-plugin-deployer-handler.d.ts +42 -42
- package/lib/hosted/node/hosted-plugin-deployer-handler.js +264 -264
- package/lib/hosted/node/hosted-plugin-localization-service.d.ts +34 -34
- package/lib/hosted/node/hosted-plugin-localization-service.js +239 -239
- package/lib/hosted/node/hosted-plugin-process.d.ts +47 -47
- package/lib/hosted/node/hosted-plugin-process.js +224 -224
- package/lib/hosted/node/hosted-plugin-protocol.d.ts +21 -21
- package/lib/hosted/node/hosted-plugin-protocol.js +36 -36
- package/lib/hosted/node/hosted-plugin.d.ts +36 -36
- package/lib/hosted/node/hosted-plugin.js +118 -118
- package/lib/hosted/node/metadata-scanner.d.ts +17 -17
- package/lib/hosted/node/metadata-scanner.js +82 -82
- package/lib/hosted/node/plugin-ext-hosted-backend-module.d.ts +3 -3
- package/lib/hosted/node/plugin-ext-hosted-backend-module.js +73 -73
- package/lib/hosted/node/plugin-host-proxy.d.ts +17 -17
- package/lib/hosted/node/plugin-host-proxy.js +69 -69
- package/lib/hosted/node/plugin-host-rpc.d.ts +21 -21
- package/lib/hosted/node/plugin-host-rpc.js +216 -216
- package/lib/hosted/node/plugin-host.d.ts +1 -1
- package/lib/hosted/node/plugin-host.js +101 -101
- package/lib/hosted/node/plugin-manifest-loader.d.ts +1 -1
- package/lib/hosted/node/plugin-manifest-loader.js +34 -34
- package/lib/hosted/node/plugin-reader.d.ts +25 -25
- package/lib/hosted/node/plugin-reader.js +141 -141
- package/lib/hosted/node/plugin-service.d.ts +39 -39
- package/lib/hosted/node/plugin-service.js +193 -193
- package/lib/hosted/node/scanners/backend-init-theia.d.ts +2 -2
- package/lib/hosted/node/scanners/backend-init-theia.js +60 -60
- package/lib/hosted/node/scanners/file-plugin-uri-factory.d.ts +10 -10
- package/lib/hosted/node/scanners/file-plugin-uri-factory.js +40 -40
- package/lib/hosted/node/scanners/grammars-reader.d.ts +5 -5
- package/lib/hosted/node/scanners/grammars-reader.js +63 -63
- package/lib/hosted/node/scanners/plugin-uri-factory.d.ts +16 -16
- package/lib/hosted/node/scanners/plugin-uri-factory.js +19 -19
- package/lib/hosted/node/scanners/scanner-theia.d.ts +56 -56
- package/lib/hosted/node/scanners/scanner-theia.js +842 -842
- package/lib/hosted/node-electron/plugin-ext-hosted-electron-backend-module.d.ts +2 -2
- package/lib/hosted/node-electron/plugin-ext-hosted-electron-backend-module.js +26 -26
- package/lib/hosted/node-electron/scanner-theia-electron.d.ts +5 -5
- package/lib/hosted/node-electron/scanner-theia-electron.js +40 -40
- package/lib/main/browser/authentication-main.d.ts +51 -51
- package/lib/main/browser/authentication-main.js +299 -299
- package/lib/main/browser/clipboard-main.d.ts +9 -9
- package/lib/main/browser/clipboard-main.js +32 -32
- package/lib/main/browser/command-registry-main.d.ts +23 -23
- package/lib/main/browser/command-registry-main.js +97 -97
- package/lib/main/browser/commands.d.ts +12 -12
- package/lib/main/browser/commands.js +102 -102
- package/lib/main/browser/comments/comment-glyph-widget.d.ts +12 -12
- package/lib/main/browser/comments/comment-glyph-widget.js +42 -42
- package/lib/main/browser/comments/comment-thread-widget.d.ts +153 -153
- package/lib/main/browser/comments/comment-thread-widget.js +466 -466
- package/lib/main/browser/comments/comments-context-key-service.d.ts +17 -17
- package/lib/main/browser/comments/comments-context-key-service.js +80 -80
- package/lib/main/browser/comments/comments-contribution.d.ts +31 -31
- package/lib/main/browser/comments/comments-contribution.js +264 -264
- package/lib/main/browser/comments/comments-decorator.d.ts +15 -15
- package/lib/main/browser/comments/comments-decorator.js +107 -107
- package/lib/main/browser/comments/comments-main.d.ts +106 -106
- package/lib/main/browser/comments/comments-main.js +341 -341
- package/lib/main/browser/comments/comments-service.d.ts +75 -75
- package/lib/main/browser/comments/comments-service.js +120 -120
- package/lib/main/browser/custom-editors/custom-editor-contribution.d.ts +6 -6
- package/lib/main/browser/custom-editors/custom-editor-contribution.js +50 -50
- package/lib/main/browser/custom-editors/custom-editor-opener.d.ts +21 -21
- package/lib/main/browser/custom-editors/custom-editor-opener.js +111 -111
- package/lib/main/browser/custom-editors/custom-editor-service.d.ts +16 -16
- package/lib/main/browser/custom-editors/custom-editor-service.js +102 -102
- package/lib/main/browser/custom-editors/custom-editor-widget-factory.d.ts +9 -9
- package/lib/main/browser/custom-editors/custom-editor-widget-factory.js +39 -39
- package/lib/main/browser/custom-editors/custom-editor-widget.d.ts +36 -36
- package/lib/main/browser/custom-editors/custom-editor-widget.js +115 -115
- package/lib/main/browser/custom-editors/custom-editors-main.d.ts +120 -120
- package/lib/main/browser/custom-editors/custom-editors-main.js +447 -447
- package/lib/main/browser/custom-editors/plugin-custom-editor-registry.d.ts +23 -23
- package/lib/main/browser/custom-editors/plugin-custom-editor-registry.js +142 -142
- package/lib/main/browser/custom-editors/undo-redo-service.d.ts +23 -23
- package/lib/main/browser/custom-editors/undo-redo-service.js +110 -110
- package/lib/main/browser/debug/debug-main.d.ts +48 -48
- package/lib/main/browser/debug/debug-main.js +295 -295
- package/lib/main/browser/debug/plugin-debug-adapter-contribution.d.ts +18 -18
- package/lib/main/browser/debug/plugin-debug-adapter-contribution.js +42 -42
- package/lib/main/browser/debug/plugin-debug-configuration-provider.d.ts +12 -12
- package/lib/main/browser/debug/plugin-debug-configuration-provider.js +38 -38
- package/lib/main/browser/debug/plugin-debug-service.d.ts +52 -52
- package/lib/main/browser/debug/plugin-debug-service.js +283 -283
- package/lib/main/browser/debug/plugin-debug-session-contribution-registry.d.ts +30 -30
- package/lib/main/browser/debug/plugin-debug-session-contribution-registry.js +75 -75
- package/lib/main/browser/debug/plugin-debug-session-factory.d.ts +55 -55
- package/lib/main/browser/debug/plugin-debug-session-factory.js +70 -70
- package/lib/main/browser/decorations/decorations-main.d.ts +15 -15
- package/lib/main/browser/decorations/decorations-main.js +119 -119
- package/lib/main/browser/dialogs/modal-notification.d.ts +18 -18
- package/lib/main/browser/dialogs/modal-notification.js +107 -107
- package/lib/main/browser/dialogs-main.d.ts +16 -16
- package/lib/main/browser/dialogs-main.js +162 -162
- package/lib/main/browser/documents-main.d.ts +50 -50
- package/lib/main/browser/documents-main.js +249 -249
- package/lib/main/browser/editors-and-documents-main.d.ts +32 -32
- package/lib/main/browser/editors-and-documents-main.js +301 -301
- package/lib/main/browser/env-main.d.ts +15 -15
- package/lib/main/browser/env-main.js +82 -82
- package/lib/main/browser/file-system-main-impl.d.ts +27 -27
- package/lib/main/browser/file-system-main-impl.js +199 -199
- package/lib/main/browser/hierarchy/hierarchy-types-converters.d.ts +24 -24
- package/lib/main/browser/hierarchy/hierarchy-types-converters.js +174 -174
- package/lib/main/browser/keybindings/keybindings-contribution-handler.d.ts +9 -9
- package/lib/main/browser/keybindings/keybindings-contribution-handler.js +77 -77
- package/lib/main/browser/label-service-main.d.ts +10 -10
- package/lib/main/browser/label-service-main.js +46 -46
- package/lib/main/browser/languages-main.d.ts +136 -136
- package/lib/main/browser/languages-main.js +1116 -1116
- package/lib/main/browser/main-context.d.ts +3 -3
- package/lib/main/browser/main-context.js +137 -137
- package/lib/main/browser/main-file-system-event-service.d.ts +7 -7
- package/lib/main/browser/main-file-system-event-service.d.ts.map +1 -1
- package/lib/main/browser/main-file-system-event-service.js +65 -68
- package/lib/main/browser/main-file-system-event-service.js.map +1 -1
- package/lib/main/browser/menus/menus-contribution-handler.d.ts +29 -29
- package/lib/main/browser/menus/menus-contribution-handler.js +194 -194
- package/lib/main/browser/menus/plugin-menu-command-adapter.d.ts +43 -43
- package/lib/main/browser/menus/plugin-menu-command-adapter.js +279 -279
- package/lib/main/browser/menus/vscode-theia-menu-mappings.d.ts +17 -17
- package/lib/main/browser/menus/vscode-theia-menu-mappings.js +93 -93
- package/lib/main/browser/message-registry-main.d.ts +8 -8
- package/lib/main/browser/message-registry-main.js +52 -52
- package/lib/main/browser/notification-main.d.ts +18 -18
- package/lib/main/browser/notification-main.js +75 -75
- package/lib/main/browser/output-channel-registry-main.d.ts +10 -10
- package/lib/main/browser/output-channel-registry-main.js +60 -60
- package/lib/main/browser/plugin-authentication-service.d.ts +13 -13
- package/lib/main/browser/plugin-authentication-service.js +80 -80
- package/lib/main/browser/plugin-contribution-handler.d.ts +66 -66
- package/lib/main/browser/plugin-contribution-handler.js +580 -580
- package/lib/main/browser/plugin-ext-frontend-module.d.ts +7 -7
- package/lib/main/browser/plugin-ext-frontend-module.js +216 -216
- package/lib/main/browser/plugin-ext-widget.d.ts +28 -28
- package/lib/main/browser/plugin-ext-widget.js +129 -129
- package/lib/main/browser/plugin-frontend-contribution.d.ts +6 -6
- package/lib/main/browser/plugin-frontend-contribution.js +45 -45
- package/lib/main/browser/plugin-frontend-view-contribution.d.ts +6 -6
- package/lib/main/browser/plugin-frontend-view-contribution.js +50 -50
- package/lib/main/browser/plugin-icon-theme-service.d.ts +135 -135
- package/lib/main/browser/plugin-icon-theme-service.js +519 -519
- package/lib/main/browser/plugin-shared-style.d.ts +36 -36
- package/lib/main/browser/plugin-shared-style.js +126 -126
- package/lib/main/browser/plugin-storage.d.ts +13 -13
- package/lib/main/browser/plugin-storage.js +46 -46
- package/lib/main/browser/plugin-terminal-registry.d.ts +4 -4
- package/lib/main/browser/plugin-terminal-registry.js +34 -34
- package/lib/main/browser/preference-registry-main.d.ts +19 -19
- package/lib/main/browser/preference-registry-main.js +104 -104
- package/lib/main/browser/quick-open-main.d.ts +31 -31
- package/lib/main/browser/quick-open-main.js +274 -274
- package/lib/main/browser/scm-main.d.ts +100 -100
- package/lib/main/browser/scm-main.js +330 -330
- package/lib/main/browser/secrets-main.d.ts +12 -12
- package/lib/main/browser/secrets-main.js +67 -67
- package/lib/main/browser/selection-provider-command.d.ts +12 -12
- package/lib/main/browser/selection-provider-command.js +57 -57
- package/lib/main/browser/status-bar-message-registry-main.d.ts +16 -16
- package/lib/main/browser/status-bar-message-registry-main.js +55 -55
- package/lib/main/browser/tabs/tabs-main.d.ts +40 -40
- package/lib/main/browser/tabs/tabs-main.js +282 -282
- package/lib/main/browser/tasks-main.d.ts +33 -33
- package/lib/main/browser/tasks-main.js +205 -205
- package/lib/main/browser/terminal-main.d.ts +49 -49
- package/lib/main/browser/terminal-main.js +268 -268
- package/lib/main/browser/text-editor-main.d.ts +47 -47
- package/lib/main/browser/text-editor-main.js +374 -374
- package/lib/main/browser/text-editor-model-service.d.ts +28 -28
- package/lib/main/browser/text-editor-model-service.js +108 -108
- package/lib/main/browser/text-editors-main.d.ts +38 -38
- package/lib/main/browser/text-editors-main.js +158 -158
- package/lib/main/browser/theme-icon-override.d.ts +1 -1
- package/lib/main/browser/theme-icon-override.js +247 -247
- package/lib/main/browser/theming-main.d.ts +9 -9
- package/lib/main/browser/theming-main.js +35 -35
- package/lib/main/browser/timeline-main.d.ts +13 -13
- package/lib/main/browser/timeline-main.js +46 -46
- package/lib/main/browser/view/dnd-file-content-store.d.ts +7 -7
- package/lib/main/browser/view/dnd-file-content-store.js +51 -51
- package/lib/main/browser/view/plugin-tree-view-node-label-provider.d.ts +11 -11
- package/lib/main/browser/view/plugin-tree-view-node-label-provider.js +90 -90
- package/lib/main/browser/view/plugin-view-registry.d.ts +106 -106
- package/lib/main/browser/view/plugin-view-registry.js +836 -836
- package/lib/main/browser/view/plugin-view-widget.d.ts +50 -50
- package/lib/main/browser/view/plugin-view-widget.js +166 -166
- package/lib/main/browser/view/tree-view-decorator-service.d.ts +30 -30
- package/lib/main/browser/view/tree-view-decorator-service.js +68 -68
- package/lib/main/browser/view/tree-view-widget.d.ts +160 -160
- package/lib/main/browser/view/tree-view-widget.js +761 -761
- package/lib/main/browser/view/tree-views-main.d.ts +31 -31
- package/lib/main/browser/view/tree-views-main.js +163 -163
- package/lib/main/browser/view/view-context-key-service.d.ts +30 -30
- package/lib/main/browser/view/view-context-key-service.js +84 -84
- package/lib/main/browser/view-column-service.d.ts +23 -23
- package/lib/main/browser/view-column-service.js +129 -129
- package/lib/main/browser/webview/webview-environment.d.ts +15 -15
- package/lib/main/browser/webview/webview-environment.js +93 -93
- package/lib/main/browser/webview/webview-frontend-security-warnings.d.ts +11 -11
- package/lib/main/browser/webview/webview-frontend-security-warnings.js +73 -73
- package/lib/main/browser/webview/webview-preferences.d.ts +12 -12
- package/lib/main/browser/webview/webview-preferences.js +57 -57
- package/lib/main/browser/webview/webview-resource-cache.d.ts +17 -17
- package/lib/main/browser/webview/webview-resource-cache.js +90 -90
- package/lib/main/browser/webview/webview-theme-data-provider.d.ts +30 -30
- package/lib/main/browser/webview/webview-theme-data-provider.js +132 -132
- package/lib/main/browser/webview/webview-widget-factory.d.ts +8 -8
- package/lib/main/browser/webview/webview-widget-factory.js +38 -38
- package/lib/main/browser/webview/webview.d.ts +130 -130
- package/lib/main/browser/webview/webview.js +549 -549
- package/lib/main/browser/webview-views/webview-views-main.d.ts +30 -30
- package/lib/main/browser/webview-views/webview-views-main.js +126 -126
- package/lib/main/browser/webview-views/webview-views.d.ts +14 -14
- package/lib/main/browser/webview-views/webview-views.js +22 -22
- package/lib/main/browser/webviews-main.d.ts +39 -39
- package/lib/main/browser/webviews-main.js +231 -231
- package/lib/main/browser/window-state-main.d.ts +16 -16
- package/lib/main/browser/window-state-main.js +61 -61
- package/lib/main/browser/workspace-main.d.ts +69 -69
- package/lib/main/browser/workspace-main.js +316 -316
- package/lib/main/common/plugin-paths-protocol.d.ts +8 -8
- package/lib/main/common/plugin-paths-protocol.js +21 -21
- package/lib/main/common/plugin-theia-environment.d.ts +7 -7
- package/lib/main/common/plugin-theia-environment.js +47 -47
- package/lib/main/common/webview-protocol.d.ts +12 -12
- package/lib/main/common/webview-protocol.js +31 -31
- package/lib/main/electron-browser/plugin-ext-frontend-electron-module.d.ts +3 -3
- package/lib/main/electron-browser/plugin-ext-frontend-electron-module.js +25 -25
- package/lib/main/electron-browser/webview/electron-webview-widget-factory.d.ts +22 -22
- package/lib/main/electron-browser/webview/electron-webview-widget-factory.js +64 -64
- package/lib/main/node/handlers/plugin-theia-directory-handler.d.ts +10 -10
- package/lib/main/node/handlers/plugin-theia-directory-handler.js +113 -113
- package/lib/main/node/handlers/plugin-theia-file-handler.d.ts +9 -9
- package/lib/main/node/handlers/plugin-theia-file-handler.js +66 -66
- package/lib/main/node/paths/const.d.ts +5 -5
- package/lib/main/node/paths/const.js +24 -24
- package/lib/main/node/paths/plugin-paths-service.d.ts +23 -23
- package/lib/main/node/paths/plugin-paths-service.js +169 -169
- package/lib/main/node/plugin-cli-contribution.d.ts +21 -21
- package/lib/main/node/plugin-cli-contribution.js +84 -84
- package/lib/main/node/plugin-deployer-contribution.d.ts +8 -8
- package/lib/main/node/plugin-deployer-contribution.js +47 -47
- package/lib/main/node/plugin-deployer-directory-handler-context-impl.d.ts +7 -7
- package/lib/main/node/plugin-deployer-directory-handler-context-impl.js +44 -44
- package/lib/main/node/plugin-deployer-entry-impl.d.ts +34 -34
- package/lib/main/node/plugin-deployer-entry-impl.js +109 -109
- package/lib/main/node/plugin-deployer-file-handler-context-impl.d.ts +7 -7
- package/lib/main/node/plugin-deployer-file-handler-context-impl.js +31 -31
- package/lib/main/node/plugin-deployer-impl.d.ts +61 -61
- package/lib/main/node/plugin-deployer-impl.js +341 -341
- package/lib/main/node/plugin-deployer-proxy-entry-impl.d.ts +29 -29
- package/lib/main/node/plugin-deployer-proxy-entry-impl.js +98 -98
- package/lib/main/node/plugin-deployer-resolver-context-impl.d.ts +15 -15
- package/lib/main/node/plugin-deployer-resolver-context-impl.js +42 -42
- package/lib/main/node/plugin-ext-backend-module.d.ts +2 -2
- package/lib/main/node/plugin-ext-backend-module.js +70 -70
- package/lib/main/node/plugin-github-resolver.d.ts +21 -21
- package/lib/main/node/plugin-github-resolver.js +142 -142
- package/lib/main/node/plugin-http-resolver.d.ts +18 -18
- package/lib/main/node/plugin-http-resolver.js +91 -91
- package/lib/main/node/plugin-localization-backend-contribution.d.ts +9 -9
- package/lib/main/node/plugin-localization-backend-contribution.js +58 -58
- package/lib/main/node/plugin-server-handler.d.ts +16 -16
- package/lib/main/node/plugin-server-handler.js +74 -74
- package/lib/main/node/plugin-service.d.ts +19 -19
- package/lib/main/node/plugin-service.js +91 -91
- package/lib/main/node/plugin-theia-deployer-participant.d.ts +6 -6
- package/lib/main/node/plugin-theia-deployer-participant.js +43 -43
- package/lib/main/node/plugin-uninstallation-manager.d.ts +14 -14
- package/lib/main/node/plugin-uninstallation-manager.js +84 -84
- package/lib/main/node/plugins-key-value-storage.d.ts +15 -15
- package/lib/main/node/plugins-key-value-storage.js +128 -128
- package/lib/main/node/resolvers/local-directory-plugin-deployer-resolver.d.ts +7 -7
- package/lib/main/node/resolvers/local-directory-plugin-deployer-resolver.js +43 -43
- package/lib/main/node/resolvers/local-plugin-deployer-resolver.d.ts +8 -8
- package/lib/main/node/resolvers/local-plugin-deployer-resolver.js +59 -59
- package/lib/main/node/temp-dir-util.d.ts +1 -1
- package/lib/main/node/temp-dir-util.js +30 -30
- package/lib/main/node/webview-backend-security-warnings.d.ts +5 -5
- package/lib/main/node/webview-backend-security-warnings.js +51 -51
- package/lib/plugin/authentication-ext.d.ts +34 -34
- package/lib/plugin/authentication-ext.js +94 -94
- package/lib/plugin/clipboard-ext.d.ts +9 -9
- package/lib/plugin/clipboard-ext.js +31 -31
- package/lib/plugin/command-registry.d.ts +43 -43
- package/lib/plugin/command-registry.js +176 -176
- package/lib/plugin/comments.d.ts +89 -89
- package/lib/plugin/comments.js +368 -368
- package/lib/plugin/custom-editors.d.ts +47 -47
- package/lib/plugin/custom-editors.js +255 -255
- package/lib/plugin/debug/debug-ext.d.ts +86 -86
- package/lib/plugin/debug/debug-ext.js +391 -391
- package/lib/plugin/debug/plugin-debug-adapter-creator.d.ts +10 -10
- package/lib/plugin/debug/plugin-debug-adapter-creator.js +41 -41
- package/lib/plugin/debug/plugin-debug-adapter-session.d.ts +26 -26
- package/lib/plugin/debug/plugin-debug-adapter-session.js +96 -96
- package/lib/plugin/debug/plugin-debug-adapter-tracker.d.ts +12 -12
- package/lib/plugin/debug/plugin-debug-adapter-tracker.js +77 -77
- package/lib/plugin/decorations.d.ts +14 -14
- package/lib/plugin/decorations.js +112 -112
- package/lib/plugin/dialogs.d.ts +10 -10
- package/lib/plugin/dialogs.js +91 -91
- package/lib/plugin/document-data.d.ts +38 -38
- package/lib/plugin/document-data.js +309 -309
- package/lib/plugin/documents.d.ts +56 -56
- package/lib/plugin/documents.js +253 -253
- package/lib/plugin/editors-and-documents.d.ts +26 -26
- package/lib/plugin/editors-and-documents.js +137 -137
- package/lib/plugin/env.d.ts +42 -42
- package/lib/plugin/env.js +101 -101
- package/lib/plugin/file-system-event-service-ext-impl.d.ts +40 -40
- package/lib/plugin/file-system-event-service-ext-impl.js +203 -203
- package/lib/plugin/file-system-ext-impl.d.ts +50 -50
- package/lib/plugin/file-system-ext-impl.js +354 -354
- package/lib/plugin/known-commands.d.ts +5 -5
- package/lib/plugin/known-commands.js +386 -386
- package/lib/plugin/known-commands.spec.d.ts +1 -1
- package/lib/plugin/known-commands.spec.js +42 -42
- package/lib/plugin/label-service.d.ts +11 -11
- package/lib/plugin/label-service.js +35 -35
- package/lib/plugin/languages/call-hierarchy.d.ts +20 -20
- package/lib/plugin/languages/call-hierarchy.js +101 -101
- package/lib/plugin/languages/code-action.d.ts +24 -24
- package/lib/plugin/languages/code-action.js +137 -137
- package/lib/plugin/languages/color.d.ts +12 -12
- package/lib/plugin/languages/color.js +58 -58
- package/lib/plugin/languages/completion.d.ts +20 -20
- package/lib/plugin/languages/completion.js +161 -161
- package/lib/plugin/languages/declaration.d.ts +11 -11
- package/lib/plugin/languages/declaration.js +58 -58
- package/lib/plugin/languages/definition.d.ts +11 -11
- package/lib/plugin/languages/definition.js +58 -58
- package/lib/plugin/languages/diagnostics.d.ts +49 -49
- package/lib/plugin/languages/diagnostics.js +281 -281
- package/lib/plugin/languages/document-formatting.d.ts +10 -10
- package/lib/plugin/languages/document-formatting.js +40 -40
- package/lib/plugin/languages/document-highlight.d.ts +12 -12
- package/lib/plugin/languages/document-highlight.js +50 -50
- package/lib/plugin/languages/evaluatable-expression.d.ts +11 -11
- package/lib/plugin/languages/evaluatable-expression.js +40 -40
- package/lib/plugin/languages/folding.d.ts +10 -10
- package/lib/plugin/languages/folding.js +39 -39
- package/lib/plugin/languages/hover.d.ts +11 -11
- package/lib/plugin/languages/hover.js +48 -48
- package/lib/plugin/languages/implementation.d.ts +11 -11
- package/lib/plugin/languages/implementation.js +58 -58
- package/lib/plugin/languages/inlay-hints.d.ts +19 -19
- package/lib/plugin/languages/inlay-hints.js +127 -127
- package/lib/plugin/languages/inline-completion.d.ts +20 -20
- package/lib/plugin/languages/inline-completion.js +93 -93
- package/lib/plugin/languages/inline-values.d.ts +10 -10
- package/lib/plugin/languages/inline-values.js +44 -44
- package/lib/plugin/languages/lens.d.ts +19 -19
- package/lib/plugin/languages/lens.js +89 -89
- package/lib/plugin/languages/link-provider.d.ts +14 -14
- package/lib/plugin/languages/link-provider.js +71 -71
- package/lib/plugin/languages/linked-editing-range.d.ts +11 -11
- package/lib/plugin/languages/linked-editing-range.js +40 -40
- package/lib/plugin/languages/on-type-formatting.d.ts +11 -11
- package/lib/plugin/languages/on-type-formatting.js +41 -41
- package/lib/plugin/languages/outline.d.ts +20 -20
- package/lib/plugin/languages/outline.js +115 -115
- package/lib/plugin/languages/range-formatting.d.ts +10 -10
- package/lib/plugin/languages/range-formatting.js +41 -41
- package/lib/plugin/languages/reference.d.ts +11 -11
- package/lib/plugin/languages/reference.js +47 -47
- package/lib/plugin/languages/rename.d.ts +14 -14
- package/lib/plugin/languages/rename.js +114 -114
- package/lib/plugin/languages/selection-range.d.ts +11 -11
- package/lib/plugin/languages/selection-range.js +65 -65
- package/lib/plugin/languages/semantic-highlighting.d.ts +28 -28
- package/lib/plugin/languages/semantic-highlighting.js +175 -175
- package/lib/plugin/languages/signature.d.ts +15 -15
- package/lib/plugin/languages/signature.js +71 -71
- package/lib/plugin/languages/type-definition.d.ts +11 -11
- package/lib/plugin/languages/type-definition.js +58 -58
- package/lib/plugin/languages/type-hierarchy.d.ts +18 -18
- package/lib/plugin/languages/type-hierarchy.js +95 -95
- package/lib/plugin/languages/util.d.ts +4 -4
- package/lib/plugin/languages/util.js +27 -27
- package/lib/plugin/languages/workspace-symbol.d.ts +8 -8
- package/lib/plugin/languages/workspace-symbol.js +61 -61
- package/lib/plugin/languages-utils.d.ts +5 -5
- package/lib/plugin/languages-utils.js +52 -52
- package/lib/plugin/languages.d.ts +118 -118
- package/lib/plugin/languages.js +679 -679
- package/lib/plugin/markdown-string.d.ts +24 -24
- package/lib/plugin/markdown-string.js +124 -124
- package/lib/plugin/message-registry.d.ts +8 -8
- package/lib/plugin/message-registry.js +60 -60
- package/lib/plugin/node/debug/debug.spec.d.ts +1 -1
- package/lib/plugin/node/debug/debug.spec.js +67 -67
- package/lib/plugin/node/debug/plugin-node-debug-adapter-creator.d.ts +17 -17
- package/lib/plugin/node/debug/plugin-node-debug-adapter-creator.js +154 -154
- package/lib/plugin/node/env-node-ext.d.ts +21 -21
- package/lib/plugin/node/env-node-ext.js +63 -63
- package/lib/plugin/notification.d.ts +17 -17
- package/lib/plugin/notification.js +67 -67
- package/lib/plugin/output-channel/output-channel-item.d.ts +17 -17
- package/lib/plugin/output-channel/output-channel-item.js +51 -51
- package/lib/plugin/output-channel-registry.d.ts +8 -8
- package/lib/plugin/output-channel-registry.js +35 -35
- package/lib/plugin/path.d.ts +2 -2
- package/lib/plugin/path.js +59 -59
- package/lib/plugin/path.spec.d.ts +1 -1
- package/lib/plugin/path.spec.js +34 -34
- package/lib/plugin/plugin-context.d.ts +56 -56
- package/lib/plugin/plugin-context.js +1072 -1072
- package/lib/plugin/plugin-icon-path.d.ts +11 -11
- package/lib/plugin/plugin-icon-path.js +49 -49
- package/lib/plugin/plugin-manager.d.ts +80 -80
- package/lib/plugin/plugin-manager.js +366 -366
- package/lib/plugin/plugin-storage.d.ts +36 -36
- package/lib/plugin/plugin-storage.js +99 -99
- package/lib/plugin/preference-registry.d.ts +36 -36
- package/lib/plugin/preference-registry.js +295 -295
- package/lib/plugin/preference-registry.spec.d.ts +1 -1
- package/lib/plugin/preference-registry.spec.js +251 -251
- package/lib/plugin/prefix-sum-computer.d.ts +30 -30
- package/lib/plugin/prefix-sum-computer.js +172 -172
- package/lib/plugin/quick-open.d.ts +202 -202
- package/lib/plugin/quick-open.js +637 -637
- package/lib/plugin/scm.d.ts +53 -53
- package/lib/plugin/scm.js +713 -713
- package/lib/plugin/secrets-ext.d.ts +30 -30
- package/lib/plugin/secrets-ext.js +68 -68
- package/lib/plugin/status-bar/status-bar-item.d.ts +44 -44
- package/lib/plugin/status-bar/status-bar-item.js +122 -122
- package/lib/plugin/status-bar-message-registry.d.ts +20 -20
- package/lib/plugin/status-bar-message-registry.js +84 -84
- package/lib/plugin/stubs/tests-api.d.ts +22 -22
- package/lib/plugin/stubs/tests-api.js +66 -66
- package/lib/plugin/tabs.d.ts +22 -22
- package/lib/plugin/tabs.js +358 -358
- package/lib/plugin/tasks/task-provider.d.ts +8 -8
- package/lib/plugin/tasks/task-provider.js +56 -56
- package/lib/plugin/tasks/tasks.d.ts +45 -45
- package/lib/plugin/tasks/tasks.js +210 -210
- package/lib/plugin/terminal-ext.d.ts +101 -101
- package/lib/plugin/terminal-ext.js +422 -422
- package/lib/plugin/text-editor.d.ts +100 -100
- package/lib/plugin/text-editor.js +409 -409
- package/lib/plugin/text-editors.d.ts +37 -37
- package/lib/plugin/text-editors.js +126 -126
- package/lib/plugin/theming.d.ts +15 -15
- package/lib/plugin/theming.js +61 -61
- package/lib/plugin/timeline.d.ts +20 -20
- package/lib/plugin/timeline.js +152 -152
- package/lib/plugin/tree/tree-views.d.ts +93 -93
- package/lib/plugin/tree/tree-views.js +523 -523
- package/lib/plugin/type-converters.d.ts +131 -131
- package/lib/plugin/type-converters.js +1292 -1292
- package/lib/plugin/type-converters.spec.d.ts +1 -1
- package/lib/plugin/type-converters.spec.js +391 -391
- package/lib/plugin/types-impl.d.ts +1464 -1464
- package/lib/plugin/types-impl.d.ts.map +1 -1
- package/lib/plugin/types-impl.js +2956 -2953
- package/lib/plugin/types-impl.js.map +1 -1
- package/lib/plugin/types-impl.spec.d.ts +1 -1
- package/lib/plugin/types-impl.spec.js +78 -78
- package/lib/plugin/webview-views.d.ts +52 -52
- package/lib/plugin/webview-views.js +144 -144
- package/lib/plugin/webviews.d.ts +95 -95
- package/lib/plugin/webviews.js +340 -340
- package/lib/plugin/window-state.d.ts +16 -16
- package/lib/plugin/window-state.js +55 -55
- package/lib/plugin/word-helper.d.ts +21 -21
- package/lib/plugin/word-helper.js +125 -125
- package/lib/plugin/workspace.d.ts +53 -53
- package/lib/plugin/workspace.js +371 -371
- package/lib/plugin-ext-backend-electron-module.d.ts +3 -3
- package/lib/plugin-ext-backend-electron-module.js +24 -24
- package/lib/plugin-ext-backend-module.d.ts +3 -3
- package/lib/plugin-ext-backend-module.js +24 -24
- package/lib/plugin-ext-frontend-electron-module.d.ts +2 -2
- package/lib/plugin-ext-frontend-electron-module.js +19 -19
- package/lib/plugin-ext-frontend-module.d.ts +2 -2
- package/lib/plugin-ext-frontend-module.js +19 -19
- package/package.json +27 -27
- package/src/common/arrays.ts +54 -54
- package/src/common/assert.ts +23 -23
- package/src/common/cache.ts +51 -51
- package/src/common/character-classifier.ts +73 -73
- package/src/common/collections.ts +37 -37
- package/src/common/connection.ts +137 -137
- package/src/common/disposable-util.ts +39 -39
- package/src/common/editor-options.ts +74 -74
- package/src/common/env.ts +19 -19
- package/src/common/errors.ts +37 -37
- package/src/common/id-generator.ts +26 -26
- package/src/common/index.ts +24 -24
- package/src/common/link-computer.ts +354 -354
- package/src/common/object-identifier.ts +33 -33
- package/src/common/objects.ts +50 -50
- package/src/common/paths-util.ts +158 -158
- package/src/common/plugin-api-rpc-model.ts +864 -864
- package/src/common/plugin-api-rpc.ts +2202 -2202
- package/src/common/plugin-ext-api-contribution.ts +82 -82
- package/src/common/plugin-identifiers.ts +84 -84
- package/src/common/plugin-protocol.ts +987 -987
- package/src/common/proxy-handler.ts +126 -126
- package/src/common/reference-map.ts +38 -38
- package/src/common/rpc-protocol.ts +272 -272
- package/src/common/semantic-tokens-dto.ts +182 -182
- package/src/common/types.ts +129 -129
- package/src/common/uint.ts +37 -37
- package/src/common/uri-components.ts +85 -85
- package/src/hosted/browser/hosted-plugin-watcher.ts +54 -54
- package/src/hosted/browser/hosted-plugin.ts +830 -830
- package/src/hosted/browser/plugin-worker.ts +52 -52
- package/src/hosted/browser/worker/debug-stub.ts +28 -28
- package/src/hosted/browser/worker/plugin-manifest-loader.ts +114 -114
- package/src/hosted/browser/worker/worker-env-ext.ts +41 -41
- package/src/hosted/browser/worker/worker-main.ts +221 -221
- package/src/hosted/node/hosted-plugin-cli-contribution.ts +75 -75
- package/src/hosted/node/hosted-plugin-deployer-handler.ts +261 -261
- package/src/hosted/node/hosted-plugin-localization-service.ts +254 -254
- package/src/hosted/node/hosted-plugin-process.ts +248 -248
- package/src/hosted/node/hosted-plugin-protocol.ts +49 -49
- package/src/hosted/node/hosted-plugin.ts +116 -116
- package/src/hosted/node/metadata-scanner.ts +64 -64
- package/src/hosted/node/plugin-ext-hosted-backend-module.ts +80 -80
- package/src/hosted/node/plugin-host-proxy.ts +80 -80
- package/src/hosted/node/plugin-host-rpc.ts +245 -245
- package/src/hosted/node/plugin-host.ts +108 -108
- package/src/hosted/node/plugin-manifest-loader.ts +31 -31
- package/src/hosted/node/plugin-reader.ts +131 -131
- package/src/hosted/node/plugin-service.ts +175 -175
- package/src/hosted/node/scanners/backend-init-theia.ts +71 -71
- package/src/hosted/node/scanners/file-plugin-uri-factory.ts +32 -32
- package/src/hosted/node/scanners/grammars-reader.ts +56 -56
- package/src/hosted/node/scanners/plugin-uri-factory.ts +33 -33
- package/src/hosted/node/scanners/scanner-theia.ts +938 -938
- package/src/hosted/node-electron/plugin-ext-hosted-electron-backend-module.ts +26 -26
- package/src/hosted/node-electron/scanner-theia-electron.ts +32 -32
- package/src/main/browser/authentication-main.ts +369 -369
- package/src/main/browser/clipboard-main.ts +38 -38
- package/src/main/browser/command-registry-main.ts +110 -110
- package/src/main/browser/commands.ts +104 -104
- package/src/main/browser/comments/comment-glyph-widget.ts +66 -66
- package/src/main/browser/comments/comment-thread-widget.tsx +691 -691
- package/src/main/browser/comments/comments-context-key-service.ts +68 -68
- package/src/main/browser/comments/comments-contribution.ts +264 -264
- package/src/main/browser/comments/comments-decorator.ts +110 -110
- package/src/main/browser/comments/comments-main.ts +465 -465
- package/src/main/browser/comments/comments-service.ts +205 -205
- package/src/main/browser/custom-editors/custom-editor-contribution.ts +38 -38
- package/src/main/browser/custom-editors/custom-editor-opener.tsx +105 -105
- package/src/main/browser/custom-editors/custom-editor-service.ts +108 -108
- package/src/main/browser/custom-editors/custom-editor-widget-factory.ts +44 -44
- package/src/main/browser/custom-editors/custom-editor-widget.ts +127 -127
- package/src/main/browser/custom-editors/custom-editors-main.ts +606 -606
- package/src/main/browser/custom-editors/plugin-custom-editor-registry.ts +142 -142
- package/src/main/browser/custom-editors/undo-redo-service.ts +120 -120
- package/src/main/browser/debug/debug-main.ts +373 -373
- package/src/main/browser/debug/plugin-debug-adapter-contribution.ts +48 -48
- package/src/main/browser/debug/plugin-debug-configuration-provider.ts +63 -63
- package/src/main/browser/debug/plugin-debug-service.ts +338 -338
- package/src/main/browser/debug/plugin-debug-session-contribution-registry.ts +76 -76
- package/src/main/browser/debug/plugin-debug-session-factory.ts +105 -105
- package/src/main/browser/decorations/decorations-main.ts +146 -146
- package/src/main/browser/dialogs/modal-notification.ts +110 -110
- package/src/main/browser/dialogs/style/modal-notification.css +123 -123
- package/src/main/browser/dialogs-main.ts +185 -185
- package/src/main/browser/documents-main.ts +289 -289
- package/src/main/browser/editors-and-documents-main.ts +394 -394
- package/src/main/browser/env-main.ts +87 -87
- package/src/main/browser/file-system-main-impl.ts +263 -263
- package/src/main/browser/hierarchy/hierarchy-types-converters.ts +189 -189
- package/src/main/browser/keybindings/keybindings-contribution-handler.ts +66 -66
- package/src/main/browser/label-service-main.ts +51 -51
- package/src/main/browser/languages-main.ts +1387 -1387
- package/src/main/browser/main-context.ts +187 -187
- package/src/main/browser/main-file-system-event-service.ts +76 -79
- package/src/main/browser/menus/menus-contribution-handler.ts +162 -162
- package/src/main/browser/menus/plugin-menu-command-adapter.ts +264 -264
- package/src/main/browser/menus/vscode-theia-menu-mappings.ts +91 -91
- package/src/main/browser/message-registry-main.ts +56 -56
- package/src/main/browser/notification-main.ts +86 -86
- package/src/main/browser/output-channel-registry-main.ts +53 -53
- package/src/main/browser/plugin-authentication-service.ts +71 -71
- package/src/main/browser/plugin-contribution-handler.ts +609 -609
- package/src/main/browser/plugin-ext-frontend-module.ts +249 -249
- package/src/main/browser/plugin-ext-widget.tsx +132 -132
- package/src/main/browser/plugin-frontend-contribution.ts +35 -35
- package/src/main/browser/plugin-frontend-view-contribution.ts +38 -38
- package/src/main/browser/plugin-icon-theme-service.ts +585 -585
- package/src/main/browser/plugin-shared-style.ts +133 -133
- package/src/main/browser/plugin-storage.ts +55 -55
- package/src/main/browser/plugin-terminal-registry.ts +27 -27
- package/src/main/browser/preference-registry-main.ts +123 -123
- package/src/main/browser/quick-open-main.ts +324 -324
- package/src/main/browser/scm-main.ts +453 -453
- package/src/main/browser/secrets-main.ts +82 -82
- package/src/main/browser/selection-provider-command.ts +46 -46
- package/src/main/browser/status-bar-message-registry-main.ts +90 -90
- package/src/main/browser/style/comments.css +345 -345
- package/src/main/browser/style/index.css +85 -85
- package/src/main/browser/style/plugin-sidebar.css +73 -73
- package/src/main/browser/style/test.svg +13 -13
- package/src/main/browser/style/tree.css +52 -52
- package/src/main/browser/style/webview.css +53 -53
- package/src/main/browser/tabs/tabs-main.ts +323 -323
- package/src/main/browser/tasks-main.ts +268 -268
- package/src/main/browser/terminal-main.ts +301 -301
- package/src/main/browser/text-editor-main.ts +463 -463
- package/src/main/browser/text-editor-model-service.ts +102 -102
- package/src/main/browser/text-editors-main.ts +206 -206
- package/src/main/browser/theme-icon-override.ts +252 -252
- package/src/main/browser/theming-main.ts +42 -42
- package/src/main/browser/timeline-main.ts +80 -80
- package/src/main/browser/view/dnd-file-content-store.ts +42 -42
- package/src/main/browser/view/plugin-tree-view-node-label-provider.ts +81 -81
- package/src/main/browser/view/plugin-view-registry.ts +885 -885
- package/src/main/browser/view/plugin-view-widget.ts +173 -173
- package/src/main/browser/view/tree-view-decorator-service.ts +51 -51
- package/src/main/browser/view/tree-view-widget.tsx +859 -859
- package/src/main/browser/view/tree-views-main.ts +191 -191
- package/src/main/browser/view/view-context-key-service.ts +77 -77
- package/src/main/browser/view-column-service.ts +125 -125
- package/src/main/browser/webview/pre/fake.html +14 -14
- package/src/main/browser/webview/pre/host.js +130 -130
- package/src/main/browser/webview/pre/index.html +17 -17
- package/src/main/browser/webview/pre/main.js +632 -632
- package/src/main/browser/webview/pre/service-worker.js +295 -295
- package/src/main/browser/webview/webview-environment.ts +83 -83
- package/src/main/browser/webview/webview-frontend-security-warnings.ts +59 -59
- package/src/main/browser/webview/webview-preferences.ts +72 -72
- package/src/main/browser/webview/webview-resource-cache.ts +88 -88
- package/src/main/browser/webview/webview-theme-data-provider.ts +124 -124
- package/src/main/browser/webview/webview-widget-factory.ts +43 -43
- package/src/main/browser/webview/webview.ts +629 -629
- package/src/main/browser/webview-views/webview-views-main.ts +142 -142
- package/src/main/browser/webview-views/webview-views.ts +38 -38
- package/src/main/browser/webviews-main.ts +269 -269
- package/src/main/browser/window-state-main.ts +76 -76
- package/src/main/browser/workspace-main.ts +383 -383
- package/src/main/common/plugin-paths-protocol.ts +26 -26
- package/src/main/common/plugin-theia-environment.ts +36 -36
- package/src/main/common/webview-protocol.ts +28 -28
- package/src/main/electron-browser/plugin-ext-frontend-electron-module.ts +25 -25
- package/src/main/electron-browser/webview/electron-webview-widget-factory.ts +70 -70
- package/src/main/node/handlers/plugin-theia-directory-handler.ts +105 -105
- package/src/main/node/handlers/plugin-theia-file-handler.ts +54 -54
- package/src/main/node/paths/const.ts +21 -21
- package/src/main/node/paths/plugin-paths-service.ts +170 -170
- package/src/main/node/plugin-cli-contribution.ts +85 -85
- package/src/main/node/plugin-deployer-contribution.ts +34 -34
- package/src/main/node/plugin-deployer-directory-handler-context-impl.ts +45 -45
- package/src/main/node/plugin-deployer-entry-impl.ts +130 -130
- package/src/main/node/plugin-deployer-file-handler-context-impl.ts +33 -33
- package/src/main/node/plugin-deployer-impl.ts +367 -367
- package/src/main/node/plugin-deployer-proxy-entry-impl.ts +96 -96
- package/src/main/node/plugin-deployer-resolver-context-impl.ts +55 -55
- package/src/main/node/plugin-ext-backend-module.ts +93 -93
- package/src/main/node/plugin-github-resolver.ts +148 -148
- package/src/main/node/plugin-http-resolver.ts +91 -91
- package/src/main/node/plugin-localization-backend-contribution.ts +42 -42
- package/src/main/node/plugin-server-handler.ts +69 -69
- package/src/main/node/plugin-service.ts +82 -82
- package/src/main/node/plugin-theia-deployer-participant.ts +32 -32
- package/src/main/node/plugin-uninstallation-manager.ts +74 -74
- package/src/main/node/plugins-key-value-storage.ts +117 -117
- package/src/main/node/resolvers/local-directory-plugin-deployer-resolver.ts +37 -37
- package/src/main/node/resolvers/local-plugin-deployer-resolver.ts +56 -56
- package/src/main/node/temp-dir-util.ts +27 -27
- package/src/main/node/webview-backend-security-warnings.ts +45 -45
- package/src/main/style/status-bar.css +35 -35
- package/src/plugin/authentication-ext.ts +125 -125
- package/src/plugin/clipboard-ext.ts +37 -37
- package/src/plugin/command-registry.ts +218 -218
- package/src/plugin/comments.ts +518 -518
- package/src/plugin/custom-editors.ts +336 -336
- package/src/plugin/debug/debug-ext.ts +487 -487
- package/src/plugin/debug/plugin-debug-adapter-creator.ts +50 -50
- package/src/plugin/debug/plugin-debug-adapter-session.ts +106 -106
- package/src/plugin/debug/plugin-debug-adapter-tracker.ts +85 -85
- package/src/plugin/decorations.ts +140 -140
- package/src/plugin/dialogs.ts +96 -96
- package/src/plugin/document-data.ts +366 -366
- package/src/plugin/documents.ts +283 -283
- package/src/plugin/editors-and-documents.ts +170 -170
- package/src/plugin/env.ts +134 -134
- package/src/plugin/file-system-event-service-ext-impl.ts +256 -256
- package/src/plugin/file-system-ext-impl.ts +412 -412
- package/src/plugin/known-commands.spec.ts +50 -50
- package/src/plugin/known-commands.ts +412 -412
- package/src/plugin/label-service.ts +36 -36
- package/src/plugin/languages/call-hierarchy.ts +124 -124
- package/src/plugin/languages/code-action.ts +162 -162
- package/src/plugin/languages/color.ts +75 -75
- package/src/plugin/languages/completion.ts +179 -179
- package/src/plugin/languages/declaration.ts +72 -72
- package/src/plugin/languages/definition.ts +73 -73
- package/src/plugin/languages/diagnostics.ts +325 -325
- package/src/plugin/languages/document-formatting.ts +47 -47
- package/src/plugin/languages/document-highlight.ts +61 -61
- package/src/plugin/languages/evaluatable-expression.ts +47 -47
- package/src/plugin/languages/folding.ts +46 -46
- package/src/plugin/languages/hover.ts +58 -58
- package/src/plugin/languages/implementation.ts +73 -73
- package/src/plugin/languages/inlay-hints.ts +149 -149
- package/src/plugin/languages/inline-completion.ts +126 -126
- package/src/plugin/languages/inline-values.ts +50 -50
- package/src/plugin/languages/lens.ts +102 -102
- package/src/plugin/languages/link-provider.ts +79 -79
- package/src/plugin/languages/linked-editing-range.ts +48 -48
- package/src/plugin/languages/on-type-formatting.ts +50 -50
- package/src/plugin/languages/outline.ts +126 -126
- package/src/plugin/languages/range-formatting.ts +48 -48
- package/src/plugin/languages/reference.ts +58 -58
- package/src/plugin/languages/rename.ts +130 -130
- package/src/plugin/languages/selection-range.ts +80 -80
- package/src/plugin/languages/semantic-highlighting.ts +211 -211
- package/src/plugin/languages/signature.ts +82 -82
- package/src/plugin/languages/type-definition.ts +73 -73
- package/src/plugin/languages/type-hierarchy.ts +117 -117
- package/src/plugin/languages/util.ts +26 -26
- package/src/plugin/languages/workspace-symbol.ts +66 -66
- package/src/plugin/languages-utils.ts +56 -56
- package/src/plugin/languages.ts +969 -969
- package/src/plugin/markdown-string.ts +115 -115
- package/src/plugin/message-registry.ts +65 -65
- package/src/plugin/node/debug/debug.spec.ts +94 -94
- package/src/plugin/node/debug/plugin-node-debug-adapter-creator.ts +167 -167
- package/src/plugin/node/env-node-ext.ts +69 -69
- package/src/plugin/notification.ts +80 -80
- package/src/plugin/output-channel/output-channel-item.ts +73 -73
- package/src/plugin/output-channel-registry.ts +39 -39
- package/src/plugin/path.spec.ts +40 -40
- package/src/plugin/path.ts +68 -68
- package/src/plugin/plugin-context.ts +1387 -1387
- package/src/plugin/plugin-icon-path.ts +50 -50
- package/src/plugin/plugin-manager.ts +446 -446
- package/src/plugin/plugin-storage.ts +120 -120
- package/src/plugin/preference-registry.spec.ts +299 -299
- package/src/plugin/preference-registry.ts +337 -337
- package/src/plugin/prefix-sum-computer.ts +218 -218
- package/src/plugin/quick-open.ts +772 -772
- package/src/plugin/scm.ts +910 -910
- package/src/plugin/secrets-ext.ts +84 -84
- package/src/plugin/status-bar/status-bar-item.ts +193 -193
- package/src/plugin/status-bar-message-registry.ts +103 -103
- package/src/plugin/stubs/tests-api.ts +96 -96
- package/src/plugin/tabs.ts +426 -426
- package/src/plugin/tasks/task-provider.ts +60 -60
- package/src/plugin/tasks/tasks.ts +247 -247
- package/src/plugin/terminal-ext.ts +494 -494
- package/src/plugin/text-editor.ts +522 -522
- package/src/plugin/text-editors.ts +150 -150
- package/src/plugin/theming.ts +73 -73
- package/src/plugin/timeline.ts +186 -186
- package/src/plugin/tree/tree-views.ts +612 -612
- package/src/plugin/type-converters.spec.ts +476 -476
- package/src/plugin/type-converters.ts +1350 -1350
- package/src/plugin/types-impl.spec.ts +85 -85
- package/src/plugin/types-impl.ts +3407 -3404
- package/src/plugin/webview-views.ts +213 -213
- package/src/plugin/webviews.ts +433 -433
- package/src/plugin/window-state.ts +68 -68
- package/src/plugin/word-helper.ts +162 -162
- package/src/plugin/workspace.ts +448 -448
- package/src/plugin-ext-backend-electron-module.ts +24 -24
- package/src/plugin-ext-backend-module.ts +24 -24
- package/src/plugin-ext-frontend-electron-module.ts +19 -19
- package/src/plugin-ext-frontend-module.ts +19 -19
- package/src/typings/index.d.ts +25 -25
|
@@ -1,612 +1,612 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2018 Red Hat, Inc. 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 WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
18
|
-
|
|
19
|
-
import {
|
|
20
|
-
TreeDataProvider, TreeView, TreeViewExpansionEvent, TreeItem, TreeItemLabel,
|
|
21
|
-
TreeViewSelectionChangeEvent, TreeViewVisibilityChangeEvent, CancellationToken, DataTransferFile, TreeViewOptions
|
|
22
|
-
} from '@theia/plugin';
|
|
23
|
-
// TODO: extract `@theia/util` for event, disposable, cancellation and common types
|
|
24
|
-
// don't use @theia/core directly from plugin host
|
|
25
|
-
import { Emitter } from '@theia/core/lib/common/event';
|
|
26
|
-
import { Disposable, DisposableCollection } from '@theia/core/lib/common/disposable';
|
|
27
|
-
import { DataTransfer, DataTransferItem, Disposable as PluginDisposable, ThemeIcon } from '../types-impl';
|
|
28
|
-
import { Plugin, PLUGIN_RPC_CONTEXT, TreeViewsExt, TreeViewsMain, TreeViewItem, TreeViewRevealOptions, DataTransferFileDTO } from '../../common/plugin-api-rpc';
|
|
29
|
-
import { RPCProtocol } from '../../common/rpc-protocol';
|
|
30
|
-
import { CommandRegistryImpl, CommandsConverter } from '../command-registry';
|
|
31
|
-
import { TreeViewItemReference } from '../../common';
|
|
32
|
-
import { PluginIconPath } from '../plugin-icon-path';
|
|
33
|
-
import { URI } from '@theia/core/shared/vscode-uri';
|
|
34
|
-
import { UriComponents } from '@theia/core/lib/common/uri';
|
|
35
|
-
|
|
36
|
-
export class TreeViewsExtImpl implements TreeViewsExt {
|
|
37
|
-
private proxy: TreeViewsMain;
|
|
38
|
-
|
|
39
|
-
private readonly treeViews = new Map<string, TreeViewExtImpl<any>>();
|
|
40
|
-
|
|
41
|
-
constructor(rpc: RPCProtocol, readonly commandRegistry: CommandRegistryImpl) {
|
|
42
|
-
this.proxy = rpc.getProxy(PLUGIN_RPC_CONTEXT.TREE_VIEWS_MAIN);
|
|
43
|
-
|
|
44
|
-
commandRegistry.registerArgumentProcessor({
|
|
45
|
-
processArgument: arg => {
|
|
46
|
-
if (TreeViewItemReference.is(arg)) {
|
|
47
|
-
return this.toTreeElement(arg);
|
|
48
|
-
} else if (Array.isArray(arg)) {
|
|
49
|
-
return arg.map(param => TreeViewItemReference.is(param) ? this.toTreeElement(param) : param);
|
|
50
|
-
} else {
|
|
51
|
-
return arg;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
$dragStarted(treeViewId: string, treeItemIds: string[], token: CancellationToken): Promise<UriComponents[] | undefined> {
|
|
57
|
-
return this.getTreeView(treeViewId).onDragStarted(treeItemIds, token);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
$drop(treeViewId: string, treeItemId: string | undefined, dataTransferItems: [string, string | DataTransferFileDTO][], token: CancellationToken): Promise<void> {
|
|
61
|
-
return this.getTreeView(treeViewId).handleDrop!(treeItemId, dataTransferItems, token);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
protected toTreeElement(treeViewItemRef: TreeViewItemReference): any {
|
|
65
|
-
return this.treeViews.get(treeViewItemRef.viewId)?.getElement(treeViewItemRef.itemId);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
registerTreeDataProvider<T>(plugin: Plugin, treeViewId: string, treeDataProvider: TreeDataProvider<T>): PluginDisposable {
|
|
69
|
-
const treeView = this.createTreeView(plugin, treeViewId, { treeDataProvider });
|
|
70
|
-
|
|
71
|
-
return PluginDisposable.create(() => {
|
|
72
|
-
this.treeViews.delete(treeViewId);
|
|
73
|
-
treeView.dispose();
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
createTreeView<T>(plugin: Plugin, treeViewId: string, options: TreeViewOptions<T>): TreeView<T> {
|
|
78
|
-
if (!options || !options.treeDataProvider) {
|
|
79
|
-
throw new Error('Options with treeDataProvider is mandatory');
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const treeView = new TreeViewExtImpl<T>(plugin, treeViewId, options, this.proxy, this.commandRegistry.converter);
|
|
83
|
-
this.treeViews.set(treeViewId, treeView);
|
|
84
|
-
|
|
85
|
-
return {
|
|
86
|
-
// tslint:disable:typedef
|
|
87
|
-
get onDidExpandElement() {
|
|
88
|
-
return treeView.onDidExpandElement;
|
|
89
|
-
},
|
|
90
|
-
get onDidCollapseElement() {
|
|
91
|
-
return treeView.onDidCollapseElement;
|
|
92
|
-
},
|
|
93
|
-
get selection() {
|
|
94
|
-
return treeView.selectedElements;
|
|
95
|
-
},
|
|
96
|
-
get onDidChangeSelection() {
|
|
97
|
-
return treeView.onDidChangeSelection;
|
|
98
|
-
},
|
|
99
|
-
get visible() {
|
|
100
|
-
return treeView.visible;
|
|
101
|
-
},
|
|
102
|
-
get onDidChangeVisibility() {
|
|
103
|
-
return treeView.onDidChangeVisibility;
|
|
104
|
-
},
|
|
105
|
-
get message(): string {
|
|
106
|
-
return treeView.message;
|
|
107
|
-
},
|
|
108
|
-
set message(message: string) {
|
|
109
|
-
treeView.message = message;
|
|
110
|
-
},
|
|
111
|
-
get title(): string {
|
|
112
|
-
return treeView.title;
|
|
113
|
-
},
|
|
114
|
-
set title(title: string) {
|
|
115
|
-
treeView.title = title;
|
|
116
|
-
},
|
|
117
|
-
get description(): string {
|
|
118
|
-
return treeView.description;
|
|
119
|
-
},
|
|
120
|
-
set description(description: string) {
|
|
121
|
-
treeView.description = description;
|
|
122
|
-
},
|
|
123
|
-
reveal: (element: T, revealOptions?: Partial<TreeViewRevealOptions>): Thenable<void> =>
|
|
124
|
-
treeView.reveal(element, revealOptions),
|
|
125
|
-
|
|
126
|
-
dispose: () => {
|
|
127
|
-
this.treeViews.delete(treeViewId);
|
|
128
|
-
treeView.dispose();
|
|
129
|
-
}
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
async $getChildren(treeViewId: string, treeItemId: string): Promise<TreeViewItem[] | undefined> {
|
|
134
|
-
const treeView = this.getTreeView(treeViewId);
|
|
135
|
-
|
|
136
|
-
return treeView.getChildren(treeItemId);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
async $resolveTreeItem(treeViewId: string, treeItemId: string, token: CancellationToken): Promise<TreeViewItem | undefined> {
|
|
140
|
-
return this.getTreeView(treeViewId).resolveTreeItem(treeItemId, token);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
async $hasResolveTreeItem(treeViewId: string): Promise<boolean> {
|
|
144
|
-
return this.getTreeView(treeViewId).hasResolveTreeItem();
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
async $setExpanded(treeViewId: string, treeItemId: string, expanded: boolean): Promise<any> {
|
|
148
|
-
const treeView = this.getTreeView(treeViewId);
|
|
149
|
-
|
|
150
|
-
if (expanded) {
|
|
151
|
-
return treeView.onExpanded(treeItemId);
|
|
152
|
-
} else {
|
|
153
|
-
return treeView.onCollapsed(treeItemId);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
async $setSelection(treeViewId: string, treeItemIds: string[]): Promise<void> {
|
|
158
|
-
this.getTreeView(treeViewId).setSelection(treeItemIds);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
async $setVisible(treeViewId: string, isVisible: boolean): Promise<void> {
|
|
162
|
-
this.getTreeView(treeViewId).setVisible(isVisible);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
protected getTreeView(treeViewId: string): TreeViewExtImpl<any> {
|
|
166
|
-
const treeView = this.treeViews.get(treeViewId);
|
|
167
|
-
if (!treeView) {
|
|
168
|
-
throw new Error(`No tree view with id '${treeViewId}' registered.`);
|
|
169
|
-
}
|
|
170
|
-
return treeView;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
interface TreeExtNode<T> extends Disposable {
|
|
176
|
-
id: string
|
|
177
|
-
/** Collection of disposables. Must be disposed by an instance's `dispose` implementation. */
|
|
178
|
-
disposables: DisposableCollection;
|
|
179
|
-
/** The original `TreeItem` provided by the plugin's tree data provider. */
|
|
180
|
-
pluginTreeItem?: TreeItem;
|
|
181
|
-
/** The `TreeViewItem` used on the main side to render the tree node. */
|
|
182
|
-
treeViewItem?: TreeViewItem;
|
|
183
|
-
value?: T
|
|
184
|
-
children?: TreeExtNode<T>[]
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
class TreeViewExtImpl<T> implements Disposable {
|
|
188
|
-
private static readonly ID_COMPUTED = 'c';
|
|
189
|
-
private static readonly ID_ITEM = 'i';
|
|
190
|
-
|
|
191
|
-
private nextItemId: 0;
|
|
192
|
-
|
|
193
|
-
private readonly onDidExpandElementEmitter = new Emitter<TreeViewExpansionEvent<T>>();
|
|
194
|
-
readonly onDidExpandElement = this.onDidExpandElementEmitter.event;
|
|
195
|
-
|
|
196
|
-
private readonly onDidCollapseElementEmitter = new Emitter<TreeViewExpansionEvent<T>>();
|
|
197
|
-
readonly onDidCollapseElement = this.onDidCollapseElementEmitter.event;
|
|
198
|
-
|
|
199
|
-
private readonly onDidChangeSelectionEmitter = new Emitter<TreeViewSelectionChangeEvent<T>>();
|
|
200
|
-
readonly onDidChangeSelection = this.onDidChangeSelectionEmitter.event;
|
|
201
|
-
|
|
202
|
-
private readonly onDidChangeVisibilityEmitter = new Emitter<TreeViewVisibilityChangeEvent>();
|
|
203
|
-
readonly onDidChangeVisibility = this.onDidChangeVisibilityEmitter.event;
|
|
204
|
-
|
|
205
|
-
private readonly nodes = new Map<string, TreeExtNode<T>>();
|
|
206
|
-
private pendingRefresh = Promise.resolve();
|
|
207
|
-
|
|
208
|
-
private localDataTransfer = new DataTransfer();
|
|
209
|
-
|
|
210
|
-
private readonly toDispose = new DisposableCollection(
|
|
211
|
-
Disposable.create(() => this.clearAll()),
|
|
212
|
-
this.onDidExpandElementEmitter,
|
|
213
|
-
this.onDidCollapseElementEmitter,
|
|
214
|
-
this.onDidChangeSelectionEmitter,
|
|
215
|
-
this.onDidChangeVisibilityEmitter
|
|
216
|
-
);
|
|
217
|
-
|
|
218
|
-
constructor(
|
|
219
|
-
private plugin: Plugin,
|
|
220
|
-
private treeViewId: string,
|
|
221
|
-
private options: TreeViewOptions<T>,
|
|
222
|
-
private proxy: TreeViewsMain,
|
|
223
|
-
readonly commandsConverter: CommandsConverter
|
|
224
|
-
) {
|
|
225
|
-
// make copies of optionally provided MIME types:
|
|
226
|
-
const dragMimeTypes = options.dragAndDropController?.dragMimeTypes?.slice();
|
|
227
|
-
const dropMimeTypes = options.dragAndDropController?.dropMimeTypes?.slice();
|
|
228
|
-
proxy.$registerTreeDataProvider(treeViewId, { canSelectMany: options.canSelectMany, dragMimeTypes, dropMimeTypes });
|
|
229
|
-
this.toDispose.push(Disposable.create(() => this.proxy.$unregisterTreeDataProvider(treeViewId)));
|
|
230
|
-
options.treeDataProvider.onDidChangeTreeData?.(() => {
|
|
231
|
-
this.pendingRefresh = proxy.$refresh(treeViewId);
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
dispose(): void {
|
|
236
|
-
this.toDispose.dispose();
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
async reveal(element: T, options?: Partial<TreeViewRevealOptions>): Promise<void> {
|
|
240
|
-
await this.pendingRefresh;
|
|
241
|
-
|
|
242
|
-
const elementParentChain = await this.calculateRevealParentChain(element);
|
|
243
|
-
if (elementParentChain) {
|
|
244
|
-
return this.proxy.$reveal(this.treeViewId, elementParentChain, {
|
|
245
|
-
select: true, focus: false, expand: false, ...options
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
private _message: string = '';
|
|
251
|
-
get message(): string {
|
|
252
|
-
return this._message;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
set message(message: string) {
|
|
256
|
-
this._message = message;
|
|
257
|
-
this.proxy.$setMessage(this.treeViewId, this._message);
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
private _title: string = '';
|
|
261
|
-
get title(): string {
|
|
262
|
-
return this._title;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
set title(title: string) {
|
|
266
|
-
this._title = title;
|
|
267
|
-
this.proxy.$setTitle(this.treeViewId, title);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
private _description: string = '';
|
|
271
|
-
get description(): string {
|
|
272
|
-
return this._description;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
set description(description: string) {
|
|
276
|
-
this._description = description;
|
|
277
|
-
this.proxy.$setDescription(this.treeViewId, this._description);
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
getElement(treeItemId: string): T | undefined {
|
|
281
|
-
return this.nodes.get(treeItemId)?.value;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
/**
|
|
285
|
-
* calculate the chain of node ids from root to element so that the frontend can expand all of them and reveal element.
|
|
286
|
-
* this is needed as the frontend may not have the full tree nodes.
|
|
287
|
-
* throughout the parent chain this.getChildren is called in order to fill this.nodes cache.
|
|
288
|
-
*
|
|
289
|
-
* returns undefined if wasn't able to calculate the path due to inconsistencies.
|
|
290
|
-
*
|
|
291
|
-
* @param element element to reveal
|
|
292
|
-
*/
|
|
293
|
-
private async calculateRevealParentChain(element: T | undefined): Promise<string[] | undefined> {
|
|
294
|
-
if (!element) {
|
|
295
|
-
// root
|
|
296
|
-
return [];
|
|
297
|
-
}
|
|
298
|
-
const parent = await this.options.treeDataProvider.getParent?.(element) ?? undefined;
|
|
299
|
-
const chain = await this.calculateRevealParentChain(parent);
|
|
300
|
-
if (!chain) {
|
|
301
|
-
// parents are inconsistent
|
|
302
|
-
return undefined;
|
|
303
|
-
}
|
|
304
|
-
const parentId = chain.length ? chain[chain.length - 1] : '';
|
|
305
|
-
const treeItem = await this.options.treeDataProvider.getTreeItem(element);
|
|
306
|
-
if (treeItem.id) {
|
|
307
|
-
return chain.concat(treeItem.id);
|
|
308
|
-
}
|
|
309
|
-
const cachedParentNode = this.nodes.get(parentId);
|
|
310
|
-
// first try to get children length from cache since getChildren disposes old nodes, which can cause a race
|
|
311
|
-
// condition if command is executed together with reveal.
|
|
312
|
-
// If not in cache, getChildren fills this.nodes and generate ids for them which are needed later
|
|
313
|
-
const children = cachedParentNode?.children || await this.getChildren(parentId);
|
|
314
|
-
if (!children) {
|
|
315
|
-
// parent is inconsistent
|
|
316
|
-
return undefined;
|
|
317
|
-
}
|
|
318
|
-
const candidateId = this.buildTreeItemId(parentId, treeItem);
|
|
319
|
-
if (this.nodes.has(candidateId)) {
|
|
320
|
-
return chain.concat(candidateId);
|
|
321
|
-
}
|
|
322
|
-
// couldn't calculate consistent parent chain and id
|
|
323
|
-
return undefined;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
private getTreeItemLabel(treeItem: TreeItem): string | undefined {
|
|
327
|
-
const treeItemLabel: string | TreeItemLabel | undefined = treeItem.label;
|
|
328
|
-
return typeof treeItemLabel === 'object' ? treeItemLabel.label : treeItemLabel;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
private getTreeItemLabelHighlights(treeItem: TreeItem): [number, number][] | undefined {
|
|
332
|
-
const treeItemLabel: string | TreeItemLabel | undefined = treeItem.label;
|
|
333
|
-
return typeof treeItemLabel === 'object' ? treeItemLabel.highlights : undefined;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
private getItemLabel(treeItem: TreeItem): string | undefined {
|
|
337
|
-
let idLabel = this.getTreeItemLabel(treeItem);
|
|
338
|
-
// Use resource URI if label is not set
|
|
339
|
-
if (idLabel === undefined && treeItem.resourceUri) {
|
|
340
|
-
idLabel = treeItem.resourceUri.path.toString();
|
|
341
|
-
idLabel = decodeURIComponent(idLabel);
|
|
342
|
-
if (idLabel.indexOf('/') >= 0) {
|
|
343
|
-
idLabel = idLabel.substring(idLabel.lastIndexOf('/') + 1);
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
return idLabel;
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
private buildTreeItemId(parentId: string, item: TreeItem): string {
|
|
350
|
-
// build tree id according to https://code.visualstudio.com/api/references/vscode-api#TreeItem
|
|
351
|
-
// note: the front end tree implementation cannot handle reparenting items, hence the id is set to the "path" of individual ids
|
|
352
|
-
let id = typeof item.id === 'string' ? item.id : this.getItemLabel(item);
|
|
353
|
-
if (id) {
|
|
354
|
-
// we use '' as the id of the root, we don't consider that a valid id
|
|
355
|
-
// since '' is falsy, we'll never get '' in this branch
|
|
356
|
-
id = TreeViewExtImpl.ID_ITEM + id;
|
|
357
|
-
} else {
|
|
358
|
-
id = TreeViewExtImpl.ID_COMPUTED + this.nextItemId++;
|
|
359
|
-
}
|
|
360
|
-
return `${parentId}/${id}`;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
async getChildren(parentId: string): Promise<TreeViewItem[] | undefined> {
|
|
364
|
-
const parentNode = this.nodes.get(parentId);
|
|
365
|
-
const parent = parentNode?.value;
|
|
366
|
-
if (parentId && !parent) {
|
|
367
|
-
console.error(`No tree item with id '${parentId}' found.`);
|
|
368
|
-
return [];
|
|
369
|
-
}
|
|
370
|
-
this.clearChildren(parentNode);
|
|
371
|
-
|
|
372
|
-
// place root in the cache
|
|
373
|
-
if (parentId === '') {
|
|
374
|
-
const rootNodeDisposables = new DisposableCollection();
|
|
375
|
-
this.nodes.set(parentId, { id: '', disposables: rootNodeDisposables, dispose: () => { rootNodeDisposables.dispose(); } });
|
|
376
|
-
}
|
|
377
|
-
// ask data provider for children for cached element
|
|
378
|
-
const result = await this.options.treeDataProvider.getChildren(parent);
|
|
379
|
-
if (result) {
|
|
380
|
-
const treeItemPromises = result.map(async value => {
|
|
381
|
-
|
|
382
|
-
// Ask data provider for a tree item for the value
|
|
383
|
-
// Data provider must return theia.TreeItem
|
|
384
|
-
const treeItem = await this.options.treeDataProvider.getTreeItem(value);
|
|
385
|
-
// Convert theia.TreeItem to the TreeViewItem
|
|
386
|
-
|
|
387
|
-
const label = this.getItemLabel(treeItem);
|
|
388
|
-
const highlights = this.getTreeItemLabelHighlights(treeItem);
|
|
389
|
-
|
|
390
|
-
// Generate the ID
|
|
391
|
-
// ID is used for caching the element
|
|
392
|
-
const id = this.buildTreeItemId(parentId, treeItem);
|
|
393
|
-
|
|
394
|
-
const toDisposeElement = new DisposableCollection();
|
|
395
|
-
const node: TreeExtNode<T> = {
|
|
396
|
-
id,
|
|
397
|
-
pluginTreeItem: treeItem,
|
|
398
|
-
value,
|
|
399
|
-
disposables: toDisposeElement,
|
|
400
|
-
dispose: () => toDisposeElement.dispose()
|
|
401
|
-
};
|
|
402
|
-
if (parentNode) {
|
|
403
|
-
const children = parentNode.children || [];
|
|
404
|
-
children.push(node);
|
|
405
|
-
parentNode.children = children;
|
|
406
|
-
}
|
|
407
|
-
this.nodes.set(id, node);
|
|
408
|
-
|
|
409
|
-
let icon;
|
|
410
|
-
let iconUrl;
|
|
411
|
-
let themeIcon;
|
|
412
|
-
const { iconPath } = treeItem;
|
|
413
|
-
if (typeof iconPath === 'string' && iconPath.indexOf('fa-') !== -1) {
|
|
414
|
-
icon = iconPath;
|
|
415
|
-
} else if (ThemeIcon.is(iconPath)) {
|
|
416
|
-
themeIcon = iconPath;
|
|
417
|
-
} else {
|
|
418
|
-
iconUrl = PluginIconPath.toUrl(<PluginIconPath | undefined>iconPath, this.plugin);
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
const treeViewItem = {
|
|
422
|
-
id,
|
|
423
|
-
label,
|
|
424
|
-
highlights,
|
|
425
|
-
icon,
|
|
426
|
-
iconUrl,
|
|
427
|
-
themeIcon,
|
|
428
|
-
description: treeItem.description,
|
|
429
|
-
resourceUri: treeItem.resourceUri,
|
|
430
|
-
tooltip: treeItem.tooltip,
|
|
431
|
-
collapsibleState: treeItem.collapsibleState,
|
|
432
|
-
contextValue: treeItem.contextValue,
|
|
433
|
-
command: this.commandsConverter.toSafeCommand(treeItem.command, toDisposeElement),
|
|
434
|
-
accessibilityInformation: treeItem.accessibilityInformation
|
|
435
|
-
} as TreeViewItem;
|
|
436
|
-
node.treeViewItem = treeViewItem;
|
|
437
|
-
|
|
438
|
-
return treeViewItem;
|
|
439
|
-
});
|
|
440
|
-
|
|
441
|
-
return Promise.all(treeItemPromises);
|
|
442
|
-
} else {
|
|
443
|
-
return undefined;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
private clearChildren(parentNode?: TreeExtNode<T>): void {
|
|
448
|
-
if (parentNode) {
|
|
449
|
-
if (parentNode.children) {
|
|
450
|
-
for (const child of parentNode.children) {
|
|
451
|
-
this.clear(child);
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
delete parentNode['children'];
|
|
455
|
-
} else {
|
|
456
|
-
this.clearAll();
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
private clear(node: TreeExtNode<T>): void {
|
|
461
|
-
if (node.children) {
|
|
462
|
-
for (const child of node.children) {
|
|
463
|
-
this.clear(child);
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
this.nodes.delete(node.id);
|
|
467
|
-
node.dispose();
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
private clearAll(): void {
|
|
471
|
-
this.nodes.forEach(node => node.dispose());
|
|
472
|
-
this.nodes.clear();
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
async onExpanded(treeItemId: string): Promise<any> {
|
|
476
|
-
// get element from a cache
|
|
477
|
-
const cachedElement = this.getElement(treeItemId);
|
|
478
|
-
|
|
479
|
-
// fire an event
|
|
480
|
-
if (cachedElement) {
|
|
481
|
-
this.onDidExpandElementEmitter.fire({
|
|
482
|
-
element: cachedElement
|
|
483
|
-
});
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
async onCollapsed(treeItemId: string): Promise<any> {
|
|
488
|
-
// get element from a cache
|
|
489
|
-
const cachedElement = this.getElement(treeItemId);
|
|
490
|
-
|
|
491
|
-
// fire an event
|
|
492
|
-
if (cachedElement) {
|
|
493
|
-
this.onDidCollapseElementEmitter.fire({
|
|
494
|
-
element: cachedElement
|
|
495
|
-
});
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
async resolveTreeItem(treeItemId: string, token: CancellationToken): Promise<TreeViewItem | undefined> {
|
|
500
|
-
if (!this.options.treeDataProvider.resolveTreeItem) {
|
|
501
|
-
return undefined;
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
const node = this.nodes.get(treeItemId);
|
|
505
|
-
if (node && node.treeViewItem && node.pluginTreeItem && node.value) {
|
|
506
|
-
const resolved = await this.options.treeDataProvider.resolveTreeItem(node.pluginTreeItem, node.value, token) ?? node.pluginTreeItem;
|
|
507
|
-
node.treeViewItem.command = this.commandsConverter.toSafeCommand(resolved.command, node.disposables);
|
|
508
|
-
node.treeViewItem.tooltip = resolved.tooltip;
|
|
509
|
-
return node.treeViewItem;
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
return undefined;
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
hasResolveTreeItem(): boolean {
|
|
516
|
-
return !!this.options.treeDataProvider.resolveTreeItem;
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
private selectedItemIds = new Set<string>();
|
|
520
|
-
get selectedElements(): T[] {
|
|
521
|
-
const items: T[] = [];
|
|
522
|
-
for (const id of this.selectedItemIds) {
|
|
523
|
-
const item = this.getElement(id);
|
|
524
|
-
if (item) {
|
|
525
|
-
items.push(item);
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
return items;
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
setSelection(selectedItemIds: string[]): void {
|
|
532
|
-
const toDelete = new Set<string>(this.selectedItemIds);
|
|
533
|
-
for (const id of selectedItemIds) {
|
|
534
|
-
toDelete.delete(id);
|
|
535
|
-
if (!this.selectedItemIds.has(id)) {
|
|
536
|
-
this.doSetSelection(selectedItemIds);
|
|
537
|
-
return;
|
|
538
|
-
}
|
|
539
|
-
}
|
|
540
|
-
if (toDelete.size) {
|
|
541
|
-
this.doSetSelection(selectedItemIds);
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
protected doSetSelection(selectedItemIts: string[]): void {
|
|
545
|
-
this.selectedItemIds = new Set(selectedItemIts);
|
|
546
|
-
this.onDidChangeSelectionEmitter.fire(Object.freeze({ selection: this.selectedElements }));
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
private _visible = false;
|
|
550
|
-
get visible(): boolean {
|
|
551
|
-
return this._visible;
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
setVisible(visible: boolean): void {
|
|
555
|
-
if (visible !== this._visible) {
|
|
556
|
-
this._visible = visible;
|
|
557
|
-
this.onDidChangeVisibilityEmitter.fire(Object.freeze({ visible: this._visible }));
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
async onDragStarted(treeItemIds: string[], token: CancellationToken): Promise<UriComponents[] | undefined> {
|
|
562
|
-
const treeItems: T[] = [];
|
|
563
|
-
for (const id of treeItemIds) {
|
|
564
|
-
const item = this.getElement(id);
|
|
565
|
-
if (item) {
|
|
566
|
-
treeItems.push(item);
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
if (this.options.dragAndDropController?.handleDrag) {
|
|
570
|
-
this.localDataTransfer.clear();
|
|
571
|
-
await this.options.dragAndDropController.handleDrag(treeItems, this.localDataTransfer, token);
|
|
572
|
-
const uriList = await this.localDataTransfer.get('text/uri-list')?.asString();
|
|
573
|
-
if (uriList) {
|
|
574
|
-
return uriList.split('\n').map(str => URI.parse(str));
|
|
575
|
-
}
|
|
576
|
-
}
|
|
577
|
-
return undefined;
|
|
578
|
-
}
|
|
579
|
-
|
|
580
|
-
async handleDrop(treeItemId: string | undefined, dataTransferItems: [string, string | DataTransferFileDTO][], token: CancellationToken): Promise<void> {
|
|
581
|
-
const treeItem = treeItemId ? this.getElement(treeItemId) : undefined;
|
|
582
|
-
const dropTransfer = new DataTransfer();
|
|
583
|
-
if (this.options.dragAndDropController?.handleDrop) {
|
|
584
|
-
this.localDataTransfer.forEach((item, type) => {
|
|
585
|
-
dropTransfer.set(type, item);
|
|
586
|
-
});
|
|
587
|
-
for (const [type, item] of dataTransferItems) {
|
|
588
|
-
// prefer the item the plugin has set in `onDragStarted`;
|
|
589
|
-
if (!dropTransfer.has(type)) {
|
|
590
|
-
if (typeof item === 'string') {
|
|
591
|
-
dropTransfer.set(type, new DataTransferItem(item));
|
|
592
|
-
} else {
|
|
593
|
-
const file: DataTransferFile = {
|
|
594
|
-
name: item.name,
|
|
595
|
-
data: () => this.proxy.$readDroppedFile(item.contentId).then(buffer => buffer.buffer),
|
|
596
|
-
uri: item.uri ? URI.revive(item.uri) : undefined
|
|
597
|
-
};
|
|
598
|
-
|
|
599
|
-
const fileItem = new class extends DataTransferItem {
|
|
600
|
-
override asFile(): DataTransferFile | undefined {
|
|
601
|
-
return file;
|
|
602
|
-
}
|
|
603
|
-
}(file);
|
|
604
|
-
|
|
605
|
-
dropTransfer.set(type, fileItem);
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
}
|
|
609
|
-
return this.options.dragAndDropController.handleDrop(treeItem, dropTransfer, token);
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
}
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2018 Red Hat, Inc. 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 WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
18
|
+
|
|
19
|
+
import {
|
|
20
|
+
TreeDataProvider, TreeView, TreeViewExpansionEvent, TreeItem, TreeItemLabel,
|
|
21
|
+
TreeViewSelectionChangeEvent, TreeViewVisibilityChangeEvent, CancellationToken, DataTransferFile, TreeViewOptions
|
|
22
|
+
} from '@theia/plugin';
|
|
23
|
+
// TODO: extract `@theia/util` for event, disposable, cancellation and common types
|
|
24
|
+
// don't use @theia/core directly from plugin host
|
|
25
|
+
import { Emitter } from '@theia/core/lib/common/event';
|
|
26
|
+
import { Disposable, DisposableCollection } from '@theia/core/lib/common/disposable';
|
|
27
|
+
import { DataTransfer, DataTransferItem, Disposable as PluginDisposable, ThemeIcon } from '../types-impl';
|
|
28
|
+
import { Plugin, PLUGIN_RPC_CONTEXT, TreeViewsExt, TreeViewsMain, TreeViewItem, TreeViewRevealOptions, DataTransferFileDTO } from '../../common/plugin-api-rpc';
|
|
29
|
+
import { RPCProtocol } from '../../common/rpc-protocol';
|
|
30
|
+
import { CommandRegistryImpl, CommandsConverter } from '../command-registry';
|
|
31
|
+
import { TreeViewItemReference } from '../../common';
|
|
32
|
+
import { PluginIconPath } from '../plugin-icon-path';
|
|
33
|
+
import { URI } from '@theia/core/shared/vscode-uri';
|
|
34
|
+
import { UriComponents } from '@theia/core/lib/common/uri';
|
|
35
|
+
|
|
36
|
+
export class TreeViewsExtImpl implements TreeViewsExt {
|
|
37
|
+
private proxy: TreeViewsMain;
|
|
38
|
+
|
|
39
|
+
private readonly treeViews = new Map<string, TreeViewExtImpl<any>>();
|
|
40
|
+
|
|
41
|
+
constructor(rpc: RPCProtocol, readonly commandRegistry: CommandRegistryImpl) {
|
|
42
|
+
this.proxy = rpc.getProxy(PLUGIN_RPC_CONTEXT.TREE_VIEWS_MAIN);
|
|
43
|
+
|
|
44
|
+
commandRegistry.registerArgumentProcessor({
|
|
45
|
+
processArgument: arg => {
|
|
46
|
+
if (TreeViewItemReference.is(arg)) {
|
|
47
|
+
return this.toTreeElement(arg);
|
|
48
|
+
} else if (Array.isArray(arg)) {
|
|
49
|
+
return arg.map(param => TreeViewItemReference.is(param) ? this.toTreeElement(param) : param);
|
|
50
|
+
} else {
|
|
51
|
+
return arg;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
$dragStarted(treeViewId: string, treeItemIds: string[], token: CancellationToken): Promise<UriComponents[] | undefined> {
|
|
57
|
+
return this.getTreeView(treeViewId).onDragStarted(treeItemIds, token);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
$drop(treeViewId: string, treeItemId: string | undefined, dataTransferItems: [string, string | DataTransferFileDTO][], token: CancellationToken): Promise<void> {
|
|
61
|
+
return this.getTreeView(treeViewId).handleDrop!(treeItemId, dataTransferItems, token);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
protected toTreeElement(treeViewItemRef: TreeViewItemReference): any {
|
|
65
|
+
return this.treeViews.get(treeViewItemRef.viewId)?.getElement(treeViewItemRef.itemId);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
registerTreeDataProvider<T>(plugin: Plugin, treeViewId: string, treeDataProvider: TreeDataProvider<T>): PluginDisposable {
|
|
69
|
+
const treeView = this.createTreeView(plugin, treeViewId, { treeDataProvider });
|
|
70
|
+
|
|
71
|
+
return PluginDisposable.create(() => {
|
|
72
|
+
this.treeViews.delete(treeViewId);
|
|
73
|
+
treeView.dispose();
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
createTreeView<T>(plugin: Plugin, treeViewId: string, options: TreeViewOptions<T>): TreeView<T> {
|
|
78
|
+
if (!options || !options.treeDataProvider) {
|
|
79
|
+
throw new Error('Options with treeDataProvider is mandatory');
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const treeView = new TreeViewExtImpl<T>(plugin, treeViewId, options, this.proxy, this.commandRegistry.converter);
|
|
83
|
+
this.treeViews.set(treeViewId, treeView);
|
|
84
|
+
|
|
85
|
+
return {
|
|
86
|
+
// tslint:disable:typedef
|
|
87
|
+
get onDidExpandElement() {
|
|
88
|
+
return treeView.onDidExpandElement;
|
|
89
|
+
},
|
|
90
|
+
get onDidCollapseElement() {
|
|
91
|
+
return treeView.onDidCollapseElement;
|
|
92
|
+
},
|
|
93
|
+
get selection() {
|
|
94
|
+
return treeView.selectedElements;
|
|
95
|
+
},
|
|
96
|
+
get onDidChangeSelection() {
|
|
97
|
+
return treeView.onDidChangeSelection;
|
|
98
|
+
},
|
|
99
|
+
get visible() {
|
|
100
|
+
return treeView.visible;
|
|
101
|
+
},
|
|
102
|
+
get onDidChangeVisibility() {
|
|
103
|
+
return treeView.onDidChangeVisibility;
|
|
104
|
+
},
|
|
105
|
+
get message(): string {
|
|
106
|
+
return treeView.message;
|
|
107
|
+
},
|
|
108
|
+
set message(message: string) {
|
|
109
|
+
treeView.message = message;
|
|
110
|
+
},
|
|
111
|
+
get title(): string {
|
|
112
|
+
return treeView.title;
|
|
113
|
+
},
|
|
114
|
+
set title(title: string) {
|
|
115
|
+
treeView.title = title;
|
|
116
|
+
},
|
|
117
|
+
get description(): string {
|
|
118
|
+
return treeView.description;
|
|
119
|
+
},
|
|
120
|
+
set description(description: string) {
|
|
121
|
+
treeView.description = description;
|
|
122
|
+
},
|
|
123
|
+
reveal: (element: T, revealOptions?: Partial<TreeViewRevealOptions>): Thenable<void> =>
|
|
124
|
+
treeView.reveal(element, revealOptions),
|
|
125
|
+
|
|
126
|
+
dispose: () => {
|
|
127
|
+
this.treeViews.delete(treeViewId);
|
|
128
|
+
treeView.dispose();
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
async $getChildren(treeViewId: string, treeItemId: string): Promise<TreeViewItem[] | undefined> {
|
|
134
|
+
const treeView = this.getTreeView(treeViewId);
|
|
135
|
+
|
|
136
|
+
return treeView.getChildren(treeItemId);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
async $resolveTreeItem(treeViewId: string, treeItemId: string, token: CancellationToken): Promise<TreeViewItem | undefined> {
|
|
140
|
+
return this.getTreeView(treeViewId).resolveTreeItem(treeItemId, token);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
async $hasResolveTreeItem(treeViewId: string): Promise<boolean> {
|
|
144
|
+
return this.getTreeView(treeViewId).hasResolveTreeItem();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
async $setExpanded(treeViewId: string, treeItemId: string, expanded: boolean): Promise<any> {
|
|
148
|
+
const treeView = this.getTreeView(treeViewId);
|
|
149
|
+
|
|
150
|
+
if (expanded) {
|
|
151
|
+
return treeView.onExpanded(treeItemId);
|
|
152
|
+
} else {
|
|
153
|
+
return treeView.onCollapsed(treeItemId);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
async $setSelection(treeViewId: string, treeItemIds: string[]): Promise<void> {
|
|
158
|
+
this.getTreeView(treeViewId).setSelection(treeItemIds);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async $setVisible(treeViewId: string, isVisible: boolean): Promise<void> {
|
|
162
|
+
this.getTreeView(treeViewId).setVisible(isVisible);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
protected getTreeView(treeViewId: string): TreeViewExtImpl<any> {
|
|
166
|
+
const treeView = this.treeViews.get(treeViewId);
|
|
167
|
+
if (!treeView) {
|
|
168
|
+
throw new Error(`No tree view with id '${treeViewId}' registered.`);
|
|
169
|
+
}
|
|
170
|
+
return treeView;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
interface TreeExtNode<T> extends Disposable {
|
|
176
|
+
id: string
|
|
177
|
+
/** Collection of disposables. Must be disposed by an instance's `dispose` implementation. */
|
|
178
|
+
disposables: DisposableCollection;
|
|
179
|
+
/** The original `TreeItem` provided by the plugin's tree data provider. */
|
|
180
|
+
pluginTreeItem?: TreeItem;
|
|
181
|
+
/** The `TreeViewItem` used on the main side to render the tree node. */
|
|
182
|
+
treeViewItem?: TreeViewItem;
|
|
183
|
+
value?: T
|
|
184
|
+
children?: TreeExtNode<T>[]
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
class TreeViewExtImpl<T> implements Disposable {
|
|
188
|
+
private static readonly ID_COMPUTED = 'c';
|
|
189
|
+
private static readonly ID_ITEM = 'i';
|
|
190
|
+
|
|
191
|
+
private nextItemId: 0;
|
|
192
|
+
|
|
193
|
+
private readonly onDidExpandElementEmitter = new Emitter<TreeViewExpansionEvent<T>>();
|
|
194
|
+
readonly onDidExpandElement = this.onDidExpandElementEmitter.event;
|
|
195
|
+
|
|
196
|
+
private readonly onDidCollapseElementEmitter = new Emitter<TreeViewExpansionEvent<T>>();
|
|
197
|
+
readonly onDidCollapseElement = this.onDidCollapseElementEmitter.event;
|
|
198
|
+
|
|
199
|
+
private readonly onDidChangeSelectionEmitter = new Emitter<TreeViewSelectionChangeEvent<T>>();
|
|
200
|
+
readonly onDidChangeSelection = this.onDidChangeSelectionEmitter.event;
|
|
201
|
+
|
|
202
|
+
private readonly onDidChangeVisibilityEmitter = new Emitter<TreeViewVisibilityChangeEvent>();
|
|
203
|
+
readonly onDidChangeVisibility = this.onDidChangeVisibilityEmitter.event;
|
|
204
|
+
|
|
205
|
+
private readonly nodes = new Map<string, TreeExtNode<T>>();
|
|
206
|
+
private pendingRefresh = Promise.resolve();
|
|
207
|
+
|
|
208
|
+
private localDataTransfer = new DataTransfer();
|
|
209
|
+
|
|
210
|
+
private readonly toDispose = new DisposableCollection(
|
|
211
|
+
Disposable.create(() => this.clearAll()),
|
|
212
|
+
this.onDidExpandElementEmitter,
|
|
213
|
+
this.onDidCollapseElementEmitter,
|
|
214
|
+
this.onDidChangeSelectionEmitter,
|
|
215
|
+
this.onDidChangeVisibilityEmitter
|
|
216
|
+
);
|
|
217
|
+
|
|
218
|
+
constructor(
|
|
219
|
+
private plugin: Plugin,
|
|
220
|
+
private treeViewId: string,
|
|
221
|
+
private options: TreeViewOptions<T>,
|
|
222
|
+
private proxy: TreeViewsMain,
|
|
223
|
+
readonly commandsConverter: CommandsConverter
|
|
224
|
+
) {
|
|
225
|
+
// make copies of optionally provided MIME types:
|
|
226
|
+
const dragMimeTypes = options.dragAndDropController?.dragMimeTypes?.slice();
|
|
227
|
+
const dropMimeTypes = options.dragAndDropController?.dropMimeTypes?.slice();
|
|
228
|
+
proxy.$registerTreeDataProvider(treeViewId, { canSelectMany: options.canSelectMany, dragMimeTypes, dropMimeTypes });
|
|
229
|
+
this.toDispose.push(Disposable.create(() => this.proxy.$unregisterTreeDataProvider(treeViewId)));
|
|
230
|
+
options.treeDataProvider.onDidChangeTreeData?.(() => {
|
|
231
|
+
this.pendingRefresh = proxy.$refresh(treeViewId);
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
dispose(): void {
|
|
236
|
+
this.toDispose.dispose();
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
async reveal(element: T, options?: Partial<TreeViewRevealOptions>): Promise<void> {
|
|
240
|
+
await this.pendingRefresh;
|
|
241
|
+
|
|
242
|
+
const elementParentChain = await this.calculateRevealParentChain(element);
|
|
243
|
+
if (elementParentChain) {
|
|
244
|
+
return this.proxy.$reveal(this.treeViewId, elementParentChain, {
|
|
245
|
+
select: true, focus: false, expand: false, ...options
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
private _message: string = '';
|
|
251
|
+
get message(): string {
|
|
252
|
+
return this._message;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
set message(message: string) {
|
|
256
|
+
this._message = message;
|
|
257
|
+
this.proxy.$setMessage(this.treeViewId, this._message);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
private _title: string = '';
|
|
261
|
+
get title(): string {
|
|
262
|
+
return this._title;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
set title(title: string) {
|
|
266
|
+
this._title = title;
|
|
267
|
+
this.proxy.$setTitle(this.treeViewId, title);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
private _description: string = '';
|
|
271
|
+
get description(): string {
|
|
272
|
+
return this._description;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
set description(description: string) {
|
|
276
|
+
this._description = description;
|
|
277
|
+
this.proxy.$setDescription(this.treeViewId, this._description);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
getElement(treeItemId: string): T | undefined {
|
|
281
|
+
return this.nodes.get(treeItemId)?.value;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* calculate the chain of node ids from root to element so that the frontend can expand all of them and reveal element.
|
|
286
|
+
* this is needed as the frontend may not have the full tree nodes.
|
|
287
|
+
* throughout the parent chain this.getChildren is called in order to fill this.nodes cache.
|
|
288
|
+
*
|
|
289
|
+
* returns undefined if wasn't able to calculate the path due to inconsistencies.
|
|
290
|
+
*
|
|
291
|
+
* @param element element to reveal
|
|
292
|
+
*/
|
|
293
|
+
private async calculateRevealParentChain(element: T | undefined): Promise<string[] | undefined> {
|
|
294
|
+
if (!element) {
|
|
295
|
+
// root
|
|
296
|
+
return [];
|
|
297
|
+
}
|
|
298
|
+
const parent = await this.options.treeDataProvider.getParent?.(element) ?? undefined;
|
|
299
|
+
const chain = await this.calculateRevealParentChain(parent);
|
|
300
|
+
if (!chain) {
|
|
301
|
+
// parents are inconsistent
|
|
302
|
+
return undefined;
|
|
303
|
+
}
|
|
304
|
+
const parentId = chain.length ? chain[chain.length - 1] : '';
|
|
305
|
+
const treeItem = await this.options.treeDataProvider.getTreeItem(element);
|
|
306
|
+
if (treeItem.id) {
|
|
307
|
+
return chain.concat(treeItem.id);
|
|
308
|
+
}
|
|
309
|
+
const cachedParentNode = this.nodes.get(parentId);
|
|
310
|
+
// first try to get children length from cache since getChildren disposes old nodes, which can cause a race
|
|
311
|
+
// condition if command is executed together with reveal.
|
|
312
|
+
// If not in cache, getChildren fills this.nodes and generate ids for them which are needed later
|
|
313
|
+
const children = cachedParentNode?.children || await this.getChildren(parentId);
|
|
314
|
+
if (!children) {
|
|
315
|
+
// parent is inconsistent
|
|
316
|
+
return undefined;
|
|
317
|
+
}
|
|
318
|
+
const candidateId = this.buildTreeItemId(parentId, treeItem);
|
|
319
|
+
if (this.nodes.has(candidateId)) {
|
|
320
|
+
return chain.concat(candidateId);
|
|
321
|
+
}
|
|
322
|
+
// couldn't calculate consistent parent chain and id
|
|
323
|
+
return undefined;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
private getTreeItemLabel(treeItem: TreeItem): string | undefined {
|
|
327
|
+
const treeItemLabel: string | TreeItemLabel | undefined = treeItem.label;
|
|
328
|
+
return typeof treeItemLabel === 'object' ? treeItemLabel.label : treeItemLabel;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
private getTreeItemLabelHighlights(treeItem: TreeItem): [number, number][] | undefined {
|
|
332
|
+
const treeItemLabel: string | TreeItemLabel | undefined = treeItem.label;
|
|
333
|
+
return typeof treeItemLabel === 'object' ? treeItemLabel.highlights : undefined;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
private getItemLabel(treeItem: TreeItem): string | undefined {
|
|
337
|
+
let idLabel = this.getTreeItemLabel(treeItem);
|
|
338
|
+
// Use resource URI if label is not set
|
|
339
|
+
if (idLabel === undefined && treeItem.resourceUri) {
|
|
340
|
+
idLabel = treeItem.resourceUri.path.toString();
|
|
341
|
+
idLabel = decodeURIComponent(idLabel);
|
|
342
|
+
if (idLabel.indexOf('/') >= 0) {
|
|
343
|
+
idLabel = idLabel.substring(idLabel.lastIndexOf('/') + 1);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return idLabel;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
private buildTreeItemId(parentId: string, item: TreeItem): string {
|
|
350
|
+
// build tree id according to https://code.visualstudio.com/api/references/vscode-api#TreeItem
|
|
351
|
+
// note: the front end tree implementation cannot handle reparenting items, hence the id is set to the "path" of individual ids
|
|
352
|
+
let id = typeof item.id === 'string' ? item.id : this.getItemLabel(item);
|
|
353
|
+
if (id) {
|
|
354
|
+
// we use '' as the id of the root, we don't consider that a valid id
|
|
355
|
+
// since '' is falsy, we'll never get '' in this branch
|
|
356
|
+
id = TreeViewExtImpl.ID_ITEM + id;
|
|
357
|
+
} else {
|
|
358
|
+
id = TreeViewExtImpl.ID_COMPUTED + this.nextItemId++;
|
|
359
|
+
}
|
|
360
|
+
return `${parentId}/${id}`;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
async getChildren(parentId: string): Promise<TreeViewItem[] | undefined> {
|
|
364
|
+
const parentNode = this.nodes.get(parentId);
|
|
365
|
+
const parent = parentNode?.value;
|
|
366
|
+
if (parentId && !parent) {
|
|
367
|
+
console.error(`No tree item with id '${parentId}' found.`);
|
|
368
|
+
return [];
|
|
369
|
+
}
|
|
370
|
+
this.clearChildren(parentNode);
|
|
371
|
+
|
|
372
|
+
// place root in the cache
|
|
373
|
+
if (parentId === '') {
|
|
374
|
+
const rootNodeDisposables = new DisposableCollection();
|
|
375
|
+
this.nodes.set(parentId, { id: '', disposables: rootNodeDisposables, dispose: () => { rootNodeDisposables.dispose(); } });
|
|
376
|
+
}
|
|
377
|
+
// ask data provider for children for cached element
|
|
378
|
+
const result = await this.options.treeDataProvider.getChildren(parent);
|
|
379
|
+
if (result) {
|
|
380
|
+
const treeItemPromises = result.map(async value => {
|
|
381
|
+
|
|
382
|
+
// Ask data provider for a tree item for the value
|
|
383
|
+
// Data provider must return theia.TreeItem
|
|
384
|
+
const treeItem = await this.options.treeDataProvider.getTreeItem(value);
|
|
385
|
+
// Convert theia.TreeItem to the TreeViewItem
|
|
386
|
+
|
|
387
|
+
const label = this.getItemLabel(treeItem);
|
|
388
|
+
const highlights = this.getTreeItemLabelHighlights(treeItem);
|
|
389
|
+
|
|
390
|
+
// Generate the ID
|
|
391
|
+
// ID is used for caching the element
|
|
392
|
+
const id = this.buildTreeItemId(parentId, treeItem);
|
|
393
|
+
|
|
394
|
+
const toDisposeElement = new DisposableCollection();
|
|
395
|
+
const node: TreeExtNode<T> = {
|
|
396
|
+
id,
|
|
397
|
+
pluginTreeItem: treeItem,
|
|
398
|
+
value,
|
|
399
|
+
disposables: toDisposeElement,
|
|
400
|
+
dispose: () => toDisposeElement.dispose()
|
|
401
|
+
};
|
|
402
|
+
if (parentNode) {
|
|
403
|
+
const children = parentNode.children || [];
|
|
404
|
+
children.push(node);
|
|
405
|
+
parentNode.children = children;
|
|
406
|
+
}
|
|
407
|
+
this.nodes.set(id, node);
|
|
408
|
+
|
|
409
|
+
let icon;
|
|
410
|
+
let iconUrl;
|
|
411
|
+
let themeIcon;
|
|
412
|
+
const { iconPath } = treeItem;
|
|
413
|
+
if (typeof iconPath === 'string' && iconPath.indexOf('fa-') !== -1) {
|
|
414
|
+
icon = iconPath;
|
|
415
|
+
} else if (ThemeIcon.is(iconPath)) {
|
|
416
|
+
themeIcon = iconPath;
|
|
417
|
+
} else {
|
|
418
|
+
iconUrl = PluginIconPath.toUrl(<PluginIconPath | undefined>iconPath, this.plugin);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
const treeViewItem = {
|
|
422
|
+
id,
|
|
423
|
+
label,
|
|
424
|
+
highlights,
|
|
425
|
+
icon,
|
|
426
|
+
iconUrl,
|
|
427
|
+
themeIcon,
|
|
428
|
+
description: treeItem.description,
|
|
429
|
+
resourceUri: treeItem.resourceUri,
|
|
430
|
+
tooltip: treeItem.tooltip,
|
|
431
|
+
collapsibleState: treeItem.collapsibleState,
|
|
432
|
+
contextValue: treeItem.contextValue,
|
|
433
|
+
command: this.commandsConverter.toSafeCommand(treeItem.command, toDisposeElement),
|
|
434
|
+
accessibilityInformation: treeItem.accessibilityInformation
|
|
435
|
+
} as TreeViewItem;
|
|
436
|
+
node.treeViewItem = treeViewItem;
|
|
437
|
+
|
|
438
|
+
return treeViewItem;
|
|
439
|
+
});
|
|
440
|
+
|
|
441
|
+
return Promise.all(treeItemPromises);
|
|
442
|
+
} else {
|
|
443
|
+
return undefined;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
private clearChildren(parentNode?: TreeExtNode<T>): void {
|
|
448
|
+
if (parentNode) {
|
|
449
|
+
if (parentNode.children) {
|
|
450
|
+
for (const child of parentNode.children) {
|
|
451
|
+
this.clear(child);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
delete parentNode['children'];
|
|
455
|
+
} else {
|
|
456
|
+
this.clearAll();
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
private clear(node: TreeExtNode<T>): void {
|
|
461
|
+
if (node.children) {
|
|
462
|
+
for (const child of node.children) {
|
|
463
|
+
this.clear(child);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
this.nodes.delete(node.id);
|
|
467
|
+
node.dispose();
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
private clearAll(): void {
|
|
471
|
+
this.nodes.forEach(node => node.dispose());
|
|
472
|
+
this.nodes.clear();
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
async onExpanded(treeItemId: string): Promise<any> {
|
|
476
|
+
// get element from a cache
|
|
477
|
+
const cachedElement = this.getElement(treeItemId);
|
|
478
|
+
|
|
479
|
+
// fire an event
|
|
480
|
+
if (cachedElement) {
|
|
481
|
+
this.onDidExpandElementEmitter.fire({
|
|
482
|
+
element: cachedElement
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
async onCollapsed(treeItemId: string): Promise<any> {
|
|
488
|
+
// get element from a cache
|
|
489
|
+
const cachedElement = this.getElement(treeItemId);
|
|
490
|
+
|
|
491
|
+
// fire an event
|
|
492
|
+
if (cachedElement) {
|
|
493
|
+
this.onDidCollapseElementEmitter.fire({
|
|
494
|
+
element: cachedElement
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
async resolveTreeItem(treeItemId: string, token: CancellationToken): Promise<TreeViewItem | undefined> {
|
|
500
|
+
if (!this.options.treeDataProvider.resolveTreeItem) {
|
|
501
|
+
return undefined;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
const node = this.nodes.get(treeItemId);
|
|
505
|
+
if (node && node.treeViewItem && node.pluginTreeItem && node.value) {
|
|
506
|
+
const resolved = await this.options.treeDataProvider.resolveTreeItem(node.pluginTreeItem, node.value, token) ?? node.pluginTreeItem;
|
|
507
|
+
node.treeViewItem.command = this.commandsConverter.toSafeCommand(resolved.command, node.disposables);
|
|
508
|
+
node.treeViewItem.tooltip = resolved.tooltip;
|
|
509
|
+
return node.treeViewItem;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
return undefined;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
hasResolveTreeItem(): boolean {
|
|
516
|
+
return !!this.options.treeDataProvider.resolveTreeItem;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
private selectedItemIds = new Set<string>();
|
|
520
|
+
get selectedElements(): T[] {
|
|
521
|
+
const items: T[] = [];
|
|
522
|
+
for (const id of this.selectedItemIds) {
|
|
523
|
+
const item = this.getElement(id);
|
|
524
|
+
if (item) {
|
|
525
|
+
items.push(item);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
return items;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
setSelection(selectedItemIds: string[]): void {
|
|
532
|
+
const toDelete = new Set<string>(this.selectedItemIds);
|
|
533
|
+
for (const id of selectedItemIds) {
|
|
534
|
+
toDelete.delete(id);
|
|
535
|
+
if (!this.selectedItemIds.has(id)) {
|
|
536
|
+
this.doSetSelection(selectedItemIds);
|
|
537
|
+
return;
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
if (toDelete.size) {
|
|
541
|
+
this.doSetSelection(selectedItemIds);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
protected doSetSelection(selectedItemIts: string[]): void {
|
|
545
|
+
this.selectedItemIds = new Set(selectedItemIts);
|
|
546
|
+
this.onDidChangeSelectionEmitter.fire(Object.freeze({ selection: this.selectedElements }));
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
private _visible = false;
|
|
550
|
+
get visible(): boolean {
|
|
551
|
+
return this._visible;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
setVisible(visible: boolean): void {
|
|
555
|
+
if (visible !== this._visible) {
|
|
556
|
+
this._visible = visible;
|
|
557
|
+
this.onDidChangeVisibilityEmitter.fire(Object.freeze({ visible: this._visible }));
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
async onDragStarted(treeItemIds: string[], token: CancellationToken): Promise<UriComponents[] | undefined> {
|
|
562
|
+
const treeItems: T[] = [];
|
|
563
|
+
for (const id of treeItemIds) {
|
|
564
|
+
const item = this.getElement(id);
|
|
565
|
+
if (item) {
|
|
566
|
+
treeItems.push(item);
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
if (this.options.dragAndDropController?.handleDrag) {
|
|
570
|
+
this.localDataTransfer.clear();
|
|
571
|
+
await this.options.dragAndDropController.handleDrag(treeItems, this.localDataTransfer, token);
|
|
572
|
+
const uriList = await this.localDataTransfer.get('text/uri-list')?.asString();
|
|
573
|
+
if (uriList) {
|
|
574
|
+
return uriList.split('\n').map(str => URI.parse(str));
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
return undefined;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
async handleDrop(treeItemId: string | undefined, dataTransferItems: [string, string | DataTransferFileDTO][], token: CancellationToken): Promise<void> {
|
|
581
|
+
const treeItem = treeItemId ? this.getElement(treeItemId) : undefined;
|
|
582
|
+
const dropTransfer = new DataTransfer();
|
|
583
|
+
if (this.options.dragAndDropController?.handleDrop) {
|
|
584
|
+
this.localDataTransfer.forEach((item, type) => {
|
|
585
|
+
dropTransfer.set(type, item);
|
|
586
|
+
});
|
|
587
|
+
for (const [type, item] of dataTransferItems) {
|
|
588
|
+
// prefer the item the plugin has set in `onDragStarted`;
|
|
589
|
+
if (!dropTransfer.has(type)) {
|
|
590
|
+
if (typeof item === 'string') {
|
|
591
|
+
dropTransfer.set(type, new DataTransferItem(item));
|
|
592
|
+
} else {
|
|
593
|
+
const file: DataTransferFile = {
|
|
594
|
+
name: item.name,
|
|
595
|
+
data: () => this.proxy.$readDroppedFile(item.contentId).then(buffer => buffer.buffer),
|
|
596
|
+
uri: item.uri ? URI.revive(item.uri) : undefined
|
|
597
|
+
};
|
|
598
|
+
|
|
599
|
+
const fileItem = new class extends DataTransferItem {
|
|
600
|
+
override asFile(): DataTransferFile | undefined {
|
|
601
|
+
return file;
|
|
602
|
+
}
|
|
603
|
+
}(file);
|
|
604
|
+
|
|
605
|
+
dropTransfer.set(type, fileItem);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
return this.options.dragAndDropController.handleDrop(treeItem, dropTransfer, token);
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
}
|