[mod] wsl

This commit is contained in:
Andy Bunce 2025-11-11 15:36:33 +00:00
parent b741dc5952
commit ddd772f563
69 changed files with 26660 additions and 25940 deletions

View file

@ -1,30 +1,30 @@
import "ace-code/esm-resolver";
import {jsonContent} from "../docs-example/json-example";
import {json5Content, json5Schema} from "../docs-example/json5-example";
import {addFormatCommand, createEditorWithLSP} from "../utils";
import {AceLanguageClient, LanguageClientConfig} from "ace-linters/build/ace-language-client";
let modes = [
{name: "json", mode: "ace/mode/json", content: jsonContent, options: {jsonSchemaUri: "common-form.schema.json"}},
{name: "json5", mode: "ace/mode/json5", content: json5Content, options: {jsonSchemaUri: json5Schema}},
]
const serverData: LanguageClientConfig = {
module: () => import("ace-linters/build/language-client"),
modes: "json|json5",
type: "socket",
socket: new WebSocket("ws://127.0.0.1:3000/exampleServer"),
}
let languageProvider = AceLanguageClient.for(serverData);
let i = 0;
for (let mode of modes) {
// @ts-expect-error
createEditorWithLSP(mode, i, languageProvider);
i++;
}
// @ts-expect-error
addFormatCommand(languageProvider);
import "ace-code/esm-resolver";
import {jsonContent} from "../docs-example/json-example";
import {json5Content, json5Schema} from "../docs-example/json5-example";
import {addFormatCommand, createEditorWithLSP} from "../utils";
import {AceLanguageClient, LanguageClientConfig} from "ace-linters/build/ace-language-client";
let modes = [
{name: "json", mode: "ace/mode/json", content: jsonContent, options: {jsonSchemaUri: "common-form.schema.json"}},
{name: "json5", mode: "ace/mode/json5", content: json5Content, options: {jsonSchemaUri: json5Schema}},
]
const serverData: LanguageClientConfig = {
module: () => import("ace-linters/build/language-client"),
modes: "json|json5",
type: "socket",
socket: new WebSocket("ws://127.0.0.1:3000/exampleServer"),
}
let languageProvider = AceLanguageClient.for(serverData);
let i = 0;
for (let mode of modes) {
// @ts-expect-error
createEditorWithLSP(mode, i, languageProvider);
i++;
}
// @ts-expect-error
addFormatCommand(languageProvider);

View file

@ -1,11 +1,11 @@
# Sample language server
This is just sample websocket server based on vscode-json-languageserver
## Getting Started
To run the server, simply follow these steps:
1. Install dependencies by running `npm i`
2. Start the server by running `npm run start-server`
And that's it! Your sample language server on 3000 port should now be up and running.
# Sample language server
This is just sample websocket server based on vscode-json-languageserver
## Getting Started
To run the server, simply follow these steps:
1. Install dependencies by running `npm i`
2. Start the server by running `npm run start-server`
And that's it! Your sample language server on 3000 port should now be up and running.

File diff suppressed because it is too large Load diff

View file

@ -1,12 +1,12 @@
{
"name": "sample-server",
"version": "1.0.0",
"scripts": {
"start-server": "node --loader ts-node/esm server.ts"
},
"dependencies": {
"vscode-json-languageserver": "^1.3.4",
"ts-node": "^10.8.1"
},
"type": "module"
}
{
"name": "sample-server",
"version": "1.0.0",
"scripts": {
"start-server": "node --loader ts-node/esm server.ts"
},
"dependencies": {
"vscode-json-languageserver": "^1.3.4",
"ts-node": "^10.8.1"
},
"type": "module"
}

View file

