UNPKG

graphql-language-service-server

Version:
125 lines 6.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addHandlers = exports.initializeHandlers = exports.buildOptions = void 0; const MessageProcessor_1 = require("./MessageProcessor"); const node_1 = require("vscode-jsonrpc/node"); const node_2 = require("vscode-languageserver/node"); const Logger_1 = require("./Logger"); const constants_1 = require("./constants"); const node_net_1 = require("node:net"); const buildOptions = (options) => { const serverOptions = { ...options }; if (serverOptions.loadConfigOptions) { const { extensions, rootDir } = serverOptions.loadConfigOptions; if (extensions) { serverOptions.loadConfigOptions.extensions = extensions; } if (!rootDir) { if (serverOptions.configDir) { serverOptions.loadConfigOptions.rootDir = serverOptions.configDir; } else { serverOptions.loadConfigOptions.rootDir = process.cwd(); } } } else { serverOptions.loadConfigOptions = { rootDir: options.configDir || process.cwd(), extensions: serverOptions.extensions || [], }; } return serverOptions; }; exports.buildOptions = buildOptions; async function startServer(options) { const finalOptions = (0, exports.buildOptions)({ method: 'node', ...options }); let reader; let writer; switch (finalOptions.method) { case 'socket': if (!finalOptions.port) { process.stderr.write('--port is required to establish socket connection.'); process.exit(1); } const { port, hostname, encoding } = finalOptions; const socket = (0, node_net_1.createConnection)(port, hostname !== null && hostname !== void 0 ? hostname : '127.0.01'); reader = new node_1.SocketMessageReader(socket, encoding !== null && encoding !== void 0 ? encoding : 'utf-8'); writer = new node_1.SocketMessageWriter(socket, encoding !== null && encoding !== void 0 ? encoding : 'utf-8'); break; case 'stream': reader = new node_1.StreamMessageReader(process.stdin); writer = new node_1.StreamMessageWriter(process.stdout); break; default: reader = new node_1.IPCMessageReader(process); writer = new node_1.IPCMessageWriter(process); break; } const streamServer = await initializeHandlers({ reader, writer, options: finalOptions, }); streamServer.listen(); return streamServer; } exports.default = startServer; async function initializeHandlers({ reader, writer, options, }) { const connection = (0, node_2.createConnection)(reader, writer); const logger = new Logger_1.Logger(connection, options.debug); try { await addHandlers({ connection, logger, ...options }); return connection; } catch (err) { logger.error('There was an error initializing the server connection'); logger.error(String(err)); process.exit(1); } } exports.initializeHandlers = initializeHandlers; function reportDiagnostics(diagnostics, connection) { if (diagnostics) { void connection.sendNotification(node_2.PublishDiagnosticsNotification.type, diagnostics); } } async function addHandlers({ connection, logger, config, parser, fileExtensions, graphqlFileExtensions, tmpDir, loadConfigOptions, }) { const messageProcessor = new MessageProcessor_1.MessageProcessor({ logger, config, parser, fileExtensions: fileExtensions || constants_1.DEFAULT_SUPPORTED_EXTENSIONS, graphqlFileExtensions: graphqlFileExtensions || constants_1.DEFAULT_SUPPORTED_GRAPHQL_EXTENSIONS, tmpDir, loadConfigOptions, connection, }); connection.onNotification(node_2.DidOpenTextDocumentNotification.type, async (params) => { const diagnostics = await messageProcessor.handleDidOpenOrSaveNotification(params); reportDiagnostics(diagnostics, connection); }); connection.onNotification(node_2.DidSaveTextDocumentNotification.type, async (params) => { const diagnostics = await messageProcessor.handleDidOpenOrSaveNotification(params); reportDiagnostics(diagnostics, connection); }); connection.onNotification(node_2.DidChangeTextDocumentNotification.type, async (params) => { const diagnostics = await messageProcessor.handleDidChangeNotification(params); reportDiagnostics(diagnostics, connection); }); connection.onNotification(node_2.DidCloseTextDocumentNotification.type, messageProcessor.handleDidCloseNotification); connection.onRequest(node_2.ShutdownRequest.type, () => messageProcessor.handleShutdownRequest()); connection.onNotification(node_2.ExitNotification.type, () => messageProcessor.handleExitNotification()); connection.onNotification('$/cancelRequest', () => ({})); connection.onRequest(node_2.InitializeRequest.type, (params, token) => messageProcessor.handleInitializeRequest(params, token, loadConfigOptions.rootDir)); connection.onRequest(node_2.CompletionRequest.type, params => messageProcessor.handleCompletionRequest(params)); connection.onRequest(node_2.CompletionResolveRequest.type, item => item); connection.onRequest(node_2.DefinitionRequest.type, params => messageProcessor.handleDefinitionRequest(params)); connection.onRequest(node_2.HoverRequest.type, params => messageProcessor.handleHoverRequest(params)); connection.onNotification(node_2.DidChangeWatchedFilesNotification.type, params => messageProcessor.handleWatchedFilesChangedNotification(params)); connection.onRequest(node_2.DocumentSymbolRequest.type, params => messageProcessor.handleDocumentSymbolRequest(params)); connection.onRequest(node_2.WorkspaceSymbolRequest.type, params => messageProcessor.handleWorkspaceSymbolRequest(params)); connection.onNotification(node_2.DidChangeConfigurationNotification.type, params => messageProcessor.handleDidChangeConfiguration(params)); } exports.addHandlers = addHandlers; //# sourceMappingURL=startServer.js.map