@parcel/lsp 2.10.3-nightly.3057 → 2.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/LspServer.js CHANGED
@@ -1,13 +1,13 @@
1
- var $lrShx$path = require("path");
2
- var $lrShx$fs = require("fs");
3
- var $lrShx$os = require("os");
4
- var $lrShx$vscodelanguageservernode = require("vscode-languageserver/node");
5
- var $lrShx$vscodejsonrpcnode = require("vscode-jsonrpc/node");
6
- var $lrShx$assert = require("assert");
7
- var $lrShx$url = require("url");
8
- var $lrShx$commonpathprefix = require("common-path-prefix");
9
- var $lrShx$parcelwatcher = require("@parcel/watcher");
10
- var $lrShx$parcellspprotocol = require("@parcel/lsp-protocol");
1
+ var $8r3lh$path = require("path");
2
+ var $8r3lh$fs = require("fs");
3
+ var $8r3lh$os = require("os");
4
+ var $8r3lh$vscodelanguageservernode = require("vscode-languageserver/node");
5
+ var $8r3lh$vscodejsonrpcnode = require("vscode-jsonrpc/node");
6
+ var $8r3lh$assert = require("assert");
7
+ var $8r3lh$url = require("url");
8
+ var $8r3lh$commonpathprefix = require("common-path-prefix");
9
+ var $8r3lh$parcelwatcher = require("@parcel/watcher");
10
+ var $8r3lh$parcellspprotocol = require("@parcel/lsp-protocol");
11
11
 
12
12
 
13
13
 
@@ -19,31 +19,31 @@ var $lrShx$parcellspprotocol = require("@parcel/lsp-protocol");
19
19
 
20
20
 
21
21
 
22
- const $890838d905529d04$var$connection = (0, $lrShx$vscodelanguageservernode.createConnection)((0, $lrShx$vscodelanguageservernode.ProposedFeatures).all);
23
- const $890838d905529d04$var$WORKSPACE_ROOT = process.cwd();
24
- const $890838d905529d04$var$LSP_SENTINEL_FILENAME = "lsp-server";
22
+ const $5a533ad6dc5d1736$var$connection = (0, $8r3lh$vscodelanguageservernode.createConnection)((0, $8r3lh$vscodelanguageservernode.ProposedFeatures).all);
23
+ const $5a533ad6dc5d1736$var$WORKSPACE_ROOT = process.cwd();
24
+ const $5a533ad6dc5d1736$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 $890838d905529d04$var$hasConfigurationCapability = false;
28
- let $890838d905529d04$var$hasWorkspaceFolderCapability = false;
27
+ let $5a533ad6dc5d1736$var$hasConfigurationCapability = false;
28
+ let $5a533ad6dc5d1736$var$hasWorkspaceFolderCapability = false;
29
29
  // let hasDiagnosticRelatedInformationCapability = false;
