@aws/lsp-codewhisperer 0.0.35 → 0.0.36
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/CHANGELOG.md +44 -0
- package/out/client/token/bearer-token-service.json +91 -225
- package/out/language-server/agenticChat/agenticChatController.js +7 -0
- package/out/language-server/agenticChat/agenticChatController.js.map +1 -1
- package/out/language-server/agenticChat/context/agenticChatTriggerContext.js +1 -1
- package/out/language-server/agenticChat/context/agenticChatTriggerContext.js.map +1 -1
- package/out/language-server/agenticChat/tools/listDirectory.js +5 -5
- package/out/language-server/agenticChat/tools/listDirectory.js.map +1 -1
- package/out/language-server/chat/chatController.js +1 -1
- package/out/language-server/chat/chatController.js.map +1 -1
- package/out/language-server/chat/chatSessionService.d.ts +5 -0
- package/out/language-server/chat/chatSessionService.js +4 -1
- package/out/language-server/chat/chatSessionService.js.map +1 -1
- package/out/language-server/chat/constants.d.ts +2 -0
- package/out/language-server/chat/constants.js +14 -1
- package/out/language-server/chat/constants.js.map +1 -1
- package/out/language-server/chat/contexts/triggerContext.d.ts +3 -1
- package/out/language-server/chat/contexts/triggerContext.js +14 -1
- package/out/language-server/chat/contexts/triggerContext.js.map +1 -1
- package/out/language-server/configuration/qConfigurationServer.d.ts +8 -1
- package/out/language-server/configuration/qConfigurationServer.js +107 -8
- package/out/language-server/configuration/qConfigurationServer.js.map +1 -1
- package/out/language-server/inline-completion/codeWhispererServer.js +15 -2
- package/out/language-server/inline-completion/codeWhispererServer.js.map +1 -1
- package/out/language-server/netTransform/resources/SupportedProjects.js +1 -7
- package/out/language-server/netTransform/resources/SupportedProjects.js.map +1 -1
- package/out/language-server/workspaceContext/artifactManager.d.ts +44 -0
- package/out/language-server/workspaceContext/artifactManager.js +496 -0
- package/out/language-server/workspaceContext/artifactManager.js.map +1 -0
- package/out/language-server/workspaceContext/client.d.ts +23 -0
- package/out/language-server/workspaceContext/client.js +172 -0
- package/out/language-server/workspaceContext/client.js.map +1 -0
- package/out/language-server/workspaceContext/dependency/dependencyDiscoverer.d.ts +15 -0
- package/out/language-server/workspaceContext/dependency/dependencyDiscoverer.js +129 -0
- package/out/language-server/workspaceContext/dependency/dependencyDiscoverer.js.map +1 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/JSTSDependencyHandler.d.ts +18 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/JSTSDependencyHandler.js +204 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/JSTSDependencyHandler.js.map +1 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/JavaDependencyHandler.d.ts +16 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/JavaDependencyHandler.js +160 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/JavaDependencyHandler.js.map +1 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandler.d.ts +78 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandler.js +255 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandler.js.map +1 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandlerFactory.d.ts +7 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandlerFactory.js +23 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandlerFactory.js.map +1 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/PythonDependencyHandler.d.ts +46 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/PythonDependencyHandler.js +233 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/PythonDependencyHandler.js.map +1 -0
- package/out/language-server/workspaceContext/javaManager.d.ts +92 -0
- package/out/language-server/workspaceContext/javaManager.js +710 -0
- package/out/language-server/workspaceContext/javaManager.js.map +1 -0
- package/out/language-server/workspaceContext/util.d.ts +10 -0
- package/out/language-server/workspaceContext/util.js +72 -0
- package/out/language-server/workspaceContext/util.js.map +1 -0
- package/out/language-server/workspaceContext/workspaceContextServer.d.ts +2 -0
- package/out/language-server/workspaceContext/workspaceContextServer.js +414 -0
- package/out/language-server/workspaceContext/workspaceContextServer.js.map +1 -0
- package/out/language-server/workspaceContext/workspaceFolderManager.d.ts +113 -0
- package/out/language-server/workspaceContext/workspaceFolderManager.js +827 -0
- package/out/language-server/workspaceContext/workspaceFolderManager.js.map +1 -0
- package/out/shared/amazonQServiceManager/qDeveloperProfiles.js.map +1 -1
- package/out/shared/codeWhispererService.d.ts +13 -0
- package/out/shared/codeWhispererService.js +24 -0
- package/out/shared/codeWhispererService.js.map +1 -1
- package/out/shared/languageDetection.d.ts +27 -0
- package/out/shared/languageDetection.js +44 -1
- package/out/shared/languageDetection.js.map +1 -1
- package/out/shared/localProjectContextController.d.ts +1 -0
- package/out/shared/localProjectContextController.js +6 -8
- package/out/shared/localProjectContextController.js.map +1 -1
- package/out/shared/proxy-server.d.ts +1 -0
- package/out/shared/proxy-server.js +3 -1
- package/out/shared/proxy-server.js.map +1 -1
- package/out/shared/supplementalContextUtil/crossFileContextUtil.d.ts +4 -3
- package/out/shared/supplementalContextUtil/crossFileContextUtil.js +16 -5
- package/out/shared/supplementalContextUtil/crossFileContextUtil.js.map +1 -1
- package/out/shared/supplementalContextUtil/supplementalContextUtil.d.ts +2 -1
- package/out/shared/supplementalContextUtil/supplementalContextUtil.js +2 -2
- package/out/shared/supplementalContextUtil/supplementalContextUtil.js.map +1 -1
- package/package.json +9 -3
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebSocketClient = void 0;
|
|
4
|
+
const ws_1 = require("ws");
|
|
5
|
+
class WebSocketClient {
|
|
6
|
+
ws = null;
|
|
7
|
+
logging;
|
|
8
|
+
credentialsProvider;
|
|
9
|
+
url;
|
|
10
|
+
reconnectAttempts = 0;
|
|
11
|
+
maxReconnectAttempts = 5;
|
|
12
|
+
messageQueue = [];
|
|
13
|
+
messageThrottleDelay = 100;
|
|
14
|
+
constructor(url, logging, credentialsProvider) {
|
|
15
|
+
this.url = url;
|
|
16
|
+
this.logging = logging;
|
|
17
|
+
this.credentialsProvider = credentialsProvider;
|
|
18
|
+
this.connect();
|
|
19
|
+
}
|
|
20
|
+
connect() {
|
|
21
|
+
try {
|
|
22
|
+
const creds = this.credentialsProvider.getCredentials('bearer');
|
|
23
|
+
if (!creds?.token) {
|
|
24
|
+
throw new Error('Authorization failed, bearer token is not set');
|
|
25
|
+
}
|
|
26
|
+
this.ws = new ws_1.WebSocket(this.url, {
|
|
27
|
+
headers: { Authorization: `Bearer ${creds.token}` },
|
|
28
|
+
});
|
|
29
|
+
this.attachEventListeners();
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
this.logging.error(`WebSocket connection error: ${error}`);
|
|
33
|
+
this.handleDisconnect();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
attachEventListeners() {
|
|
37
|
+
if (!this.ws)
|
|
38
|
+
return;
|
|
39
|
+
this.ws.on('open', () => {
|
|
40
|
+
this.logging.log(`Connected to server ${this.url}`);
|
|
41
|
+
this.reconnectAttempts = 0;
|
|
42
|
+
this.flushMessageQueue();
|
|
43
|
+
});
|
|
44
|
+
this.ws.on('message', (data) => {
|
|
45
|
+
data = data.toString();
|
|
46
|
+
this.logging.log(`Received message: ${data}`);
|
|
47
|
+
});
|
|
48
|
+
this.ws.onclose = event => {
|
|
49
|
+
this.logging.log(`WebSocket connection closed with code: ${event.code} reason: ${event.reason}`);
|
|
50
|
+
if (!event.wasClean) {
|
|
51
|
+
this.handleDisconnect();
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
this.ws.on('error', error => {
|
|
55
|
+
this.logging.error(`WebSocket error: ${error}`);
|
|
56
|
+
});
|
|
57
|
+
this.ws.on('unexpected-response', (_req, res) => {
|
|
58
|
+
this.logging.warn(`Unexpected response: ${JSON.stringify({
|
|
59
|
+
statusCode: res.statusCode,
|
|
60
|
+
statusMessage: res.statusMessage,
|
|
61
|
+
headers: res.headers,
|
|
62
|
+
})}`);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
handleDisconnect() {
|
|
66
|
+
if (this.ws) {
|
|
67
|
+
this.ws.close();
|
|
68
|
+
this.ws = null;
|
|
69
|
+
}
|
|
70
|
+
// Apply exponential backoff for both unclean closures and failed reconnection attempts
|
|
71
|
+
if (this.reconnectAttempts < this.maxReconnectAttempts) {
|
|
72
|
+
this.reconnectAttempts++;
|
|
73
|
+
const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts), 30000);
|
|
74
|
+
this.logging.log(`WebSocket will attempt reconnection ${this.reconnectAttempts}/${this.maxReconnectAttempts} in ${delay}s`);
|
|
75
|
+
setTimeout(() => {
|
|
76
|
+
this.connect();
|
|
77
|
+
}, delay);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this.logging.warn('Maximum WebSocket reconnection attempts reached');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
flushMessageQueue() {
|
|
84
|
+
if (this.messageQueue.length <= 0) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
this.logging.log(`Flushing ${this.messageQueue.length} queued events through WebSocket`);
|
|
88
|
+
while (this.messageQueue.length > 0) {
|
|
89
|
+
const message = this.messageQueue.shift();
|
|
90
|
+
if (message) {
|
|
91
|
+
this.send(message).catch(error => this.logging.error(`Error sending message: ${error}`));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
queueMessage(message) {
|
|
96
|
+
// Make sure that didChangeWorkspaceFolders messages go to the front of the queue
|
|
97
|
+
if (message.includes(`workspace/didChangeWorkspaceFolders`)) {
|
|
98
|
+
this.messageQueue.unshift(message);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this.messageQueue.push(message);
|
|
102
|
+
}
|
|
103
|
+
this.logging.log(`WebSocket message queued until connection is ready, queue size: ${this.messageQueue.length}`);
|
|
104
|
+
}
|
|
105
|
+
isConnected() {
|
|
106
|
+
return this.ws?.readyState === ws_1.WebSocket.OPEN;
|
|
107
|
+
}
|
|
108
|
+
getWebsocketReadyState() {
|
|
109
|
+
if (!this.ws)
|
|
110
|
+
return 'CLOSED';
|
|
111
|
+
switch (this.ws.readyState) {
|
|
112
|
+
case ws_1.WebSocket.CONNECTING:
|
|
113
|
+
return 'CONNECTING';
|
|
114
|
+
case ws_1.WebSocket.OPEN:
|
|
115
|
+
return 'OPEN';
|
|
116
|
+
case ws_1.WebSocket.CLOSING:
|
|
117
|
+
return 'CLOSING';
|
|
118
|
+
case ws_1.WebSocket.CLOSED:
|
|
119
|
+
return 'CLOSED';
|
|
120
|
+
default:
|
|
121
|
+
return 'CLOSED';
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications#sending_data_to_the_server
|
|
125
|
+
// TODO, the approach of delaying websocket messages should be investigated and validated
|
|
126
|
+
// The current approach could be susceptible to race conditions that might result in out of order events
|
|
127
|
+
// Consider this scenario
|
|
128
|
+
// wsClient.send("message1"); // needs throttling, will wait 100ms
|
|
129
|
+
// wsClient.send("message2"); // runs immediately without waiting
|
|
130
|
+
// What actually happens:
|
|
131
|
+
// - Both calls start executing simultaneously
|
|
132
|
+
// - Both check timeSinceLastMessage at nearly the same time
|
|
133
|
+
// - Both might determine they need to wait
|
|
134
|
+
// - They could end up sending in unpredictable order
|
|
135
|
+
// It might be better to keep an active queue in the client and expose enqueueMessage instead of send
|
|
136
|
+
async send(message) {
|
|
137
|
+
if (this.ws?.readyState === ws_1.WebSocket.OPEN) {
|
|
138
|
+
await new Promise(resolve => setTimeout(resolve, this.messageThrottleDelay));
|
|
139
|
+
this.ws.send(message);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
this.queueMessage(message);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
disconnect() {
|
|
146
|
+
if (this.ws) {
|
|
147
|
+
this.ws.close();
|
|
148
|
+
this.ws = null;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
destroyClient() {
|
|
152
|
+
// Clear the message queue
|
|
153
|
+
this.messageQueue = [];
|
|
154
|
+
// Prevent any further reconnection attempts
|
|
155
|
+
this.reconnectAttempts = this.maxReconnectAttempts;
|
|
156
|
+
if (this.ws) {
|
|
157
|
+
this.ws.close();
|
|
158
|
+
// Allow the close event to be processed before removing listeners
|
|
159
|
+
setTimeout(() => {
|
|
160
|
+
if (this.ws) {
|
|
161
|
+
this.ws.removeAllListeners();
|
|
162
|
+
}
|
|
163
|
+
}, 1000);
|
|
164
|
+
// Terminate the connection
|
|
165
|
+
this.ws.terminate();
|
|
166
|
+
this.ws = null;
|
|
167
|
+
}
|
|
168
|
+
this.logging.log('WebSocket client destroyed');
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
exports.WebSocketClient = WebSocketClient;
|
|
172
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/language-server/workspaceContext/client.ts"],"names":[],"mappings":";;;AAAA,2BAA8B;AAK9B,MAAa,eAAe;IAChB,EAAE,GAAqB,IAAI,CAAA;IAC3B,OAAO,CAAS;IAChB,mBAAmB,CAAqB;IAC/B,GAAG,CAAQ;IACpB,iBAAiB,GAAW,CAAC,CAAA;IACpB,oBAAoB,GAAW,CAAC,CAAA;IACzC,YAAY,GAAa,EAAE,CAAA;IAClB,oBAAoB,GAAW,GAAG,CAAA;IAEnD,YAAY,GAAW,EAAE,OAAgB,EAAE,mBAAwC;QAC/E,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAA;QAC9C,IAAI,CAAC,OAAO,EAAE,CAAA;IAClB,CAAC;IAEO,OAAO;QACX,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,QAAQ,CAAsB,CAAA;YACpF,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;YACpE,CAAC;YAED,IAAI,CAAC,EAAE,GAAG,IAAI,cAAS,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC9B,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,CAAC,KAAK,EAAE,EAAE;aACtD,CAAC,CAAA;YAEF,IAAI,CAAC,oBAAoB,EAAE,CAAA;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAA;YAC1D,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAC3B,CAAC;IACL,CAAC;IAEO,oBAAoB;QACxB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAM;QAEpB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;YACnD,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAA;YAC1B,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC5B,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE;YACnC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;YACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE;YACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,0CAA0C,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;YAChG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,gBAAgB,EAAE,CAAA;YAC3B,CAAC;QACL,CAAC,CAAA;QAED,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YACxB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,KAAK,EAAE,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CACb,wBAAwB,IAAI,CAAC,SAAS,CAAC;gBACnC,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,OAAO,EAAE,GAAG,CAAC,OAAO;aACvB,CAAC,EAAE,CACP,CAAA;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,gBAAgB;QACpB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACV,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YACf,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;QAClB,CAAC;QAED,uFAAuF;QACvF,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACrD,IAAI,CAAC,iBAAiB,EAAE,CAAA;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,CAAA;YACzE,IAAI,CAAC,OAAO,CAAC,GAAG,CACZ,uCAAuC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,oBAAoB,OAAO,KAAK,GAAG,CAC5G,CAAA;YAED,UAAU,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,OAAO,EAAE,CAAA;YAClB,CAAC,EAAE,KAAK,CAAC,CAAA;QACb,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;QACxE,CAAC;IACL,CAAC;IAEO,iBAAiB;QACrB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAChC,OAAM;QACV,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,kCAAkC,CAAC,CAAA;QACxF,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;YACzC,IAAI,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC,CAAA;YAC5F,CAAC;QACL,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,OAAe;QAChC,iFAAiF;QACjF,IAAI,OAAO,CAAC,QAAQ,CAAC,qCAAqC,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACtC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mEAAmE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAA;IACnH,CAAC;IAEM,WAAW;QACd,OAAO,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,cAAS,CAAC,IAAI,CAAA;IACjD,CAAC;IAEM,sBAAsB;QACzB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAA;QAE7B,QAAQ,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;YACzB,KAAK,cAAS,CAAC,UAAU;gBACrB,OAAO,YAAY,CAAA;YACvB,KAAK,cAAS,CAAC,IAAI;gBACf,OAAO,MAAM,CAAA;YACjB,KAAK,cAAS,CAAC,OAAO;gBAClB,OAAO,SAAS,CAAA;YACpB,KAAK,cAAS,CAAC,MAAM;gBACjB,OAAO,QAAQ,CAAA;YACnB;gBACI,OAAO,QAAQ,CAAA;QACvB,CAAC;IACL,CAAC;IAED,mIAAmI;IACnI,yFAAyF;IACzF,wGAAwG;IACxG,yBAAyB;IACzB,kEAAkE;IAClE,iEAAiE;IAEjE,yBAAyB;IACzB,8CAA8C;IAC9C,4DAA4D;IAC5D,2CAA2C;IAC3C,qDAAqD;IACrD,qGAAqG;IAC9F,KAAK,CAAC,IAAI,CAAC,OAAe;QAC7B,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAA;YAC5E,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACzB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAC9B,CAAC;IACL,CAAC;IAEM,UAAU;QACb,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACV,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YACf,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;QAClB,CAAC;IACL,CAAC;IAEM,aAAa;QAChB,0BAA0B;QAC1B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAA;QAEtB,4CAA4C;QAC5C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAA;QAElD,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACV,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YACf,kEAAkE;YAClE,UAAU,CAAC,GAAG,EAAE;gBACZ,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;oBACV,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAA;gBAChC,CAAC;YACL,CAAC,EAAE,IAAI,CAAC,CAAA;YACR,2BAA2B;YAC3B,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAA;YACnB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;IAClD,CAAC;CACJ;AA7LD,0CA6LC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Logging, Workspace, WorkspaceFolder } from '@aws/language-server-runtimes/server-interface';
|
|
2
|
+
import { BaseDependencyInfo, LanguageDependencyHandler } from './dependencyHandler/LanguageDependencyHandler';
|
|
3
|
+
import { ArtifactManager } from '../artifactManager';
|
|
4
|
+
export declare class DependencyDiscoverer {
|
|
5
|
+
private logging;
|
|
6
|
+
private workspaceFolders;
|
|
7
|
+
dependencyHandlerRegistry: LanguageDependencyHandler<BaseDependencyInfo>[];
|
|
8
|
+
private initializedWorkspaceFolder;
|
|
9
|
+
constructor(workspace: Workspace, logging: Logging, workspaceFolders: WorkspaceFolder[], artifactManager: ArtifactManager);
|
|
10
|
+
private shouldExcludeDirectory;
|
|
11
|
+
searchDependencies(folders: WorkspaceFolder[]): Promise<void>;
|
|
12
|
+
handleDependencyUpdateFromLSP(language: string, paths: string[], workspaceRoot?: WorkspaceFolder): Promise<void>;
|
|
13
|
+
dispose(): void;
|
|
14
|
+
disposeWorkspaceFolder(workspaceFolder: WorkspaceFolder): void;
|
|
15
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DependencyDiscoverer = void 0;
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const fs = require("fs");
|
|
6
|
+
const vscode_uri_1 = require("vscode-uri");
|
|
7
|
+
const LanguageDependencyHandlerFactory_1 = require("./dependencyHandler/LanguageDependencyHandlerFactory");
|
|
8
|
+
const languageDetection_1 = require("../../../shared/languageDetection");
|
|
9
|
+
class DependencyDiscoverer {
|
|
10
|
+
logging;
|
|
11
|
+
workspaceFolders;
|
|
12
|
+
dependencyHandlerRegistry = [];
|
|
13
|
+
initializedWorkspaceFolder = new Map();
|
|
14
|
+
constructor(workspace, logging, workspaceFolders, artifactManager) {
|
|
15
|
+
this.workspaceFolders = workspaceFolders;
|
|
16
|
+
this.logging = logging;
|
|
17
|
+
let jstsHandlerCreated = false;
|
|
18
|
+
languageDetection_1.supportedWorkspaceContextLanguages.forEach(language => {
|
|
19
|
+
const handler = LanguageDependencyHandlerFactory_1.DependencyHandlerFactory.createHandler(language, workspace, logging, workspaceFolders, artifactManager);
|
|
20
|
+
if (handler) {
|
|
21
|
+
// Share handler for javascript and typescript
|
|
22
|
+
if (language === 'javascript' || language === 'typescript') {
|
|
23
|
+
if (!jstsHandlerCreated) {
|
|
24
|
+
this.dependencyHandlerRegistry.push(handler);
|
|
25
|
+
jstsHandlerCreated = true;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
this.dependencyHandlerRegistry.push(handler);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
shouldExcludeDirectory(dir) {
|
|
35
|
+
const EXCLUDE_PATTERNS = [
|
|
36
|
+
/^\./,
|
|
37
|
+
/^node_modules$/,
|
|
38
|
+
/^dist$/,
|
|
39
|
+
/^build$/,
|
|
40
|
+
/^test$/,
|
|
41
|
+
/^bin$/,
|
|
42
|
+
/^out$/,
|
|
43
|
+
/^logs$/,
|
|
44
|
+
/^env$/,
|
|
45
|
+
];
|
|
46
|
+
return EXCLUDE_PATTERNS.some(pattern => pattern.test(dir));
|
|
47
|
+
}
|
|
48
|
+
async searchDependencies(folders) {
|
|
49
|
+
this.logging.log('Starting dependency search across workspace folders');
|
|
50
|
+
for (const workspaceFolder of folders) {
|
|
51
|
+
if (this.initializedWorkspaceFolder.has(workspaceFolder) &&
|
|
52
|
+
this.initializedWorkspaceFolder.get(workspaceFolder)) {
|
|
53
|
+
this.logging.log(`Skipping already initialized workspace folder: ${workspaceFolder.uri}`);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
this.initializedWorkspaceFolder.set(workspaceFolder, true);
|
|
57
|
+
const workspaceFolderPath = vscode_uri_1.URI.parse(workspaceFolder.uri).path;
|
|
58
|
+
const queue = [{ dir: workspaceFolderPath, depth: 0 }];
|
|
59
|
+
while (queue.length > 0) {
|
|
60
|
+
const { dir: currentDir, depth } = queue.shift();
|
|
61
|
+
let foundDependencyInCurrentDir = false;
|
|
62
|
+
for (const dependencyHandler of this.dependencyHandlerRegistry) {
|
|
63
|
+
if (dependencyHandler.discover(currentDir, workspaceFolder)) {
|
|
64
|
+
foundDependencyInCurrentDir = true;
|
|
65
|
+
this.logging.log(`Found ${dependencyHandler.language} dependency in ${currentDir}`);
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Skip the rest search in the current dir.
|
|
70
|
+
if (foundDependencyInCurrentDir) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
// Check if currentDir is a symlink first
|
|
75
|
+
const dirStats = await fs.promises.lstat(currentDir);
|
|
76
|
+
if (dirStats.isSymbolicLink()) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
// Add sub directories to queue for later processing
|
|
80
|
+
const items = fs.readdirSync(currentDir);
|
|
81
|
+
for (const item of items) {
|
|
82
|
+
const itemPath = path.join(currentDir, item);
|
|
83
|
+
const stats = await fs.promises.lstat(itemPath); // Use lstat instead of stat to detect symlinks
|
|
84
|
+
// Skip if it's a symlink
|
|
85
|
+
if (stats.isSymbolicLink()) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
// Skip if it's not a directory or matches exclude patterns
|
|
89
|
+
if (!stats.isDirectory() || this.shouldExcludeDirectory(item)) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
queue.push({ dir: itemPath, depth: depth + 1 });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
this.logging.warn(`Error searching dependency under directory ${currentDir}: ${error.message}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
for (const dependencyHandler of this.dependencyHandlerRegistry) {
|
|
101
|
+
dependencyHandler.initiateDependencyMap(folders);
|
|
102
|
+
dependencyHandler.setupWatchers(folders);
|
|
103
|
+
await dependencyHandler.zipDependencyMap(folders);
|
|
104
|
+
}
|
|
105
|
+
this.logging.log(`Dependency search completed successfully`);
|
|
106
|
+
}
|
|
107
|
+
async handleDependencyUpdateFromLSP(language, paths, workspaceRoot) {
|
|
108
|
+
for (const dependencyHandler of this.dependencyHandlerRegistry) {
|
|
109
|
+
if (dependencyHandler.language != language) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
await dependencyHandler.updateDependencyMapBasedOnLSP(paths, workspaceRoot);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
dispose() {
|
|
116
|
+
this.initializedWorkspaceFolder.clear();
|
|
117
|
+
this.dependencyHandlerRegistry.forEach(dependencyHandler => {
|
|
118
|
+
dependencyHandler.dispose();
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
disposeWorkspaceFolder(workspaceFolder) {
|
|
122
|
+
this.initializedWorkspaceFolder.delete(workspaceFolder);
|
|
123
|
+
this.dependencyHandlerRegistry.forEach(dependencyHandler => {
|
|
124
|
+
dependencyHandler.disposeWorkspaceFolder(workspaceFolder);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.DependencyDiscoverer = DependencyDiscoverer;
|
|
129
|
+
//# sourceMappingURL=dependencyDiscoverer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencyDiscoverer.js","sourceRoot":"","sources":["../../../../src/language-server/workspaceContext/dependency/dependencyDiscoverer.ts"],"names":[],"mappings":"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"}
|
package/out/language-server/workspaceContext/dependency/dependencyHandler/JSTSDependencyHandler.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BaseDependencyInfo, Dependency, LanguageDependencyHandler } from './LanguageDependencyHandler';
|
|
2
|
+
import { WorkspaceFolder } from '@aws/language-server-runtimes/server-interface';
|
|
3
|
+
interface JSTSDependencyInfo extends BaseDependencyInfo {
|
|
4
|
+
packageJsonPath: string;
|
|
5
|
+
nodeModulesPath: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class JSTSDependencyHandler extends LanguageDependencyHandler<JSTSDependencyInfo> {
|
|
8
|
+
private jstsDependencyInfos;
|
|
9
|
+
discover(currentDir: string, workspaceFolder: WorkspaceFolder): boolean;
|
|
10
|
+
initiateDependencyMap(folders: WorkspaceFolder[]): void;
|
|
11
|
+
generateDependencyMap(jstsDependencyInfo: JSTSDependencyInfo): Map<string, Dependency>;
|
|
12
|
+
setupWatchers(folders: WorkspaceFolder[]): void;
|
|
13
|
+
updateDependencyMapBasedOnLSP(paths: string[], workspaceFolder?: WorkspaceFolder): Promise<void>;
|
|
14
|
+
transformPathToDependency(dependencyName: string, dependencyPath: string, dependencyMap: Map<string, Dependency>): void;
|
|
15
|
+
disposeWatchers(workspaceFolder: WorkspaceFolder): void;
|
|
16
|
+
disposeDependencyInfo(workspaceFolder: WorkspaceFolder): void;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
package/out/language-server/workspaceContext/dependency/dependencyHandler/JSTSDependencyHandler.js
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JSTSDependencyHandler = void 0;
|
|
4
|
+
const LanguageDependencyHandler_1 = require("./LanguageDependencyHandler");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const fs = require("fs");
|
|
7
|
+
/*
|
|
8
|
+
* JSTS Dependency Handler
|
|
9
|
+
*
|
|
10
|
+
* This handler depends on package.json and /node_modules to discover dependency locations
|
|
11
|
+
*/
|
|
12
|
+
class JSTSDependencyHandler extends LanguageDependencyHandler_1.LanguageDependencyHandler {
|
|
13
|
+
jstsDependencyInfos = [];
|
|
14
|
+
/*
|
|
15
|
+
* It will return a boolean indicating whether it finds any dependency info.
|
|
16
|
+
* The JSTSDependencyInfo object contains the following properties:
|
|
17
|
+
* - pkgDir: the package directory
|
|
18
|
+
* - packageJsonPath: the path to the package.json file
|
|
19
|
+
* - nodeModulesPath: the path to /node_modules directory
|
|
20
|
+
*/
|
|
21
|
+
discover(currentDir, workspaceFolder) {
|
|
22
|
+
let result = null;
|
|
23
|
+
const packageJsonPath = path.join(currentDir, 'package.json');
|
|
24
|
+
const nodeModulesPath = path.join(currentDir, 'node_modules');
|
|
25
|
+
if (fs.existsSync(packageJsonPath) &&
|
|
26
|
+
fs.existsSync(nodeModulesPath) &&
|
|
27
|
+
fs.statSync(nodeModulesPath).isDirectory()) {
|
|
28
|
+
this.logging.log(`Found package.json and node_modules in ${currentDir}`);
|
|
29
|
+
result = {
|
|
30
|
+
pkgDir: currentDir,
|
|
31
|
+
packageJsonPath: packageJsonPath,
|
|
32
|
+
nodeModulesPath: nodeModulesPath,
|
|
33
|
+
workspaceFolder: workspaceFolder,
|
|
34
|
+
};
|
|
35
|
+
this.jstsDependencyInfos.push(result);
|
|
36
|
+
}
|
|
37
|
+
return result !== null;
|
|
38
|
+
}
|
|
39
|
+
/*
|
|
40
|
+
* It will create a dependency map from the package.json file and node_modules
|
|
41
|
+
* The dependency map will contain the following properties:
|
|
42
|
+
* - name: the name of the dependency
|
|
43
|
+
* - version: the version of the dependency
|
|
44
|
+
* - path: the path to the dependency
|
|
45
|
+
*/
|
|
46
|
+
initiateDependencyMap(folders) {
|
|
47
|
+
// Filter out the jstsDependencyInfos that are in the folders
|
|
48
|
+
const jstsDependencyInfoToBeInitiated = this.jstsDependencyInfos.filter(jstsDependencyInfo => {
|
|
49
|
+
return folders.includes(jstsDependencyInfo.workspaceFolder);
|
|
50
|
+
});
|
|
51
|
+
jstsDependencyInfoToBeInitiated.forEach(jstsDependencyInfo => {
|
|
52
|
+
// TODO, check if try catch is necessary here
|
|
53
|
+
try {
|
|
54
|
+
let generatedDependencyMap = this.generateDependencyMap(jstsDependencyInfo);
|
|
55
|
+
// If the dependency map doesn't exist, create a new one
|
|
56
|
+
if (!this.dependencyMap.has(jstsDependencyInfo.workspaceFolder)) {
|
|
57
|
+
this.dependencyMap.set(jstsDependencyInfo.workspaceFolder, new Map());
|
|
58
|
+
}
|
|
59
|
+
generatedDependencyMap.forEach((dep, name) => {
|
|
60
|
+
this.dependencyMap.get(jstsDependencyInfo.workspaceFolder)?.set(name, dep);
|
|
61
|
+
});
|
|
62
|
+
// Log found dependencies
|
|
63
|
+
this.logging.log(`Total Javascript/Typescript dependencies found: ${generatedDependencyMap.size} under ${jstsDependencyInfo.pkgDir}`);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
this.logging.warn(`Error parsing dependencies: ${error}`);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/*
|
|
71
|
+
* First, it will record dependencies with version under node_modules based on package.json
|
|
72
|
+
* Then, it will also record dependencies with version under node_modules which are not declared in package.json
|
|
73
|
+
*/
|
|
74
|
+
generateDependencyMap(jstsDependencyInfo) {
|
|
75
|
+
const dependencyMap = new Map();
|
|
76
|
+
let packageJsonPath = jstsDependencyInfo.packageJsonPath;
|
|
77
|
+
let nodeModulesPath = jstsDependencyInfo.nodeModulesPath;
|
|
78
|
+
// Read and parse package.json
|
|
79
|
+
let packageJsonContent;
|
|
80
|
+
let allDependencies = {};
|
|
81
|
+
try {
|
|
82
|
+
packageJsonContent = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
83
|
+
// Combine all types of dependencies
|
|
84
|
+
allDependencies = {
|
|
85
|
+
...(packageJsonContent.dependencies || {}),
|
|
86
|
+
...(packageJsonContent.devDependencies || {}),
|
|
87
|
+
...(packageJsonContent.peerDependencies || {}),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
this.logging.warn(`Can't parse package.json skipping `);
|
|
92
|
+
}
|
|
93
|
+
// process each dependency
|
|
94
|
+
for (const [name, declaredVersion] of Object.entries(allDependencies)) {
|
|
95
|
+
const dependencyPath = path.join(nodeModulesPath, name);
|
|
96
|
+
// Check if dependency exists in node_modules
|
|
97
|
+
if (fs.existsSync(dependencyPath)) {
|
|
98
|
+
// Read the actual version from the dependency's package.json
|
|
99
|
+
const depPackageJsonPath = path.join(dependencyPath, 'package.json');
|
|
100
|
+
let actualVersion = typeof declaredVersion === 'string' ? declaredVersion : 'unknown';
|
|
101
|
+
if (fs.existsSync(depPackageJsonPath)) {
|
|
102
|
+
try {
|
|
103
|
+
const depPackageJson = JSON.parse(fs.readFileSync(depPackageJsonPath, 'utf-8'));
|
|
104
|
+
actualVersion = depPackageJson.version;
|
|
105
|
+
}
|
|
106
|
+
catch (e) {
|
|
107
|
+
this.logging.warn(`Can't parse ${depPackageJsonPath}, skipping`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
dependencyMap.set(name, {
|
|
111
|
+
name,
|
|
112
|
+
version: actualVersion.toString().replace(/[\^~]/g, ''), // Remove ^ and ~ from version
|
|
113
|
+
path: dependencyPath,
|
|
114
|
+
size: this.getDirectorySize(dependencyPath),
|
|
115
|
+
zipped: false,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Also check node_modules directory for unlisted dependencies
|
|
120
|
+
if (fs.existsSync(nodeModulesPath)) {
|
|
121
|
+
const nodeModulesContent = fs.readdirSync(nodeModulesPath);
|
|
122
|
+
for (const item of nodeModulesContent) {
|
|
123
|
+
// Skip hidden files and scope directories
|
|
124
|
+
if (item.startsWith('.') || item.startsWith('@'))
|
|
125
|
+
continue;
|
|
126
|
+
const itemPath = path.join(nodeModulesPath, item);
|
|
127
|
+
if (!fs.statSync(itemPath).isDirectory())
|
|
128
|
+
continue;
|
|
129
|
+
// If not already in dependencyMap, add it
|
|
130
|
+
if (!dependencyMap.has(item)) {
|
|
131
|
+
const depPackageJsonPath = path.join(itemPath, 'package.json');
|
|
132
|
+
if (fs.existsSync(depPackageJsonPath)) {
|
|
133
|
+
try {
|
|
134
|
+
const depPackageJson = JSON.parse(fs.readFileSync(depPackageJsonPath, 'utf-8'));
|
|
135
|
+
dependencyMap.set(item, {
|
|
136
|
+
name: item,
|
|
137
|
+
version: depPackageJson.version || 'unknown',
|
|
138
|
+
path: itemPath,
|
|
139
|
+
size: this.getDirectorySize(itemPath),
|
|
140
|
+
zipped: false,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
catch (e) {
|
|
144
|
+
this.logging.warn(`Can't parse ${depPackageJsonPath}, skipping`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return dependencyMap;
|
|
151
|
+
}
|
|
152
|
+
/*
|
|
153
|
+
* It will setup watchers for the .classpath files.
|
|
154
|
+
* When a change is detected, it will update the dependency map.
|
|
155
|
+
*/
|
|
156
|
+
setupWatchers(folders) {
|
|
157
|
+
// Filter out the jstsDependencyInfos that are in the folders
|
|
158
|
+
const jstsDependencyInfoToBeWatched = this.jstsDependencyInfos.filter(jstsDependencyInfo => {
|
|
159
|
+
return folders.includes(jstsDependencyInfo.workspaceFolder);
|
|
160
|
+
});
|
|
161
|
+
jstsDependencyInfoToBeWatched.forEach((jstsDependencyInfo) => {
|
|
162
|
+
const packageJsonPath = jstsDependencyInfo.packageJsonPath;
|
|
163
|
+
if (this.dependencyWatchers.has(packageJsonPath)) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
this.logging.log(`Setting up Javascript/Typescript dependency watcher for ${packageJsonPath}`);
|
|
167
|
+
try {
|
|
168
|
+
const watcher = fs.watch(packageJsonPath, async (eventType) => {
|
|
169
|
+
if (eventType === 'change') {
|
|
170
|
+
this.logging.log(`Change detected in ${packageJsonPath}`);
|
|
171
|
+
const updatedDependencyMap = this.generateDependencyMap(jstsDependencyInfo);
|
|
172
|
+
let zips = await this.compareAndUpdateDependencyMap(jstsDependencyInfo.workspaceFolder, updatedDependencyMap, true);
|
|
173
|
+
this.emitDependencyChange(jstsDependencyInfo.workspaceFolder, zips);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
this.dependencyWatchers.set(packageJsonPath, watcher);
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
this.logging.warn(`Error setting up watcher for ${packageJsonPath}: ${error}`);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
// JS and TS are not using LSP to sync dependencies
|
|
184
|
+
async updateDependencyMapBasedOnLSP(paths, workspaceFolder) { }
|
|
185
|
+
transformPathToDependency(dependencyName, dependencyPath, dependencyMap) { }
|
|
186
|
+
disposeWatchers(workspaceFolder) {
|
|
187
|
+
this.jstsDependencyInfos.forEach((jstsDependencyInfo) => {
|
|
188
|
+
if (workspaceFolder.uri === jstsDependencyInfo.workspaceFolder.uri) {
|
|
189
|
+
const packageJsonPath = jstsDependencyInfo.packageJsonPath;
|
|
190
|
+
if (this.dependencyWatchers.has(packageJsonPath)) {
|
|
191
|
+
this.logging.log(`Disposing dependency watcher for ${packageJsonPath}`);
|
|
192
|
+
this.dependencyWatchers.get(packageJsonPath)?.close();
|
|
193
|
+
this.dependencyWatchers.delete(packageJsonPath);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
disposeDependencyInfo(workspaceFolder) {
|
|
199
|
+
// Remove the dependency info for the workspace folder
|
|
200
|
+
this.jstsDependencyInfos = this.jstsDependencyInfos.filter((jstsDependencyInfo) => jstsDependencyInfo.workspaceFolder.uri !== workspaceFolder.uri);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
exports.JSTSDependencyHandler = JSTSDependencyHandler;
|
|
204
|
+
//# sourceMappingURL=JSTSDependencyHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JSTSDependencyHandler.js","sourceRoot":"","sources":["../../../../../src/language-server/workspaceContext/dependency/dependencyHandler/JSTSDependencyHandler.ts"],"names":[],"mappings":"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"}
|
package/out/language-server/workspaceContext/dependency/dependencyHandler/JavaDependencyHandler.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseDependencyInfo, Dependency, LanguageDependencyHandler } from './LanguageDependencyHandler';
|
|
2
|
+
import { WorkspaceFolder } from '@aws/language-server-runtimes/server-interface';
|
|
3
|
+
export interface JavaDependencyInfo extends BaseDependencyInfo {
|
|
4
|
+
dotClasspathPath: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class JavaDependencyHandler extends LanguageDependencyHandler<JavaDependencyInfo> {
|
|
7
|
+
private javaDependencyInfos;
|
|
8
|
+
private RELATIVE_PATH;
|
|
9
|
+
discover(currentDir: string, workspaceFolder: WorkspaceFolder): boolean;
|
|
10
|
+
initiateDependencyMap(folders: WorkspaceFolder[]): void;
|
|
11
|
+
setupWatchers(folders: WorkspaceFolder[]): void;
|
|
12
|
+
generateDependencyMap(javaDependencyInfo: JavaDependencyInfo): Map<string, Dependency>;
|
|
13
|
+
transformPathToDependency(dependencyName: string, dependencyPath: string, dependencyMap: Map<string, Dependency>): void;
|
|
14
|
+
disposeWatchers(workspaceFolder: WorkspaceFolder): void;
|
|
15
|
+
disposeDependencyInfo(workspaceFolder: WorkspaceFolder): void;
|
|
16
|
+
}
|