-
-
Notifications
You must be signed in to change notification settings - Fork 70
Expand file tree
/
Copy pathbrowser.ts
More file actions
67 lines (59 loc) · 2.09 KB
/
browser.ts
File metadata and controls
67 lines (59 loc) · 2.09 KB
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import * as vscode from 'vscode-languageserver/browser';
import { URI } from 'vscode-uri';
import { handler as httpSchemaRequestHandler } from './lib/fileSystemProviders/http';
import { listenEditorSettings, provider as httpFsProvider } from './lib/fileSystemProviders/http';
import { createServerBase } from './lib/server';
export * from 'vscode-languageserver/browser';
export * from './index';
export * from './lib/project/simpleProject';
export * from './lib/project/typescriptProject';
export * from './lib/server';
export function createConnection() {
const messageReader = new vscode.BrowserMessageReader(self);
const messageWriter = new vscode.BrowserMessageWriter(self);
const connection = vscode.createConnection(messageReader, messageWriter);
return connection;
}
export function createServer(connection: vscode.Connection) {
const server = createServerBase(connection, {
timer: {
setImmediate: (callback: (...args: any[]) => void, ...args: any[]) => {
setTimeout(callback, 0, ...args);
},
},
});
server.fileSystem.install('http', httpFsProvider);
server.fileSystem.install('https', httpFsProvider);
server.onInitialized(() => listenEditorSettings(server));
return server;
}
export async function loadTsdkByUrl(tsdkUrl: string, locale: string | undefined) {
locale = locale?.toLowerCase();
return {
typescript: await loadLib(),
diagnosticMessages: await loadLocalizedDiagnosticMessages(),
};
async function loadLib(): Promise<typeof import('typescript')> {
const originalModule = globalThis.module;
try {
globalThis.module = { exports: {} } as typeof originalModule;
await import(`${tsdkUrl}/typescript.js`);
return globalThis.module.exports as typeof import('typescript');
}
finally {
globalThis.module = originalModule;
}
}
async function loadLocalizedDiagnosticMessages(): Promise<import('typescript').MapLike<string> | undefined> {
if (locale === 'en') {
return;
}
try {
const json = await httpSchemaRequestHandler(URI.parse(`${tsdkUrl}/${locale}/diagnosticMessages.generated.json`));
if (json) {
return JSON.parse(json);
}
}
catch {}
}
}