30
- let $890838d905529d04$var$hasDiagnosticsRefreshSupport = false;
31
- $890838d905529d04$var$connection.onInitialize((params)=>{
30
+ let $5a533ad6dc5d1736$var$hasDiagnosticsRefreshSupport = false;
31
+ $5a533ad6dc5d1736$var$connection.onInitialize((params)=>{
32
32
  var _capabilities_workspace_diagnostics, _capabilities_workspace;
33
33
  const capabilities = params.capabilities;
34
34
  // Does the client support the `workspace/configuration` request?
35
35
  // If not, we fall back using global settings.
36
- $890838d905529d04$var$hasConfigurationCapability = !!(capabilities.workspace && !!capabilities.workspace.configuration);
37
- $890838d905529d04$var$hasWorkspaceFolderCapability = !!(capabilities.workspace && !!capabilities.workspace.workspaceFolders);
36
+ $5a533ad6dc5d1736$var$hasConfigurationCapability = !!(capabilities.workspace && !!capabilities.workspace.configuration);
37
+ $5a533ad6dc5d1736$var$hasWorkspaceFolderCapability = !!(capabilities.workspace && !!capabilities.workspace.workspaceFolders);
38
38
  // hasDiagnosticRelatedInformationCapability = !!(
39
39
  // capabilities.textDocument &&
40
40
  // capabilities.textDocument.publishDiagnostics &&
41
41
  // capabilities.textDocument.publishDiagnostics.relatedInformation
42
42
  // );
43
- $890838d905529d04$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);
43
+ $5a533ad6dc5d1736$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);
44
44
  const result = {
45
45
  capabilities: {
46
- textDocumentSync: (0, $lrShx$vscodelanguageservernode.TextDocumentSyncKind).Incremental,
46
+ textDocumentSync: (0, $8r3lh$vscodelanguageservernode.TextDocumentSyncKind).Incremental,
47
47
  // Tell the client that this server supports code completion.
48
48
  diagnosticProvider: {
49
49
  workspaceDiagnostics: false,
@@ -51,31 +51,31 @@ $890838d905529d04$var$connection.onInitialize((params)=>{
51
51
  }
52
52
  }
53
53
  };
54
- if ($890838d905529d04$var$hasWorkspaceFolderCapability) result.capabilities.workspace = {
54
+ if ($5a533ad6dc5d1736$var$hasWorkspaceFolderCapability) result.capabilities.workspace = {
55
55
  workspaceFolders: {
56
56
  supported: true
57
57
  }
58
58
  };
59
59
  return result;
60
60
  });
61
- $890838d905529d04$var$connection.onInitialized(()=>{
62
- if ($890838d905529d04$var$hasConfigurationCapability) // Register for all configuration changes.
63
- $890838d905529d04$var$connection.client.register((0, $lrShx$vscodelanguageservernode.DidChangeConfigurationNotification).type, undefined);
64
- if ($890838d905529d04$var$hasWorkspaceFolderCapability) $890838d905529d04$var$connection.workspace.onDidChangeWorkspaceFolders(()=>{
65
- $890838d905529d04$var$connection.console.log("Workspace folder change event received.");
61
+ $5a533ad6dc5d1736$var$connection.onInitialized(()=>{
62
+ if ($5a533ad6dc5d1736$var$hasConfigurationCapability) // Register for all configuration changes.
63
+ $5a533ad6dc5d1736$var$connection.client.register((0, $8r3lh$vscodelanguageservernode.DidChangeConfigurationNotification).type, undefined);
64
+ if ($5a533ad6dc5d1736$var$hasWorkspaceFolderCapability) $5a533ad6dc5d1736$var$connection.workspace.onDidChangeWorkspaceFolders(()=>{
65
+ $5a533ad6dc5d1736$var$connection.console.log("Workspace folder change event received.");
66
66
  });
67
67
  });
68
68
  // Proxy
69
- $890838d905529d04$var$connection.onRequest((0, $lrShx$parcellspprotocol.RequestImporters), async (params)=>{
70
- let client = $890838d905529d04$var$findClient(params);
69
+ $5a533ad6dc5d1736$var$connection.onRequest((0, $8r3lh$parcellspprotocol.RequestImporters), async (params)=>{
70
+ let client = $5a533ad6dc5d1736$var$findClient(params);
71
71
  if (client) {
72
- let result = await client.connection.sendRequest((0, $lrShx$parcellspprotocol.RequestImporters), params);
72
+ let result = await client.connection.sendRequest((0, $8r3lh$parcellspprotocol.RequestImporters), params);
73
73
  return result;
74
74
  }
75
75
  return null;
76
76
  });
77
- $890838d905529d04$var$connection.onRequest((0, $lrShx$vscodelanguageservernode.DocumentDiagnosticRequest).type, async (params)=>{
78
- let client = $890838d905529d04$var$findClient(params.textDocument.uri);
77
+ $5a533ad6dc5d1736$var$connection.onRequest((0, $8r3lh$vscodelanguageservernode.DocumentDiagnosticRequest).type, async (params)=>{
78
+ let client = $5a533ad6dc5d1736$var$findClient(params.textDocument.uri);
79
79
  let result;
80
80
  if (client) {
81
81
  // console.log(
@@ -84,23 +84,23 @@ $890838d905529d04$var$connection.onRequest((0, $lrShx$vscodelanguageservernode.D
84
84
  // params.previousResultId === client.lastBuild,
85
85
  // );
86
86
  if (params.previousResultId === client.lastBuild) return {
87
- kind: (0, $lrShx$vscodelanguageservernode.DocumentDiagnosticReportKind).Unchanged,
87
+ kind: (0, $8r3lh$vscodelanguageservernode.DocumentDiagnosticReportKind).Unchanged,
88
88
  resultId: client.lastBuild
89
89
  };
90
- result = await client.connection.sendRequest((0, $lrShx$parcellspprotocol.RequestDocumentDiagnostics), params.textDocument.uri);
90
+ result = await client.connection.sendRequest((0, $8r3lh$parcellspprotocol.RequestDocumentDiagnostics), params.textDocument.uri);
91
91
  if (result) client.uris.add(params.textDocument.uri);
92
92
  }
93
93
  return {
94
- kind: (0, $lrShx$vscodelanguageservernode.DocumentDiagnosticReportKind).Full,
94
+ kind: (0, $8r3lh$vscodelanguageservernode.DocumentDiagnosticReportKind).Full,
95
95
  resultId: client === null || client === void 0 ? void 0 : client.lastBuild,
96
96
  items: result !== null && result !== void 0 ? result : []
97
97
  };
98
98
  });
99
- $890838d905529d04$var$connection.listen();
100
- class $890838d905529d04$var$ProgressReporter {
99
+ $5a533ad6dc5d1736$var$connection.listen();
100
+ class $5a533ad6dc5d1736$var$ProgressReporter {
101
101
  begin() {
102
102
  this.progressReporterPromise = (async ()=>{
103
- let reporter = await $890838d905529d04$var$connection.window.createWorkDoneProgress();
103
+ let reporter = await $5a533ad6dc5d1736$var$connection.window.createWorkDoneProgress();
104
104
  reporter.begin("Parcel");
105
105
  return reporter;
106
106
  })();
@@ -110,7 +110,7 @@ class $890838d905529d04$var$ProgressReporter {
110
110
  }
111
111
  async done() {
112
112
  if (this.progressReporterPromise == null) this.begin();
113
- $lrShx$assert(this.progressReporterPromise != null);
113
+ $8r3lh$assert(this.progressReporterPromise != null);
114
114
  (await this.progressReporterPromise).done();
115
115
  this.progressReporterPromise = null;
116
116
  }
@@ -124,17 +124,17 @@ class $890838d905529d04$var$ProgressReporter {
124
124
  }
125
125
  }
126
126
  }
127
- function $890838d905529d04$var$sendDiagnosticsRefresh() {
128
- if ($890838d905529d04$var$hasDiagnosticsRefreshSupport) $890838d905529d04$var$connection.sendRequest((0, $lrShx$vscodelanguageservernode.DiagnosticRefreshRequest).type);
127
+ function $5a533ad6dc5d1736$var$sendDiagnosticsRefresh() {
128
+ if ($5a533ad6dc5d1736$var$hasDiagnosticsRefreshSupport) $5a533ad6dc5d1736$var$connection.sendRequest((0, $8r3lh$vscodelanguageservernode.DiagnosticRefreshRequest).type);
129
129
  }
130
- let $890838d905529d04$var$progressReporter = new $890838d905529d04$var$ProgressReporter();
131
- let $890838d905529d04$var$clients = new Map();
132
- function $890838d905529d04$var$findClient(document) {
133
- let filepath = $lrShx$url.fileURLToPath(document);
130
+ let $5a533ad6dc5d1736$var$progressReporter = new $5a533ad6dc5d1736$var$ProgressReporter();
131
+ let $5a533ad6dc5d1736$var$clients = new Map();
132
+ function $5a533ad6dc5d1736$var$findClient(document) {
133
+ let filepath = $8r3lh$url.fileURLToPath(document);
134
134
  let longestPrefix = 0;
135
135
  let bestClient;
136
- for (let [, client] of $890838d905529d04$var$clients){
137
- let prefix = $lrShx$commonpathprefix([
136
+ for (let [, client] of $5a533ad6dc5d1736$var$clients){
137
+ let prefix = $8r3lh$commonpathprefix([
138
138
  client.projectRoot,
139
139
  filepath
140
140
  ]).length;
@@ -145,14 +145,14 @@ function $890838d905529d04$var$findClient(document) {
145
145
  }
146
146
  return bestClient;
147
147
  }
148
- function $890838d905529d04$var$parseMetafile(filepath) {
149
- const file = $lrShx$fs.readFileSync(filepath, "utf-8");
148
+ function $5a533ad6dc5d1736$var$loadMetafile(filepath) {
149
+ const file = $8r3lh$fs.readFileSync(filepath, "utf-8");
150
150
  return JSON.parse(file);
151
151
  }
152
- function $890838d905529d04$var$createClient(metafilepath, metafile) {
152
+ function $5a533ad6dc5d1736$var$createClient(metafilepath, metafile) {
153
153
  let socketfilepath = metafilepath.slice(0, -5);
154
- let [reader, writer] = (0, $lrShx$vscodejsonrpcnode.createServerPipeTransport)(socketfilepath);
155
- let client = (0, $lrShx$vscodejsonrpcnode.createMessageConnection)(reader, writer);
154
+ let [reader, writer] = (0, $8r3lh$vscodejsonrpcnode.createServerPipeTransport)(socketfilepath);
155
+ let client = (0, $8r3lh$vscodejsonrpcnode.createMessageConnection)(reader, writer);
156
156
  client.listen();
157
157
  let uris = new Set();
158
158
  let result = {
@@ -161,72 +161,71 @@ function $890838d905529d04$var$createClient(metafilepath, metafile) {
161
161
  projectRoot: metafile.projectRoot,
162
162
  lastBuild: "0"
163
163
  };
164
- client.onNotification((0, $lrShx$parcellspprotocol.NotificationBuildStatus), (state, message)=>{
164
+ client.onNotification((0, $8r3lh$parcellspprotocol.NotificationBuildStatus), (state, message)=>{
165
165
  // console.log('got NotificationBuildStatus', state, message);
166
166
  if (state === "start") {
167
- $890838d905529d04$var$progressReporter.begin();
168
- for (let uri of uris)$890838d905529d04$var$connection.sendDiagnostics({
167
+ $5a533ad6dc5d1736$var$progressReporter.begin();
168
+ for (let uri of uris)$5a533ad6dc5d1736$var$connection.sendDiagnostics({
169
169
  uri: uri,
170
170
  diagnostics: []
171
171
  });
172
- } else if (state === "progress" && message != null) $890838d905529d04$var$progressReporter.report(message);
172
+ } else if (state === "progress" && message != null) $5a533ad6dc5d1736$var$progressReporter.report(message);
173
173
  else if (state === "end") {
174
174
  result.lastBuild = String(Date.now());
175
- $890838d905529d04$var$sendDiagnosticsRefresh();
176
- $890838d905529d04$var$progressReporter.done();
177
- $890838d905529d04$var$connection.sendNotification((0, $lrShx$parcellspprotocol.NotificationBuild));
175
+ $5a533ad6dc5d1736$var$sendDiagnosticsRefresh();
176
+ $5a533ad6dc5d1736$var$progressReporter.done();
177
+ $5a533ad6dc5d1736$var$connection.sendNotification((0, $8r3lh$parcellspprotocol.NotificationBuild));
178
178
  }
179
179
  });
180
- client.onNotification((0, $lrShx$parcellspprotocol.NotificationWorkspaceDiagnostics), (diagnostics)=>{
180
+ client.onNotification((0, $8r3lh$parcellspprotocol.NotificationWorkspaceDiagnostics), (diagnostics)=>{
181
181
  // console.log('got NotificationWorkspaceDiagnostics', diagnostics);
182
182
  for (let d of diagnostics){
183
183
  uris.add(d.uri);
184
- $890838d905529d04$var$connection.sendDiagnostics(d);
184
+ $5a533ad6dc5d1736$var$connection.sendDiagnostics(d);
185
185
  }
186
186
  });
187
187
  client.onClose(()=>{
188
- $890838d905529d04$var$clients.delete(JSON.stringify(metafile));
189
- $890838d905529d04$var$sendDiagnosticsRefresh();
188
+ $5a533ad6dc5d1736$var$clients.delete(JSON.stringify(metafile));
189
+ $5a533ad6dc5d1736$var$sendDiagnosticsRefresh();
190
190
  return Promise.all([
191
191
  ...uris
192
- ].map((uri)=>$890838d905529d04$var$connection.sendDiagnostics({
192
+ ].map((uri)=>$5a533ad6dc5d1736$var$connection.sendDiagnostics({
193
193
  uri: uri,
194
194
  diagnostics: []
195
195
  })));
196
196
  });
197
- $890838d905529d04$var$sendDiagnosticsRefresh();
198
- $890838d905529d04$var$clients.set(JSON.stringify(metafile), result);
197
+ $5a533ad6dc5d1736$var$sendDiagnosticsRefresh();
198
+ $5a533ad6dc5d1736$var$clients.set(JSON.stringify(metafile), result);
199
199
  }
200
200
  // Take realpath because to have consistent cache keys on macOS (/var -> /private/var)
201
- const $890838d905529d04$var$BASEDIR = $lrShx$path.join($lrShx$fs.realpathSync($lrShx$os.tmpdir()), "parcel-lsp");
202
- $lrShx$fs.mkdirSync($890838d905529d04$var$BASEDIR, {
201
+ const $5a533ad6dc5d1736$var$BASEDIR = $8r3lh$path.join($8r3lh$fs.realpathSync($8r3lh$os.tmpdir()), "parcel-lsp");
202
+ $8r3lh$fs.mkdirSync($5a533ad6dc5d1736$var$BASEDIR, {
203
203
  recursive: true
204
204
  });
205
- $lrShx$fs.writeFileSync($lrShx$path.join($890838d905529d04$var$BASEDIR, $890838d905529d04$var$LSP_SENTINEL_FILENAME), "");
205
+ $8r3lh$fs.writeFileSync($8r3lh$path.join($5a533ad6dc5d1736$var$BASEDIR, $5a533ad6dc5d1736$var$LSP_SENTINEL_FILENAME), "");
206
206
  // Search for currently running Parcel processes in the parcel-lsp dir.
207
207
  // Create an IPC client connection for each running process.
208
- for (let filename of $lrShx$fs.readdirSync($890838d905529d04$var$BASEDIR)){
208
+ for (let filename of $8r3lh$fs.readdirSync($5a533ad6dc5d1736$var$BASEDIR)){
209
209
  if (!filename.endsWith(".json")) continue;
210
- let filepath = $lrShx$path.join($890838d905529d04$var$BASEDIR, filename);
211
- const contents = $890838d905529d04$var$parseMetafile(filepath);
210
+ let filepath = $8r3lh$path.join($5a533ad6dc5d1736$var$BASEDIR, filename);
211
+ const contents = $5a533ad6dc5d1736$var$loadMetafile(filepath);
212
212
  const { projectRoot: projectRoot } = contents;
213
- if ($890838d905529d04$var$WORKSPACE_ROOT === projectRoot) $890838d905529d04$var$createClient(filepath, contents);
213
+ if ($5a533ad6dc5d1736$var$WORKSPACE_ROOT === projectRoot) $5a533ad6dc5d1736$var$createClient(filepath, contents);
214
214
  }
215
215
  // Watch for new Parcel processes in the parcel-lsp dir, and disconnect the
216
216
  // client for each corresponding connection when a Parcel process ends
217
- $lrShx$parcelwatcher.subscribe($890838d905529d04$var$BASEDIR, async (err, events)=>{
217
+ $8r3lh$parcelwatcher.subscribe($5a533ad6dc5d1736$var$BASEDIR, async (err, events)=>{
218
218
  if (err) throw err;
219
219
  for (let event of events){
220
220
  if (event.type === "create" && event.path.endsWith(".json")) {
221
- const file = $lrShx$fs.readFileSync(event.path, "utf-8");
222
- const contents = $890838d905529d04$var$parseMetafile(file);
221
+ const contents = $5a533ad6dc5d1736$var$loadMetafile(event.path);
223
222
  const { projectRoot: projectRoot } = contents;
224
- if ($890838d905529d04$var$WORKSPACE_ROOT === projectRoot) $890838d905529d04$var$createClient(event.path, contents);
223
+ if ($5a533ad6dc5d1736$var$WORKSPACE_ROOT === projectRoot) $5a533ad6dc5d1736$var$createClient(event.path, contents);
225
224
  } else if (event.type === "delete" && event.path.endsWith(".json")) {
226
- let existing = $890838d905529d04$var$clients.get(event.path);
225
+ let existing = $5a533ad6dc5d1736$var$clients.get(event.path);
227
226
  console.log("existing", event.path, existing);
228
227
  if (existing) {
229
- $890838d905529d04$var$clients.delete(event.path);
228
+ $5a533ad6dc5d1736$var$clients.delete(event.path);
230
229
  existing.connection.end();
231
230
  }
232
231
  }
@@ -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 parseMetafile(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 = parseMetafile(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 file = fs.readFileSync(event.path, 'utf-8');\n const contents = parseMetafile(file);\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","parseMetafile","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.10.3-nightly.3057+c88116a49",
3
+ "version": "2.10.3",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -22,10 +22,10 @@
22
22
  },
23
23
  "engines": {
24
24
  "node": ">= 12.0.0",
25
- "parcel": "2.0.0-nightly.1432+c88116a49"
25
+ "parcel": "^2.10.3"
26
26
  },
27
27
  "dependencies": {
28
- "@parcel/lsp-protocol": "2.10.3-nightly.3057+c88116a49",
28
+ "@parcel/lsp-protocol": "2.10.3",
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": "c88116a49fd423ebf0823b4a4aca84a55cad4308"
47
+ "gitHead": "65d42a955db665a04817fa9be55df16f588593d4"
48
48
  }
package/src/LspServer.ts CHANGED
@@ -227,7 +227,7 @@ function findClient(document: DocumentUri): Client | undefined {
227
227
  return bestClient;
228
228
  }
229
229
 
230
- function parseMetafile(filepath: string) {
230
+ function loadMetafile(filepath: string) {
231
231
  const file = fs.readFileSync(filepath, 'utf-8');
232
232
  return JSON.parse(file);
233
233
  }
@@ -295,7 +295,7 @@ fs.writeFileSync(path.join(BASEDIR, LSP_SENTINEL_FILENAME), '');
295
295
  for (let filename of fs.readdirSync(BASEDIR)) {
296
296
  if (!filename.endsWith('.json')) continue;
297
297
  let filepath = path.join(BASEDIR, filename);
298
- const contents = parseMetafile(filepath);
298
+ const contents = loadMetafile(filepath);
299
299
  const {projectRoot} = contents;
300
300
 
301
301
  if (WORKSPACE_ROOT === projectRoot) {
@@ -312,8 +312,7 @@ watcher.subscribe(BASEDIR, async (err, events) => {
312
312
 
313
313
  for (let event of events) {
314
314
  if (event.type === 'create' && event.path.endsWith('.json')) {
315
- const file = fs.readFileSync(event.path, 'utf-8');
316
- const contents = parseMetafile(file);
315
+ const contents = loadMetafile(event.path);
317
316
  const {projectRoot} = contents;
318
317
 
319
318
  if (WORKSPACE_ROOT === projectRoot) {