@aws/lsp-codewhisperer 0.0.34 → 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 +66 -0
- package/out/client/token/bearer-token-service.json +91 -225
- package/out/language-server/agenticChat/agenticChatController.js +82 -29
- package/out/language-server/agenticChat/agenticChatController.js.map +1 -1
- package/out/language-server/agenticChat/agenticChatResultStream.js +3 -0
- package/out/language-server/agenticChat/agenticChatResultStream.js.map +1 -1
- package/out/language-server/agenticChat/constants.d.ts +3 -0
- package/out/language-server/agenticChat/constants.js +4 -1
- package/out/language-server/agenticChat/constants.js.map +1 -1
- package/out/language-server/agenticChat/context/agenticChatTriggerContext.d.ts +3 -8
- package/out/language-server/agenticChat/context/agenticChatTriggerContext.js +9 -2
- package/out/language-server/agenticChat/context/agenticChatTriggerContext.js.map +1 -1
- package/out/language-server/agenticChat/context/contextUtils.d.ts +20 -0
- package/out/language-server/agenticChat/context/contextUtils.js +107 -0
- package/out/language-server/agenticChat/context/contextUtils.js.map +1 -1
- package/out/language-server/agenticChat/errors.d.ts +2 -1
- package/out/language-server/agenticChat/errors.js +4 -1
- package/out/language-server/agenticChat/errors.js.map +1 -1
- package/out/language-server/agenticChat/tabBarController.js +1 -1
- package/out/language-server/agenticChat/tabBarController.js.map +1 -1
- package/out/language-server/agenticChat/tools/chatDb/chatDb.js +3 -2
- package/out/language-server/agenticChat/tools/chatDb/chatDb.js.map +1 -1
- package/out/language-server/agenticChat/tools/fileSearch.js +1 -1
- package/out/language-server/agenticChat/tools/fileSearch.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 +3 -1
- package/out/language-server/chat/constants.js +15 -2
- 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 +7 -9
- 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/out/shared/utils.d.ts +1 -0
- package/out/shared/utils.js +15 -1
- package/out/shared/utils.js.map +1 -1
- package/package.json +9 -3
package/out/language-server/workspaceContext/dependency/dependencyHandler/JavaDependencyHandler.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JavaDependencyHandler = void 0;
|
|
4
|
+
const LanguageDependencyHandler_1 = require("./LanguageDependencyHandler");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const fs = require("fs");
|
|
7
|
+
const xml2js = require("xml2js");
|
|
8
|
+
/*
|
|
9
|
+
* Java Dependency Handler
|
|
10
|
+
*
|
|
11
|
+
* This handler depends on .classpath to discover dependency locations
|
|
12
|
+
*/
|
|
13
|
+
class JavaDependencyHandler extends LanguageDependencyHandler_1.LanguageDependencyHandler {
|
|
14
|
+
javaDependencyInfos = [];
|
|
15
|
+
RELATIVE_PATH = 'dependencies';
|
|
16
|
+
/*
|
|
17
|
+
* It will return a boolean indicating whether it finds any dependency info.
|
|
18
|
+
* The JavaDependencyInfo object contains the following properties:
|
|
19
|
+
* - pkgDir: the package directory
|
|
20
|
+
* - dotClasspathPath: the path to the .classpath file
|
|
21
|
+
*/
|
|
22
|
+
discover(currentDir, workspaceFolder) {
|
|
23
|
+
let result = null;
|
|
24
|
+
const dotClasspathPath = path.join(currentDir, '.classpath');
|
|
25
|
+
if (fs.existsSync(dotClasspathPath) && fs.statSync(dotClasspathPath).isFile()) {
|
|
26
|
+
this.logging.log(`Found .classpath in ${currentDir}`);
|
|
27
|
+
result = {
|
|
28
|
+
pkgDir: currentDir,
|
|
29
|
+
dotClasspathPath: dotClasspathPath,
|
|
30
|
+
workspaceFolder: workspaceFolder,
|
|
31
|
+
};
|
|
32
|
+
this.javaDependencyInfos.push(result);
|
|
33
|
+
}
|
|
34
|
+
return result !== null;
|
|
35
|
+
}
|
|
36
|
+
/*
|
|
37
|
+
* It will create a dependency map from the .classpath file.
|
|
38
|
+
* The dependency map will contain the following properties:
|
|
39
|
+
* - name: the name of the dependency
|
|
40
|
+
* - version: the version of the dependency
|
|
41
|
+
* - path: the path to the dependency
|
|
42
|
+
*/
|
|
43
|
+
initiateDependencyMap(folders) {
|
|
44
|
+
// Filter out the javaDependencyInfos that are in the folders
|
|
45
|
+
const javaDependencyInfoToBeInitiated = this.javaDependencyInfos.filter(javaDependencyInfo => {
|
|
46
|
+
return folders.includes(javaDependencyInfo.workspaceFolder);
|
|
47
|
+
});
|
|
48
|
+
for (const javaDependencyInfo of javaDependencyInfoToBeInitiated) {
|
|
49
|
+
// TODO, check if try catch is necessary here
|
|
50
|
+
try {
|
|
51
|
+
let generatedDependencyMap = this.generateDependencyMap(javaDependencyInfo);
|
|
52
|
+
this.compareAndUpdateDependencyMap(javaDependencyInfo.workspaceFolder, generatedDependencyMap).catch(error => {
|
|
53
|
+
this.logging.warn(`Error processing Java dependencies: ${error}`);
|
|
54
|
+
});
|
|
55
|
+
// Log found dependencies
|
|
56
|
+
this.logging.log(`Total Java dependencies found: ${generatedDependencyMap.size} under ${javaDependencyInfo.pkgDir}`);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
this.logging.warn(`Error processing Java dependencies: ${error}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/*
|
|
64
|
+
* It will setup watchers for the .classpath files.
|
|
65
|
+
* When a change is detected, it will update the dependency map.
|
|
66
|
+
*/
|
|
67
|
+
setupWatchers(folders) {
|
|
68
|
+
// Filter out the javaDependencyInfos that are in the folders
|
|
69
|
+
const javaDependencyInfoToBeWatched = this.javaDependencyInfos.filter(javaDependencyInfo => {
|
|
70
|
+
return folders.includes(javaDependencyInfo.workspaceFolder);
|
|
71
|
+
});
|
|
72
|
+
javaDependencyInfoToBeWatched.forEach((javaDependencyInfo) => {
|
|
73
|
+
const dotClasspathPath = javaDependencyInfo.dotClasspathPath;
|
|
74
|
+
if (this.dependencyWatchers.has(dotClasspathPath)) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this.logging.log(`Setting up Java dependency watcher for ${dotClasspathPath}`);
|
|
78
|
+
try {
|
|
79
|
+
const watcher = fs.watch(dotClasspathPath, async (eventType, filename) => {
|
|
80
|
+
if (eventType === 'change') {
|
|
81
|
+
this.logging.log(`Change detected in ${dotClasspathPath}`);
|
|
82
|
+
const updatedDependencyMap = this.generateDependencyMap(javaDependencyInfo);
|
|
83
|
+
let zips = await this.compareAndUpdateDependencyMap(javaDependencyInfo.workspaceFolder, updatedDependencyMap, true);
|
|
84
|
+
this.emitDependencyChange(javaDependencyInfo.workspaceFolder, zips);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
this.dependencyWatchers.set(dotClasspathPath, watcher);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
this.logging.warn(`Error setting up watcher for ${dotClasspathPath}: ${error}`);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/*
|
|
95
|
+
* It will parse .classpath file and find location of dependency jars with version
|
|
96
|
+
*/
|
|
97
|
+
generateDependencyMap(javaDependencyInfo) {
|
|
98
|
+
const dependencyMap = new Map();
|
|
99
|
+
// Read and parse .classpath XML file
|
|
100
|
+
const dotClasspathPath = javaDependencyInfo.dotClasspathPath;
|
|
101
|
+
const parser = new xml2js.Parser();
|
|
102
|
+
const classpathContent = fs.readFileSync(dotClasspathPath, 'utf-8');
|
|
103
|
+
parser.parseString(classpathContent, (err, result) => {
|
|
104
|
+
if (err) {
|
|
105
|
+
this.logging.log(`Error parsing .classpath: ${err}`);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// Process classpathentry elements
|
|
109
|
+
if (result.classpath && result.classpath.classpathentry) {
|
|
110
|
+
result.classpath.classpathentry.forEach((entry) => {
|
|
111
|
+
if (entry.$ && entry.$.kind === 'lib' && entry.$.path) {
|
|
112
|
+
const jarPath = entry.$.path;
|
|
113
|
+
const jarName = path.basename(jarPath);
|
|
114
|
+
this.transformPathToDependency(jarName, jarPath, dependencyMap);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
return dependencyMap;
|
|
120
|
+
}
|
|
121
|
+
transformPathToDependency(dependencyName, dependencyPath, dependencyMap) {
|
|
122
|
+
// Extract name and version from jar path
|
|
123
|
+
// Example path patterns:
|
|
124
|
+
// - lib/dependency-1.2.3.jar
|
|
125
|
+
// - lib/dependency-1.2.3-SNAPSHOT.jar
|
|
126
|
+
// - ~/.m2/repository/com/example/dependency/1.2.3/dependency-1.2.3.jar
|
|
127
|
+
const match = dependencyName.match(/^(.*?)(?:-([\d.]+(?:-SNAPSHOT)?))?.jar$/);
|
|
128
|
+
if (match) {
|
|
129
|
+
const name = match[1];
|
|
130
|
+
const version = match[2] || 'unknown';
|
|
131
|
+
if (fs.existsSync(dependencyPath) && path.isAbsolute(dependencyPath)) {
|
|
132
|
+
dependencyMap.set(name, {
|
|
133
|
+
name,
|
|
134
|
+
version,
|
|
135
|
+
path: dependencyPath,
|
|
136
|
+
size: fs.statSync(dependencyPath).size,
|
|
137
|
+
zipped: false,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
disposeWatchers(workspaceFolder) {
|
|
143
|
+
this.javaDependencyInfos.forEach((javaDependencyInfo) => {
|
|
144
|
+
if (workspaceFolder.uri === javaDependencyInfo.workspaceFolder.uri) {
|
|
145
|
+
const dotClasspathPath = javaDependencyInfo.dotClasspathPath;
|
|
146
|
+
if (this.dependencyWatchers.has(dotClasspathPath)) {
|
|
147
|
+
this.logging.log(`Disposing dependency watcher for ${dotClasspathPath}`);
|
|
148
|
+
this.dependencyWatchers.get(dotClasspathPath)?.close();
|
|
149
|
+
this.dependencyWatchers.delete(dotClasspathPath);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
disposeDependencyInfo(workspaceFolder) {
|
|
155
|
+
// Remove the dependency info for the workspace folder
|
|
156
|
+
this.javaDependencyInfos = this.javaDependencyInfos.filter((javaDependencyInfo) => javaDependencyInfo.workspaceFolder.uri !== workspaceFolder.uri);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
exports.JavaDependencyHandler = JavaDependencyHandler;
|
|
160
|
+
//# sourceMappingURL=JavaDependencyHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JavaDependencyHandler.js","sourceRoot":"","sources":["../../../../../src/language-server/workspaceContext/dependency/dependencyHandler/JavaDependencyHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Logging, Workspace, WorkspaceFolder } from '@aws/language-server-runtimes/server-interface';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import { ArtifactManager, FileMetadata } from '../../artifactManager';
|
|
4
|
+
import { EventEmitter } from 'events';
|
|
5
|
+
import { CodewhispererLanguage } from '../../../../shared/languageDetection';
|
|
6
|
+
export interface Dependency {
|
|
7
|
+
name: string;
|
|
8
|
+
version: string;
|
|
9
|
+
path: string;
|
|
10
|
+
size: number;
|
|
11
|
+
zipped: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface BaseDependencyInfo {
|
|
14
|
+
pkgDir: string;
|
|
15
|
+
workspaceFolder: WorkspaceFolder;
|
|
16
|
+
}
|
|
17
|
+
export declare abstract class LanguageDependencyHandler<T extends BaseDependencyInfo> {
|
|
18
|
+
language: CodewhispererLanguage;
|
|
19
|
+
protected workspace: Workspace;
|
|
20
|
+
protected logging: Logging;
|
|
21
|
+
protected workspaceFolders: WorkspaceFolder[];
|
|
22
|
+
protected dependencyMap: Map<WorkspaceFolder, Map<string, Dependency>>;
|
|
23
|
+
protected dependencyUploadedSize: Map<WorkspaceFolder, number>;
|
|
24
|
+
protected dependencyWatchers: Map<string, fs.FSWatcher>;
|
|
25
|
+
protected artifactManager: ArtifactManager;
|
|
26
|
+
protected dependenciesFolderName: string;
|
|
27
|
+
protected eventEmitter: EventEmitter;
|
|
28
|
+
protected readonly MAX_SINGLE_DEPENDENCY_SIZE: number;
|
|
29
|
+
protected readonly MAX_WORKSPACE_DEPENDENCY_SIZE: number;
|
|
30
|
+
constructor(language: CodewhispererLanguage, workspace: Workspace, logging: Logging, workspaceFolders: WorkspaceFolder[], artifactManager: ArtifactManager, dependenciesFolderName: string);
|
|
31
|
+
abstract discover(currentDir: string, workspaceFolder: WorkspaceFolder): boolean;
|
|
32
|
+
abstract initiateDependencyMap(folders: WorkspaceFolder[]): void;
|
|
33
|
+
abstract setupWatchers(folders: WorkspaceFolder[]): void;
|
|
34
|
+
/**
|
|
35
|
+
* Transform dependency path from LSP to dependency. Java and Python will have different logic to implement
|
|
36
|
+
* @param dependencyName
|
|
37
|
+
* @param dependencyPath
|
|
38
|
+
* @param dependencyMap
|
|
39
|
+
*/
|
|
40
|
+
protected abstract transformPathToDependency(dependencyName: string, dependencyPath: string, dependencyMap: Map<string, Dependency>): void;
|
|
41
|
+
onDependencyChange(callback: (workspaceFolder: WorkspaceFolder, zips: FileMetadata[]) => void): void;
|
|
42
|
+
protected emitDependencyChange(workspaceFolder: WorkspaceFolder, zips: FileMetadata[]): void;
|
|
43
|
+
/**
|
|
44
|
+
* Update dependency map based on didChangeDependencyPaths LSP. Javascript and Typescript will not use LSP so no need to implement this method
|
|
45
|
+
* @param paths
|
|
46
|
+
* @param workspaceRoot
|
|
47
|
+
*/
|
|
48
|
+
updateDependencyMapBasedOnLSP(paths: string[], workspaceFolder?: WorkspaceFolder): Promise<void>;
|
|
49
|
+
zipDependencyMap(folders: WorkspaceFolder[]): Promise<void>;
|
|
50
|
+
private generateFileMetadata;
|
|
51
|
+
private processChunk;
|
|
52
|
+
protected abstract generateDependencyMap(dependencyInfo: T, dependencyMap: Map<string, Dependency>): void;
|
|
53
|
+
protected compareAndUpdateDependencyMap(workspaceFolder: WorkspaceFolder, updatedDependencyMap: Map<string, Dependency>, zipChanges?: boolean): Promise<FileMetadata[]>;
|
|
54
|
+
private validateSingleDependencySize;
|
|
55
|
+
/**
|
|
56
|
+
* This validation will calculate how such of size of dependencies uploaded per workspace.
|
|
57
|
+
*
|
|
58
|
+
* This validation is only used for new dependency being uploaded.
|
|
59
|
+
* Existing dependencies will be uploaded as long as single size didn't exceed
|
|
60
|
+
*
|
|
61
|
+
* The dependency map doesn't get updated when dependency is deleted so that this validation may be
|
|
62
|
+
* false positive when large of dependencies is deleted.
|
|
63
|
+
* However, everytime flare server restarts, this dependency map will be initialized.
|
|
64
|
+
*/
|
|
65
|
+
private validateWorkspaceDependencySize;
|
|
66
|
+
dispose(): void;
|
|
67
|
+
disposeWorkspaceFolder(workspaceFolder: WorkspaceFolder): void;
|
|
68
|
+
/**
|
|
69
|
+
* Dispose watchers for one workspace folder.
|
|
70
|
+
* This needs to be implemented in individual language because watcher are mapped with watched folder paths.
|
|
71
|
+
* @param workspaceFolder
|
|
72
|
+
*/
|
|
73
|
+
abstract disposeWatchers(workspaceFolder: WorkspaceFolder): void;
|
|
74
|
+
abstract disposeDependencyInfo(workspaceFolder: WorkspaceFolder): void;
|
|
75
|
+
protected getDirectorySize(directoryPath: string): number;
|
|
76
|
+
protected isDependencyZipped(dependencyName: string, workspaceFolder: WorkspaceFolder): boolean | undefined;
|
|
77
|
+
cleanupZipFiles(zipFileMetadata: FileMetadata[]): Promise<void>;
|
|
78
|
+
}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LanguageDependencyHandler = void 0;
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const events_1 = require("events");
|
|
7
|
+
// Abstract base class for all language dependency handlers
|
|
8
|
+
class LanguageDependencyHandler {
|
|
9
|
+
language;
|
|
10
|
+
workspace;
|
|
11
|
+
logging;
|
|
12
|
+
workspaceFolders;
|
|
13
|
+
// key: workspaceFolder, value: {key: dependency name, value: Dependency}
|
|
14
|
+
dependencyMap = new Map();
|
|
15
|
+
dependencyUploadedSize = new Map();
|
|
16
|
+
dependencyWatchers = new Map();
|
|
17
|
+
artifactManager;
|
|
18
|
+
dependenciesFolderName;
|
|
19
|
+
eventEmitter;
|
|
20
|
+
MAX_SINGLE_DEPENDENCY_SIZE = 500 * 1024 * 1024; // 500 MB
|
|
21
|
+
MAX_WORKSPACE_DEPENDENCY_SIZE = 5 * 1024 * 1024 * 1024; //5 GB
|
|
22
|
+
constructor(language, workspace, logging, workspaceFolders, artifactManager, dependenciesFolderName) {
|
|
23
|
+
this.language = language;
|
|
24
|
+
this.workspace = workspace;
|
|
25
|
+
this.logging = logging;
|
|
26
|
+
this.workspaceFolders = workspaceFolders;
|
|
27
|
+
this.artifactManager = artifactManager;
|
|
28
|
+
this.dependenciesFolderName = dependenciesFolderName;
|
|
29
|
+
// For each language, the dependency handler initializes dependency map per workspaceSpace folder
|
|
30
|
+
// regardless of knowing whether the workspaceFolder has the language
|
|
31
|
+
// to resolve the race condition when didChangeDependencyPaths LSP and dependency discover may override the dependency map.
|
|
32
|
+
this.workspaceFolders.forEach(workSpaceFolder => this.dependencyMap.set(workSpaceFolder, new Map()));
|
|
33
|
+
this.eventEmitter = new events_1.EventEmitter();
|
|
34
|
+
}
|
|
35
|
+
onDependencyChange(callback) {
|
|
36
|
+
this.eventEmitter.on('dependencyChange', callback);
|
|
37
|
+
}
|
|
38
|
+
emitDependencyChange(workspaceFolder, zips) {
|
|
39
|
+
if (zips.length > 0) {
|
|
40
|
+
this.logging.log(`Emitting ${this.language} dependency change event for ${workspaceFolder.name}`);
|
|
41
|
+
this.eventEmitter.emit('dependencyChange', workspaceFolder, zips);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Update dependency map based on didChangeDependencyPaths LSP. Javascript and Typescript will not use LSP so no need to implement this method
|
|
47
|
+
* @param paths
|
|
48
|
+
* @param workspaceRoot
|
|
49
|
+
*/
|
|
50
|
+
async updateDependencyMapBasedOnLSP(paths, workspaceFolder) {
|
|
51
|
+
const dependencyMap = new Map();
|
|
52
|
+
paths.forEach((dependencyPath) => {
|
|
53
|
+
// basename of the path should be the dependency name
|
|
54
|
+
const dependencyName = path.basename(dependencyPath);
|
|
55
|
+
this.transformPathToDependency(dependencyName, dependencyPath, dependencyMap);
|
|
56
|
+
});
|
|
57
|
+
if (workspaceFolder) {
|
|
58
|
+
const zips = await this.compareAndUpdateDependencyMap(workspaceFolder, dependencyMap, true);
|
|
59
|
+
this.emitDependencyChange(workspaceFolder, zips);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async zipDependencyMap(folders) {
|
|
63
|
+
// Process each workspace folder sequentially
|
|
64
|
+
for (const [workspaceFolder, correspondingDependencyMap] of this.dependencyMap) {
|
|
65
|
+
// Check if the workspace folder is in the provided folders
|
|
66
|
+
if (!folders.includes(workspaceFolder)) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const chunkZipFileMetadata = await this.generateFileMetadata([...correspondingDependencyMap.values()], workspaceFolder);
|
|
70
|
+
this.emitDependencyChange(workspaceFolder, chunkZipFileMetadata);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async generateFileMetadata(dependencyList, workspaceFolder) {
|
|
74
|
+
const zipFileMetadata = [];
|
|
75
|
+
const MAX_CHUNK_SIZE_BYTES = 100 * 1024 * 1024; // 100MB per chunk
|
|
76
|
+
// Process each workspace folder sequentially
|
|
77
|
+
let chunkIndex = 0;
|
|
78
|
+
let currentChunkSize = 0;
|
|
79
|
+
let currentChunk = [];
|
|
80
|
+
for (const dependency of dependencyList) {
|
|
81
|
+
// If adding this dependency would exceed the chunk size limit,
|
|
82
|
+
// process the current chunk first
|
|
83
|
+
if (currentChunkSize + dependency.size > MAX_CHUNK_SIZE_BYTES && currentChunk.length > 0) {
|
|
84
|
+
// Process current chunk
|
|
85
|
+
this.logging.log(`Under ${workspaceFolder.name}, #${chunkIndex} chunk containing ${this.language} dependencies with size: ${currentChunkSize} has reached chunk limit. Start to process...`);
|
|
86
|
+
await this.processChunk(currentChunk, workspaceFolder, zipFileMetadata, chunkIndex);
|
|
87
|
+
// Reset chunk
|
|
88
|
+
currentChunk = [];
|
|
89
|
+
currentChunkSize = 0;
|
|
90
|
+
chunkIndex++;
|
|
91
|
+
// Add a small delay between chunks
|
|
92
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
93
|
+
}
|
|
94
|
+
// Add dependency to current chunk. If the dependency has been zipped, skip it.
|
|
95
|
+
if (!this.isDependencyZipped(dependency.name, workspaceFolder)) {
|
|
96
|
+
if (!this.validateSingleDependencySize(workspaceFolder, dependency)) {
|
|
97
|
+
this.logging.warn(`Dependency ${dependency.name} size exceeds the limit.`);
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (!this.validateWorkspaceDependencySize(workspaceFolder)) {
|
|
101
|
+
this.logging.warn(`Workspace ${workspaceFolder.name} dependency size exceeds the limit.`);
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
currentChunk.push(dependency);
|
|
105
|
+
currentChunkSize += dependency.size;
|
|
106
|
+
this.dependencyUploadedSize.set(workspaceFolder, (this.dependencyUploadedSize.get(workspaceFolder) || 0) + dependency.size);
|
|
107
|
+
// Mark this dependency that has been zipped
|
|
108
|
+
dependency.zipped = true;
|
|
109
|
+
this.dependencyMap.get(workspaceFolder)?.set(dependency.name, dependency);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Process any remaining dependencies in the last chunk
|
|
113
|
+
if (currentChunk.length > 0) {
|
|
114
|
+
await this.processChunk(currentChunk, workspaceFolder, zipFileMetadata, chunkIndex);
|
|
115
|
+
}
|
|
116
|
+
return zipFileMetadata;
|
|
117
|
+
}
|
|
118
|
+
async processChunk(chunk, workspaceFolder, zipFileMetadata, chunkIndex) {
|
|
119
|
+
let fileMetadataList = [];
|
|
120
|
+
for (const dependency of chunk) {
|
|
121
|
+
try {
|
|
122
|
+
if (fs.existsSync(dependency.path)) {
|
|
123
|
+
const fileMetadata = await this.artifactManager.getFileMetadata(workspaceFolder, dependency.path, this.language, path.basename(dependency.path));
|
|
124
|
+
fileMetadataList.push(...fileMetadata);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
this.logging.warn(`Error processing dependency ${dependency.name}: ${error}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (fileMetadataList.length > 0) {
|
|
132
|
+
try {
|
|
133
|
+
const singleZip = await this.artifactManager.createZipForDependencies(workspaceFolder, this.language, fileMetadataList, this.dependenciesFolderName, chunkIndex);
|
|
134
|
+
zipFileMetadata.push(singleZip);
|
|
135
|
+
const totalChunkSize = chunk.reduce((sum, dep) => sum + dep.size, 0);
|
|
136
|
+
// Log chunk statistics
|
|
137
|
+
this.logging.log(`Created zip: ${singleZip.filePath} for #${chunkIndex} chunk containing ${chunk.length} ${this.language} dependencies with total size: ${(totalChunkSize /
|
|
138
|
+
(1024 * 1024)).toFixed(2)}MB under ${workspaceFolder.name}`);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
this.logging.warn(`Error creating dependency zip for workspace ${workspaceFolder.uri}: ${error}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
async compareAndUpdateDependencyMap(workspaceFolder, updatedDependencyMap, zipChanges = false) {
|
|
146
|
+
const changes = {
|
|
147
|
+
added: [],
|
|
148
|
+
updated: [],
|
|
149
|
+
};
|
|
150
|
+
let currentDependencyMap = this.dependencyMap.get(workspaceFolder);
|
|
151
|
+
// If the dependency map doesn't exist, create a new one
|
|
152
|
+
if (!currentDependencyMap) {
|
|
153
|
+
currentDependencyMap = new Map();
|
|
154
|
+
this.dependencyMap.set(workspaceFolder, currentDependencyMap);
|
|
155
|
+
}
|
|
156
|
+
// Check for added and updated dependencies
|
|
157
|
+
updatedDependencyMap.forEach((newDep, name) => {
|
|
158
|
+
const existingDependency = currentDependencyMap.get(name);
|
|
159
|
+
if (!existingDependency) {
|
|
160
|
+
changes.added.push(newDep);
|
|
161
|
+
}
|
|
162
|
+
else if (existingDependency.version !== newDep.version) {
|
|
163
|
+
changes.updated.push(newDep);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
// log all added and updated changes
|
|
167
|
+
if (changes.added.length > 0) {
|
|
168
|
+
this.logging.log(`Added ${changes.added.length} new dependencies`);
|
|
169
|
+
}
|
|
170
|
+
if (changes.updated.length > 0) {
|
|
171
|
+
this.logging.log(`Updated ${changes.updated.length} dependencies`);
|
|
172
|
+
}
|
|
173
|
+
// Update the dependency map
|
|
174
|
+
updatedDependencyMap.forEach((newDep, name) => {
|
|
175
|
+
this.dependencyMap.get(workspaceFolder)?.set(name, newDep);
|
|
176
|
+
});
|
|
177
|
+
let zips = [];
|
|
178
|
+
if (zipChanges) {
|
|
179
|
+
zips = await this.generateFileMetadata([...changes.added, ...changes.updated], workspaceFolder);
|
|
180
|
+
}
|
|
181
|
+
return zips;
|
|
182
|
+
}
|
|
183
|
+
validateSingleDependencySize(workspaceFolder, dependency) {
|
|
184
|
+
return dependency.size < this.MAX_SINGLE_DEPENDENCY_SIZE;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* This validation will calculate how such of size of dependencies uploaded per workspace.
|
|
188
|
+
*
|
|
189
|
+
* This validation is only used for new dependency being uploaded.
|
|
190
|
+
* Existing dependencies will be uploaded as long as single size didn't exceed
|
|
191
|
+
*
|
|
192
|
+
* The dependency map doesn't get updated when dependency is deleted so that this validation may be
|
|
193
|
+
* false positive when large of dependencies is deleted.
|
|
194
|
+
* However, everytime flare server restarts, this dependency map will be initialized.
|
|
195
|
+
*/
|
|
196
|
+
validateWorkspaceDependencySize(workspaceFolder) {
|
|
197
|
+
let uploadedSize = this.dependencyUploadedSize.get(workspaceFolder);
|
|
198
|
+
if (uploadedSize && this.MAX_WORKSPACE_DEPENDENCY_SIZE < uploadedSize) {
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
dispose() {
|
|
204
|
+
this.dependencyMap.clear();
|
|
205
|
+
this.dependencyUploadedSize.clear();
|
|
206
|
+
this.dependencyWatchers.forEach(watcher => watcher.close());
|
|
207
|
+
this.dependencyWatchers.clear();
|
|
208
|
+
}
|
|
209
|
+
disposeWorkspaceFolder(workspaceFolder) {
|
|
210
|
+
this.dependencyMap.delete(workspaceFolder);
|
|
211
|
+
this.dependencyUploadedSize.delete(workspaceFolder);
|
|
212
|
+
this.disposeWatchers(workspaceFolder);
|
|
213
|
+
this.disposeDependencyInfo(workspaceFolder);
|
|
214
|
+
}
|
|
215
|
+
// For synchronous version if needed:
|
|
216
|
+
getDirectorySize(directoryPath) {
|
|
217
|
+
let totalSize = 0;
|
|
218
|
+
try {
|
|
219
|
+
const files = fs.readdirSync(directoryPath);
|
|
220
|
+
for (const file of files) {
|
|
221
|
+
const filePath = path.join(directoryPath, file);
|
|
222
|
+
const stats = fs.statSync(filePath);
|
|
223
|
+
if (stats.isDirectory()) {
|
|
224
|
+
totalSize += this.getDirectorySize(filePath);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
totalSize += stats.size;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return totalSize;
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
throw new Error(`Error calculating directory size: ${error}`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
isDependencyZipped(dependencyName, workspaceFolder) {
|
|
237
|
+
return this.dependencyMap.get(workspaceFolder)?.get(dependencyName)?.zipped;
|
|
238
|
+
}
|
|
239
|
+
async cleanupZipFiles(zipFileMetadata) {
|
|
240
|
+
for (const zip of zipFileMetadata) {
|
|
241
|
+
try {
|
|
242
|
+
if (fs.existsSync(zip.filePath)) {
|
|
243
|
+
fs.unlinkSync(zip.filePath);
|
|
244
|
+
this.logging.log(`Cleanup zip file: ${zip.filePath}`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
// Log error but don't throw to ensure other files are processed
|
|
249
|
+
this.logging.warn(`Error deleting zip file ${zip.filePath}: ${error}`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
exports.LanguageDependencyHandler = LanguageDependencyHandler;
|
|
255
|
+
//# sourceMappingURL=LanguageDependencyHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LanguageDependencyHandler.js","sourceRoot":"","sources":["../../../../../src/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BaseDependencyInfo, LanguageDependencyHandler } from './LanguageDependencyHandler';
|
|
2
|
+
import { Logging, Workspace, WorkspaceFolder } from '@aws/language-server-runtimes/server-interface';
|
|
3
|
+
import { ArtifactManager } from '../../artifactManager';
|
|
4
|
+
import { CodewhispererLanguage } from '../../../../shared/languageDetection';
|
|
5
|
+
export declare class DependencyHandlerFactory {
|
|
6
|
+
static createHandler(language: CodewhispererLanguage, workspace: Workspace, logging: Logging, workspaceFolders: WorkspaceFolder[], artifactManager: ArtifactManager): LanguageDependencyHandler<BaseDependencyInfo> | null;
|
|
7
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DependencyHandlerFactory = void 0;
|
|
4
|
+
const JavaDependencyHandler_1 = require("./JavaDependencyHandler");
|
|
5
|
+
const PythonDependencyHandler_1 = require("./PythonDependencyHandler");
|
|
6
|
+
const JSTSDependencyHandler_1 = require("./JSTSDependencyHandler");
|
|
7
|
+
class DependencyHandlerFactory {
|
|
8
|
+
static createHandler(language, workspace, logging, workspaceFolders, artifactManager) {
|
|
9
|
+
switch (language.toLowerCase()) {
|
|
10
|
+
case 'python':
|
|
11
|
+
return new PythonDependencyHandler_1.PythonDependencyHandler(language, workspace, logging, workspaceFolders, artifactManager, 'site-packages');
|
|
12
|
+
case 'javascript':
|
|
13
|
+
case 'typescript':
|
|
14
|
+
return new JSTSDependencyHandler_1.JSTSDependencyHandler(language, workspace, logging, workspaceFolders, artifactManager, 'node_modules');
|
|
15
|
+
case 'java':
|
|
16
|
+
return new JavaDependencyHandler_1.JavaDependencyHandler(language, workspace, logging, workspaceFolders, artifactManager, 'dependencies');
|
|
17
|
+
default:
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.DependencyHandlerFactory = DependencyHandlerFactory;
|
|
23
|
+
//# sourceMappingURL=LanguageDependencyHandlerFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LanguageDependencyHandlerFactory.js","sourceRoot":"","sources":["../../../../../src/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandlerFactory.ts"],"names":[],"mappings":";;;AAAA,mEAA+D;AAC/D,uEAAmE;AACnE,mEAA+D;AAM/D,MAAa,wBAAwB;IACjC,MAAM,CAAC,aAAa,CAChB,QAA+B,EAC/B,SAAoB,EACpB,OAAgB,EAChB,gBAAmC,EACnC,eAAgC;QAEhC,QAAQ,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7B,KAAK,QAAQ;gBACT,OAAO,IAAI,iDAAuB,CAC9B,QAAQ,EACR,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,eAAe,EACf,eAAe,CAClB,CAAA;YACL,KAAK,YAAY,CAAC;YAClB,KAAK,YAAY;gBACb,OAAO,IAAI,6CAAqB,CAC5B,QAAQ,EACR,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,eAAe,EACf,cAAc,CACjB,CAAA;YACL,KAAK,MAAM;gBACP,OAAO,IAAI,6CAAqB,CAC5B,QAAQ,EACR,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,eAAe,EACf,cAAc,CACjB,CAAA;YACL;gBACI,OAAO,IAAI,CAAA;QACnB,CAAC;IACL,CAAC;CACJ;AAzCD,4DAyCC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { BaseDependencyInfo, Dependency, LanguageDependencyHandler } from './LanguageDependencyHandler';
|
|
2
|
+
import { WorkspaceFolder } from '@aws/language-server-runtimes/server-interface';
|
|
3
|
+
export interface PythonDependencyInfo extends BaseDependencyInfo {
|
|
4
|
+
vscCodeSettingsJsonPath: string;
|
|
5
|
+
sitePackagesPaths: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare class PythonDependencyHandler extends LanguageDependencyHandler<PythonDependencyInfo> {
|
|
8
|
+
private pythonDependencyInfos;
|
|
9
|
+
/**
|
|
10
|
+
* It will return a boolean indicating whether it finds any dependency info.
|
|
11
|
+
* The PythonDependencyInfo object contains the following properties:
|
|
12
|
+
* - pkgDir: the package directory
|
|
13
|
+
* - vscCodeSettingsJsonPath: the path to the .vscode/settings.json file
|
|
14
|
+
* - sitePackagesPaths: the path to site-packages directory
|
|
15
|
+
*/
|
|
16
|
+
discover(currentDir: string, workspaceFolder: WorkspaceFolder): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* It will create a dependency map from the site-packages
|
|
19
|
+
* The dependency map will contain the following properties:
|
|
20
|
+
* - name: the name of the dependency
|
|
21
|
+
* - version: the version of the dependency
|
|
22
|
+
* - path: the path to the dependency
|
|
23
|
+
*/
|
|
24
|
+
initiateDependencyMap(folders: WorkspaceFolder[]): void;
|
|
25
|
+
/**
|
|
26
|
+
* It will setup watchers for the .classpath files.
|
|
27
|
+
* When a change is detected, it will update the dependency map.
|
|
28
|
+
*/
|
|
29
|
+
setupWatchers(folders: WorkspaceFolder[]): void;
|
|
30
|
+
/**
|
|
31
|
+
* It will generate a dependency map from the site-packages
|
|
32
|
+
* The dependency map will contain the following properties:
|
|
33
|
+
*
|
|
34
|
+
* @param pythonDependencyInfo
|
|
35
|
+
* @param dependencyMap
|
|
36
|
+
*/
|
|
37
|
+
generateDependencyMap(pythonDependencyInfo: PythonDependencyInfo): Map<string, Dependency>;
|
|
38
|
+
transformPathToDependency(dependencyName: string, dependencyPath: string, dependencyMap: Map<string, Dependency>): void;
|
|
39
|
+
private isMetadataDirectory;
|
|
40
|
+
private handleMetadataChange;
|
|
41
|
+
private handlePackageChange;
|
|
42
|
+
private resolvePath;
|
|
43
|
+
private findSitePackagesPaths;
|
|
44
|
+
disposeWatchers(workspaceFolder: WorkspaceFolder): void;
|
|
45
|
+
disposeDependencyInfo(workspaceFolder: WorkspaceFolder): void;
|
|
46
|
+
}
|