@parcel/lsp 2.12.1-dev.3268 → 2.12.1-dev.3275

Sign up to get free protection for your applications and to get access to all the features.
package/lib/LspServer.js CHANGED
@@ -1,13 +1,13 @@
1
- var $ke4eu$path = require("path");
2
- var $ke4eu$fs = require("fs");
3
- var $ke4eu$os = require("os");
4
- var $ke4eu$vscodelanguageservernode = require("vscode-languageserver/node");
5
- var $ke4eu$vscodejsonrpcnode = require("vscode-jsonrpc/node");
6
- var $ke4eu$assert = require("assert");
7
- var $ke4eu$url = require("url");
8
- var $ke4eu$commonpathprefix = require("common-path-prefix");
9
- var $ke4eu$parcelwatcher = require("@parcel/watcher");
10
- var $ke4eu$parcellspprotocol = require("@parcel/lsp-protocol");
1
+ var $dErsr$path = require("path");
2
+ var $dErsr$fs = require("fs");
3
+ var $dErsr$os = require("os");
4
+ var $dErsr$vscodelanguageservernode = require("vscode-languageserver/node");
5
+ var $dErsr$vscodejsonrpcnode = require("vscode-jsonrpc/node");
6
+ var $dErsr$assert = require("assert");
7
+ var $dErsr$url = require("url");
8
+ var $dErsr$commonpathprefix = require("common-path-prefix");
9
+ var $dErsr$parcelwatcher = require("@parcel/watcher");
10
+ var $dErsr$parcellspprotocol = require("@parcel/lsp-protocol");
11
11
 
12
12
 
13
13
 
@@ -19,31 +19,30 @@ var $ke4eu$parcellspprotocol = require("@parcel/lsp-protocol");
19
19
 
20
20
 
21
21
 
22
- const $7c07d6b46fb9c242$var$connection = (0, $ke4eu$vscodelanguageservernode.createConnection)((0, $ke4eu$vscodelanguageservernode.ProposedFeatures).all);
23
- const $7c07d6b46fb9c242$var$WORKSPACE_ROOT = process.cwd();
24
- const $7c07d6b46fb9c242$var$LSP_SENTINEL_FILENAME = "lsp-server";
22
+ const $f3552cb546638c50$var$connection = (0, $dErsr$vscodelanguageservernode.createConnection)((0, $dErsr$vscodelanguageservernode.ProposedFeatures).all);
23
+ const $f3552cb546638c50$var$WORKSPACE_ROOT = process.cwd();
24
+ const $f3552cb546638c50$var$LSP_SENTINEL_FILENAME = 'lsp-server';
25
25
  // Create a simple text document manager.
26
26
  // const documents: TextDocuments<TextDocument> = new TextDocuments(TextDocument);
27
- let $7c07d6b46fb9c242$var$hasConfigurationCapability = false;
28
- let $7c07d6b46fb9c242$var$hasWorkspaceFolderCapability = false;
27
+ let $f3552cb546638c50$var$hasConfigurationCapability = false;
28
+ let $f3552cb546638c50$var$hasWorkspaceFolderCapability = false;
29
29
  // let hasDiagnosticRelatedInformationCapability = false;