@ -1,98 +1,98 @@
import fs from "fs";
import {WebSocketServer} from 'ws';
import * as http from 'http';
import {fileURLToPath, URL} from 'url';
import * as net from 'net';
import express from 'express';
import * as rpc from 'vscode-ws-jsonrpc';
// @ts-ignore
import * as jsonServer from 'vscode-json-languageserver/out/jsonServer.js'
import requestLight from "request-light";
import vscodeUri from "vscode-uri";
import {createConnection} from 'vscode-languageserver/lib/node/main.js';
import path from 'path';
export function startLanguageServer(webSocket: rpc.IWebSocket) {
const messageReader = new rpc.WebSocketMessageReader(webSocket);
const messageWriter = new rpc.WebSocketMessageWriter(webSocket);
const connection = createConnection(messageReader, messageWriter);
jsonServer.startServer(connection, {
file: getFileService(),
http: getHTTPService(),
configureHttpRequests: requestLight.configure
});
}
function getHTTPService() {
return {
getContent(uri: any) {
const headers = {'Accept-Encoding': 'gzip, deflate'};
return requestLight.xhr({url: uri, followRedirects: 5, headers}).then(response => {
return response.responseText;
}, (error) => {
return Promise.reject(error.responseText || requestLight.getErrorStatusDescription(error.status) || error.toString());
});
}
};
}
function getFileService() {
return {
getContent(location: any) {
return new Promise((resolve, reject) => {
const uri = vscodeUri.URI.parse(location);
fs.readFile(uri.fsPath, 'utf8', (err, data) => {
if (err) {
reject(err);
} else {
resolve(data);
}
});
});
}
};
}
const serverFilePath = fileURLToPath(import.meta.url);
const serverDir = path.dirname(serverFilePath);
process.on('uncaughtException', (err: any) => {
console.error('Uncaught Exception: ', err.toString());
if (err.stack) {
console.error(err.stack);
}
});
const app = express();
app.use(express.static(serverDir));
const server = app.listen(3000);
const webSocketServer = new WebSocketServer({
noServer: true,
perMessageDeflate: false
});
server.on('upgrade', (request: http.IncomingMessage, socket: net.Socket, head: Buffer) => {
const baseURL = `http://${request.headers.host}/`;
const pathname = request.url ? new URL(request.url, baseURL).pathname : undefined;
if (pathname === '/exampleServer') {
webSocketServer.handleUpgrade(request, socket, head, webSocket => {
const socket: rpc.IWebSocket = {
send: content => webSocket.send(content, error => {
if (error) {
throw error;
}
}),
onMessage: cb => webSocket.on('message', cb),
onError: cb => webSocket.on('error', cb),
onClose: cb => webSocket.on('close', cb),
dispose: () => webSocket.close()
};
if (webSocket.readyState === webSocket.OPEN) {
startLanguageServer(socket);
} else {
webSocket.on('open', () => startLanguageServer(socket));
}
});
}
});
import fs from "fs";
import {WebSocketServer} from 'ws';
import * as http from 'http';
import {fileURLToPath, URL} from 'url';
import * as net from 'net';
import express from 'express';
import * as rpc from 'vscode-ws-jsonrpc';
// @ts-ignore
import * as jsonServer from 'vscode-json-languageserver/out/jsonServer.js'
import requestLight from "request-light";
import vscodeUri from "vscode-uri";
import {createConnection} from 'vscode-languageserver/lib/node/main.js';
import path from 'path';
export function startLanguageServer(webSocket: rpc.IWebSocket) {
const messageReader = new rpc.WebSocketMessageReader(webSocket);
const messageWriter = new rpc.WebSocketMessageWriter(webSocket);
const connection = createConnection(messageReader, messageWriter);
jsonServer.startServer(connection, {
file: getFileService(),
http: getHTTPService(),
configureHttpRequests: requestLight.configure
});
}
function getHTTPService() {
return {
getContent(uri: any) {
const headers = {'Accept-Encoding': 'gzip, deflate'};
return requestLight.xhr({url: uri, followRedirects: 5, headers}).then(response => {
return response.responseText;
}, (error) => {
return Promise.reject(error.responseText || requestLight.getErrorStatusDescription(error.status) || error.toString());
});
}
};
}
function getFileService() {
return {
getContent(location: any) {
return new Promise((resolve, reject) => {
const uri = vscodeUri.URI.parse(location);
fs.readFile(uri.fsPath, 'utf8', (err, data) => {
if (err) {
reject(err);
} else {
resolve(data);
}
});
});
}
};
}
const serverFilePath = fileURLToPath(import.meta.url);
const serverDir = path.dirname(serverFilePath);
process.on('uncaughtException', (err: any) => {
console.error('Uncaught Exception: ', err.toString());
if (err.stack) {
console.error(err.stack);
}
});
const app = express();
app.use(express.static(serverDir));
const server = app.listen(3000);
const webSocketServer = new WebSocketServer({
noServer: true,
perMessageDeflate: false
});
server.on('upgrade', (request: http.IncomingMessage, socket: net.Socket, head: Buffer) => {
const baseURL = `http://${request.headers.host}/`;
const pathname = request.url ? new URL(request.url, baseURL).pathname : undefined;
if (pathname === '/exampleServer') {
webSocketServer.handleUpgrade(request, socket, head, webSocket => {
const socket: rpc.IWebSocket = {
send: content => webSocket.send(content, error => {
if (error) {
throw error;
}
}),
onMessage: cb => webSocket.on('message', cb),
onError: cb => webSocket.on('error', cb),
onClose: cb => webSocket.on('close', cb),
dispose: () => webSocket.close()
};
if (webSocket.readyState === webSocket.OPEN) {
startLanguageServer(socket);
} else {
webSocket.on('open', () => startLanguageServer(socket));
}
});
}
});