Skip to content

Commit 944a320

Browse files
committed
Expose part of the VS Code API on the client
1 parent 28c9361 commit 944a320

File tree

6 files changed

+436
-334
lines changed

6 files changed

+436
-334
lines changed

packages/ide-api/api.d.ts

+19-224
Original file line numberDiff line numberDiff line change
@@ -1,235 +1,30 @@
1-
// tslint:disable no-any
1+
import * as vscode from "vscode";
22

3-
import { ITerminalService } from "vs/workbench/contrib/terminal/common/terminal";
4-
import { IWorkbenchActionRegistry } from 'vs/workbench/common/actions';
5-
import { Action } from 'vs/base/common/actions';
6-
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
3+
export { vscode };
74

8-
export interface EvalHelper { }
9-
interface ActiveEvalEmitter {
10-
removeAllListeners(event?: string): void;
11-
emit(event: string, ...args: any[]): void;
12-
on(event: string, cb: (...args: any[]) => void): void;
13-
}
14-
interface IDisposable {
15-
dispose(): void;
16-
}
17-
interface Disposer extends IDisposable {
18-
onDidDispose: (cb: () => void) => void;
19-
}
20-
interface Event<T> {
21-
(listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[]): IDisposable;
22-
}
23-
interface IAction extends IDisposable {
24-
id: string;
25-
label: string;
26-
tooltip: string;
27-
class: string | undefined;
28-
enabled: boolean;
29-
checked: boolean;
30-
radio: boolean;
31-
run(event?: any): Promise<any>;
32-
}
33-
interface IStatusbarEntry {
34-
readonly text: string;
35-
readonly tooltip?: string;
36-
readonly color?: string;
37-
readonly command?: string;
38-
readonly arguments?: any[];
39-
readonly showBeak?: boolean;
40-
}
41-
interface IStatusbarService {
42-
addEntry(entry: IStatusbarEntry, alignment: ide.StatusbarAlignment, priority?: number): IDisposable;
43-
setStatusMessage(message: string, autoDisposeAfter?: number, delayBy?: number): IDisposable;
44-
}
45-
type NotificationMessage = string | Error;
46-
interface INotificationProperties {
47-
sticky?: boolean;
48-
silent?: boolean;
49-
}
50-
interface INotification extends INotificationProperties {
51-
severity: ide.Severity;
52-
message: NotificationMessage;
53-
source?: string;
54-
actions?: INotificationActions;
55-
}
56-
interface INotificationActions {
57-
primary?: IAction[];
58-
secondary?: IAction[];
59-
}
60-
61-
interface INotificationProgress {
62-
infinite(): void;
63-
total(value: number): void;
64-
worked(value: number): void;
65-
done(): void;
66-
}
67-
68-
interface INotificationHandle {
69-
readonly onDidClose: Event<void>;
70-
readonly progress: INotificationProgress;
71-
updateSeverity(severity: ide.Severity): void;
72-
updateMessage(message: NotificationMessage): void;
73-
updateActions(actions?: INotificationActions): void;
74-
close(): void;
75-
}
76-
77-
interface IPromptChoice {
78-
label: string;
79-
isSecondary?: boolean;
80-
keepOpen?: boolean;
81-
run: () => void;
82-
}
83-
84-
interface IPromptOptions extends INotificationProperties {
85-
onCancel?: () => void;
86-
}
87-
88-
interface INotificationService {
89-
notify(notification: INotification): INotificationHandle;
90-
info(message: NotificationMessage | NotificationMessage[]): void;
91-
warn(message: NotificationMessage | NotificationMessage[]): void;
92-
error(message: NotificationMessage | NotificationMessage[]): void;
93-
prompt(severity: ide.Severity, message: string, choices: IPromptChoice[], options?: IPromptOptions): INotificationHandle;
94-
}
95-
96-
interface IBaseCommandAction {
97-
id: string;
98-
title: string;
99-
category?: string;
100-
}
101-
102-
interface ICommandAction extends IBaseCommandAction {
103-
// iconLocation?: { dark: URI; light?: URI; };
104-
// precondition?: ContextKeyExpr;
105-
// toggled?: ContextKeyExpr;
106-
}
107-
108-
interface ISerializableCommandAction extends IBaseCommandAction {
109-
// iconLocation?: { dark: UriComponents; light?: UriComponents; };
110-
}
111-
112-
interface IMenuItem {
113-
command: ICommandAction;
114-
alt?: ICommandAction;
115-
// when?: ContextKeyExpr;
116-
group?: "navigation" | string;
117-
order?: number;
118-
}
119-
120-
interface IMenuRegistry {
121-
appendMenuItem(menu: ide.MenuId, item: IMenuItem): IDisposable;
122-
}
123-
124-
export interface ICommandHandler {
125-
(accessor: any, ...args: any[]): void;
126-
}
127-
128-
export interface ICommand {
129-
id: string;
130-
handler: ICommandHandler;
131-
description?: ICommandHandlerDescription | null;
132-
}
133-
134-
export interface ICommandHandlerDescription {
135-
description: string;
136-
args: { name: string; description?: string; }[];
137-
returns?: string;
138-
}
139-
140-
interface ICommandRegistry {
141-
registerCommand(command: ICommand): IDisposable;
142-
}
5+
// Honestly no idea why this works.
6+
export import ide = coder;
1437

