forked from usernamehw/vscode-commands
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathworkspaceCommands.ts
43 lines (37 loc) · 1.51 KB
/
workspaceCommands.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import { commands, type ExtensionContext } from 'vscode';
import { type CommandFolder, type CommandObject, type TopLevelCommands } from './types';
import { extUtils } from './utils/extUtils';
import { utils } from './utils/utils';
export const enum WorkspaceConstants {
StorageKey = 'workspaceId',
ContextKey = 'usernamehw.commands.workspaceId',
}
export function getWorkspaceId(context: ExtensionContext): string | undefined {
return context.workspaceState.get<string>(WorkspaceConstants.StorageKey);
}
export async function setWorkspaceIdToContext(context: ExtensionContext): Promise<string> {
let maybeWorkspaceId = getWorkspaceId(context);
if (!maybeWorkspaceId) {
maybeWorkspaceId = utils.uniqueId();
await context.workspaceState.update(WorkspaceConstants.StorageKey, maybeWorkspaceId);
}
const workspaceId = maybeWorkspaceId;
await commands.executeCommand('setContext', WorkspaceConstants.ContextKey, workspaceId);
return workspaceId;
}
export function isWorkspaceCommandItem(item: object | string): item is (CommandFolder & WorkspaceCommand) | (CommandObject & WorkspaceCommand) {
return typeof item !== 'string' &&
'workspace' in item;
}
export function addWorkspaceIdToCommands(workspaceCommands: TopLevelCommands, workspaceId: string): TopLevelCommands {
const itemsDeepCopy = utils.deepCopy(workspaceCommands);
extUtils.forEachCommand(item => {
if (typeof item !== 'string') {
item.workspace = workspaceId;
}
}, itemsDeepCopy);
return itemsDeepCopy;
}
interface WorkspaceCommand {
workspace: string;
}