Files
xrpl-hooks-ide/utils/languageClient.ts
2022-08-17 11:50:49 +05:30

50 lines
1.5 KiB
TypeScript

import { MessageConnection } from '@codingame/monaco-jsonrpc'
import {
MonacoLanguageClient,
ErrorAction,
CloseAction,
createConnection
} from '@codingame/monaco-languageclient'
import normalizeUrl from 'normalize-url'
import ReconnectingWebSocket from 'reconnecting-websocket'
export function createLanguageClient(connection: MessageConnection): MonacoLanguageClient {
return new MonacoLanguageClient({
name: 'Clangd Language Client',
clientOptions: {
// use a language id as a document selector
documentSelector: ['c', 'h'],
// disable the default error handler
errorHandler: {
error: () => ErrorAction.Continue,
closed: () => {
return CloseAction.DoNotRestart
}
}
},
// create a language client connection from the JSON RPC connection on demand
connectionProvider: {
get: (errorHandler, closeHandler) => {
return Promise.resolve(createConnection(connection, errorHandler, closeHandler))
}
}
})
}
export function createUrl(path: string): string {
const protocol = location.protocol === 'https:' ? 'wss' : 'ws'
return normalizeUrl(`${protocol}://${location.host}${location.pathname}${path}`)
}
export function createWebSocket(url: string) {
const socketOptions = {
maxReconnectionDelay: 10000,
minReconnectionDelay: 1000,
reconnectionDelayGrowFactor: 1.3,
connectionTimeout: 10000,
maxRetries: Infinity,
debug: false
}
return new ReconnectingWebSocket(url, [], socketOptions)
}