@workbench-kit/shell-react 0.0.2-prototype.0.2.18 → 0.0.2-prototype.0.2.19
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/package.json +9 -8
- package/src/extensions/builtin/accounts/src/index.ts +13 -0
- package/src/extensions/builtin/accounts/workbench.extension.json +45 -0
- package/src/extensions/builtin/chat/src/index.ts +40 -0
- package/src/extensions/builtin/chat/workbench.extension.json +66 -0
- package/src/extensions/builtin/commands/src/command-inspector-editor-host.ts +79 -0
- package/src/extensions/builtin/commands/src/index.ts +65 -0
- package/src/extensions/builtin/commands/workbench.extension.json +64 -0
- package/src/extensions/builtin/editor/src/index.ts +95 -0
- package/src/extensions/builtin/editor/src/missing-resource-editor-host.ts +58 -0
- package/src/extensions/builtin/editor/src/resource-uri.ts +16 -0
- package/src/extensions/builtin/editor/src/text-editor-host.ts +86 -0
- package/src/extensions/builtin/editor/workbench.extension.json +32 -0
- package/src/extensions/builtin/explorer/src/index.ts +466 -0
- package/src/extensions/builtin/explorer/workbench.extension.json +132 -0
- package/src/extensions/builtin/extensions/src/index.ts +28 -0
- package/src/extensions/builtin/extensions/workbench.extension.json +53 -0
- package/src/extensions/builtin/keybindings/src/index.ts +6 -0
- package/src/extensions/builtin/keybindings/workbench.extension.json +21 -0
- package/src/extensions/builtin/search/src/index.ts +22 -0
- package/src/extensions/builtin/search/workbench.extension.json +43 -0
- package/src/extensions/builtin/settings/src/index.ts +23 -0
- package/src/extensions/builtin/settings/workbench.extension.json +41 -0
- package/src/extensions/builtin/workspace/src/index.ts +12 -0
- package/src/extensions/builtin/workspace/workbench.extension.json +37 -0
- package/src/extensions/builtin-extensions.ts +591 -0
- package/src/extensions/management-model.ts +41 -35
- package/src/extensions/use-extension-management.ts +11 -4
- package/src/index.ts +2 -0
- package/src/shell/provider.tsx +6 -6
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import {
|
|
2
|
-
BUILTIN_WORKBENCH_EXTENSIONS,
|
|
3
|
-
SAMPLE_WORKBENCH_EXTENSIONS,
|
|
4
2
|
createExtensionFeatureSpec,
|
|
5
3
|
createExtensionInstallPlan,
|
|
6
4
|
resolveBundledExtensionByManifestUrl,
|
|
@@ -20,12 +18,8 @@ import type {
|
|
|
20
18
|
ExtensionManagementFeatureSummary,
|
|
21
19
|
} from '@workbench-kit/react/workbench/management';
|
|
22
20
|
|
|
23
|
-
export const BUNDLED_EXTENSIONS = [
|
|
24
|
-
...BUILTIN_WORKBENCH_EXTENSIONS,
|
|
25
|
-
...SAMPLE_WORKBENCH_EXTENSIONS,
|
|
26
|
-
] as const;
|
|
27
|
-
|
|
28
21
|
export interface CreateExtensionManagementEntriesInput {
|
|
22
|
+
readonly availableExtensions: readonly WorkbenchExtensionDescription[];
|
|
29
23
|
readonly extensionRegistry: ExtensionRegistry;
|
|
30
24
|
readonly installedRecords: readonly InstalledExtensionRecord[];
|
|
31
25
|
}
|
|
@@ -42,38 +36,44 @@ export interface ExtensionInstallPlanningContext extends CreateExtensionManageme
|
|
|
42
36
|
}
|
|
43
37
|
|
|
44
38
|
export function createExtensionManagementEntries({
|
|
39
|
+
availableExtensions,
|
|
45
40
|
extensionRegistry,
|
|
46
41
|
installedRecords,
|
|
47
42
|
}: CreateExtensionManagementEntriesInput): readonly ExtensionManagementEntry[] {
|
|
48
43
|
const installedById = new Map(installedRecords.map((record) => [record.id, record]));
|
|
49
|
-
const extensionFeatures = createExtensionManagementFeatureMaps(
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
44
|
+
const extensionFeatures = createExtensionManagementFeatureMaps(
|
|
45
|
+
availableExtensions,
|
|
46
|
+
extensionRegistry,
|
|
47
|
+
);
|
|
48
|
+
const bundledEntries = availableExtensions
|
|
49
|
+
.map((extension) => {
|
|
50
|
+
const installed = installedById.get(extension.manifest.id);
|
|
51
|
+
const isBuiltin = extension.manifest.id.startsWith('workbench-kit.builtin.');
|
|
52
|
+
const featureState = resolveExtensionManagementFeatureState(
|
|
53
|
+
extension.manifest.id,
|
|
54
|
+
extensionFeatures,
|
|
55
|
+
);
|
|
57
56
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
57
|
+
return {
|
|
58
|
+
category: installed?.category ?? (isBuiltin ? 'builtin' : 'sample'),
|
|
59
|
+
description: extension.manifest.displayName,
|
|
60
|
+
diagnostics: featureState.diagnostics,
|
|
61
|
+
displayName: extension.manifest.displayName,
|
|
62
|
+
enabled: isBuiltin ? true : (installed?.enabled ?? false),
|
|
63
|
+
features: featureState.features,
|
|
64
|
+
id: extension.manifest.id,
|
|
65
|
+
installedAt: installed?.installedAt,
|
|
66
|
+
manifestUrl: installed?.manifestUrl,
|
|
67
|
+
source: isBuiltin ? ('bundled' as const) : ('installed' as const),
|
|
68
|
+
} satisfies ExtensionManagementEntry;
|
|
69
|
+
})
|
|
70
|
+
.filter((entry) => entry.source === 'bundled' || installedById.has(entry.id));
|
|
71
71
|
|
|
72
72
|
const activeExtensions = extensionRegistry
|
|
73
73
|
.getExtensions()
|
|
74
74
|
.filter(
|
|
75
75
|
(extension) =>
|
|
76
|
-
!
|
|
76
|
+
!availableExtensions.some((bundled) => bundled.manifest.id === extension.manifest.id),
|
|
77
77
|
)
|
|
78
78
|
.map((extension) => {
|
|
79
79
|
const installed = installedById.get(extension.manifest.id);
|
|
@@ -102,12 +102,14 @@ export function createExtensionManagementEntries({
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
export function createExtensionCatalogBrowseEntries({
|
|
105
|
+
availableExtensions,
|
|
105
106
|
catalogEntries,
|
|
106
107
|
extensionRegistry,
|
|
107
108
|
installedRecords,
|
|
108
109
|
}: CreateExtensionCatalogBrowseEntriesInput): readonly ExtensionCatalogBrowseEntry[] {
|
|
109
110
|
const installedIds = new Set(installedRecords.map((record) => record.id));
|
|
110
111
|
const installContext = createExtensionInstallPlanningContext({
|
|
112
|
+
availableExtensions,
|
|
111
113
|
catalogEntries,
|
|
112
114
|
extensionRegistry,
|
|
113
115
|
installedRecords,
|
|
@@ -135,23 +137,24 @@ export function createExtensionCatalogBrowseEntries({
|
|
|
135
137
|
}
|
|
136
138
|
|
|
137
139
|
export function createExtensionInstallPlanningContext({
|
|
140
|
+
availableExtensions,
|
|
138
141
|
catalogEntries,
|
|
139
142
|
extensionRegistry,
|
|
140
143
|
installedRecords,
|
|
141
144
|
}: CreateExtensionCatalogBrowseEntriesInput): ExtensionInstallPlanningContext {
|
|
142
|
-
const
|
|
143
|
-
...
|
|
145
|
+
const installableExtensions = mergeUniqueExtensionDescriptions([
|
|
146
|
+
...availableExtensions,
|
|
144
147
|
...extensionRegistry.getExtensions(),
|
|
145
148
|
]);
|
|
146
149
|
|
|
147
150
|
return {
|
|
148
|
-
availableExtensions,
|
|
151
|
+
availableExtensions: installableExtensions,
|
|
149
152
|
enabledExtensionIds: extensionRegistry
|
|
150
153
|
.getExtensions()
|
|
151
154
|
.map((extension) => extension.manifest.id),
|
|
152
155
|
extensionRegistry,
|
|
153
156
|
hostCapabilityIds: extensionRegistry.capabilityRegistry.listProviderIds(),
|
|
154
|
-
installSources: createExtensionInstallSources(catalogEntries,
|
|
157
|
+
installSources: createExtensionInstallSources(catalogEntries, installableExtensions),
|
|
155
158
|
installedRecords,
|
|
156
159
|
};
|
|
157
160
|
}
|
|
@@ -215,10 +218,13 @@ function mergeUniqueExtensionDescriptions(
|
|
|
215
218
|
return [...byId.values()];
|
|
216
219
|
}
|
|
217
220
|
|
|
218
|
-
function createExtensionManagementFeatureMaps(
|
|
221
|
+
function createExtensionManagementFeatureMaps(
|
|
222
|
+
availableExtensions: readonly WorkbenchExtensionDescription[],
|
|
223
|
+
extensionRegistry: ExtensionRegistry,
|
|
224
|
+
) {
|
|
219
225
|
return {
|
|
220
226
|
bundledFeaturesById: new Map(
|
|
221
|
-
|
|
227
|
+
availableExtensions.map((extension) => [
|
|
222
228
|
extension.manifest.id,
|
|
223
229
|
createExtensionFeatureSpec(extension),
|
|
224
230
|
]),
|
|
@@ -51,7 +51,7 @@ export function useExtensionManagementModel({
|
|
|
51
51
|
installTrustStorageKey = DEFAULT_EXTENSION_INSTALL_TRUST_STORAGE_KEY,
|
|
52
52
|
}: UseExtensionManagementModelOptions = {}) {
|
|
53
53
|
const workbench = useWorkbench();
|
|
54
|
-
const { extensionRegistry } = workbench;
|
|
54
|
+
const { availableExtensions, extensionRegistry } = workbench;
|
|
55
55
|
const resolvedInstalledExtensionsStorage =
|
|
56
56
|
installedExtensionsStorage ?? workbench.installedExtensionsStorage;
|
|
57
57
|
const resolvedInstalledExtensionsStorageKey =
|
|
@@ -138,20 +138,26 @@ export function useExtensionManagementModel({
|
|
|
138
138
|
}, [catalogTrustPolicy, catalogUrl]);
|
|
139
139
|
|
|
140
140
|
const installedEntries = useMemo<readonly ExtensionManagementEntry[]>(() => {
|
|
141
|
-
return createExtensionManagementEntries({
|
|
142
|
-
|
|
141
|
+
return createExtensionManagementEntries({
|
|
142
|
+
availableExtensions,
|
|
143
|
+
extensionRegistry,
|
|
144
|
+
installedRecords,
|
|
145
|
+
});
|
|
146
|
+
}, [availableExtensions, extensionRegistry, installedRecords]);
|
|
143
147
|
|
|
144
148
|
const browseEntries = useMemo<readonly ExtensionCatalogBrowseEntry[]>(() => {
|
|
145
149
|
return createExtensionCatalogBrowseEntries({
|
|
150
|
+
availableExtensions,
|
|
146
151
|
catalogEntries,
|
|
147
152
|
extensionRegistry,
|
|
148
153
|
installedRecords,
|
|
149
154
|
});
|
|
150
|
-
}, [catalogEntries, extensionRegistry, installedRecords]);
|
|
155
|
+
}, [availableExtensions, catalogEntries, extensionRegistry, installedRecords]);
|
|
151
156
|
|
|
152
157
|
const installCatalogEntry = useCallback(
|
|
153
158
|
(entry: ExtensionCatalogBrowseEntry, options?: ExtensionInstallOptions) => {
|
|
154
159
|
const installContext = createExtensionInstallPlanningContext({
|
|
160
|
+
availableExtensions,
|
|
155
161
|
catalogEntries,
|
|
156
162
|
extensionRegistry,
|
|
157
163
|
installedRecords,
|
|
@@ -186,6 +192,7 @@ export function useExtensionManagementModel({
|
|
|
186
192
|
}
|
|
187
193
|
},
|
|
188
194
|
[
|
|
195
|
+
availableExtensions,
|
|
189
196
|
catalogEntries,
|
|
190
197
|
extensionRegistry,
|
|
191
198
|
installedRecords,
|
package/src/index.ts
CHANGED
package/src/shell/provider.tsx
CHANGED
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
type ReactNode,
|
|
10
10
|
} from 'react';
|
|
11
11
|
import {
|
|
12
|
-
BUILTIN_WORKBENCH_EXTENSIONS,
|
|
13
12
|
collectConfigurationDefaults,
|
|
14
13
|
createEditorService,
|
|
15
14
|
ExtensionRegistry,
|
|
@@ -21,7 +20,6 @@ import {
|
|
|
21
20
|
registerHostWorkbenchThemes,
|
|
22
21
|
resolveInstalledAvailableExtensions,
|
|
23
22
|
resolveWorkbenchExtensions,
|
|
24
|
-
SAMPLE_WORKBENCH_EXTENSIONS,
|
|
25
23
|
DEFAULT_INSTALLED_EXTENSIONS_STORAGE_KEY,
|
|
26
24
|
WORKBENCH_EDITOR_SERVICE_CAPABILITY_ID,
|
|
27
25
|
verifyWorkbenchExtensionsAgainstLock,
|
|
@@ -36,6 +34,7 @@ import {
|
|
|
36
34
|
type WorkbenchLayoutStateInput,
|
|
37
35
|
type ViewHostFactory,
|
|
38
36
|
} from '@workbench-kit/workbench-core';
|
|
37
|
+
import { BUILTIN_WORKBENCH_EXTENSIONS } from '../extensions/builtin-extensions.js';
|
|
39
38
|
import {
|
|
40
39
|
ContextKeyService,
|
|
41
40
|
createWorkbenchPermissionContextKeys,
|
|
@@ -97,10 +96,7 @@ export interface WorkbenchWorkspaceHostPort extends WorkbenchEditorSavePort {
|
|
|
97
96
|
|
|
98
97
|
export type { WorkbenchStorageAdapter };
|
|
99
98
|
|
|
100
|
-
const DEFAULT_AVAILABLE_EXTENSIONS =
|
|
101
|
-
...BUILTIN_WORKBENCH_EXTENSIONS,
|
|
102
|
-
...SAMPLE_WORKBENCH_EXTENSIONS,
|
|
103
|
-
] as const;
|
|
99
|
+
const DEFAULT_AVAILABLE_EXTENSIONS = BUILTIN_WORKBENCH_EXTENSIONS;
|
|
104
100
|
|
|
105
101
|
const EMPTY_HOST_THEMES: readonly WorkbenchHostThemeRegistration[] = Object.freeze([]);
|
|
106
102
|
const EMPTY_USER_COMMANDS: readonly WorkbenchUserCommandDefinition[] = Object.freeze([]);
|
|
@@ -151,6 +147,7 @@ export interface WorkbenchProviderProps {
|
|
|
151
147
|
|
|
152
148
|
export interface WorkbenchContextValue {
|
|
153
149
|
activateCommand(commandId: string): Promise<readonly { readonly extensionId: string }[]>;
|
|
150
|
+
availableExtensions: readonly WorkbenchExtensionDescription[];
|
|
154
151
|
contextKeyService: ContextKeyService;
|
|
155
152
|
editorDocumentViewProviders: EditorDocumentViewProviderRegistry;
|
|
156
153
|
editorService: EditorService;
|
|
@@ -170,6 +167,7 @@ export interface WorkbenchContextValue {
|
|
|
170
167
|
|
|
171
168
|
interface WorkbenchProviderServices {
|
|
172
169
|
activateStartup(): void;
|
|
170
|
+
availableExtensions: readonly WorkbenchExtensionDescription[];
|
|
173
171
|
dispose(): void;
|
|
174
172
|
editorDocumentViewProviders: EditorDocumentViewProviderRegistry;
|
|
175
173
|
editorService: EditorService;
|
|
@@ -429,6 +427,7 @@ export function WorkbenchProvider({
|
|
|
429
427
|
activateStartup: () => {
|
|
430
428
|
void ensureStartupActivation();
|
|
431
429
|
},
|
|
430
|
+
availableExtensions: resolvedAvailableExtensions,
|
|
432
431
|
dispose: () => {
|
|
433
432
|
saveCommandDisposable?.dispose();
|
|
434
433
|
userCommandDisposables.dispose();
|
|
@@ -565,6 +564,7 @@ export function WorkbenchProvider({
|
|
|
565
564
|
const value = useMemo<WorkbenchContextValue>(
|
|
566
565
|
() => ({
|
|
567
566
|
activateCommand: (commandId) => services.extensionRegistry.activateCommand(commandId),
|
|
567
|
+
availableExtensions: services.availableExtensions,
|
|
568
568
|
contextKeyService,
|
|
569
569
|
editorDocumentViewProviders: services.editorDocumentViewProviders,
|
|
570
570
|
editorService: services.editorService,
|