UNPKG

graphql-language-service-server

Version:
170 lines 8.11 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const net = __importStar(require("net")); const MessageProcessor_1 = require("./MessageProcessor"); const vscode_jsonrpc_1 = require("vscode-jsonrpc"); const vscode_languageserver_1 = require("vscode-languageserver"); const Logger_1 = require("./Logger"); const parseDocument_1 = require("./parseDocument"); const buildOptions = (options) => { const serverOptions = { ...options }; if (serverOptions.loadConfigOptions) { const { extensions } = serverOptions.loadConfigOptions; if (!serverOptions.loadConfigOptions.rootDir) { if (serverOptions.configDir) { serverOptions.loadConfigOptions.rootDir = serverOptions.configDir; } else { serverOptions.loadConfigOptions.rootDir = process.cwd(); } } if (serverOptions.extensions) { serverOptions.loadConfigOptions.extensions = [ ...serverOptions.extensions, ...(extensions || []), ]; } } else { serverOptions.loadConfigOptions = { rootDir: options.configDir || process.cwd(), extensions: [], }; } return serverOptions; }; async function startServer(options) { if (options && options.method) { const stderrOnly = options.method === 'stream'; const logger = new Logger_1.Logger(options.tmpDir, stderrOnly); const finalOptions = buildOptions(options); let reader; let writer; switch (options.method) { case 'socket': if (!options.port) { process.stderr.write('--port is required to establish socket connection.'); process.exit(1); } const port = options.port; const hostname = options.hostname; const socket = net .createServer(client => { client.setEncoding('utf8'); reader = new vscode_jsonrpc_1.SocketMessageReader(client); writer = new vscode_jsonrpc_1.SocketMessageWriter(client); client.on('end', () => { socket.close(); process.exit(0); }); return initializeHandlers({ reader, writer, logger, options: finalOptions, }).then(s => { s.listen(); }); }) .listen(port, hostname); return; case 'stream': reader = new vscode_jsonrpc_1.StreamMessageReader(process.stdin); writer = new vscode_jsonrpc_1.StreamMessageWriter(process.stdout); break; case 'node': default: reader = new vscode_jsonrpc_1.IPCMessageReader(process); writer = new vscode_jsonrpc_1.IPCMessageWriter(process); break; } try { const serverWithHandlers = await initializeHandlers({ reader, writer, logger, options: finalOptions, }); serverWithHandlers.listen(); } catch (err) { logger.error('There was a Graphql LSP handler exception:'); logger.error(err); } } } exports.default = startServer; async function initializeHandlers({ reader, writer, logger, options, }) { try { const connection = vscode_languageserver_1.createConnection(reader, writer); await addHandlers({ connection, logger, ...options }); return connection; } catch (err) { logger.error('There was an error initializing the server connection'); logger.error(err); process.exit(1); } } function reportDiagnostics(diagnostics, connection) { if (diagnostics) { connection.sendNotification(vscode_languageserver_1.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 || parseDocument_1.DEFAULT_SUPPORTED_EXTENSIONS, graphqlFileExtensions: graphqlFileExtensions || parseDocument_1.DEFAULT_SUPPORTED_GRAPHQL_EXTENSIONS, tmpDir, loadConfigOptions, connection, }); connection.onNotification(vscode_languageserver_1.DidOpenTextDocumentNotification.type, async (params) => { const diagnostics = await messageProcessor.handleDidOpenOrSaveNotification(params); reportDiagnostics(diagnostics, connection); }); connection.onNotification(vscode_languageserver_1.DidSaveTextDocumentNotification.type, async (params) => { const diagnostics = await messageProcessor.handleDidOpenOrSaveNotification(params); reportDiagnostics(diagnostics, connection); }); connection.onNotification(vscode_languageserver_1.DidChangeTextDocumentNotification.type, async (params) => { const diagnostics = await messageProcessor.handleDidChangeNotification(params); reportDiagnostics(diagnostics, connection); }); connection.onNotification(vscode_languageserver_1.DidCloseTextDocumentNotification.type, params => messageProcessor.handleDidCloseNotification(params)); connection.onRequest(vscode_languageserver_1.ShutdownRequest.type, () => messageProcessor.handleShutdownRequest()); connection.onNotification(vscode_languageserver_1.ExitNotification.type, () => messageProcessor.handleExitNotification()); connection.onNotification('$/cancelRequest', () => ({})); connection.onRequest(vscode_languageserver_1.InitializeRequest.type, (params, token) => messageProcessor.handleInitializeRequest(params, token, loadConfigOptions.rootDir)); connection.onRequest(vscode_languageserver_1.CompletionRequest.type, params => messageProcessor.handleCompletionRequest(params)); connection.onRequest(vscode_languageserver_1.CompletionResolveRequest.type, item => item); connection.onRequest(vscode_languageserver_1.DefinitionRequest.type, params => messageProcessor.handleDefinitionRequest(params)); connection.onRequest(vscode_languageserver_1.HoverRequest.type, params => messageProcessor.handleHoverRequest(params)); connection.onNotification(vscode_languageserver_1.DidChangeWatchedFilesNotification.type, params => messageProcessor.handleWatchedFilesChangedNotification(params)); connection.onRequest(vscode_languageserver_1.DocumentSymbolRequest.type, params => messageProcessor.handleDocumentSymbolRequest(params)); connection.onRequest(vscode_languageserver_1.WorkspaceSymbolRequest.type, params => messageProcessor.handleWorkspaceSymbolRequest(params)); connection.onDidChangeConfiguration(messageProcessor.handleDidChangeConfiguration); } //# sourceMappingURL=startServer.js.map