@theia/plugin-ext 1.53.0-next.55 → 1.53.0-next.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -54
- package/lib/common/plugin-api-rpc.d.ts +1 -4
- package/lib/common/plugin-api-rpc.d.ts.map +1 -1
- package/lib/common/plugin-api-rpc.js.map +1 -1
- package/lib/hosted/browser/hosted-plugin.js +9 -9
- package/lib/main/browser/editors-and-documents-main.d.ts.map +1 -1
- package/lib/main/browser/editors-and-documents-main.js +14 -2
- package/lib/main/browser/editors-and-documents-main.js.map +1 -1
- package/lib/main/browser/notebooks/notebook-documents-and-editors-main.d.ts.map +1 -1
- package/lib/main/browser/notebooks/notebook-documents-and-editors-main.js +2 -0
- package/lib/main/browser/notebooks/notebook-documents-and-editors-main.js.map +1 -1
- package/lib/main/browser/notebooks/renderers/cell-output-webview.js +86 -86
- package/lib/main/browser/plugin-icon-theme-service.js +20 -20
- package/lib/main/browser/plugin-shared-style.js +14 -14
- package/lib/main/browser/tabs/tabs-main.d.ts +1 -1
- package/lib/main/browser/tabs/tabs-main.d.ts.map +1 -1
- package/lib/main/browser/tabs/tabs-main.js +1 -1
- package/lib/main/browser/tabs/tabs-main.js.map +1 -1
- package/lib/main/browser/text-editor-main.d.ts +6 -3
- package/lib/main/browser/text-editor-main.d.ts.map +1 -1
- package/lib/main/browser/text-editor-main.js +39 -5
- package/lib/main/browser/text-editor-main.js.map +1 -1
- package/lib/main/browser/view/plugin-view-registry.js +3 -3
- package/lib/main/browser/webview/webview-frontend-security-warnings.js +2 -2
- package/lib/main/browser/webview/webview-secondary-window-support.js +10 -10
- package/lib/main/browser/workspace-main.d.ts +0 -2
- package/lib/main/browser/workspace-main.d.ts.map +1 -1
- package/lib/main/node/plugin-service.d.ts +1 -1
- package/lib/main/node/webview-backend-security-warnings.js +6 -6
- package/lib/plugin/languages.d.ts +0 -1
- package/lib/plugin/languages.d.ts.map +1 -1
- package/lib/plugin/notebook/notebook-kernels.d.ts +0 -2
- package/lib/plugin/notebook/notebook-kernels.d.ts.map +1 -1
- package/lib/plugin/notebook/notebooks.d.ts +1 -0
- package/lib/plugin/notebook/notebooks.d.ts.map +1 -1
- package/lib/plugin/notebook/notebooks.js +22 -2
- package/lib/plugin/notebook/notebooks.js.map +1 -1
- package/lib/plugin/scm.d.ts +0 -1
- package/lib/plugin/scm.d.ts.map +1 -1
- package/lib/plugin/terminal-ext.d.ts +0 -1
- package/lib/plugin/terminal-ext.d.ts.map +1 -1
- package/lib/plugin/text-editor.d.ts +1 -1
- package/lib/plugin/text-editor.d.ts.map +1 -1
- package/lib/plugin/text-editor.js.map +1 -1
- package/lib/plugin/type-converters.d.ts +0 -1
- package/lib/plugin/type-converters.d.ts.map +1 -1
- package/lib/plugin/types-impl.d.ts +2 -3
- package/lib/plugin/types-impl.d.ts.map +1 -1
- package/lib/plugin/workspace.d.ts +0 -4
- package/lib/plugin/workspace.d.ts.map +1 -1
- package/package.json +28 -28
- package/src/common/arrays.ts +70 -70
- 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 +54 -54
- package/src/common/commands.ts +19 -19
- 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 +63 -63
- package/src/common/id-generator.ts +26 -26
- package/src/common/index.ts +24 -24
- package/src/common/language-pack-service.ts +34 -34
- 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 +907 -907
- package/src/common/plugin-api-rpc.ts +2753 -2752
- package/src/common/plugin-ext-api-contribution.ts +115 -115
- package/src/common/plugin-identifiers.ts +84 -84
- package/src/common/plugin-protocol.ts +1094 -1094
- package/src/common/reference-map.ts +38 -38
- package/src/common/rpc-protocol.ts +306 -306
- package/src/common/semantic-tokens-dto.ts +182 -182
- package/src/common/test-types.ts +154 -154
- package/src/common/types.ts +129 -129
- package/src/common/uint.ts +37 -37
- package/src/common/uri-components.ts +81 -81
- package/src/hosted/browser/hosted-plugin-watcher.ts +54 -54
- package/src/hosted/browser/hosted-plugin.ts +635 -635
- package/src/hosted/browser/plugin-worker.ts +52 -52
- package/src/hosted/browser/worker/debug-stub.ts +29 -29
- package/src/hosted/browser/worker/plugin-manifest-loader.ts +114 -114
- package/src/hosted/browser/worker/worker-env-ext.ts +40 -40
- package/src/hosted/browser/worker/worker-main.ts +212 -212
- package/src/hosted/browser/worker/worker-plugin-module.ts +80 -80
- package/src/hosted/common/hosted-plugin.ts +456 -456
- package/src/hosted/node/hosted-plugin-cli-contribution.ts +75 -75
- package/src/hosted/node/hosted-plugin-deployer-handler.ts +274 -274
- package/src/hosted/node/hosted-plugin-localization-service.ts +410 -410
- 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-activation-events.ts +112 -112
- package/src/hosted/node/plugin-ext-hosted-backend-module.ts +94 -94
- package/src/hosted/node/plugin-host-module.ts +69 -69
- package/src/hosted/node/plugin-host-proxy.ts +82 -82
- package/src/hosted/node/plugin-host-rpc.ts +377 -377
- package/src/hosted/node/plugin-host.ts +110 -110
- package/src/hosted/node/plugin-language-pack-service.ts +43 -43
- package/src/hosted/node/plugin-manifest-loader.ts +32 -32
- package/src/hosted/node/plugin-reader.ts +136 -136
- package/src/hosted/node/plugin-service.ts +197 -197
- 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 +57 -57
- package/src/hosted/node/scanners/plugin-uri-factory.ts +33 -33
- package/src/hosted/node/scanners/scanner-theia.ts +963 -963
- 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 +401 -401
- package/src/main/browser/clipboard-main.ts +38 -38
- package/src/main/browser/command-registry-main.ts +130 -130
- 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 +696 -696
- package/src/main/browser/comments/comments-context-key-service.ts +68 -68
- package/src/main/browser/comments/comments-contribution.ts +268 -268
- package/src/main/browser/comments/comments-decorator.ts +110 -110
- package/src/main/browser/comments/comments-main.ts +482 -482
- package/src/main/browser/comments/comments-service.ts +205 -205
- package/src/main/browser/custom-editors/custom-editor-opener.tsx +205 -205
- package/src/main/browser/custom-editors/custom-editor-service.ts +108 -108
- package/src/main/browser/custom-editors/custom-editor-undo-redo-handler.ts +41 -41
- 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 +526 -526
- package/src/main/browser/custom-editors/plugin-custom-editor-registry.ts +126 -126
- package/src/main/browser/data-transfer/data-transfer-type-converters.ts +68 -68
- package/src/main/browser/debug/debug-main.ts +397 -397
- 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 +427 -427
- package/src/main/browser/debug/plugin-debug-session-contribution-registry.ts +76 -76
- package/src/main/browser/debug/plugin-debug-session-factory.ts +115 -115
- package/src/main/browser/decorations/decorations-main.ts +146 -146
- package/src/main/browser/dialogs/modal-notification.ts +112 -112
- 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 +275 -275
- package/src/main/browser/editors-and-documents-main.ts +448 -425
- package/src/main/browser/env-main.ts +60 -60
- package/src/main/browser/file-system-main-impl.ts +267 -267
- 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 +1439 -1439
- package/src/main/browser/localization-main.ts +34 -34
- package/src/main/browser/main-context.ts +210 -210
- package/src/main/browser/main-file-system-event-service.ts +76 -76
- package/src/main/browser/menus/menus-contribution-handler.ts +172 -172
- package/src/main/browser/menus/plugin-menu-command-adapter.ts +358 -358
- package/src/main/browser/menus/vscode-theia-menu-mappings.ts +118 -118
- package/src/main/browser/message-registry-main.ts +43 -43
- package/src/main/browser/notebooks/notebook-documents-and-editors-main.ts +252 -249
- package/src/main/browser/notebooks/notebook-documents-main.ts +202 -202
- package/src/main/browser/notebooks/notebook-dto.ts +131 -131
- package/src/main/browser/notebooks/notebook-editors-main.ts +88 -88
- package/src/main/browser/notebooks/notebook-kernels-main.ts +339 -339
- package/src/main/browser/notebooks/notebook-renderers-main.ts +47 -47
- package/src/main/browser/notebooks/notebooks-main.ts +164 -164
- package/src/main/browser/notebooks/renderers/cell-output-webview.tsx +452 -452
- package/src/main/browser/notebooks/renderers/output-webview-internal.ts +636 -636
- package/src/main/browser/notebooks/renderers/webview-communication.ts +107 -107
- package/src/main/browser/notification-main.ts +26 -26
- 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 +698 -698
- package/src/main/browser/plugin-ext-frontend-module.ts +291 -291
- package/src/main/browser/plugin-ext-widget.tsx +132 -132
- package/src/main/browser/plugin-frontend-contribution.ts +70 -70
- package/src/main/browser/plugin-frontend-view-contribution.ts +38 -38
- package/src/main/browser/plugin-icon-service.ts +92 -92
- package/src/main/browser/plugin-icon-theme-service.ts +625 -625
- package/src/main/browser/plugin-shared-style.ts +154 -154
- 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 +367 -367
- package/src/main/browser/scm-main.ts +472 -472
- package/src/main/browser/secrets-main.ts +82 -82
- package/src/main/browser/selection-provider-command.ts +45 -45
- 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 +84 -84
- package/src/main/browser/style/plugin-sidebar.css +73 -73
- package/src/main/browser/style/tree.css +54 -54
- package/src/main/browser/style/webview.css +55 -55
- package/src/main/browser/tabs/tabs-main.ts +388 -384
- package/src/main/browser/tasks-main.ts +268 -268
- package/src/main/browser/terminal-main.ts +370 -370
- package/src/main/browser/test-main.ts +632 -632
- package/src/main/browser/text-editor-main.ts +519 -478
- package/src/main/browser/text-editor-model-service.ts +111 -111
- package/src/main/browser/text-editors-main.ts +234 -234
- package/src/main/browser/theme-icon-override.ts +246 -246
- package/src/main/browser/theming-main.ts +42 -42
- package/src/main/browser/timeline-main.ts +80 -80
- package/src/main/browser/uri-main.ts +72 -72
- 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 +967 -967
- package/src/main/browser/view/plugin-view-widget.ts +221 -221
- package/src/main/browser/view/tree-view-decorator-service.ts +51 -51
- package/src/main/browser/view/tree-view-widget.tsx +931 -931
- package/src/main/browser/view/tree-views-main.ts +205 -205
- package/src/main/browser/view/view-context-key-service.ts +64 -64
- 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 +682 -682
- package/src/main/browser/webview/pre/service-worker.js +296 -296
- package/src/main/browser/webview/webview-context-keys.ts +62 -62
- package/src/main/browser/webview/webview-environment.ts +87 -87
- 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-secondary-window-support.ts +47 -47
- package/src/main/browser/webview/webview-theme-data-provider.ts +124 -124
- package/src/main/browser/webview/webview.ts +718 -718
- package/src/main/browser/webview-views/webview-views-main.ts +154 -154
- package/src/main/browser/webview-views/webview-views.ts +43 -43
- package/src/main/browser/webviews-main.ts +287 -287
- package/src/main/browser/window-activity-tracker.ts +96 -96
- package/src/main/browser/window-state-main.ts +85 -85
- package/src/main/browser/workspace-main.ts +424 -424
- package/src/main/common/basic-message-registry-main.ts +53 -53
- package/src/main/common/basic-notification-main.ts +86 -86
- package/src/main/common/env-main.ts +44 -44
- 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 +59 -59
- package/src/main/node/errors.spec.ts +37 -37
- package/src/main/node/handlers/plugin-theia-directory-handler.ts +137 -137
- package/src/main/node/handlers/plugin-theia-file-handler.ts +66 -66
- package/src/main/node/paths/const.ts +21 -21
- package/src/main/node/paths/plugin-paths-service.ts +163 -163
- package/src/main/node/plugin-cli-contribution.ts +85 -85
- package/src/main/node/plugin-deployer-contribution.ts +35 -35
- package/src/main/node/plugin-deployer-directory-handler-context-impl.ts +45 -45
- package/src/main/node/plugin-deployer-entry-impl.ts +132 -132
- package/src/main/node/plugin-deployer-file-handler-context-impl.ts +33 -33
- package/src/main/node/plugin-deployer-impl.ts +375 -375
- 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 +106 -106
- package/src/main/node/plugin-github-resolver.ts +139 -139
- package/src/main/node/plugin-http-resolver.ts +92 -92
- package/src/main/node/plugin-localization-server.ts +42 -42
- package/src/main/node/plugin-mgmt-cli-contribution.ts +64 -64
- package/src/main/node/plugin-remote-cli-contribution.ts +36 -36
- package/src/main/node/plugin-remote-copy-contribution.ts +36 -36
- package/src/main/node/plugin-server-handler.ts +69 -69
- package/src/main/node/plugin-service.ts +97 -97
- 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.spec.ts +110 -110
- package/src/main/node/plugins-key-value-storage.ts +161 -161
- 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 +36 -36
- 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 +140 -140
- package/src/plugin/clipboard-ext.ts +43 -43
- package/src/plugin/command-registry.ts +219 -219
- package/src/plugin/comments.ts +549 -549
- package/src/plugin/custom-editors.ts +334 -334
- package/src/plugin/debug/debug-ext.ts +549 -549
- 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 +176 -176
- 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 +415 -415
- package/src/plugin/known-commands.spec.ts +50 -50
- package/src/plugin/known-commands.ts +429 -429
- 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 +183 -183
- 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-drop-edit.ts +44 -44
- 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 +81 -81
- 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 +68 -68
- package/src/plugin/languages.ts +1022 -1022
- package/src/plugin/localization-ext.ts +89 -89
- package/src/plugin/markdown-string.ts +115 -115
- package/src/plugin/message-registry.ts +70 -70
- package/src/plugin/node/debug/debug.spec.ts +98 -98
- package/src/plugin/node/debug/plugin-node-debug-adapter-creator.ts +167 -167
- package/src/plugin/node/env-node-ext.ts +64 -64
- package/src/plugin/node/plugin-container-module.ts +165 -165
- package/src/plugin/notebook/notebook-document.ts +446 -446
- package/src/plugin/notebook/notebook-documents.ts +58 -58
- package/src/plugin/notebook/notebook-editor.ts +116 -116
- package/src/plugin/notebook/notebook-editors.ts +71 -71
- package/src/plugin/notebook/notebook-kernels.ts +631 -631
- package/src/plugin/notebook/notebook-renderers.ts +71 -71
- package/src/plugin/notebook/notebooks.ts +470 -449
- package/src/plugin/notification.ts +80 -80
- package/src/plugin/output-channel/log-output-channel.ts +108 -108
- package/src/plugin/output-channel/output-channel-item.ts +73 -73
- package/src/plugin/output-channel-registry.ts +52 -52
- package/src/plugin/path.spec.ts +40 -40
- package/src/plugin/path.ts +68 -68
- package/src/plugin/plugin-context.ts +1606 -1606
- package/src/plugin/plugin-icon-path.ts +53 -53
- package/src/plugin/plugin-manager.ts +508 -508
- package/src/plugin/plugin-storage.ts +138 -138
- package/src/plugin/preference-registry.spec.ts +288 -288
- package/src/plugin/preference-registry.ts +335 -335
- package/src/plugin/prefix-sum-computer.ts +218 -218
- package/src/plugin/quick-open.ts +735 -735
- package/src/plugin/scm.ts +919 -919
- package/src/plugin/secrets-ext.ts +104 -104
- package/src/plugin/status-bar/status-bar-item.ts +193 -193
- package/src/plugin/status-bar-message-registry.ts +103 -103
- package/src/plugin/tabs.ts +431 -431
- package/src/plugin/tasks/task-provider.ts +57 -57
- package/src/plugin/tasks/tasks.ts +252 -252
- package/src/plugin/telemetry-ext.ts +298 -298
- package/src/plugin/terminal-ext.ts +569 -569
- package/src/plugin/test-item.ts +174 -174
- package/src/plugin/tests.ts +545 -545
- package/src/plugin/text-editor.ts +581 -581
- package/src/plugin/text-editors.ts +157 -157
- package/src/plugin/theming.ts +73 -73
- package/src/plugin/timeline.ts +186 -186
- package/src/plugin/tree/tree-views.ts +682 -682
- package/src/plugin/type-converters.spec.ts +476 -476
- package/src/plugin/type-converters.ts +1768 -1768
- package/src/plugin/types-impl.spec.ts +85 -85
- package/src/plugin/types-impl.ts +4011 -4011
- package/src/plugin/uri-ext.ts +60 -60
- package/src/plugin/webview-views.ts +228 -228
- package/src/plugin/webviews.ts +468 -468
- package/src/plugin/window-state.ts +75 -75
- package/src/plugin/word-helper.ts +162 -162
- package/src/plugin/workspace.ts +505 -505
- 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
|
@@ -1,205 +1,205 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2021 SAP SE or an SAP affiliate company and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
import URI from '@theia/core/lib/common/uri';
|
|
18
|
-
import {
|
|
19
|
-
ApplicationShell, DiffUris, OpenHandler, OpenerOptions, PreferenceService, SplitWidget, Widget, WidgetManager, WidgetOpenerOptions, getDefaultHandler, defaultHandlerPriority
|
|
20
|
-
} from '@theia/core/lib/browser';
|
|
21
|
-
import { CustomEditor, CustomEditorPriority, CustomEditorSelector } from '../../../common';
|
|
22
|
-
import { CustomEditorWidget } from './custom-editor-widget';
|
|
23
|
-
import { PluginCustomEditorRegistry } from './plugin-custom-editor-registry';
|
|
24
|
-
import { generateUuid } from '@theia/core/lib/common/uuid';
|
|
25
|
-
import { DisposableCollection, Emitter } from '@theia/core';
|
|
26
|
-
import { match } from '@theia/core/lib/common/glob';
|
|
27
|
-
|
|
28
|
-
export class CustomEditorOpener implements OpenHandler {
|
|
29
|
-
|
|
30
|
-
readonly id: string;
|
|
31
|
-
readonly label: string;
|
|
32
|
-
|
|
33
|
-
private readonly onDidOpenCustomEditorEmitter = new Emitter<[CustomEditorWidget, WidgetOpenerOptions?]>();
|
|
34
|
-
readonly onDidOpenCustomEditor = this.onDidOpenCustomEditorEmitter.event;
|
|
35
|
-
|
|
36
|
-
constructor(
|
|
37
|
-
private readonly editor: CustomEditor,
|
|
38
|
-
protected readonly shell: ApplicationShell,
|
|
39
|
-
protected readonly widgetManager: WidgetManager,
|
|
40
|
-
protected readonly editorRegistry: PluginCustomEditorRegistry,
|
|
41
|
-
protected readonly preferenceService: PreferenceService
|
|
42
|
-
) {
|
|
43
|
-
this.id = CustomEditorOpener.toCustomEditorId(this.editor.viewType);
|
|
44
|
-
this.label = this.editor.displayName;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
static toCustomEditorId(editorViewType: string): string {
|
|
48
|
-
return `custom-editor-${editorViewType}`;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
canHandle(uri: URI, options?: OpenerOptions): number {
|
|
52
|
-
let priority = 0;
|
|
53
|
-
const { selector } = this.editor;
|
|
54
|
-
if (DiffUris.isDiffUri(uri)) {
|
|
55
|
-
const [left, right] = DiffUris.decode(uri);
|
|
56
|
-
if (this.matches(selector, right) && this.matches(selector, left)) {
|
|
57
|
-
priority = this.getPriority();
|
|
58
|
-
}
|
|
59
|
-
} else if (this.matches(selector, uri)) {
|
|
60
|
-
if (getDefaultHandler(uri, this.preferenceService) === this.editor.viewType) {
|
|
61
|
-
priority = defaultHandlerPriority;
|
|
62
|
-
} else {
|
|
63
|
-
priority = this.getPriority();
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return priority;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
canOpenWith(uri: URI): number {
|
|
70
|
-
if (this.matches(this.editor.selector, uri)) {
|
|
71
|
-
return this.getPriority();
|
|
72
|
-
}
|
|
73
|
-
return 0;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
getPriority(): number {
|
|
77
|
-
switch (this.editor.priority) {
|
|
78
|
-
case CustomEditorPriority.default: return 500;
|
|
79
|
-
case CustomEditorPriority.builtin: return 400;
|
|
80
|
-
/** `option` should not open the custom-editor by default. */
|
|
81
|
-
case CustomEditorPriority.option: return 1;
|
|
82
|
-
default: return 200;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
protected readonly pendingWidgetPromises = new Map<string, Promise<CustomEditorWidget>>();
|
|
87
|
-
protected async openCustomEditor(uri: URI, options?: WidgetOpenerOptions): Promise<CustomEditorWidget> {
|
|
88
|
-
let widget: CustomEditorWidget | undefined;
|
|
89
|
-
let isNewWidget = false;
|
|
90
|
-
const uriString = uri.toString();
|
|
91
|
-
let widgetPromise = this.pendingWidgetPromises.get(uriString);
|
|
92
|
-
if (widgetPromise) {
|
|
93
|
-
widget = await widgetPromise;
|
|
94
|
-
} else {
|
|
95
|
-
const widgets = this.widgetManager.getWidgets(CustomEditorWidget.FACTORY_ID) as CustomEditorWidget[];
|
|
96
|
-
widget = widgets.find(w => w.viewType === this.editor.viewType && w.resource.toString() === uriString);
|
|
97
|
-
if (!widget) {
|
|
98
|
-
isNewWidget = true;
|
|
99
|
-
const id = generateUuid();
|
|
100
|
-
widgetPromise = this.widgetManager.getOrCreateWidget<CustomEditorWidget>(CustomEditorWidget.FACTORY_ID, { id }).then(async w => {
|
|
101
|
-
try {
|
|
102
|
-
w.viewType = this.editor.viewType;
|
|
103
|
-
w.resource = uri;
|
|
104
|
-
await this.editorRegistry.resolveWidget(w);
|
|
105
|
-
if (options?.widgetOptions) {
|
|
106
|
-
await this.shell.addWidget(w, options.widgetOptions);
|
|
107
|
-
}
|
|
108
|
-
return w;
|
|
109
|
-
} catch (e) {
|
|
110
|
-
w.dispose();
|
|
111
|
-
throw e;
|
|
112
|
-
}
|
|
113
|
-
}).finally(() => this.pendingWidgetPromises.delete(uriString));
|
|
114
|
-
this.pendingWidgetPromises.set(uriString, widgetPromise);
|
|
115
|
-
widget = await widgetPromise;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
if (options?.mode === 'activate') {
|
|
119
|
-
await this.shell.activateWidget(widget.id);
|
|
120
|
-
} else if (options?.mode === 'reveal') {
|
|
121
|
-
await this.shell.revealWidget(widget.id);
|
|
122
|
-
}
|
|
123
|
-
if (isNewWidget) {
|
|
124
|
-
this.onDidOpenCustomEditorEmitter.fire([widget, options]);
|
|
125
|
-
}
|
|
126
|
-
return widget;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
protected async openSideBySide(uri: URI, options?: WidgetOpenerOptions): Promise<Widget | undefined> {
|
|
130
|
-
const [leftUri, rightUri] = DiffUris.decode(uri);
|
|
131
|
-
const widget = await this.widgetManager.getOrCreateWidget<SplitWidget>(
|
|
132
|
-
CustomEditorWidget.SIDE_BY_SIDE_FACTORY_ID, { uri: uri.toString(), viewType: this.editor.viewType });
|
|
133
|
-
if (!widget.panes.length) { // a new widget
|
|
134
|
-
const trackedDisposables = new DisposableCollection(widget);
|
|
135
|
-
try {
|
|
136
|
-
const createPane = async (paneUri: URI) => {
|
|
137
|
-
let pane = await this.openCustomEditor(paneUri);
|
|
138
|
-
if (pane.isAttached) {
|
|
139
|
-
await this.shell.closeWidget(pane.id);
|
|
140
|
-
if (!pane.isDisposed) { // user canceled
|
|
141
|
-
return undefined;
|
|
142
|
-
}
|
|
143
|
-
pane = await this.openCustomEditor(paneUri);
|
|
144
|
-
}
|
|
145
|
-
return pane;
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
const rightPane = await createPane(rightUri);
|
|
149
|
-
if (!rightPane) {
|
|
150
|
-
trackedDisposables.dispose();
|
|
151
|
-
return undefined;
|
|
152
|
-
}
|
|
153
|
-
trackedDisposables.push(rightPane);
|
|
154
|
-
|
|
155
|
-
const leftPane = await createPane(leftUri);
|
|
156
|
-
if (!leftPane) {
|
|
157
|
-
trackedDisposables.dispose();
|
|
158
|
-
return undefined;
|
|
159
|
-
}
|
|
160
|
-
trackedDisposables.push(leftPane);
|
|
161
|
-
|
|
162
|
-
widget.addPane(leftPane);
|
|
163
|
-
widget.addPane(rightPane);
|
|
164
|
-
|
|
165
|
-
// dispose the widget if either of its panes gets externally disposed
|
|
166
|
-
leftPane.disposed.connect(() => widget.dispose());
|
|
167
|
-
rightPane.disposed.connect(() => widget.dispose());
|
|
168
|
-
|
|
169
|
-
if (options?.widgetOptions) {
|
|
170
|
-
await this.shell.addWidget(widget, options.widgetOptions);
|
|
171
|
-
}
|
|
172
|
-
} catch (e) {
|
|
173
|
-
trackedDisposables.dispose();
|
|
174
|
-
console.error(e);
|
|
175
|
-
throw e;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
if (options?.mode === 'activate') {
|
|
179
|
-
await this.shell.activateWidget(widget.id);
|
|
180
|
-
} else if (options?.mode === 'reveal') {
|
|
181
|
-
await this.shell.revealWidget(widget.id);
|
|
182
|
-
}
|
|
183
|
-
return widget;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
async open(uri: URI, options?: WidgetOpenerOptions): Promise<Widget | undefined> {
|
|
187
|
-
options = { ...options };
|
|
188
|
-
options.mode ??= 'activate';
|
|
189
|
-
options.widgetOptions ??= { area: 'main' };
|
|
190
|
-
return DiffUris.isDiffUri(uri) ? this.openSideBySide(uri, options) : this.openCustomEditor(uri, options);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
matches(selectors: CustomEditorSelector[], resource: URI): boolean {
|
|
194
|
-
return selectors.some(selector => this.selectorMatches(selector, resource));
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
selectorMatches(selector: CustomEditorSelector, resource: URI): boolean {
|
|
198
|
-
if (selector.filenamePattern) {
|
|
199
|
-
if (match(selector.filenamePattern.toLowerCase(), resource.path.name.toLowerCase() + resource.path.ext.toLowerCase())) {
|
|
200
|
-
return true;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
return false;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2021 SAP SE or an SAP affiliate company and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import URI from '@theia/core/lib/common/uri';
|
|
18
|
+
import {
|
|
19
|
+
ApplicationShell, DiffUris, OpenHandler, OpenerOptions, PreferenceService, SplitWidget, Widget, WidgetManager, WidgetOpenerOptions, getDefaultHandler, defaultHandlerPriority
|
|
20
|
+
} from '@theia/core/lib/browser';
|
|
21
|
+
import { CustomEditor, CustomEditorPriority, CustomEditorSelector } from '../../../common';
|
|
22
|
+
import { CustomEditorWidget } from './custom-editor-widget';
|
|
23
|
+
import { PluginCustomEditorRegistry } from './plugin-custom-editor-registry';
|
|
24
|
+
import { generateUuid } from '@theia/core/lib/common/uuid';
|
|
25
|
+
import { DisposableCollection, Emitter } from '@theia/core';
|
|
26
|
+
import { match } from '@theia/core/lib/common/glob';
|
|
27
|
+
|
|
28
|
+
export class CustomEditorOpener implements OpenHandler {
|
|
29
|
+
|
|
30
|
+
readonly id: string;
|
|
31
|
+
readonly label: string;
|
|
32
|
+
|
|
33
|
+
private readonly onDidOpenCustomEditorEmitter = new Emitter<[CustomEditorWidget, WidgetOpenerOptions?]>();
|
|
34
|
+
readonly onDidOpenCustomEditor = this.onDidOpenCustomEditorEmitter.event;
|
|
35
|
+
|
|
36
|
+
constructor(
|
|
37
|
+
private readonly editor: CustomEditor,
|
|
38
|
+
protected readonly shell: ApplicationShell,
|
|
39
|
+
protected readonly widgetManager: WidgetManager,
|
|
40
|
+
protected readonly editorRegistry: PluginCustomEditorRegistry,
|
|
41
|
+
protected readonly preferenceService: PreferenceService
|
|
42
|
+
) {
|
|
43
|
+
this.id = CustomEditorOpener.toCustomEditorId(this.editor.viewType);
|
|
44
|
+
this.label = this.editor.displayName;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
static toCustomEditorId(editorViewType: string): string {
|
|
48
|
+
return `custom-editor-${editorViewType}`;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
canHandle(uri: URI, options?: OpenerOptions): number {
|
|
52
|
+
let priority = 0;
|
|
53
|
+
const { selector } = this.editor;
|
|
54
|
+
if (DiffUris.isDiffUri(uri)) {
|
|
55
|
+
const [left, right] = DiffUris.decode(uri);
|
|
56
|
+
if (this.matches(selector, right) && this.matches(selector, left)) {
|
|
57
|
+
priority = this.getPriority();
|
|
58
|
+
}
|
|
59
|
+
} else if (this.matches(selector, uri)) {
|
|
60
|
+
if (getDefaultHandler(uri, this.preferenceService) === this.editor.viewType) {
|
|
61
|
+
priority = defaultHandlerPriority;
|
|
62
|
+
} else {
|
|
63
|
+
priority = this.getPriority();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return priority;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
canOpenWith(uri: URI): number {
|
|
70
|
+
if (this.matches(this.editor.selector, uri)) {
|
|
71
|
+
return this.getPriority();
|
|
72
|
+
}
|
|
73
|
+
return 0;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
getPriority(): number {
|
|
77
|
+
switch (this.editor.priority) {
|
|
78
|
+
case CustomEditorPriority.default: return 500;
|
|
79
|
+
case CustomEditorPriority.builtin: return 400;
|
|
80
|
+
/** `option` should not open the custom-editor by default. */
|
|
81
|
+
case CustomEditorPriority.option: return 1;
|
|
82
|
+
default: return 200;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
protected readonly pendingWidgetPromises = new Map<string, Promise<CustomEditorWidget>>();
|
|
87
|
+
protected async openCustomEditor(uri: URI, options?: WidgetOpenerOptions): Promise<CustomEditorWidget> {
|
|
88
|
+
let widget: CustomEditorWidget | undefined;
|
|
89
|
+
let isNewWidget = false;
|
|
90
|
+
const uriString = uri.toString();
|
|
91
|
+
let widgetPromise = this.pendingWidgetPromises.get(uriString);
|
|
92
|
+
if (widgetPromise) {
|
|
93
|
+
widget = await widgetPromise;
|
|
94
|
+
} else {
|
|
95
|
+
const widgets = this.widgetManager.getWidgets(CustomEditorWidget.FACTORY_ID) as CustomEditorWidget[];
|
|
96
|
+
widget = widgets.find(w => w.viewType === this.editor.viewType && w.resource.toString() === uriString);
|
|
97
|
+
if (!widget) {
|
|
98
|
+
isNewWidget = true;
|
|
99
|
+
const id = generateUuid();
|
|
100
|
+
widgetPromise = this.widgetManager.getOrCreateWidget<CustomEditorWidget>(CustomEditorWidget.FACTORY_ID, { id }).then(async w => {
|
|
101
|
+
try {
|
|
102
|
+
w.viewType = this.editor.viewType;
|
|
103
|
+
w.resource = uri;
|
|
104
|
+
await this.editorRegistry.resolveWidget(w);
|
|
105
|
+
if (options?.widgetOptions) {
|
|
106
|
+
await this.shell.addWidget(w, options.widgetOptions);
|
|
107
|
+
}
|
|
108
|
+
return w;
|
|
109
|
+
} catch (e) {
|
|
110
|
+
w.dispose();
|
|
111
|
+
throw e;
|
|
112
|
+
}
|
|
113
|
+
}).finally(() => this.pendingWidgetPromises.delete(uriString));
|
|
114
|
+
this.pendingWidgetPromises.set(uriString, widgetPromise);
|
|
115
|
+
widget = await widgetPromise;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (options?.mode === 'activate') {
|
|
119
|
+
await this.shell.activateWidget(widget.id);
|
|
120
|
+
} else if (options?.mode === 'reveal') {
|
|
121
|
+
await this.shell.revealWidget(widget.id);
|
|
122
|
+
}
|
|
123
|
+
if (isNewWidget) {
|
|
124
|
+
this.onDidOpenCustomEditorEmitter.fire([widget, options]);
|
|
125
|
+
}
|
|
126
|
+
return widget;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
protected async openSideBySide(uri: URI, options?: WidgetOpenerOptions): Promise<Widget | undefined> {
|
|
130
|
+
const [leftUri, rightUri] = DiffUris.decode(uri);
|
|
131
|
+
const widget = await this.widgetManager.getOrCreateWidget<SplitWidget>(
|
|
132
|
+
CustomEditorWidget.SIDE_BY_SIDE_FACTORY_ID, { uri: uri.toString(), viewType: this.editor.viewType });
|
|
133
|
+
if (!widget.panes.length) { // a new widget
|
|
134
|
+
const trackedDisposables = new DisposableCollection(widget);
|
|
135
|
+
try {
|
|
136
|
+
const createPane = async (paneUri: URI) => {
|
|
137
|
+
let pane = await this.openCustomEditor(paneUri);
|
|
138
|
+
if (pane.isAttached) {
|
|
139
|
+
await this.shell.closeWidget(pane.id);
|
|
140
|
+
if (!pane.isDisposed) { // user canceled
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
pane = await this.openCustomEditor(paneUri);
|
|
144
|
+
}
|
|
145
|
+
return pane;
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
const rightPane = await createPane(rightUri);
|
|
149
|
+
if (!rightPane) {
|
|
150
|
+
trackedDisposables.dispose();
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
trackedDisposables.push(rightPane);
|
|
154
|
+
|
|
155
|
+
const leftPane = await createPane(leftUri);
|
|
156
|
+
if (!leftPane) {
|
|
157
|
+
trackedDisposables.dispose();
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
trackedDisposables.push(leftPane);
|
|
161
|
+
|
|
162
|
+
widget.addPane(leftPane);
|
|
163
|
+
widget.addPane(rightPane);
|
|
164
|
+
|
|
165
|
+
// dispose the widget if either of its panes gets externally disposed
|
|
166
|
+
leftPane.disposed.connect(() => widget.dispose());
|
|
167
|
+
rightPane.disposed.connect(() => widget.dispose());
|
|
168
|
+
|
|
169
|
+
if (options?.widgetOptions) {
|
|
170
|
+
await this.shell.addWidget(widget, options.widgetOptions);
|
|
171
|
+
}
|
|
172
|
+
} catch (e) {
|
|
173
|
+
trackedDisposables.dispose();
|
|
174
|
+
console.error(e);
|
|
175
|
+
throw e;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (options?.mode === 'activate') {
|
|
179
|
+
await this.shell.activateWidget(widget.id);
|
|
180
|
+
} else if (options?.mode === 'reveal') {
|
|
181
|
+
await this.shell.revealWidget(widget.id);
|
|
182
|
+
}
|
|
183
|
+
return widget;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
async open(uri: URI, options?: WidgetOpenerOptions): Promise<Widget | undefined> {
|
|
187
|
+
options = { ...options };
|
|
188
|
+
options.mode ??= 'activate';
|
|
189
|
+
options.widgetOptions ??= { area: 'main' };
|
|
190
|
+
return DiffUris.isDiffUri(uri) ? this.openSideBySide(uri, options) : this.openCustomEditor(uri, options);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
matches(selectors: CustomEditorSelector[], resource: URI): boolean {
|
|
194
|
+
return selectors.some(selector => this.selectorMatches(selector, resource));
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
selectorMatches(selector: CustomEditorSelector, resource: URI): boolean {
|
|
198
|
+
if (selector.filenamePattern) {
|
|
199
|
+
if (match(selector.filenamePattern.toLowerCase(), resource.path.name.toLowerCase() + resource.path.ext.toLowerCase())) {
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
@@ -1,108 +1,108 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2021 SAP SE or an SAP affiliate company and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
/*---------------------------------------------------------------------------------------------
|
|
17
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
18
|
-
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
19
|
-
*--------------------------------------------------------------------------------------------*/
|
|
20
|
-
// copied and modified from https://github.com/microsoft/vscode/blob/53eac52308c4611000a171cc7bf1214293473c78/src/vs/workbench/contrib/customEditor/browser/customEditors.ts
|
|
21
|
-
|
|
22
|
-
import { injectable } from '@theia/core/shared/inversify';
|
|
23
|
-
import URI from '@theia/core/lib/common/uri';
|
|
24
|
-
import { Reference } from '@theia/core/lib/common/reference';
|
|
25
|
-
import { CustomEditorModel } from './custom-editors-main';
|
|
26
|
-
|
|
27
|
-
@injectable()
|
|
28
|
-
export class CustomEditorService {
|
|
29
|
-
protected _models = new CustomEditorModelManager();
|
|
30
|
-
get models(): CustomEditorModelManager { return this._models; }
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export class CustomEditorModelManager {
|
|
34
|
-
|
|
35
|
-
private readonly references = new Map<string, {
|
|
36
|
-
readonly viewType: string,
|
|
37
|
-
readonly model: Promise<CustomEditorModel>,
|
|
38
|
-
counter: number
|
|
39
|
-
}>();
|
|
40
|
-
|
|
41
|
-
add(resource: URI, viewType: string, model: Promise<CustomEditorModel>): Promise<Reference<CustomEditorModel>> {
|
|
42
|
-
const key = this.key(resource, viewType);
|
|
43
|
-
const existing = this.references.get(key);
|
|
44
|
-
if (existing) {
|
|
45
|
-
throw new Error('Model already exists');
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
this.references.set(key, { viewType, model, counter: 0 });
|
|
49
|
-
return this.tryRetain(resource, viewType)!;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
async get(resource: URI, viewType: string): Promise<CustomEditorModel | undefined> {
|
|
53
|
-
const key = this.key(resource, viewType);
|
|
54
|
-
const entry = this.references.get(key);
|
|
55
|
-
return entry?.model;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
tryRetain(resource: URI, viewType: string): Promise<Reference<CustomEditorModel>> | undefined {
|
|
59
|
-
const key = this.key(resource, viewType);
|
|
60
|
-
|
|
61
|
-
const entry = this.references.get(key);
|
|
62
|
-
if (!entry) {
|
|
63
|
-
return undefined;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
entry.counter++;
|
|
67
|
-
|
|
68
|
-
return entry.model.then(model => ({
|
|
69
|
-
object: model,
|
|
70
|
-
dispose: once(() => {
|
|
71
|
-
if (--entry!.counter <= 0) {
|
|
72
|
-
entry.model.then(x => x.dispose());
|
|
73
|
-
this.references.delete(key);
|
|
74
|
-
}
|
|
75
|
-
}),
|
|
76
|
-
}));
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
disposeAllModelsForView(viewType: string): void {
|
|
80
|
-
for (const [key, value] of this.references) {
|
|
81
|
-
if (value.viewType === viewType) {
|
|
82
|
-
value.model.then(x => x.dispose());
|
|
83
|
-
this.references.delete(key);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
private key(resource: URI, viewType: string): string {
|
|
89
|
-
return `${resource.toString()}@@@${viewType}`;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export function once<T extends Function>(this: unknown, fn: T): T {
|
|
94
|
-
const _this = this;
|
|
95
|
-
let didCall = false;
|
|
96
|
-
let result: unknown;
|
|
97
|
-
|
|
98
|
-
return function (): unknown {
|
|
99
|
-
if (didCall) {
|
|
100
|
-
return result;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
didCall = true;
|
|
104
|
-
result = fn.apply(_this, arguments);
|
|
105
|
-
|
|
106
|
-
return result;
|
|
107
|
-
} as unknown as T;
|
|
108
|
-
}
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2021 SAP SE or an SAP affiliate company and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
/*---------------------------------------------------------------------------------------------
|
|
17
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
18
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
19
|
+
*--------------------------------------------------------------------------------------------*/
|
|
20
|
+
// copied and modified from https://github.com/microsoft/vscode/blob/53eac52308c4611000a171cc7bf1214293473c78/src/vs/workbench/contrib/customEditor/browser/customEditors.ts
|
|
21
|
+
|
|
22
|
+
import { injectable } from '@theia/core/shared/inversify';
|
|
23
|
+
import URI from '@theia/core/lib/common/uri';
|
|
24
|
+
import { Reference } from '@theia/core/lib/common/reference';
|
|
25
|
+
import { CustomEditorModel } from './custom-editors-main';
|
|
26
|
+
|
|
27
|
+
@injectable()
|
|
28
|
+
export class CustomEditorService {
|
|
29
|
+
protected _models = new CustomEditorModelManager();
|
|
30
|
+
get models(): CustomEditorModelManager { return this._models; }
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export class CustomEditorModelManager {
|
|
34
|
+
|
|
35
|
+
private readonly references = new Map<string, {
|
|
36
|
+
readonly viewType: string,
|
|
37
|
+
readonly model: Promise<CustomEditorModel>,
|
|
38
|
+
counter: number
|
|
39
|
+
}>();
|
|
40
|
+
|
|
41
|
+
add(resource: URI, viewType: string, model: Promise<CustomEditorModel>): Promise<Reference<CustomEditorModel>> {
|
|
42
|
+
const key = this.key(resource, viewType);
|
|
43
|
+
const existing = this.references.get(key);
|
|
44
|
+
if (existing) {
|
|
45
|
+
throw new Error('Model already exists');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
this.references.set(key, { viewType, model, counter: 0 });
|
|
49
|
+
return this.tryRetain(resource, viewType)!;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async get(resource: URI, viewType: string): Promise<CustomEditorModel | undefined> {
|
|
53
|
+
const key = this.key(resource, viewType);
|
|
54
|
+
const entry = this.references.get(key);
|
|
55
|
+
return entry?.model;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
tryRetain(resource: URI, viewType: string): Promise<Reference<CustomEditorModel>> | undefined {
|
|
59
|
+
const key = this.key(resource, viewType);
|
|
60
|
+
|
|
61
|
+
const entry = this.references.get(key);
|
|
62
|
+
if (!entry) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
entry.counter++;
|
|
67
|
+
|
|
68
|
+
return entry.model.then(model => ({
|
|
69
|
+
object: model,
|
|
70
|
+
dispose: once(() => {
|
|
71
|
+
if (--entry!.counter <= 0) {
|
|
72
|
+
entry.model.then(x => x.dispose());
|
|
73
|
+
this.references.delete(key);
|
|
74
|
+
}
|
|
75
|
+
}),
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
disposeAllModelsForView(viewType: string): void {
|
|
80
|
+
for (const [key, value] of this.references) {
|
|
81
|
+
if (value.viewType === viewType) {
|
|
82
|
+
value.model.then(x => x.dispose());
|
|
83
|
+
this.references.delete(key);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
private key(resource: URI, viewType: string): string {
|
|
89
|
+
return `${resource.toString()}@@@${viewType}`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function once<T extends Function>(this: unknown, fn: T): T {
|
|
94
|
+
const _this = this;
|
|
95
|
+
let didCall = false;
|
|
96
|
+
let result: unknown;
|
|
97
|
+
|
|
98
|
+
return function (): unknown {
|
|
99
|
+
if (didCall) {
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
didCall = true;
|
|
104
|
+
result = fn.apply(_this, arguments);
|
|
105
|
+
|
|
106
|
+
return result;
|
|
107
|
+
} as unknown as T;
|
|
108
|
+
}
|