144-
interface IStorageService {
145-
save(): Promise<void>;
146-
}
147-
148-
declare namespace ide {
149-
export const client: {};
150-
151-
export const workbench: {
152-
readonly action: Action,
153-
readonly syncActionDescriptor: SyncActionDescriptor,
154-
readonly statusbarService: IStatusbarService;
155-
readonly actionsRegistry: IWorkbenchActionRegistry;
156-
readonly notificationService: INotificationService;
157-
readonly storageService: IStorageService;
158-
readonly menuRegistry: IMenuRegistry;
159-
readonly commandRegistry: ICommandRegistry;
160-
readonly terminalService: ITerminalService;
161-
162-
onFileCreate(cb: (path: string) => void): void;
163-
onFileMove(cb: (path: string, target: string) => void): void;
164-
onFileDelete(cb: (path: string) => void): void;
165-
onFileSaved(cb: (path: string) => void): void;
166-
onFileCopy(cb: (path: string, target: string) => void): void;
167-
168-
onModelAdded(cb: (path: string, languageId: string) => void): void;
169-
onModelRemoved(cb: (path: string, languageId: string) => void): void;
170-
onModelLanguageChange(cb: (path: string, languageId: string, oldLanguageId: string) => void): void;
171-
172-
onTerminalAdded(cb: () => void): void;
173-
onTerminalRemoved(cb: () => void): void;
174-
};
175-
176-
export enum Severity {
177-
Ignore = 0,
178-
Info = 1,
179-
Warning = 2,
180-
Error = 3,
181-
}
182-
183-
export enum StatusbarAlignment {
184-
LEFT = 0,
185-
RIGHT = 1,
186-
}
187-
188-
export enum MenuId {
189-
CommandPalette,
190-
DebugBreakpointsContext,
191-
DebugCallStackContext,
192-
DebugConsoleContext,
193-
DebugVariablesContext,
194-
DebugWatchContext,
195-
EditorContext,
196-
EditorTitle,
197-
EditorTitleContext,
198-
EmptyEditorGroupContext,
199-
ExplorerContext,
200-
MenubarAppearanceMenu,
201-
MenubarDebugMenu,
202-
MenubarEditMenu,
203-
MenubarFileMenu,
204-
MenubarGoMenu,
205-
MenubarHelpMenu,
206-
MenubarLayoutMenu,
207-
MenubarNewBreakpointMenu,
208-
MenubarPreferencesMenu,
209-
MenubarRecentMenu,
210-
MenubarSelectionMenu,
211-
MenubarSwitchEditorMenu,
212-
MenubarSwitchGroupMenu,
213-
MenubarTerminalMenu,
214-
MenubarViewMenu,
215-
OpenEditorsContext,
216-
ProblemsPanelContext,
217-
SCMChangeContext,
218-
SCMResourceContext,
219-
SCMResourceGroupContext,
220-
SCMSourceControl,
221-
SCMTitle,
222-
SearchContext,
223-
TouchBarContext,
224-
ViewItemContext,
225-
ViewTitle,
226-
}
8+
export interface IdeReadyEvent extends CustomEvent<void> {
9+
readonly vscode: typeof vscode;
10+
readonly ide: typeof ide;
22711
}
22812

22913
declare global {
23014
interface Window {
15+
/**
16+
* Full VS Code extension API.
17+
*/
18+
vscode?: typeof vscode;
19+
20+
/**
21+
* Coder API.
22+
*/
23123
ide?: typeof ide;
23224

233-
addEventListener(event: "ide-ready", callback: (ide: CustomEvent & { readonly ide: typeof ide }) => void): void;
25+
/**
26+
* Listen for when the IDE API has been set and is ready to use.
27+
*/
28+
addEventListener(event: "ide-ready", callback: (event: IdeReadyEvent) => void): void;
23429
}
23530
}

0 commit comments

Comments
 (0)