30
- let $7c07d6b46fb9c242$var$hasDiagnosticsRefreshSupport = false;
31
- $7c07d6b46fb9c242$var$connection.onInitialize((params)=>{
32
- var _capabilities_workspace_diagnostics, _capabilities_workspace;
30
+ let $f3552cb546638c50$var$hasDiagnosticsRefreshSupport = false;
31
+ $f3552cb546638c50$var$connection.onInitialize((params)=>{
33
32
  const capabilities = params.capabilities;
34
33
  // Does the client support the `workspace/configuration` request?
35
34
  // If not, we fall back using global settings.
36
- $7c07d6b46fb9c242$var$hasConfigurationCapability = !!(capabilities.workspace && !!capabilities.workspace.configuration);
37
- $7c07d6b46fb9c242$var$hasWorkspaceFolderCapability = !!(capabilities.workspace && !!capabilities.workspace.workspaceFolders);
35
+ $f3552cb546638c50$var$hasConfigurationCapability = !!(capabilities.workspace && !!capabilities.workspace.configuration);
36
+ $f3552cb546638c50$var$hasWorkspaceFolderCapability = !!(capabilities.workspace && !!capabilities.workspace.workspaceFolders);
38
37
  // hasDiagnosticRelatedInformationCapability = !!(
39
38
  // capabilities.textDocument &&
40
39
  // capabilities.textDocument.publishDiagnostics &&
41
40
  // capabilities.textDocument.publishDiagnostics.relatedInformation
42
41
  // );
43
- $7c07d6b46fb9c242$var$hasDiagnosticsRefreshSupport = Boolean((_capabilities_workspace = capabilities.workspace) === null || _capabilities_workspace === void 0 ? void 0 : (_capabilities_workspace_diagnostics = _capabilities_workspace.diagnostics) === null || _capabilities_workspace_diagnostics === void 0 ? void 0 : _capabilities_workspace_diagnostics.refreshSupport);
42
+ $f3552cb546638c50$var$hasDiagnosticsRefreshSupport = Boolean(capabilities.workspace?.diagnostics?.refreshSupport);
44
43
  const result = {
45
44
  capabilities: {
46
- textDocumentSync: (0, $ke4eu$vscodelanguageservernode.TextDocumentSyncKind).Incremental,
45
+ textDocumentSync: (0, $dErsr$vscodelanguageservernode.TextDocumentSyncKind).Incremental,
47
46
  // Tell the client that this server supports code completion.
48
47
  diagnosticProvider: {
49
48
  workspaceDiagnostics: false,
@@ -51,31 +50,31 @@ $7c07d6b46fb9c242$var$connection.onInitialize((params)=>{
51
50
  }
52
51
  }
53
52
  };
54
- if ($7c07d6b46fb9c242$var$hasWorkspaceFolderCapability) result.capabilities.workspace = {
53
+ if ($f3552cb546638c50$var$hasWorkspaceFolderCapability) result.capabilities.workspace = {
55
54
  workspaceFolders: {
56
55
  supported: true
57
56
  }
58
57
  };
59
58
  return result;
60
59
  });
61
- $7c07d6b46fb9c242$var$connection.onInitialized(()=>{
62
- if ($7c07d6b46fb9c242$var$hasConfigurationCapability) // Register for all configuration changes.
63
- $7c07d6b46fb9c242$var$connection.client.register((0, $ke4eu$vscodelanguageservernode.DidChangeConfigurationNotification).type, undefined);
64
- if ($7c07d6b46fb9c242$var$hasWorkspaceFolderCapability) $7c07d6b46fb9c242$var$connection.workspace.onDidChangeWorkspaceFolders(()=>{
65
- $7c07d6b46fb9c242$var$connection.console.log("Workspace folder change event received.");
60
+ $f3552cb546638c50$var$connection.onInitialized(()=>{
61
+ if ($f3552cb546638c50$var$hasConfigurationCapability) // Register for all configuration changes.
62
+ $f3552cb546638c50$var$connection.client.register((0, $dErsr$vscodelanguageservernode.DidChangeConfigurationNotification).type, undefined);
63
+ if ($f3552cb546638c50$var$hasWorkspaceFolderCapability) $f3552cb546638c50$var$connection.workspace.onDidChangeWorkspaceFolders(()=>{
64
+ $f3552cb546638c50$var$connection.console.log('Workspace folder change event received.');
66
65
  });
67
66
  });
68
67
  // Proxy
69
- $7c07d6b46fb9c242$var$connection.onRequest((0, $ke4eu$parcellspprotocol.RequestImporters), async (params)=>{
70
- let client = $7c07d6b46fb9c242$var$findClient(params);
68
+ $f3552cb546638c50$var$connection.onRequest((0, $dErsr$parcellspprotocol.RequestImporters), async (params)=>{
69
+ let client = $f3552cb546638c50$var$findClient(params);
71
70
  if (client) {
72
- let result = await client.connection.sendRequest((0, $ke4eu$parcellspprotocol.RequestImporters), params);
71
+ let result = await client.connection.sendRequest((0, $dErsr$parcellspprotocol.RequestImporters), params);
73
72
  return result;
74
73
  }
75
74
  return null;
76
75
  });
77
- $7c07d6b46fb9c242$var$connection.onRequest((0, $ke4eu$vscodelanguageservernode.DocumentDiagnosticRequest).type, async (params)=>{
78
- let client = $7c07d6b46fb9c242$var$findClient(params.textDocument.uri);
76
+ $f3552cb546638c50$var$connection.onRequest((0, $dErsr$vscodelanguageservernode.DocumentDiagnosticRequest).type, async (params)=>{
77
+ let client = $f3552cb546638c50$var$findClient(params.textDocument.uri);
79
78
  let result;
80
79
  if (client) {
81
80
  // console.log(
@@ -84,24 +83,24 @@ $7c07d6b46fb9c242$var$connection.onRequest((0, $ke4eu$vscodelanguageservernode.D
84
83
  // params.previousResultId === client.lastBuild,
85
84
  // );
86
85
  if (params.previousResultId === client.lastBuild) return {
87
- kind: (0, $ke4eu$vscodelanguageservernode.DocumentDiagnosticReportKind).Unchanged,
86
+ kind: (0, $dErsr$vscodelanguageservernode.DocumentDiagnosticReportKind).Unchanged,
88
87
  resultId: client.lastBuild
89
88
  };
90
- result = await client.connection.sendRequest((0, $ke4eu$parcellspprotocol.RequestDocumentDiagnostics), params.textDocument.uri);
89
+ result = await client.connection.sendRequest((0, $dErsr$parcellspprotocol.RequestDocumentDiagnostics), params.textDocument.uri);
91
90
  if (result) client.uris.add(params.textDocument.uri);
92
91
  }
93
92
  return {
94
- kind: (0, $ke4eu$vscodelanguageservernode.DocumentDiagnosticReportKind).Full,
95
- resultId: client === null || client === void 0 ? void 0 : client.lastBuild,
96
- items: result !== null && result !== void 0 ? result : []
93
+ kind: (0, $dErsr$vscodelanguageservernode.DocumentDiagnosticReportKind).Full,
94
+ resultId: client?.lastBuild,
95
+ items: result ?? []
97
96
  };
98
97
  });
99
- $7c07d6b46fb9c242$var$connection.listen();
100
- class $7c07d6b46fb9c242$var$ProgressReporter {
98
+ $f3552cb546638c50$var$connection.listen();
99
+ class $f3552cb546638c50$var$ProgressReporter {
101
100
  begin() {
102
101
  this.progressReporterPromise = (async ()=>{
103
- let reporter = await $7c07d6b46fb9c242$var$connection.window.createWorkDoneProgress();
104
- reporter.begin("Parcel");
102
+ let reporter = await $f3552cb546638c50$var$connection.window.createWorkDoneProgress();
103
+ reporter.begin('Parcel');
105
104
  return reporter;
106
105
  })();
107
106
  this.progressReporterPromise.then((reporter)=>{
@@ -110,7 +109,7 @@ class $7c07d6b46fb9c242$var$ProgressReporter {
110
109
  }
111
110
  async done() {
112
111
  if (this.progressReporterPromise == null) this.begin();
113
- $ke4eu$assert(this.progressReporterPromise != null);
112
+ $dErsr$assert(this.progressReporterPromise != null);
114
113
  (await this.progressReporterPromise).done();
115
114
  this.progressReporterPromise = null;
116
115
  }
@@ -124,108 +123,108 @@ class $7c07d6b46fb9c242$var$ProgressReporter {
124
123
  }
125
124
  }
126
125
  }
127
- function $7c07d6b46fb9c242$var$sendDiagnosticsRefresh() {
128
- if ($7c07d6b46fb9c242$var$hasDiagnosticsRefreshSupport) $7c07d6b46fb9c242$var$connection.sendRequest((0, $ke4eu$vscodelanguageservernode.DiagnosticRefreshRequest).type);
126
+ function $f3552cb546638c50$var$sendDiagnosticsRefresh() {
127
+ if ($f3552cb546638c50$var$hasDiagnosticsRefreshSupport) $f3552cb546638c50$var$connection.sendRequest((0, $dErsr$vscodelanguageservernode.DiagnosticRefreshRequest).type);
129
128
  }
130
- let $7c07d6b46fb9c242$var$progressReporter = new $7c07d6b46fb9c242$var$ProgressReporter();
131
- let $7c07d6b46fb9c242$var$clients = new Map();
132
- function $7c07d6b46fb9c242$var$findClient(document) {
133
- let filepath = $ke4eu$url.fileURLToPath(document);
129
+ let $f3552cb546638c50$var$progressReporter = new $f3552cb546638c50$var$ProgressReporter();
130
+ let $f3552cb546638c50$var$clients = new Map();
131
+ function $f3552cb546638c50$var$findClient(document) {
132
+ let filepath = $dErsr$url.fileURLToPath(document);
134
133
  let longestPrefix = 0;
135
134
  let bestClient;
136
- for (let [, client] of $7c07d6b46fb9c242$var$clients){
137
- let prefix = $ke4eu$commonpathprefix([
135
+ for (let [, client] of $f3552cb546638c50$var$clients){
136
+ let prefix = $dErsr$commonpathprefix([
138
137
  client.projectRoot,
139
138
  filepath
140
139
  ]).length;
141
140
  if (longestPrefix < prefix) {
142
141
  longestPrefix = prefix;
143
142
  bestClient = client;
144
- } else if (longestPrefix === prefix) console.warn("Ambiguous client for " + filepath);
143
+ } else if (longestPrefix === prefix) console.warn('Ambiguous client for ' + filepath);
145
144
  }
146
145
  return bestClient;
147
146
  }
148
- function $7c07d6b46fb9c242$var$loadMetafile(filepath) {
149
- const file = $ke4eu$fs.readFileSync(filepath, "utf-8");
147
+ function $f3552cb546638c50$var$loadMetafile(filepath) {
148
+ const file = $dErsr$fs.readFileSync(filepath, 'utf-8');
150
149
  return JSON.parse(file);
151
150
  }
152
- function $7c07d6b46fb9c242$var$createClient(metafilepath, metafile) {
151
+ function $f3552cb546638c50$var$createClient(metafilepath, metafile) {
153
152
  let socketfilepath = metafilepath.slice(0, -5);
154
- let [reader, writer] = (0, $ke4eu$vscodejsonrpcnode.createServerPipeTransport)(socketfilepath);
155
- let client = (0, $ke4eu$vscodejsonrpcnode.createMessageConnection)(reader, writer);
153
+ let [reader, writer] = (0, $dErsr$vscodejsonrpcnode.createServerPipeTransport)(socketfilepath);
154
+ let client = (0, $dErsr$vscodejsonrpcnode.createMessageConnection)(reader, writer);
156
155
  client.listen();
157
156
  let uris = new Set();
158
157
  let result = {
159
158
  connection: client,
160
159
  uris: uris,
161
160
  projectRoot: metafile.projectRoot,
162
- lastBuild: "0"
161
+ lastBuild: '0'
163
162
  };
164
- client.onNotification((0, $ke4eu$parcellspprotocol.NotificationBuildStatus), (state, message)=>{
163
+ client.onNotification((0, $dErsr$parcellspprotocol.NotificationBuildStatus), (state, message)=>{
165
164
  // console.log('got NotificationBuildStatus', state, message);
166
- if (state === "start") {
167
- $7c07d6b46fb9c242$var$progressReporter.begin();
168
- for (let uri of uris)$7c07d6b46fb9c242$var$connection.sendDiagnostics({
165
+ if (state === 'start') {
166
+ $f3552cb546638c50$var$progressReporter.begin();
167
+ for (let uri of uris)$f3552cb546638c50$var$connection.sendDiagnostics({
169
168
  uri: uri,
170
169
  diagnostics: []
171
170
  });
172
- } else if (state === "progress" && message != null) $7c07d6b46fb9c242$var$progressReporter.report(message);
173
- else if (state === "end") {
171
+ } else if (state === 'progress' && message != null) $f3552cb546638c50$var$progressReporter.report(message);
172
+ else if (state === 'end') {
174
173
  result.lastBuild = String(Date.now());
175
- $7c07d6b46fb9c242$var$sendDiagnosticsRefresh();
176
- $7c07d6b46fb9c242$var$progressReporter.done();
177
- $7c07d6b46fb9c242$var$connection.sendNotification((0, $ke4eu$parcellspprotocol.NotificationBuild));
174
+ $f3552cb546638c50$var$sendDiagnosticsRefresh();
175
+ $f3552cb546638c50$var$progressReporter.done();
176
+ $f3552cb546638c50$var$connection.sendNotification((0, $dErsr$parcellspprotocol.NotificationBuild));
178
177
  }
179
178
  });
180
- client.onNotification((0, $ke4eu$parcellspprotocol.NotificationWorkspaceDiagnostics), (diagnostics)=>{
179
+ client.onNotification((0, $dErsr$parcellspprotocol.NotificationWorkspaceDiagnostics), (diagnostics)=>{
181
180
  // console.log('got NotificationWorkspaceDiagnostics', diagnostics);
182
181
  for (let d of diagnostics){
183
182
  uris.add(d.uri);
184
- $7c07d6b46fb9c242$var$connection.sendDiagnostics(d);
183
+ $f3552cb546638c50$var$connection.sendDiagnostics(d);
185
184
  }
186
185
  });
187
186
  client.onClose(()=>{
188
- $7c07d6b46fb9c242$var$clients.delete(JSON.stringify(metafile));
189
- $7c07d6b46fb9c242$var$sendDiagnosticsRefresh();
187
+ $f3552cb546638c50$var$clients.delete(JSON.stringify(metafile));
188
+ $f3552cb546638c50$var$sendDiagnosticsRefresh();
190
189
  return Promise.all([
191
190
  ...uris
192
- ].map((uri)=>$7c07d6b46fb9c242$var$connection.sendDiagnostics({
191
+ ].map((uri)=>$f3552cb546638c50$var$connection.sendDiagnostics({
193
192
  uri: uri,
194
193
  diagnostics: []
195
194
  })));
196
195
  });
197
- $7c07d6b46fb9c242$var$sendDiagnosticsRefresh();
198
- $7c07d6b46fb9c242$var$clients.set(JSON.stringify(metafile), result);
196
+ $f3552cb546638c50$var$sendDiagnosticsRefresh();
197
+ $f3552cb546638c50$var$clients.set(JSON.stringify(metafile), result);
199
198
  }
200
199
  // Take realpath because to have consistent cache keys on macOS (/var -> /private/var)
201
- const $7c07d6b46fb9c242$var$BASEDIR = $ke4eu$path.join($ke4eu$fs.realpathSync($ke4eu$os.tmpdir()), "parcel-lsp");
202
- $ke4eu$fs.mkdirSync($7c07d6b46fb9c242$var$BASEDIR, {
200
+ const $f3552cb546638c50$var$BASEDIR = $dErsr$path.join($dErsr$fs.realpathSync($dErsr$os.tmpdir()), 'parcel-lsp');
201
+ $dErsr$fs.mkdirSync($f3552cb546638c50$var$BASEDIR, {
203
202
  recursive: true
204
203
  });
205
- $ke4eu$fs.writeFileSync($ke4eu$path.join($7c07d6b46fb9c242$var$BASEDIR, $7c07d6b46fb9c242$var$LSP_SENTINEL_FILENAME), "");
204
+ $dErsr$fs.writeFileSync($dErsr$path.join($f3552cb546638c50$var$BASEDIR, $f3552cb546638c50$var$LSP_SENTINEL_FILENAME), '');
206
205
  // Search for currently running Parcel processes in the parcel-lsp dir.
207
206
  // Create an IPC client connection for each running process.
208
- for (let filename of $ke4eu$fs.readdirSync($7c07d6b46fb9c242$var$BASEDIR)){
209
- if (!filename.endsWith(".json")) continue;
210
- let filepath = $ke4eu$path.join($7c07d6b46fb9c242$var$BASEDIR, filename);
211
- const contents = $7c07d6b46fb9c242$var$loadMetafile(filepath);
207
+ for (let filename of $dErsr$fs.readdirSync($f3552cb546638c50$var$BASEDIR)){
208
+ if (!filename.endsWith('.json')) continue;
209
+ let filepath = $dErsr$path.join($f3552cb546638c50$var$BASEDIR, filename);
210
+ const contents = $f3552cb546638c50$var$loadMetafile(filepath);
212
211
  const { projectRoot: projectRoot } = contents;
213
- if ($7c07d6b46fb9c242$var$WORKSPACE_ROOT === projectRoot) $7c07d6b46fb9c242$var$createClient(filepath, contents);
212
+ if ($f3552cb546638c50$var$WORKSPACE_ROOT === projectRoot) $f3552cb546638c50$var$createClient(filepath, contents);
214
213
  }
215
214
  // Watch for new Parcel processes in the parcel-lsp dir, and disconnect the
216
215
  // client for each corresponding connection when a Parcel process ends
217
- $ke4eu$parcelwatcher.subscribe($7c07d6b46fb9c242$var$BASEDIR, async (err, events)=>{
216
+ $dErsr$parcelwatcher.subscribe($f3552cb546638c50$var$BASEDIR, async (err, events)=>{
218
217
  if (err) throw err;
219
218
  for (let event of events){
220
- if (event.type === "create" && event.path.endsWith(".json")) {
221
- const contents = $7c07d6b46fb9c242$var$loadMetafile(event.path);
219
+ if (event.type === 'create' && event.path.endsWith('.json')) {
220
+ const contents = $f3552cb546638c50$var$loadMetafile(event.path);
222
221
  const { projectRoot: projectRoot } = contents;
223
- if ($7c07d6b46fb9c242$var$WORKSPACE_ROOT === projectRoot) $7c07d6b46fb9c242$var$createClient(event.path, contents);
224
- } else if (event.type === "delete" && event.path.endsWith(".json")) {
225
- let existing = $7c07d6b46fb9c242$var$clients.get(event.path);
226
- console.log("existing", event.path, existing);
222
+ if ($f3552cb546638c50$var$WORKSPACE_ROOT === projectRoot) $f3552cb546638c50$var$createClient(event.path, contents);
223
+ } else if (event.type === 'delete' && event.path.endsWith('.json')) {
224
+ let existing = $f3552cb546638c50$var$clients.get(event.path);
225
+ console.log('existing', event.path, existing);
227
226
  if (existing) {
228
- $7c07d6b46fb9c242$var$clients.delete(event.path);
227
+ $f3552cb546638c50$var$clients.delete(event.path);
229
228
  existing.connection.end();
230
229
  }
231
230
  }
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/utils/parcel-lsp/src/LspServer.ts"],"sourcesContent":["import * as path from 'path';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport {\n createConnection,\n DiagnosticRefreshRequest,\n DidChangeConfigurationNotification,\n DocumentDiagnosticParams,\n DocumentDiagnosticReport,\n DocumentDiagnosticReportKind,\n DocumentDiagnosticRequest,\n DocumentUri,\n InitializeParams,\n InitializeResult,\n ProposedFeatures,\n TextDocumentSyncKind,\n WorkDoneProgressServerReporter,\n} from 'vscode-languageserver/node';\n\nimport {\n createServerPipeTransport,\n createMessageConnection,\n MessageConnection,\n} from 'vscode-jsonrpc/node';\nimport * as invariant from 'assert';\nimport * as url from 'url';\nimport commonPathPrefix = require('common-path-prefix');\n\n// import {TextDocument} from 'vscode-languageserver-textdocument';\nimport * as watcher from '@parcel/watcher';\nimport {\n NotificationBuild,\n NotificationBuildStatus,\n NotificationWorkspaceDiagnostics,\n RequestDocumentDiagnostics,\n RequestImporters,\n} from '@parcel/lsp-protocol';\n\ntype Metafile = {\n projectRoot: string;\n pid: typeof process['pid'];\n argv: typeof process['argv'];\n};\n\nconst connection = createConnection(ProposedFeatures.all);\nconst WORKSPACE_ROOT = process.cwd();\nconst LSP_SENTINEL_FILENAME = 'lsp-server';\n// Create a simple text document manager.\n// const documents: TextDocuments<TextDocument> = new TextDocuments(TextDocument);\n\nlet hasConfigurationCapability = false;\nlet hasWorkspaceFolderCapability = false;\n// let hasDiagnosticRelatedInformationCapability = false;\nlet hasDiagnosticsRefreshSupport = false;\n\nconnection.onInitialize((params: InitializeParams) => {\n const capabilities = params.capabilities;\n\n // Does the client support the `workspace/configuration` request?\n // If not, we fall back using global settings.\n hasConfigurationCapability = !!(\n capabilities.workspace && !!capabilities.workspace.configuration\n );\n hasWorkspaceFolderCapability = !!(\n capabilities.workspace && !!capabilities.workspace.workspaceFolders\n );\n // hasDiagnosticRelatedInformationCapability = !!(\n // capabilities.textDocument &&\n // capabilities.textDocument.publishDiagnostics &&\n // capabilities.textDocument.publishDiagnostics.relatedInformation\n // );\n hasDiagnosticsRefreshSupport = Boolean(\n capabilities.workspace?.diagnostics?.refreshSupport,\n );\n\n const result: InitializeResult = {\n capabilities: {\n textDocumentSync: TextDocumentSyncKind.Incremental,\n // Tell the client that this server supports code completion.\n diagnosticProvider: {\n workspaceDiagnostics: false,\n interFileDependencies: true,\n },\n },\n };\n\n if (hasWorkspaceFolderCapability) {\n result.capabilities.workspace = {\n workspaceFolders: {\n supported: true,\n },\n };\n }\n return result;\n});\n\nconnection.onInitialized(() => {\n if (hasConfigurationCapability) {\n // Register for all configuration changes.\n connection.client.register(\n DidChangeConfigurationNotification.type,\n undefined,\n );\n }\n if (hasWorkspaceFolderCapability) {\n connection.workspace.onDidChangeWorkspaceFolders(_event => {\n connection.console.log('Workspace folder change event received.');\n });\n }\n});\n\n// Proxy\nconnection.onRequest(RequestImporters, async params => {\n let client = findClient(params);\n if (client) {\n let result = await client.connection.sendRequest(RequestImporters, params);\n return result;\n }\n return null;\n});\n\nconnection.onRequest(\n DocumentDiagnosticRequest.type,\n async (\n params: DocumentDiagnosticParams,\n ): Promise<DocumentDiagnosticReport> => {\n let client = findClient(params.textDocument.uri);\n let result;\n if (client) {\n // console.log(\n // 'DocumentDiagnosticRequest',\n // params.textDocument.uri,\n // params.previousResultId === client.lastBuild,\n // );\n\n if (params.previousResultId === client.lastBuild) {\n return {\n kind: DocumentDiagnosticReportKind.Unchanged,\n resultId: client.lastBuild,\n };\n }\n\n result = await client.connection.sendRequest(\n RequestDocumentDiagnostics,\n params.textDocument.uri,\n );\n\n if (result) {\n client.uris.add(params.textDocument.uri);\n }\n }\n\n return {\n kind: DocumentDiagnosticReportKind.Full,\n resultId: client?.lastBuild,\n items: result ?? [],\n };\n },\n);\n\nconnection.listen();\n\nclass ProgressReporter {\n progressReporterPromise?: Promise<WorkDoneProgressServerReporter> | null;\n lastMessage?: string;\n begin() {\n this.progressReporterPromise = (async () => {\n let reporter = await connection.window.createWorkDoneProgress();\n reporter.begin('Parcel');\n return reporter;\n })();\n this.progressReporterPromise.then(reporter => {\n if (this.lastMessage != null) {\n reporter.report(this.lastMessage);\n }\n });\n }\n async done() {\n if (this.progressReporterPromise == null) {\n this.begin();\n }\n invariant(this.progressReporterPromise != null);\n (await this.progressReporterPromise).done();\n this.progressReporterPromise = null;\n }\n async report(message: string) {\n if (this.progressReporterPromise == null) {\n this.lastMessage = message;\n this.begin();\n } else {\n let r = await this.progressReporterPromise;\n r.report(message);\n }\n }\n}\n\nfunction sendDiagnosticsRefresh() {\n if (hasDiagnosticsRefreshSupport) {\n connection.sendRequest(DiagnosticRefreshRequest.type);\n }\n}\n\ntype Client = {\n connection: MessageConnection;\n projectRoot: string;\n uris: Set<DocumentUri>;\n lastBuild: string;\n};\n\nlet progressReporter = new ProgressReporter();\nlet clients: Map<string, Client> = new Map();\n\nfunction findClient(document: DocumentUri): Client | undefined {\n let filepath = url.fileURLToPath(document);\n\n let longestPrefix = 0;\n let bestClient;\n for (let [, client] of clients) {\n let prefix = commonPathPrefix([client.projectRoot, filepath]).length;\n if (longestPrefix < prefix) {\n longestPrefix = prefix;\n bestClient = client;\n } else if (longestPrefix === prefix) {\n console.warn('Ambiguous client for ' + filepath);\n }\n }\n return bestClient;\n}\n\nfunction loadMetafile(filepath: string) {\n const file = fs.readFileSync(filepath, 'utf-8');\n return JSON.parse(file);\n}\n\nfunction createClient(metafilepath: string, metafile: Metafile) {\n let socketfilepath = metafilepath.slice(0, -5);\n let [reader, writer] = createServerPipeTransport(socketfilepath);\n let client = createMessageConnection(reader, writer);\n client.listen();\n\n let uris = new Set<DocumentUri>();\n\n let result = {\n connection: client,\n uris,\n projectRoot: metafile.projectRoot,\n lastBuild: '0',\n };\n\n client.onNotification(NotificationBuildStatus, (state, message) => {\n // console.log('got NotificationBuildStatus', state, message);\n if (state === 'start') {\n progressReporter.begin();\n for (let uri of uris) {\n connection.sendDiagnostics({uri, diagnostics: []});\n }\n } else if (state === 'progress' && message != null) {\n progressReporter.report(message);\n } else if (state === 'end') {\n result.lastBuild = String(Date.now());\n sendDiagnosticsRefresh();\n progressReporter.done();\n connection.sendNotification(NotificationBuild);\n }\n });\n\n client.onNotification(NotificationWorkspaceDiagnostics, diagnostics => {\n // console.log('got NotificationWorkspaceDiagnostics', diagnostics);\n for (let d of diagnostics) {\n uris.add(d.uri);\n connection.sendDiagnostics(d);\n }\n });\n\n client.onClose(() => {\n clients.delete(JSON.stringify(metafile));\n sendDiagnosticsRefresh();\n return Promise.all(\n [...uris].map(uri => connection.sendDiagnostics({uri, diagnostics: []})),\n );\n });\n\n sendDiagnosticsRefresh();\n clients.set(JSON.stringify(metafile), result);\n}\n\n// Take realpath because to have consistent cache keys on macOS (/var -> /private/var)\nconst BASEDIR = path.join(fs.realpathSync(os.tmpdir()), 'parcel-lsp');\nfs.mkdirSync(BASEDIR, {recursive: true});\n\nfs.writeFileSync(path.join(BASEDIR, LSP_SENTINEL_FILENAME), '');\n\n// Search for currently running Parcel processes in the parcel-lsp dir.\n// Create an IPC client connection for each running process.\nfor (let filename of fs.readdirSync(BASEDIR)) {\n if (!filename.endsWith('.json')) continue;\n let filepath = path.join(BASEDIR, filename);\n const contents = loadMetafile(filepath);\n const {projectRoot} = contents;\n\n if (WORKSPACE_ROOT === projectRoot) {\n createClient(filepath, contents);\n }\n}\n\n// Watch for new Parcel processes in the parcel-lsp dir, and disconnect the\n// client for each corresponding connection when a Parcel process ends\nwatcher.subscribe(BASEDIR, async (err, events) => {\n if (err) {\n throw err;\n }\n\n for (let event of events) {\n if (event.type === 'create' && event.path.endsWith('.json')) {\n const contents = loadMetafile(event.path);\n const {projectRoot} = contents;\n\n if (WORKSPACE_ROOT === projectRoot) {\n createClient(event.path, contents);\n }\n } else if (event.type === 'delete' && event.path.endsWith('.json')) {\n let existing = clients.get(event.path);\n console.log('existing', event.path, existing);\n if (existing) {\n clients.delete(event.path);\n existing.connection.end();\n }\n }\n }\n});\n"],"names":["path","fs","os","createConnection","DiagnosticRefreshRequest","DidChangeConfigurationNotification","DocumentDiagnosticParams","DocumentDiagnosticReport","DocumentDiagnosticReportKind","DocumentDiagnosticRequest","DocumentUri","InitializeParams","InitializeResult","ProposedFeatures","TextDocumentSyncKind","WorkDoneProgressServerReporter","createServerPipeTransport","createMessageConnection","MessageConnection","invariant","url","commonPathPrefix","watcher","NotificationBuild","NotificationBuildStatus","NotificationWorkspaceDiagnostics","RequestDocumentDiagnostics","RequestImporters","Metafile","projectRoot","pid","process","argv","connection","all","WORKSPACE_ROOT","cwd","LSP_SENTINEL_FILENAME","hasConfigurationCapability","hasWorkspaceFolderCapability","hasDiagnosticsRefreshSupport","onInitialize","params","capabilities","workspace","configuration","workspaceFolders","Boolean","diagnostics","refreshSupport","result","textDocumentSync","Incremental","diagnosticProvider","workspaceDiagnostics","interFileDependencies","supported","onInitialized","client","register","type","undefined","onDidChangeWorkspaceFolders","console","log","onRequest","findClient","sendRequest","Promise","textDocument","uri","previousResultId","lastBuild","kind","Unchanged","resultId","uris","add","Full","items","listen","ProgressReporter","begin","progressReporterPromise","reporter","window","createWorkDoneProgress","then","lastMessage","report","done","message","r","sendDiagnosticsRefresh","Client","Set","progressReporter","clients","Map","document","filepath","fileURLToPath","longestPrefix","bestClient","prefix","length","warn","loadMetafile","file","readFileSync","JSON","parse","createClient","metafilepath","metafile","socketfilepath","slice","reader","writer","onNotification","state","sendDiagnostics","String","Date","now","sendNotification","d","onClose","delete","stringify","map","set","BASEDIR","join","realpathSync","tmpdir","mkdirSync","recursive","writeFileSync","filename","readdirSync","endsWith","contents","subscribe","err","events","event","existing","get","end"],"version":3,"file":"LspServer.js.map","sourceRoot":"../../../../"}
1
+ {"mappings":"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","sources":["packages/utils/parcel-lsp/src/LspServer.ts"],"sourcesContent":["import * as path from 'path';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport {\n createConnection,\n DiagnosticRefreshRequest,\n DidChangeConfigurationNotification,\n DocumentDiagnosticParams,\n DocumentDiagnosticReport,\n DocumentDiagnosticReportKind,\n DocumentDiagnosticRequest,\n DocumentUri,\n InitializeParams,\n InitializeResult,\n ProposedFeatures,\n TextDocumentSyncKind,\n WorkDoneProgressServerReporter,\n} from 'vscode-languageserver/node';\n\nimport {\n createServerPipeTransport,\n createMessageConnection,\n MessageConnection,\n} from 'vscode-jsonrpc/node';\nimport * as invariant from 'assert';\nimport * as url from 'url';\nimport commonPathPrefix = require('common-path-prefix');\n\n// import {TextDocument} from 'vscode-languageserver-textdocument';\nimport * as watcher from '@parcel/watcher';\nimport {\n NotificationBuild,\n NotificationBuildStatus,\n NotificationWorkspaceDiagnostics,\n RequestDocumentDiagnostics,\n RequestImporters,\n} from '@parcel/lsp-protocol';\n\ntype Metafile = {\n projectRoot: string;\n pid: typeof process['pid'];\n argv: typeof process['argv'];\n};\n\nconst connection = createConnection(ProposedFeatures.all);\nconst WORKSPACE_ROOT = process.cwd();\nconst LSP_SENTINEL_FILENAME = 'lsp-server';\n// Create a simple text document manager.\n// const documents: TextDocuments<TextDocument> = new TextDocuments(TextDocument);\n\nlet hasConfigurationCapability = false;\nlet hasWorkspaceFolderCapability = false;\n// let hasDiagnosticRelatedInformationCapability = false;\nlet hasDiagnosticsRefreshSupport = false;\n\nconnection.onInitialize((params: InitializeParams) => {\n const capabilities = params.capabilities;\n\n // Does the client support the `workspace/configuration` request?\n // If not, we fall back using global settings.\n hasConfigurationCapability = !!(\n capabilities.workspace && !!capabilities.workspace.configuration\n );\n hasWorkspaceFolderCapability = !!(\n capabilities.workspace && !!capabilities.workspace.workspaceFolders\n );\n // hasDiagnosticRelatedInformationCapability = !!(\n // capabilities.textDocument &&\n // capabilities.textDocument.publishDiagnostics &&\n // capabilities.textDocument.publishDiagnostics.relatedInformation\n // );\n hasDiagnosticsRefreshSupport = Boolean(\n capabilities.workspace?.diagnostics?.refreshSupport,\n );\n\n const result: InitializeResult = {\n capabilities: {\n textDocumentSync: TextDocumentSyncKind.Incremental,\n // Tell the client that this server supports code completion.\n diagnosticProvider: {\n workspaceDiagnostics: false,\n interFileDependencies: true,\n },\n },\n };\n\n if (hasWorkspaceFolderCapability) {\n result.capabilities.workspace = {\n workspaceFolders: {\n supported: true,\n },\n };\n }\n return result;\n});\n\nconnection.onInitialized(() => {\n if (hasConfigurationCapability) {\n // Register for all configuration changes.\n connection.client.register(\n DidChangeConfigurationNotification.type,\n undefined,\n );\n }\n if (hasWorkspaceFolderCapability) {\n connection.workspace.onDidChangeWorkspaceFolders(_event => {\n connection.console.log('Workspace folder change event received.');\n });\n }\n});\n\n// Proxy\nconnection.onRequest(RequestImporters, async params => {\n let client = findClient(params);\n if (client) {\n let result = await client.connection.sendRequest(RequestImporters, params);\n return result;\n }\n return null;\n});\n\nconnection.onRequest(\n DocumentDiagnosticRequest.type,\n async (\n params: DocumentDiagnosticParams,\n ): Promise<DocumentDiagnosticReport> => {\n let client = findClient(params.textDocument.uri);\n let result;\n if (client) {\n // console.log(\n // 'DocumentDiagnosticRequest',\n // params.textDocument.uri,\n // params.previousResultId === client.lastBuild,\n // );\n\n if (params.previousResultId === client.lastBuild) {\n return {\n kind: DocumentDiagnosticReportKind.Unchanged,\n resultId: client.lastBuild,\n };\n }\n\n result = await client.connection.sendRequest(\n RequestDocumentDiagnostics,\n params.textDocument.uri,\n );\n\n if (result) {\n client.uris.add(params.textDocument.uri);\n }\n }\n\n return {\n kind: DocumentDiagnosticReportKind.Full,\n resultId: client?.lastBuild,\n items: result ?? [],\n };\n },\n);\n\nconnection.listen();\n\nclass ProgressReporter {\n progressReporterPromise?: Promise<WorkDoneProgressServerReporter> | null;\n lastMessage?: string;\n begin() {\n this.progressReporterPromise = (async () => {\n let reporter = await connection.window.createWorkDoneProgress();\n reporter.begin('Parcel');\n return reporter;\n })();\n this.progressReporterPromise.then(reporter => {\n if (this.lastMessage != null) {\n reporter.report(this.lastMessage);\n }\n });\n }\n async done() {\n if (this.progressReporterPromise == null) {\n this.begin();\n }\n invariant(this.progressReporterPromise != null);\n (await this.progressReporterPromise).done();\n this.progressReporterPromise = null;\n }\n async report(message: string) {\n if (this.progressReporterPromise == null) {\n this.lastMessage = message;\n this.begin();\n } else {\n let r = await this.progressReporterPromise;\n r.report(message);\n }\n }\n}\n\nfunction sendDiagnosticsRefresh() {\n if (hasDiagnosticsRefreshSupport) {\n connection.sendRequest(DiagnosticRefreshRequest.type);\n }\n}\n\ntype Client = {\n connection: MessageConnection;\n projectRoot: string;\n uris: Set<DocumentUri>;\n lastBuild: string;\n};\n\nlet progressReporter = new ProgressReporter();\nlet clients: Map<string, Client> = new Map();\n\nfunction findClient(document: DocumentUri): Client | undefined {\n let filepath = url.fileURLToPath(document);\n\n let longestPrefix = 0;\n let bestClient;\n for (let [, client] of clients) {\n let prefix = commonPathPrefix([client.projectRoot, filepath]).length;\n if (longestPrefix < prefix) {\n longestPrefix = prefix;\n bestClient = client;\n } else if (longestPrefix === prefix) {\n console.warn('Ambiguous client for ' + filepath);\n }\n }\n return bestClient;\n}\n\nfunction loadMetafile(filepath: string) {\n const file = fs.readFileSync(filepath, 'utf-8');\n return JSON.parse(file);\n}\n\nfunction createClient(metafilepath: string, metafile: Metafile) {\n let socketfilepath = metafilepath.slice(0, -5);\n let [reader, writer] = createServerPipeTransport(socketfilepath);\n let client = createMessageConnection(reader, writer);\n client.listen();\n\n let uris = new Set<DocumentUri>();\n\n let result = {\n connection: client,\n uris,\n projectRoot: metafile.projectRoot,\n lastBuild: '0',\n };\n\n client.onNotification(NotificationBuildStatus, (state, message) => {\n // console.log('got NotificationBuildStatus', state, message);\n if (state === 'start') {\n progressReporter.begin();\n for (let uri of uris) {\n connection.sendDiagnostics({uri, diagnostics: []});\n }\n } else if (state === 'progress' && message != null) {\n progressReporter.report(message);\n } else if (state === 'end') {\n result.lastBuild = String(Date.now());\n sendDiagnosticsRefresh();\n progressReporter.done();\n connection.sendNotification(NotificationBuild);\n }\n });\n\n client.onNotification(NotificationWorkspaceDiagnostics, diagnostics => {\n // console.log('got NotificationWorkspaceDiagnostics', diagnostics);\n for (let d of diagnostics) {\n uris.add(d.uri);\n connection.sendDiagnostics(d);\n }\n });\n\n client.onClose(() => {\n clients.delete(JSON.stringify(metafile));\n sendDiagnosticsRefresh();\n return Promise.all(\n [...uris].map(uri => connection.sendDiagnostics({uri, diagnostics: []})),\n );\n });\n\n sendDiagnosticsRefresh();\n clients.set(JSON.stringify(metafile), result);\n}\n\n// Take realpath because to have consistent cache keys on macOS (/var -> /private/var)\nconst BASEDIR = path.join(fs.realpathSync(os.tmpdir()), 'parcel-lsp');\nfs.mkdirSync(BASEDIR, {recursive: true});\n\nfs.writeFileSync(path.join(BASEDIR, LSP_SENTINEL_FILENAME), '');\n\n// Search for currently running Parcel processes in the parcel-lsp dir.\n// Create an IPC client connection for each running process.\nfor (let filename of fs.readdirSync(BASEDIR)) {\n if (!filename.endsWith('.json')) continue;\n let filepath = path.join(BASEDIR, filename);\n const contents = loadMetafile(filepath);\n const {projectRoot} = contents;\n\n if (WORKSPACE_ROOT === projectRoot) {\n createClient(filepath, contents);\n }\n}\n\n// Watch for new Parcel processes in the parcel-lsp dir, and disconnect the\n// client for each corresponding connection when a Parcel process ends\nwatcher.subscribe(BASEDIR, async (err, events) => {\n if (err) {\n throw err;\n }\n\n for (let event of events) {\n if (event.type === 'create' && event.path.endsWith('.json')) {\n const contents = loadMetafile(event.path);\n const {projectRoot} = contents;\n\n if (WORKSPACE_ROOT === projectRoot) {\n createClient(event.path, contents);\n }\n } else if (event.type === 'delete' && event.path.endsWith('.json')) {\n let existing = clients.get(event.path);\n console.log('existing', event.path, existing);\n if (existing) {\n clients.delete(event.path);\n existing.connection.end();\n }\n }\n }\n});\n"],"names":["path","fs","os","createConnection","DiagnosticRefreshRequest","DidChangeConfigurationNotification","DocumentDiagnosticParams","DocumentDiagnosticReport","DocumentDiagnosticReportKind","DocumentDiagnosticRequest","DocumentUri","InitializeParams","InitializeResult","ProposedFeatures","TextDocumentSyncKind","WorkDoneProgressServerReporter","createServerPipeTransport","createMessageConnection","MessageConnection","invariant","url","commonPathPrefix","watcher","NotificationBuild","NotificationBuildStatus","NotificationWorkspaceDiagnostics","RequestDocumentDiagnostics","RequestImporters","Metafile","projectRoot","pid","process","argv","connection","all","WORKSPACE_ROOT","cwd","LSP_SENTINEL_FILENAME","hasConfigurationCapability","hasWorkspaceFolderCapability","hasDiagnosticsRefreshSupport","onInitialize","params","capabilities","workspace","configuration","workspaceFolders","Boolean","diagnostics","refreshSupport","result","textDocumentSync","Incremental","diagnosticProvider","workspaceDiagnostics","interFileDependencies","supported","onInitialized","client","register","type","undefined","onDidChangeWorkspaceFolders","console","log","onRequest","findClient","sendRequest","Promise","textDocument","uri","previousResultId","lastBuild","kind","Unchanged","resultId","uris","add","Full","items","listen","ProgressReporter","begin","progressReporterPromise","reporter","window","createWorkDoneProgress","then","lastMessage","report","done","message","r","sendDiagnosticsRefresh","Client","Set","progressReporter","clients","Map","document","filepath","fileURLToPath","longestPrefix","bestClient","prefix","length","warn","loadMetafile","file","readFileSync","JSON","parse","createClient","metafilepath","metafile","socketfilepath","slice","reader","writer","onNotification","state","sendDiagnostics","String","Date","now","sendNotification","d","onClose","delete","stringify","map","set","BASEDIR","join","realpathSync","tmpdir","mkdirSync","recursive","writeFileSync","filename","readdirSync","endsWith","contents","subscribe","err","events","event","existing","get","end"],"version":3,"file":"LspServer.js.map","sourceRoot":"../../../../"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parcel/lsp",
3
- "version": "2.12.1-dev.3268+10d19ff8a",
3
+ "version": "2.12.1-dev.3275+8b017703f",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -21,11 +21,11 @@
21
21
  "lint": "eslint src --ext ts"
22
22
  },
23
23
  "engines": {
24
- "node": ">= 12.0.0",
25
- "parcel": "^2.0.0-dev.1429+10d19ff8a"
24
+ "node": ">= 16.0.0",
25
+ "parcel": "^2.0.0-dev.1650+8b017703f"
26
26
  },
27
27
  "dependencies": {
28
- "@parcel/lsp-protocol": "2.12.1-dev.3268+10d19ff8a",
28
+ "@parcel/lsp-protocol": "2.12.1-dev.3275+8b017703f",
29
29
  "@parcel/watcher": "^2.0.7",
30
30
  "common-path-prefix": "^3.0.0",
31
31
  "nullthrows": "^1.1.1",
@@ -44,5 +44,5 @@
44
44
  "targets": {
45
45
  "types": false
46
46
  },
47
- "gitHead": "10d19ff8a34dd8f479847aadf9865be48a8fad84"
47
+ "gitHead": "8b017703fdf4a90a643ce0190cdd7482060dc86b"
48
48
  }